【发布时间】:2016-02-02 22:58:36
【问题描述】:
merTools 包中的predictInterval() 不喜欢嵌套随机效果吗?例如,使用ggplot2 包中的msleep 数据集:
library("lme4")
library("merTools")
library("ggplot2")
mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep)
predInt <- predictInterval(merMod=mod, newdata=msleep)
返回错误:
Error in '[.data.frame'(newdata, , j) : undefined columns selected
这运行正常没问题:
mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep)
predInt <- predictInterval(merMod=mod, newdata=msleep)
(实际上它给出了关于随机效应变量中NA 级别的警告,但我并不担心)
更新
正如下面 Ben Bolker 回答的 cmets 中所讨论的,merTools 的新版本考虑了嵌套随机效应。但是,当我尝试预测包含新级别的嵌套随机效应的数据时,会出现错误。
这行得通:
mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep)
predInt <- predictInterval(merMod=mod, newdata=msleep)
这很有效,尽管有几个警告(有关警告的其他问题,请参见下文*):
mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep)
msleep2 <- msleep %>% mutate(vore = "omni")
predInt <- predictInterval(merMod=mod, newdata=msleep2)
但这不起作用:
mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep)
msleep2 <- msleep %>% mutate(vore = "omni")
predInt <- predictInterval(merMod=mod, newdata=msleep2)
出现以下错误:
Error in `[.data.frame`(tmp, alllvl) : undefined columns selected
In addition: Warning message:
In predictInterval(merMod = mod, newdata = msleep3) :
newdata is tbl_df or tbl object from dplyr package and has been
coerced to a data.frame
在这里,"omni" 实际上并不是 vore 的新级别,但是当与 order 结合时,它会创建新的变量嵌套组合。
如果我使用"new" 或其他任何不是vore 观察级别的东西,我会得到类似的结果:它适用于模型的非嵌套版本,但不适用于嵌套版本。
*另外,我是否应该关注上面第二个模型块给出的警告:
> mod <- lmer(sleep_total ~ bodywt + (1|vore) + (1|order), data=msleep)
> msleep2 <- msleep %>% mutate(vore = "omni")
> predInt <- predictInterval(merMod=mod, newdata=msleep2)
Warning messages:
1: In predictInterval(merMod = mod, newdata = msleep2) :
newdata is tbl_df or tbl object from dplyr package and has been
coerced to a data.frame
2: In chol.default(sigma, pivot = TRUE) :
the matrix is either rank-deficient or indefinite
我猜第二个是vore 对每个观察值取相同值的结果,但这不应该是预测的问题,不是吗?如果在我拟合模型时变量取相同的值,我可以看到这是一个问题,但在预测新观察时不认为这应该是一个问题?
【问题讨论】: