我正在尝试使用lm()函数在r中运行线性回归,但是我得到了各种错误,但是我更改了数据。我想看看父母性别,孩子性别和父母分数是否可以预测儿童分数。我的代码是:
mod1 <- lm(score_child ~ score_parent*parent_child*female_male, data=dat, na.action = na.pass)
数据目前看起来像这样:
Subject Family_number female_male parent_child score_child score_parent
1 1 1 0 230 NA
2 1 0 1 NA 400
3 1 0 0 450 NA
4 2 1 1 NA 500
5 2 1 0 500 NA
.
我知道如果数据是长格式会更容易,因为我需要分开孩子和家长,我认为这是最好的方法。 NAs给了我很多的悲伤,我已经尝试了每个na.action命令,但我得到错误,例如lm.fit中的Error(x,y,offset = offset,singular.ok = singular.ok,...) :'x'中的NA / NaN / Inf。
兽的方法是改变lm()中的NA命令,改变我的数据的布局,如果是,那么我将如何以及如何在lm()中指定子和父分数?
奖金问题;这些孩子任何父母都是家庭的一部分,我最好分析家庭小组的数据。这是否需要每个家庭一次回归,如果是这样,这不会影响我的自信区间吗?
我的论文和我自己会非常感谢任何帮助!
朱莉娅
lm
要求每个单元在一行中,而不是分成两行。假设每个单元只包含一个父节点和一个子节点,并且每对元素在数据框中的相邻行中相互跟随,使得行1和2形成一个单元,3和4形成一个单元,依此类推可以将父行和子行提取到Parent
和Child
数据帧中。这些行具有相同的行数,因此我们可以将它们组合在一起并合理化组合数据帧的列名称,现在将具有cbind
行。请注意,下面显示的nrow(DF)/2
没有NA值。
DF2
Parent <- subset(DF, is.na(score_child))
Child <- subset(DF, is.na(score_parent))
DF2 <- cbind(
with(Parent, data.frame(subj_parent = Subject, sex_parent = female_male, score_parent)),
with(Child, data.frame(subj_child = Subject, sex_child = female_male, score_child))
)
lm(score_child ~ score_parent * sex_child * sex_parent, DF2)
看起来像这样:
DF2
我们假设输入以可重现的形式出现:
> DF2
subject_parent sex_parent score_parent subject_child sex_child score_child
1 2 0 400 1 1 230
2 4 1 500 3 0 450