问题描述
用lme4做随机效应模型后,如何获得最大梯度值?默认情况下会显示它是否大于0.002,但是我想制作一个原始函数,如下所示,无论该值是否大于0.002,该函数都需要返回最大梯度值。
- 制作原始模型
MM<- lmer(Y ~ 1 + X + (1 |cluster_ID ),data=data)
summary(MM)
- 如果上述原始模型的最大坡度大于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
)