具有嵌套随机效应的模型的merTools predictInterval()

时间:2016-02-02 22:58:37

标签: r lme4

predictInterval()包中的merTools与嵌套随机效果不一样吗?例如,使用msleep包中的ggplot2数据集:

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在下面的回答中所述,新版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对每个观察值采用相同值的结果,但这不应该成为预测的问题,是吗?如果变量在我拟合模型时具有相同的值,我可以看到这是一个问题,但是在预测新观察时不会认为它应该是一个问题?

1 个答案:

答案 0 :(得分:3)

通过明确地写出交互术语,可以(显然)解决这个问题。 警告:我实际上没有检查过以确保结果预测是正确的,只是看到没有产生错误并且生成的对象近似合理......

msleep <- transform(msleep,voreOrder=interaction(vore,order,drop=TRUE))
mod2 <- lmer(sleep_total ~ bodywt + (1|vore)+(1|voreOrder), data=msleep)
predInt <- predictInterval(merMod=mod2, newdata=msleep) 

这确实会生成警告消息,但显然它们归因于<NA>变量中的vore值(我不知道此数据集......)