【问题标题】:Make prediction when ignoring a coefficient from lme4 in R忽略 R 中 lme4 的系数时进行预测
【发布时间】:2021-03-05 08:31:48
【问题描述】:

我有一个带有mod <- lmer(value ~ time + study + (1|participant)) 形式的因子的模型,我对研究系数并不真正感兴趣,但出于各种原因希望将其保持为固定值。但我想在没有研究系数影响的情况下从mod 进行预测。我已经对学习系数进行了总和编码,因此我真的只需要一种方法来删除学习系数。

手动根据系数计算预测似乎有点麻烦。我想另一种选择是用零替换研究系数(Replace lmer coefficients in R

有更好的想法吗?

一个最小的例子:

library("lme4")
df <- data.frame(
  participant = as.factor(c(1,1,1,2,2,2,3,3,3,4,4,4)),
  time = as.factor(c(1,2,3,1,2,3,1,2,3,1,2,3)),
  study = as.factor(c("A", "A", "A", "B", "B", "B", "A","A", "A", "C", "C", "C")),
  value = c(1,2,3,3,4,1,3,5,3,1,7,2)
)

contrasts(df$study) = contr.sum(length(unique(df$study)))

mod <- lmer(value ~ time + study + (1|participant), data = df)

predict(mod, newdata = data.frame(time = as.factor(c(1,2,3))), re.form=NA)

【问题讨论】:

  • 您能否指定尝试忽略study 变量的原因?在您上面指定的(分层)线性模型中,它只是简单的统计数据,预测器参数将相对于其他预测器进行计算。如果您只想为不同的研究存储不同的模型(从变量名猜测),您可以存储例如将它们存储在列表中。
  • 我更愿意将study 包含为随机截距,因为研究之间存在基线差异。由于研究数量较少,我们更愿意将其作为固定变量包含在内,以考虑基线差异,但仍对平均人口水平进行预测

标签: r predict lme4


【解决方案1】:

这对我来说没有多大意义。如果您想忽略study 的影响,您只需将其排除在用于预测的模型之外。如果要将其包含在模型中,则需要将其包含在预测中。

假设您只想使用time 进行预测。您可以通过为您希望预测的每个time 值复制整个study 列并平均结果来提供study 的加权平均值:

mod <- lmer(value ~ time + study + (1|participant), data = df)

pred_df <- data.frame(time = as.factor(rep(c(1,2,3), each = nrow(df))),
                      study = rep(df$study, 3))

preds <- predict(mod, newdata = pred_df, re.form = NA)

tapply(preds, pred_df$time, mean)
#>    1    2    3 
#> 2.00 4.50 2.25

但请注意,这相当于将 study 完全排除在模型之外:

mod <- lmer(value ~ time + (1|participant), data = df)

predict(mod, newdata = data.frame(time = as.factor(c(1,2,3))), re.form = NA)
#>    1    2    3 
#> 2.00 4.50 2.25

【讨论】:

  • 感谢@allan-cameron 的回答,您说得对,这两个模型提供了相同的预测,我可能会选择您的第一个解决方案!您提出的两个模型在方差方面是不同的,我想如果我们使用对数变换和带偏差校正的反向变换,它们的表现会有所不同?
猜你喜欢
  • 2013-09-02
  • 2021-05-13
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多