来自嵌套 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)))
我在对随机效应进行调节时从 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)))