我在调整随机效果时遇到了从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
答案 0 :(得分:2)
我不确定到底发生了什么,但这里有两个做工作的解决方法:
simulate(fit2, re.form=lme4:::reOnly(formula(fit2)))
simulate(fit2, re.form=~(1|herd:bigherd) + (1|bigherd))
"斜线"的扩展肯定会出现问题。术语,因为这不起作用:
simulate(fit2, re.form=~(1|bigherd/herd))
我已将其发布为dojo/core
这些变通办法不适用于当前CRAN版本(1.1-9)中的bootMer
(只接受use.u
参数,而不是re.form
)。
它已在Github(1.1-10)的开发版本中修复:devtools::install_github("lme4/lme4")
将安装它,如果你安装了编译工具。
与此同时,您可以继续实施自己的参数化引导程序(对于参数化引导,bootMer
实际上是simulate()/[
refit()or
update()的非常薄的包装器]/
FUN`)。大部分复杂性都与并行计算有关(如果你想在你自己的PB实现中进行并行计算,你必须重新添加一些)。
这是手动参数化引导程序的概述:
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)))