10

我正在尝试拟合混合效应模型,然后使用该模型对可能具有不同级别的新数据集生成估计。我预计对新数据集的估计将使用估计参数的平均值,但似乎并非如此。这是一个最小的工作示例:

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)的组。然而,当我尝试在一个未知级别的新数据集上进行预测时,我得到了一个恒定的估计值。我本来希望斜率和截距的预期值用于生成对这些新数据的预测。我期待错了吗?或者,我的代码做错了什么?

4

2 回答 2

15

如果不包括固定斜率,我通常不会包括随机斜率。这似乎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
于 2015-03-26T08:11:41.953 回答
6

也许还不够清楚,但我认为?predict.merMod各州的文档(合理地)清楚地表明allow.new.levels=TRUE. 我想模棱两可的可能是“无条件(人口水平)值”的含义......

allow.new.levels:如果允许“newdata”中的新级别(或 NA 值),则为逻辑。如果为 FALSE(默认),则 'newdata' 中的此类新值将触发错误;如果为 TRUE,则预测将使用具有先前未观察到的水平(或 NA)的数据的无条件(人口水平)值。

于 2015-03-26T12:20:28.433 回答