我有一个,我想的,非常简单的问题。在一组参与者的纵向实验中,每个人都在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的经验吗?
欢迎并赞赏所有想法!我希望我不太清楚,如果您需要任何进一步的信息,我很乐意尽我所能。
干杯, 人
答案 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
包背后的“融化”和“铸造”概念是非常非常 - 我不知道没有它们我是如何得到的。