为了评估收敛警告是否会导致结果无效,或者相反,尽管有警告,结果仍然可以被视为有效,Bates et al. (2023)建议使用各种优化器重新调整受收敛警告影响的模型。作者认为,如果不同的优化器产生实际等效的结果,结果是有效的。'lme 4'包中的allFit函数允许使用多个优化器来改装模型。要使用上面列出的七个优化器,必须安装两个额外的软件包:'dfoptim'和'optimx'(参见lme 4手册)。allFit()的输出包含每个优化器拟合的固定和随机效应的若干统计信息。
library(lme4)
#> Loading required package: Matrix
library(dfoptim)
library(optimx)
# Create data using code by Ben Bolker from
# https://stackoverflow.com/a/38296264/7050882
set.seed(101)
spin = runif(600, 1, 24)
reg = runif(600, 1, 15)
ID = rep(c("1","2","3","4","5", "6", "7", "8", "9", "10"))
day = rep(1:30, each = 10)
testdata <- data.frame(spin, reg, ID, day)
testdata$fatigue <- testdata$spin * testdata$reg/10 * rnorm(30, mean=3, sd=2)
# Model
fit = lmer(fatigue ~ spin * reg + (1|ID),
data = testdata, REML = TRUE)
# Refit model using all available algorithms
multi_fit = allFit(fit)
#> bobyqa : [OK]
#> Nelder_Mead : [OK]
#> nlminbwrap : [OK]
#> nmkbw : [OK]
#> optimx.L-BFGS-B : [OK]
#> nloptwrap.NLOPT_LN_NELDERMEAD : [OK]
#> nloptwrap.NLOPT_LN_BOBYQA : [OK]
# Show results
summary(multi_fit)$fixef
#> (Intercept) spin reg spin:reg
#> bobyqa -2.975678 0.5926561 0.1437204 0.1834016
#> Nelder_Mead -2.975675 0.5926559 0.1437202 0.1834016
#> nlminbwrap -2.975677 0.5926560 0.1437203 0.1834016
#> nmkbw -2.975678 0.5926561 0.1437204 0.1834016
#> optimx.L-BFGS-B -2.975680 0.5926562 0.1437205 0.1834016
#> nloptwrap.NLOPT_LN_NELDERMEAD -2.975666 0.5926552 0.1437196 0.1834017
#> nloptwrap.NLOPT_LN_BOBYQA -2.975678 0.5926561 0.1437204 0.1834016
创建于2023-06-24带有reprex v2.0.2
然而,数字对普通人来说很难。我们在视觉上更好。那么,是否有一种方法可以可视化allFit()的输出,并查看各种优化器(例如,bobyqa,Nelder-Mead等)的一组预测器的参数?
2条答案
按热度按时间mxg2im7a1#
只需在multi_fit对象上执行
sapply
fixef
,然后使用Map
执行plot
。olhwl3o22#
是的,有一种方法,使用一个名为
plot.fixef.allFit
的自定义函数,在https://pablobernabeu.github.io/2023/a-new-function-to-plot-convergence-diagnostics-from-lme4-allfit中进行了描述。创建于2023-06-26带有reprex v2.0.2