如何解决使用glmer进行模型收敛问题
我正在尝试运行混合效应泊松模型。输入特定变量时,我在模型收敛方面遇到问题,希望能想到为什么会这样。这是我的一部分数据。
id gender race gene grade y
1 0 1 -1.5 6 4
1 0 1 -2.1 7 2
1 0 1 1.5 8 6
2 1 2 3.6 6 4
2 1 2 2.1 7 3
2 1 2 1.6 8 1
我使用下面的代码,并且在下面收到错误消息。
m2<-glmer(y ~ gender + race + gene + grade +
(1 | id),data=data_long_1,family = "poisson"(link = "log"),control = glmerControl(optimizer="bobyqa",optCtrl=list(maxfun=2e5)))
Warning message:
In checkConv(attr(opt,"derivs"),opt$par,ctrl = control$checkConv,:
Model failed to converge with max|grad| = 0.00392577 (tol = 0.002,component 1)
问题是“等级”变量,因为当我删除变量时,没有得到该错误消息。每个人都有3个重头(6,7,8)。理想情况下,我想运行x级基因相互作用,但是如果模型中没有等级,我将无法执行该操作。
估计系数为:
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.683e+00 4.653e-02 36.159 < 2e-16 ***
gender1 -3.194e-02 3.584e-02 -0.891 0.37288
race1 1.329e-01 4.249e-02 3.127 0.00177 **
gene 8.298e-03 2.499e-02 0.332 0.73983
grade 2.980e-07 6.552e-03 0.000 0.99996
gene:grade 3.346e-07 6.768e-03 0.000 0.99996
有人可以深入了解为什么这个变量可能会引起问题吗?
解决方法
我无法复制您的收敛警告:在Linux(开发版本为lme4
的情况下,离线发送的数据中,我不会收到任何收敛警告-这样的平台依赖性不是非常不寻常...
但是,我想我可以根据您发送的数据的结构来解释您的结果。这是一个典型个体的示例,其值经过修改以提高机密性:
id gender race y gene grade
1 xxxx 1 1 8 -1.543210 6
2 xxxx 1 1 8 -1.543210 7
3 xxxx 1 1 8 -1.543210 8
4 xxxx 1 1 8 -1.543210 9
- 数据集中有很多人(500至1000之间)
-
gender
,race
,gene
,和y
的值,响应变量在id
内不变 (这很重要) - 只有
grade
的值在id
内变化,并且是完美平衡的—每个id
都有四个观测值,grade
= 6,7,8, 9
这意味着grade
对y
的平均影响或与grade
的任何事物的交互作用都完全为零!
由于该数据集实际上没有关于每个id
的多个观察值的信息(即,对每个人重复相同的值4次,除了grade
以外)可能最好只对每个人都适合并进行第一次观察
glm(y ~ gender + race + gene,data=...,family=poisson)
(我通常会省略(link="log")
,因为它是默认值,但是如果它使代码更清晰,可以将其包括在内)。
similar question表明,如果您尝试使用带有剩余方差项(例如LMM /高斯响应)的模型拟合此类数据集,事情就会变得更加病理...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。