用lme4预测新的水平

时间:2015-03-25 15:22:48

标签: r prediction lme4 mixed-models random-effects

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

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)。但是,当我尝试使用看不见的级别预测新数据集时,我会得到一个恒定的估计值。我本来期望斜率和截距的预期值用于生成这个新数据的预测。我期待错误的事吗?或者,我的代码出了什么问题?

2 个答案:

答案 0 :(得分:10)

我通常不包括随机斜率而不包括固定斜率。似乎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

答案 1 :(得分:6)

也许这还不够清楚,但我认为?predict.merMod的文档(合理地)明确了allow.new.levels=TRUE时会发生什么。我猜这种含糊不清可能是什么 “无条件(人口水平)价值”意味着......

  

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