如何在 lme4 中获取收敛错误消息或最大梯度

How to get convergence error messages or max gradient in lme4

在使用 lme4 建立随机效应模型后,如何获得最大梯度值?默认大于0.002就显示,但是我想做一个原函数如下,需要一个最大梯度的返回值,是否大于0.002。

  1. 做原始模型
MM<- lmer(Y ~ 1 + X + (1 |cluster_ID ), data=data)
summary(MM)
  1. 如果上述原始模型的最大梯度大于0.002,则进行以下处理。
MM_par <- getME(MM, c("theta", "fixef"))
RS_MM <- update(MM, start=MM_par, control=lmerControl(optCtrl = list(maxeval=1e4)))
summary(RS_MM)

示例:

library(lme4)
fm1 <- lmer(Reaction~Days+(Days|Subject), sleepstudy)

提取 @optinfo 插槽并查看其中的内容:

names(fm1@optinfo)

检查 $derivs 元素:

fm1@optinfo$derivs

这是渐变:

max(abs(fm1@optinfo$derivs$gradient))

但是我们想要缩放渐变(感谢@RobertLong的提醒)

dd <- fm1@optinfo$derivs
sc_grad <- with(dd, solve(Hessian, gradient))
max(abs(sc_grad))

笔记

  • 直接通过@提取插槽并不能100%保证future-proof(尽管lme4相当稳定)
  • 增加最大评估次数实际上不会改变最大梯度。您可能会考虑 tightening/decreasing 收敛公差(参见 ?lme4::convergence

你可以得到收敛误差:

myModel@optinfo$conv$lme4

你可以获得最大梯度:

myModel@optinfo$derivs %>% with(. , solve(Hessian, gradient))  %>% abs() %>% max()