3

我有一个我想的非常简单的问题。在一组参与者的纵向实验中,让每个人在 7 个不同的时间给其他人打分,比如说,10 个变量(例如“这个人很讨人喜欢”、“这个人很呆板”等等)。如果我想为一个变量/响应获得某种感知器和目标方差,我会使用:

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

在这里,我们有一个数据帧“x”的因变量“Var1”,其中指定了第一个时间点(这也是 x 的变量)。

到目前为止一切顺利,这工作得很好。

现在正如我所说,我有多个响应和多个时间点。因此,我想使用 a)“for”循环或 b)lapply 来一次获取所有模型。

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

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

你们中有人有运行多个 lmer 的经验吗?

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

干杯,艾尔

4

1 回答 1

3

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

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不知道没有它们我是怎么过的。

于 2013-12-11T17:47:50.117 回答