我有以下型号:
res7=lmer(Residence_time~Species+Sex+(1|Chamber), data=ResidTimes, REML=FALSE)
物种和性别是两个层面的因素。此模型提供以下输出:
Linear mixed model fit by maximum likelihood ['lmerMod']
Formula: Residence_time ~ Species + Sex + (1 | Chamber)
Data: ResidTimes
AIC BIC logLik deviance df.resid
2103.2 2124.0 -1046.6 2093.2 471
Scaled residuals:
Min 1Q Median 3Q Max
-1.4434 -0.7568 -0.3249 0.7676 2.5752
Random effects:
Groups Name Variance Std.Dev.
Chamber (Intercept) 0.247 0.497
Residual 4.585 2.141
Number of obs: 476, groups: Chamber, 27
Fixed effects:
Estimate Std. Error t value
(Intercept) 5.0674 0.1846 27.454
Speciesrubrus -1.0195 0.2180 -4.676
Sexmale 0.3949 0.2021 1.954
Correlation of Fixed Effects:
(Intr) Spcsrb
Speciesrbrs -0.457
Sexmale -0.531 0.154
此模型的残差不正常,因此我想使用参数自举来引导参数估计值。为此,我做了以下事情:
library(boot)
b_par7<-bootMer(x=res7,FUN=fixef,nsim=2000, use.u = FALSE, type="parametric")
但是我收到以下警告信息:
Warning messages:
1: In optwrap(object@optinfo$optimizer, ff, x0, lower = lower, control = control$optCtrl, :
convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q
2: In optwrap(object@optinfo$optimizer, ff, x0, lower = lower, control = control$optCtrl, :
convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q
有什么办法可以解决这个错误,还是我需要运行较少数量的bootstrap重复?
答案 0 :(得分:1)
因此,优化程序失败k = 2次R = 2000次尝试重新拟合模型以获取数据的随机子样本。无论如何调整优化器,在困难的情况下它仍会偶尔失败,特别是因为我们希望将R设置得尽可能大,以便获得更准确的统计数据。
当我们等待更好(更稳定)的优化器开发时,我建议将这些警告静音
be.quiet <- capture.output(b_par7 <- bootMer(...), type="message")
并使用剩余的R-k = 1998重新采样来计算你的引导统计数据。再次尝试通过使用多个带
的CPU来获得更多的重新采样,例如R = 2e4options(boot.parallel="multicore")
options(boot.ncpus=4)
P.S。为了确保boot.ci()永远不会崩溃,但总是返回置信区间或c(NA,NA),你可以像这样包装它。 R =非失败重采样的实际数量。
tt <- tryCatch(boot::boot.ci(b_par7, index=i, type="perc")$percent[4:5],
error = function(e) c(NA,NA))
if( length(tt)<2 ) tt <- c(NA,NA) # catch peculiar boot.ci error reported by "print"
c(R = sum(!is.na(b_par7$t[,i])), lower.CI = tt[1], upper.CI = tt[2])