在处理随机效应时,我遇到了从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
非常感谢你的任何想法。
更新
本,非常感谢你在下面的帮助,真的很感激。我想知道我能不能再给你加把劲。
我想要做的是在反应尺度上模拟预测,我不确定我是否可以利用你的工作?或者除了我正在做的事情之外还有别的选择。谢谢!
这如预期的那样工作,但不以随机效应为条件:
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
发布于 2015-09-19 08:33:49
我还不知道发生了什么,但这里有两个解决办法:
simulate(fit2, re.form=lme4:::reOnly(formula(fit2)))
simulate(fit2, re.form=~(1|herd:bigherd) + (1|bigherd))
“斜杠”一词的扩展一定出了什么问题,因为这是行不通的:
simulate(fit2, re.form=~(1|bigherd/herd))
我把这个贴在lme4问题上了
在当前的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)))
https://stackoverflow.com/questions/32668893
复制相似问题