R lme4预测新水平

R lme4预测新水平,r,prediction,lme4,mixed-models,random-effects,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[

我试图拟合一个混合效应模型,然后使用该模型在可能具有不同级别的新数据集上生成估计。我希望新数据集上的估计值将使用估计参数的平均值,但情况似乎并非如此。下面是一个最低限度的工作示例:

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
的文档(合理地)清楚地说明了
允许.new.levels=TRUE
时会发生什么。我猜模棱两可的可能是什么 “无条件(总体水平)值”是指

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


我相信
predict.merMod
只是使用模型中固定效应部分的系数来计算新的水平
y~x+(x | grp)
是一个更合理的模型规范。啊,这是有道理的!如果你把它作为一个答案,我会接受的。我知道这将仍然只在新的预测中使用固定效应。但是,你如何添加随机效应呢?我不理解你的问题。正如你之前所说:“predict.merMod只使用模型中固定效应部分的系数来计算新的水平”。有没有办法也包括随机效果(x | grp)?当然,这是默认值。您只需要使用默认的
allow.new.levels=FALSE
。当然,你不能预测新级别的随机效果(这不是训练数据的一部分)。这在概念上是不可能的,我明白了。我感兴趣的是为一个全新的主题寻找随机效应的估计,我想我使用了错误的方法。无论如何谢谢你。