来自嵌套 glmer 模型的模拟

Simulation from a nested glmer model

我在对随机效应进行调节时从 3 级 glmer 模型生成模拟时遇到问题(我实际上是通过 bootMer 使用预测,但问题是一样的)。

这个有效:

library(lme4)
fit1 =   glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
                                            data = cbpp, family = binomial)
simulate(fit1, re.form=NULL)

这失败了:

cbpp$bigherd = rep(1:7, 8)
fit2 =   glmer(cbind(incidence, size - incidence) ~ period + (1 | bigherd / herd),
                             data = cbpp, family = binomial)
simulate(fit2, re.form=NULL)    
Error: No random effects terms specified in formula

非常感谢任何想法。

更新

Ben,非常感谢您在下方提供的帮助,非常感谢。不知道能不能再强加给你。

我想做的是在响应量表上模拟预测,我不确定我是否可以使用你的解决方法?或者如果我正在做的事情有其他选择。谢谢!

这按预期工作,但不以随机效应为条件:

FUN = function(.){
    predict(., type="response")
}
bootMer(fit2, FUN, nsim=3)$t

这不起作用,正如上述问题所预期的那样:

bootMer(fit2, FUN, nsim=3, use.u=TRUE)$t

据我所知,我无法将 re.form 传递给 bootMer

下面的替代方案是否会产生以随机效应为条件的模拟预测,而不会将 use.u 传递给 bootMer

FUN = function(.){
    predict(., type="response", re.form=~(1|herd:bigherd) + (1|bigherd))
}
bootMer(fit2, FUN, nsim=10)$t

我还不确定发生了什么,但这里有两个 有效的解决方法:

simulate(fit2, re.form=lme4:::reOnly(formula(fit2)))
simulate(fit2, re.form=~(1|herd:bigherd) + (1|bigherd))

"slash" 项的扩展一定有问题,因为这不起作用:

simulate(fit2, re.form=~(1|bigherd/herd))

我已将其发布为 lme4 issue

这些解决方法不适用于当前 CRAN 版本 (1.1-9) 中的 bootMer(仅采用 use.u 参数,而不是 re.form)。

在Github(1.1-10)的开发版中修复:devtools::install_github("lme4/lme4")会安装,如果你安装了编译工具。

与此同时,您可以继续实施自己的参数 bootstrap(对于参数 bootstrapping,bootMer 实际上是 simulate()/[ 的一个非常薄的包装改装()or更新()]/有趣`)。大部分的复杂性与并行计算有关(如果你想在你自己的 PB 实现中进行并行计算,你必须重新添加一些)。

这是一个手卷参数的轮廓bootstrap:

nboot <- 10
nresp <- length(FUN(orig_fit))
res <- matrix(NA,nboot,nresp)
for (i in 1:nboot) {
  res[i,] <- FUN(update(orig_fit,data=simulate(orig_fit,...)))
             ## or use refit() for LMMs
             ## ... are options to simulate()
}
t(apply(res,2,quantile,c(0.025,0.975)))