r-lme4在新水平上的预测



我正在尝试拟合一个混合效应模型,然后使用该模型在可能具有不同级别的新数据集上生成估计值。我原以为新数据集上的估计会使用估计参数的平均值,但事实并非如此。下面是一个最低限度的工作示例:

library(lme4)
d = data.frame(x = rep(1:10, times = 3),
               y = NA,
               grp = rep(1:3, each = 10))
d$y[d$grp == 1] = 1:10 + rnorm(10)
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10)
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10)
fit = lmer(y ~ (1+x)|grp, data = d)
newdata = data.frame(x = 1:10, grp = 4)
predict(fit, newdata = newdata, allow.new.levels = TRUE)

在这个例子中,我本质上是用不同的回归方程定义三组(斜率为1、1.5和0.5)。然而,当我试图在一个看不见的新数据集上进行预测时,我得到了一个恒定的估计。我本以为斜率和截距的预期值会用于生成对这些新数据的预测。我是不是期待错了?或者,我的代码做错了什么?

如果不包括固定斜率,我通常不会包括随机斜率。predict.merMod似乎同意我的观点,因为它似乎只是简单地使用固定效应来预测新的水平。文件中说,"预测将使用以前未观测到水平的数据的无条件(总体水平)值",但这些值似乎不是用模型规范估计的。

因此,我建议这个模型:

fit = lmer(y ~ x + (x|grp), data = d)
newdata = data.frame(x = 1:10, grp = 4)
predict(fit, newdata = newdata, allow.new.levels = TRUE)
#       1         2         3         4         5         6         7         8         9        10 
#1.210219  2.200685  3.191150  4.181616  5.172082  6.162547  7.153013  8.143479  9.133945 10.124410

这与只使用模型的固定效果部分相同:

t(cbind(1, newdata$x) %*% fixef(fit))
#         [,1]     [,2]    [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]    [,10]
#[1,] 1.210219 2.200685 3.19115 4.181616 5.172082 6.162547 7.153013 8.143479 9.133945 10.12441

也许还不够清楚,但我认为?predict.merMod的文档(合理地)清楚地说明了allow.new.levels=TRUE时会发生什么。我想歧义可能在于"无条件(群体水平)值";方法

allow.new.levels:如果"newdata"中的新级别(或NA值)为允许。如果为FALSE(默认值),则"newdata"中的这些新值将触发错误;如果为TRUE,则预测将使用具有的数据的无条件(总体级别)值以前未观察到的水平(或NA)。

"无条件(人口水平)";意味着相应的随机效应分量被设置为零——如果我们不能对特定组的观测数据进行条件,我们就会这样做,因为我们不想指定预测是针对特定组的

最新更新