lmer - 模型未能收敛于 1 个负特征值

lmer - Model failed to converge with 1 negative eigenvalue

我试图在 R 中获得一些结果,但经过几个小时的搜索我无法克服这个错误。

full code

Montenegro_Model2C2 <- lmer(ThuisvoelenZ ~ 1 + Gepest_voelenRZ + Instructietaal_Andere + (1 + Gepest_voelenRZ|IDSCHOOL) + (1 + Instructietaal_Andere|IDSCHOOL) + (1|IDCLASS), data = Montenegro, REML = F) 
summary(Montenegro_Model2C2) 

给我以下警告:

1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge: degenerate  Hessian with 1 negative eigenvalues
3: Model failed to converge with 1 negative eigenvalue: -1.0e-01 

随后是相关值错误的输出 (1.00)

Random effects:
 Groups     Name                  Variance Std.Dev. Corr
 IDCLASS    (Intercept)           0.103856 0.32227      
 IDSCHOOL   (Intercept)           0.002433 0.04933      
            Instructietaal_Andere 0.025042 0.15825  1.00
 IDSCHOOL.1 (Intercept)           0.020872 0.14447      
            Gepest_voelenRZ       0.010772 0.10379  0.46
 Residual                         0.771272 0.87822      
Number of obs: 4814, groups:  IDCLASS, 359; IDSCHOOL, 140

在脚本的后面,在 Model2C4 处,相关性更差。 我在这里做错了什么?

完整的脚本可以是found hereOLP Functions right here, and the dataset here.

我不认为你做错了什么。您可以做几件事来确认:

  • 使用 allFit() 尝试各种优化器并确保结果在您感兴趣的任何方面都足够相似。broom.mixed() 的开发版本有一个 tidy() 方法获取这些结果(您可以使用 remotes::install_github("bbolker/broom.mixed"))。
aa <- allFit(Montenegro_Model2C2)

比较适合:

glance(aa) |> select(optimizer, AIC, NLL_rel) |> arrange(NLL_rel)
# A tibble: 7 × 3
  optimizer                        AIC      NLL_rel
  <chr>                          <dbl>        <dbl>
1 nloptwrap.NLOPT_LN_NELDERMEAD 12849. 0           
2 nlminbwrap                    12849. 0.0000000443
3 nloptwrap.NLOPT_LN_BOBYQA     12849. 0.000000231 
4 nmkbw                         12849. 0.00000143  
5 bobyqa                        12850. 0.194       
6 Nelder_Mead                   12851. 0.812       
7 optimx.L-BFGS-B               12851. 0.812       

NLL_rel 给出了相对于最佳拟合 (NLL_rel = 0) 的负对数似然。 bobyqa、Nelder-Mead 和 L-BFGS-B 非常糟糕,其余的都很接近(nloptwrap.NLOPT_LN_BOBYQA 是默认优化器,这是原始拟合中使用的)。

比较参数:

tidy(aa, conf.int = TRUE) |> 
     arrange(effect, term, estimate) |> 
     select(-c(std.error, statistic))
# A tibble: 77 × 7
   optimizer                     effect group term   estimate conf.low conf.high
   <chr>                         <chr>  <chr> <chr>     <dbl>    <dbl>     <dbl>
 1 optimx.L-BFGS-B               fixed  NA    (Inte…    0.102   0.0470     0.157
 2 Nelder_Mead                   fixed  NA    (Inte…    0.102   0.0470     0.157
 3 nloptwrap.NLOPT_LN_NELDERMEAD fixed  NA    (Inte…    0.105   0.0497     0.161
 4 nlminbwrap                    fixed  NA    (Inte…    0.105   0.0497     0.161
 5 nloptwrap.NLOPT_LN_BOBYQA     fixed  NA    (Inte…    0.105   0.0497     0.161
 6 nmkbw                         fixed  NA    (Inte…    0.105   0.0497     0.161
 7 bobyqa                        fixed  NA    (Inte…    0.105   0.0494     0.162
 8 optimx.L-BFGS-B               fixed  NA    Gepes…   -0.214  -0.249     -0.178
 9 Nelder_Mead                   fixed  NA    Gepes…   -0.214  -0.249     -0.178
10 nloptwrap.NLOPT_LN_BOBYQA     fixed  NA    Gepes…   -0.208  -0.243     -0.173

我们可以看到(至少看前几行)'bad' 优化器给出的参数值略有不同,其他的看起来都很接近。

如果你不想再努力工作,那应该足够了。

在任何情况下,您都具有奇异拟合(IDSCHOOL 项中的相关性估计为 1.00),因此根据您的建模方法,您可能仍希望简化模型。

我们还可以查看一些诊断信息,看看是否还有其他关于该模型的问题:

aa <- augment(Montenegro_Model2C2)
ggplot(aa,
       aes(Gepest_voelenRZ, .resid, colour = factor(Instructietaal_Andere))) + geom_point() + geom_smooth()

这有点令人担忧:Instructietaal Andere==0 的最大级别 Gepest_voelenRZ 有一组值(Google 翻译说这意味着“感觉被欺负” , 荷兰语中的“指令语言 'other'”??)安装不当。尝试检查这些数据点,看看是否有任何可疑之处? (模型拟合不佳不一定会导致模型拟合的数值不稳定,但它们无济于事......)