【问题标题】:R: analyzing multiple responses (i.e. dependent variables) in a mixed effects model (lme4)R:在混合效应模型(lme4)中分析多重响应(即因变量)
【发布时间】:2013-12-11 17:15:04
【问题描述】:

我有一个我认为非常简单的问题。在一组参与者的纵向实验中,每个人在 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 的经验吗?

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

干杯, 铝

【问题讨论】:

  • 请发布一个可重现的示例。变量是否命名为Var1Var7time_point 的范围是否从 17
  • 1) 单个混合模型可以轻松处理重复测量 - 我不确定构建单独的模型在统计上是否有意义。 2) 向我们展示head(x) 的输出将有助于我们回答您的问题;更好的是dput(head(x)),以便人们可以重建您的data.frame 的一部分以检查他们的代码。
  • 为什么只估计一个固定效应(截距)?
  • 嘿 Sven,感谢您的评论,数据集本身很大,而且我真的(编码方面)无法生成一个。时间点的范围是从 1 到 7,是的,变量可以是第 1 到第 10 列中的“Var1”到“Var10”(它们有其他特定于内容的名称,但这并不重要)。规范在 lmer 公式中是问题。
  • 所以你的时间点比响应变量少。您是否想要这两个因素的所有组合,即 70 个模型?请指定您要查找的型号。

标签: r lme4 mixed-models


【解决方案1】:

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

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 作为一个组件in 您的模型更有意义,在这种情况下,您可以将其从 .var = c("variable", "time_point") 参数中删除,并将其添加到模型规范中。

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

【讨论】:

  • 嗨,马特,太棒了,谢谢,我想,这会更容易,但看起来不错,我会立即尝试并告诉你。谢谢!模型中时间点的问题是,我需要它作为第三个随机效应,我不太确定这是否可行。但无论如何,我稍后要做的是用ranef 提取每个主题的效果,并进一步分析潜在增长模型中的效果。
  • 有一些方法可以像您尝试做的那样从循环中构建模型公式,但我认为从长远来看这更容易,所以我忘了怎么做。
  • 我已经有一段时间没有对混合模型做过太多了,但是将模型放在这样的列表中肯定会帮助您对整个模型集进行任何类型的操作。
  • 最后,有一个用于统计的 StackOverflow,stats.stackexchange.com,您绝对应该检查一下出现的任何统计问题。这是一个很棒的网站。
  • +1 我想你想用x 替换subset(x, time_point == 1)
猜你喜欢
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多