R Lmer模型无法收敛,几乎无法识别(非常大的特征值)/奇异拟合

时间:2020-01-06 11:09:07

标签: r lme4 multilevel-analysis

运行多级模型时,我收到以下两个警告:

警告消息:1:在checkConv(attr(opt,“ derivs”),opt $ par,ctrl = control $ checkConv ,:模型无法与max | grad |收敛= 103.424(tol = 0.002,组件1)2:在checkConv(attr(opt,“ derivs”),opt $ par,ctrl = control $ checkConv,:模型接近 无法识别:特征值非常大 -重新调整变量?

我的数据可以通过以下任一链接下载:Google DriveDropbox

令人困惑的是,当我在另一台计算机上尝试时,我有一个新警告:

边界(奇异)拟合:请参见?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问题中建议的许多解决方案,例如here。首先,更改优化器:

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,组件1) 2:在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,组件1) 3:在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等)

0 个答案:

没有答案