lmer - 模型未能收敛于 1 个负特征值
lmer - Model failed to converge with 1 negative eigenvalue
我试图在 R 中获得一些结果,但经过几个小时的搜索我无法克服这个错误。
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 here。
OLP 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'”??)安装不当。尝试检查这些数据点,看看是否有任何可疑之处? (模型拟合不佳不一定会导致模型拟合的数值不稳定,但它们无济于事......)
我试图在 R 中获得一些结果,但经过几个小时的搜索我无法克服这个错误。
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 here。 OLP 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'”??)安装不当。尝试检查这些数据点,看看是否有任何可疑之处? (模型拟合不佳不一定会导致模型拟合的数值不稳定,但它们无济于事......)