使用 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)
Example:
library(lme4)
fm1 <- lmer(Reaction~Days+(Days|Subject), sleepstudy)
提取@optinfo
插槽并看看那里有什么:
names(fm1@optinfo)
检查$derivs
元素:
fm1@optinfo$derivs
这是渐变:
max(abs(fm1@optinfo$derivs$gradient))
但我们想要的是scaled渐变(感谢@RobertLong的提醒)
dd <- fm1@optinfo$derivs
sc_grad <- with(dd, solve(Hessian, gradient))
max(abs(sc_grad))
notes
- 直接通过提取插槽
@
不能 100% 保证面向未来(尽管lme4
相当稳定)
- 增加最大评估次数实际上不会改变最大梯度。您可能会考虑收紧/减少收敛容差(请参阅
?lme4::convergence
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)