lmer:对人口水平的预测会触发错误

时间:2015-12-29 14:43:09

标签: r lme4 mixed-models

我想使用线性混合模型并对人口水平进行预测(即仅使用固定效果并使用0而不是随机效果)。

示例模型:

require(lme4)

fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
summary(fm1)
# values for prediction:
newx <- seq(min(sleepstudy$Days), max(sleepstudy$Days))

我在人口水平上尝试了几种预测方法,但都失败了:

pred <- predict(fm1, newdata = data.frame(Days = newx), allow.new.levels = TRUE)
# Error: couldn't evaluate grouping factor Subject within model frame: try adding grouping factor to data frame explicitly if possible

pred <- predict(fm1, newdata = data.frame(Days = newx, Subject = NA), allow.new.levels = TRUE)
# Error: Invalid grouping factor specification, Subject

pred <- predict(fm1, newdata = data.frame(Days = newx, Subject = as.factor(NA)), allow.new.levels = TRUE)
# Error: Invalid grouping factor specification, Subject

我试图找到适当预测方法的手册,但我不知道怎么做?我试着查看help(package = "lme4"),我找到的最接近的函数是predict.merMod(虽然模型fm1的类是lmerMod而不是merMod)。 ?predict.merMod读到:

  

allow.new.levels (逻辑)如果为FALSE(默认值),则在newdata中检测到的任何新级别(或NA值)都将触发错误;如果   是的,然后预测将使用无条件   具有先前未观察到的水平的数据的(人口级别)值   (或NAs)

它特别说'#34;或NAs&#34;,但它显然不会那样工作!!

  1. 我正在查看正确方法的帮助页面吗?如果没有,那么正确的方法是什么?
  2. 如何对人口水平进行预测?

1 个答案:

答案 0 :(得分:9)

您正在寻找re.form

  

re.form:随机效果的公式。如果'NULL',             包括所有随机效应;如果'NA'或'~0',则包括否             随机效应

require(lme4)
fm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy)
newx <- seq(min(sleepstudy$Days), max(sleepstudy$Days))
predict(fm1, newdata=data.frame(Days=newx), re.form=NA)
##        1        2        3        4        5        6        7        8 
## 251.4051 261.8724 272.3397 282.8070 293.2742 303.7415 314.2088 324.6761 
##        9       10 
## 335.1434 345.6107 

至于你的其他问题:

  • merMod是一个&#34;超级班级&#34;其中包括线性(lmerMod)和广义线性(glmerMod)模型:请参阅?"merMod-class"
  • 你的第二次尝试可能应该有效;但是,allow.new.levels是针对偶尔会出现NA值的情况设计的,而不是所有NA值... predict(fm1, newdata = data.frame(Days = newx, Subject = "a"), allow.new.levels = TRUE)确实有效。看起来代码检测到一个全部 - NA列,并将其解释为上游出错的地方 - 这可以在代码中修复,但从re.form开始看似不是非常高优先级存在。