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

3

我有一个非常简单的问题。在一项纵向实验中,一组参与者对彼此进行了评分,评分涉及10个变量(例如“这个人很可爱”,“这个人很无聊”等),并且在7个不同的时间点进行了评分。 如果我想要获取某个变量/响应的某种认知者和目标方差,我会使用:

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的经验?
欢迎并感谢所有想法!如果您需要任何进一步的信息,我很乐意提供,只要我能够提供。

1
请提供一个可重现的示例。变量是否命名为Var1Var7time_point范围是从17吗? - Sven Hohenstein
2
  1. 单个混合模型可以轻松处理重复测量 - 我不确定构建单独的模型在统计上是否有意义。
  2. 展示head(x)的输出将有助于我们回答您的问题; 更好的方法是使用dput(head(x)),以便其他人可以重建部分您的数据框以检查其代码。
- Matt Parker
为什么您只想估计一个固定效应(截距)? - Sven Hohenstein
你的时间点比响应变量少。你想要这两个因素的所有组合吗?也就是说,70个模型?请指定你要查找的模型。 - Sven Hohenstein
嘿,马特,还有谢谢!我担心的不是多个时间点,而是除了lmer函数中的变量名之外的“仅仅”规范,即您必须编写“Var1〜…”而不是“x [,1]〜…”。由于数据集非常庞大,并且我简化了命名,我不知道这是否会很好地工作(dput(head(x))也很大)。 - Al_
显示剩余4条评论
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语言中,当数据处于正确的形状时,许多事情变得更加容易。学习"melting"和"casting"概念背后的reshape2包是非常值得的——我不知道我以前是怎么做的。


有办法从循环中构建模型公式,就像你试图做的那样,但我认为这样做在长期来看更容易,所以我忘记了如何做。 - Matt Parker
我已经有一段时间没有使用混合模型了,但是将模型放在像这样的列表中肯定会有助于对整个模型集执行任何操作。 - Matt Parker
1
最后,还有一个针对统计学的 StackOverflow 网站 stats.stackexchange.com,你应该一定要去查看一下,如果有任何涉及到统计学的问题。这是一个非常棒的网站。 - Matt Parker
1
+1 我想你想要用 x 替换 subset(x, time_point == 1) - Sven Hohenstein
非常棒的想法,酷炫的网站,而且把它们分开也很酷。谢谢你们两个! - Al_
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接