R:在混合效应模型中分析多个响应(即因变量)(lme4)

时间:2013-12-11 17:15:05

标签: r lme4 mixed-models

我有一个,我想的,非常简单的问题。在一组参与者的纵向实验中,每个人都在7个不同的时间对其他人进行评分,比如10个变量(例如“这个人很可爱。”,“这个人很沉闷。”等等)。 如果我想为一个变量/响应获得某种感知和目标方差,我会使用:

lmer(scale(Var1) ~ (1|target) + (1|perceiver), data= subset(x, time_point == 1))

这里我们有一个数据帧“x”的因变量“Var1”,其中第一个time_point的规范(也是x的变量)。

到目前为止一切顺利,这很好用。

正如我所说,我有多个回复和多个时间点。因此,我想使用a)“for”--loop,或b)lapply,以便立即获得所有模型。

无论哪种方式,我都必须以某种方式“索引”因变量,无论是指定列位置(x[,10],其中10是Var1的假定位置)还是变量本身(x$Var1)或者(至少有点奇怪)将变量名称粘贴或打印到公式(col.names(c[10])中。

我想说的是,这都不起作用。我总是得到关于不同变量长度的错误。但是,正如我所写,我使用完全相同的列!

你们中有谁有运行多个lmers的经验吗?

欢迎并赞赏所有想法!我希望我不太清楚,如果您需要任何进一步的信息,我很乐意尽我所能。

干杯, 人

1 个答案:

答案 0 :(得分:2)

我会尝试重塑您的数据,以便每个评级都有自己的记录,然后迭代这些:

library(reshape2)


# This will create a data.frame with one row for each  rating, 
# which are uniquely specified by the characteristic being rated,
# the time point, the perceiver, and the target
# (I think)
x.melt <- melt(x,
               id.var = c("time_point", "perceiver", "target"),
               measure.var = c("Var1", "Var2", "Var3", "Var4",
                               "Var5", "Var6", "Var7")
)


# I'd use plyr to iterate, personally
library(plyr)

# This will return a list containing one model for each combination of variable
# (which are your various outcomes) and time_point
x.models <- dlply(x.melt, .var = c("variable", "time_point"), .fun = function(x) {

    lmer(scale(value) ~ (1|target) + (1|perceiver), data= x))

})


# Which then makes it easy to do things like print summaries for every model
lapply(x.models, summary)

我仍然认为将time_point作为 模型中的组件更有意义,在这种情况下,您可以将其从.var = c("variable", "time_point")参数中删除并将其添加到模型规范中

在R中,当数据形状正确时,许多事情变得容易多了。了解reshape2包背后的“融化”和“铸造”概念是非常非常 - 我不知道没有它们我是如何得到的。