使用新的随机效应进行预测

3

在拟合混合效应模型(或任何其他模型)时,通常需要使用新数据或新模型参数来预测“反事实”拟合值。在我的情况下,我想使用新的随机效应来预测拟合值。

lme4软件包允许插入新参数,以替代merMod类的betathetasigma插槽。这将允许预测固定效应系数下的反事实拟合值。如何对随机效应估计做相同的操作?

我最初的想法是直接修改merMod对象的u插槽,但似乎没有任何作用。我该怎么做呢?

示例代码:

library(lme4)

# use sleepstudy example
fm1 <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy)

# estimate predictions
fm1Predictions <- predict(fm1)

# estimate predictions with new fixed effects (arbitrarily set to 10)
cfPredictions <- predict(fm1, newparams=list('theta'=10)) # different than fm1Predictions

# estimate predictions with new random effects
fm2 <- fm1
fm2@u <- rep(10,length(fm2@u))
fm2Predictions <- predict(fm2) # same as fm1Predictions

你能提供更多细节吗 - 你想指定单个分组级别的系数,还是想指定/修改定义分组项分布的参数? - jknowles
感谢您的回复。前者。我想为单独分组级别(fm@u)指定新的系数向量,就像我在示例的倒数第二行所显示的那样。我想要“假装”不是估计的组级别系数,而是不同的组级别系数。 - dmp
1个回答

2

这不是最优雅的解决方案,但在此期间可能有效。

使用merTools,您可以将多级模型中预测值的组件返回到一个data.frame中。

library(merTools)
fm1 <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy)
predInt2 <- predictInterval(fm1, which = "all", seed = 8231,
                        include.resid.var = TRUE)

如果将 which = "all" 指定为参数,那么除了完整的预测值之外,还会返回预测值的组成部分。

predInt2[predInt2$obs == 3,]

返回:

      effect       fit       upr         lwr obs
3   combined 313.16116 353.33704 268.5411738   3
183  Subject  40.02862  83.56716  -0.8552207   3
363    fixed 272.02953 313.85544 230.8799770   3

这个 data.frame 展示了基于随机组分的 Subjectfixed 组分和组合效应,对 sleepstudy 数据中第 3 次观察的预测值。你可以通过将 fixed 效应和某些针对 Subject 的反事实值相加来重新计算 combined 效应。虽然 R 中没有直接支持此功能的函数,但稍加数据处理即可实现:
counter_fact <- predInt2[predInt2$effect == "fixed", ]
counter_fact$est <- counter_fact$fit + 20
head(counter_fact)

现在,如果随机因素对所有观察值的影响都是20,您就有了一个估计的值。


有趣。你使用的是哪个版本的 merTools?我在这里的 predictInterval 中没有看到 which 选项(并且我收到了“未使用的参数(which="all")”错误)。http://127.0.0.1:22608/library/merTools/html/predictInterval.html - dmp
1
升级到版本0.3.0或使用开发版本。我是软件包的作者,所以我总是使用开发版 :-) - jknowles

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