【问题标题】:Prediction with lme4 on new levels用 lme4 预测新的水平
【发布时间】:2015-03-25 15:22:48
【问题描述】:

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

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 只是将模型固定效应部分的系数用于新级别。 y ~ x + (x|grp) 是更明智的模型规范。
  • 啊,有道理!如果您将其添加为答案,我会接受。

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


【解决方案1】:

如果不包含固定斜率,我通常不会包含随机斜率。似乎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 只是将模型固定效应部分的系数用于新级别'。有没有办法也包括随机效应(x|grp)?
  • 当然,这是默认设置。您只需要使用默认的allow.new.levels = FALSE。当然,您无法预测新级别的随机效应(这不是训练数据的一部分)。这在概念上是不可能的。
  • 我明白了。我有兴趣为一个全新的主题找到随机效应的估计,我想我使用了错误的方法。还是谢谢你。
【解决方案2】:

也许还不够清楚,但我认为?predict.merMod 的文档(合理地)清楚地说明了allow.new.levels=TRUE 时会发生什么。我想模棱两可可能在什么 “无条件(人口级别)值”意味着......

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

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2013-03-06
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多