运行多级模型时出现以下两个警告:
警告消息: 1: 在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型无法收敛到 max|grad| = 103.424 (tol = 0.002, component 1) 2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型几乎无法识别:非常大的特征值 - 重新调整变量?
我的数据可以通过以下任一链接下载: Google Drive或Dropbox
令人费解的是,当我在不同的计算机上尝试时,我有一个新的警告:
边界(奇异)拟合:参见 ?isSingular
运行模型的代码如下:
library(mlmRev)
New <- lmer(cong_LH_all ~ voter_exp_dif_LH_all + education + knowledge_adj + dif_cls_LH_all
+ cong_closest + ENEP + (1|election), cses_leg)
我已经尝试了许多其他 Stack Overflow 类似问题中建议的解决方案,比如这里。首先,更改优化器:
Model1.2 <- lmerTest::lmer(cong_LH_all ~ voter_exp_dif_LH_all + education
+ knowledge_adj + dif_cls_LH_all + dif_cls_LH_all + cong_closest + ENEP +
+ (1|election), data = cses_leg, control = lmerControl(optimizer="bobyqa",
optCtrl=list(maxfun=2e5)))
警告消息:1:在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型无法收敛到 max|grad| = 6.1826 (tol = 0.002, component 1) 2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型几乎无法识别:非常大的特征值 - 重新调整变量?
Model1.3 <- lmerTest::lmer(cong_LH_all ~ voter_exp_dif_LH_all + education + knowledge_adj + dif_cls_LH_all + dif_cls_LH_all + cong_closest + ENEP + (1|election), data = cses_leg, control= lmerControl(optimizer="Nelder_Mead", optCtrl=list(maxfun=2e5)))
边界(奇异)拟合:参见 ?isSingular
Model1.4 <- lmerTest::lmer(cong_LH_all ~ voter_exp_dif_LH_all + education + knowledge_adj + dif_cls_LH_all + dif_cls_LH_all + cong_closest + ENEP + (1|election), data = cses_leg, control= lmerControl(optimizer="nlminbwrap", optCtrl=list(maxfun=2e5)))
警告消息: 1: 在 optwrap(optimizer, devfun, getStart(start, rho$lower, rho$pp), : 来自 nlminbwrap 的收敛代码 1 2: 在 checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : 模型未能收敛到 max|grad| = 25.1833 (tol = 0.002, component 1) 3: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :模型几乎无法识别:非常大的特征值 - 重新调整变量?
然后,我已经完成了奇点检查,这可能是问题所在,但我不知道如何解决:
tt <- getME(New,"theta")
ll <- getME(New,"lower")
min(tt[ll==0])
结果值:
0.1728425
尝试重新缩放(使用上面相同链接中的代码):
numcols <- grep("^c\\.", names(cses_leg))
cses_l2 <- cses_leg
cses_l2[,numcols] <- scale(cses_l2[,numcols])
New <- lmer(cong_LH_all ~ voter_exp_dif_LH_all + education + knowledge_adj + dif_cls_LH_all + cong_closest + ENEP + (1|election), cses_l2)
也许我可以对特定变量进行一些更简单的重新缩放,但我不知道从哪里开始。它们都或多或少相似(从 1-10、0-4 等)