lmer:对人口水平的预测会触发错误
lmer: predictions on population level trigger an error
我想使用线性混合模型并对人口水平进行预测(即仅使用固定效应并使用 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
的 class 是 lmerMod
而不是 merMod
) . ?predict.merMod
读取:
allow.new.levels (logical) if FALSE (default), then any new levels (or NA values) detected in newdata will trigger an error; if
TRUE, then the prediction will use the unconditional
(population-level) values for data with previously unobserved levels
(or NAs)
它明确表示 "or NAs",但显然不是这样的!!
- 我在看正确方法的帮助页面吗?如果不是,正确的方法是什么?
- 如何在人口层面进行预测?
您正在寻找 re.form
:
re.form: formula for random effects to condition on. If ‘NULL’,
include all random effects; if ‘NA’ or ‘~0’, include no
random effects
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
是一个 "super-class",包括线性 (lmerMod
) 和广义线性 (glmerMod
) 模型:参见 ?"merMod-class"
- 你的后两次尝试可能 应该 有效;但是,
allow.new.levels
是为偶尔有 NA
值的情况设计的,并非所有 NA
值... predict(fm1, newdata = data.frame(Days = newx, Subject = "a"), allow.new.levels = TRUE)
都有效。看起来代码检测到一个全 NA
列并将其解释为上游出现了问题 - 这可以在代码中修复,但似乎不是很 high-priority 因为 re.form
存在。
我想使用线性混合模型并对人口水平进行预测(即仅使用固定效应并使用 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
的 class 是 lmerMod
而不是 merMod
) . ?predict.merMod
读取:
allow.new.levels (logical) if FALSE (default), then any new levels (or NA values) detected in newdata will trigger an error; if TRUE, then the prediction will use the unconditional (population-level) values for data with previously unobserved levels (or NAs)
它明确表示 "or NAs",但显然不是这样的!!
- 我在看正确方法的帮助页面吗?如果不是,正确的方法是什么?
- 如何在人口层面进行预测?
您正在寻找 re.form
:
re.form: formula for random effects to condition on. If ‘NULL’, include all random effects; if ‘NA’ or ‘~0’, include no random effects
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
是一个 "super-class",包括线性 (lmerMod
) 和广义线性 (glmerMod
) 模型:参见?"merMod-class"
- 你的后两次尝试可能 应该 有效;但是,
allow.new.levels
是为偶尔有NA
值的情况设计的,并非所有NA
值...predict(fm1, newdata = data.frame(Days = newx, Subject = "a"), allow.new.levels = TRUE)
都有效。看起来代码检测到一个全NA
列并将其解释为上游出现了问题 - 这可以在代码中修复,但似乎不是很 high-priority 因为re.form
存在。