如何在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)

解决方法

您可以通过以下方法获得收敛错误:

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

您可以使用以下方法获得最大梯度:

 def display_user_tasks(request):
      name = request.user
      task_list = Task.objects.filter(user=User.objects.get(username=request.user.username))
       context = {
        'name': name,'task_list': task_list,}
       return render(request,'todo/task_list.html',context) 

def about_tasks(request):
    name = request.user
    task = request.task
    context = {
        'task': task,'name': name,}
    return render(request,'todo/about_tasks.html',context)
,

示例:

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,gradient))
max(abs(sc_grad))

笔记

  • 通过@直接提取插槽并不能100%保证是面向未来的(尽管lme4相当稳定)
  • 增加最大评估次数实际上不会更改最大梯度。您可以考虑收紧/减小收敛容限(请参见?lme4::convergence