使用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之间)
  • genderracegeney的值,响应变量在id内不变 (这很重要)
  • 只有grade的值在id内变化,并且是完美平衡的—每个id都有四个观测值,grade = 6,7,8, 9

这意味着gradey的平均影响或与grade的任何事物的交互作用都完全为零!

由于该数据集实际上没有关于每个id的多个观察值的信息(即,对每个人重复相同的值4次,除了grade以外)可能最好只对每个人都适合并进行第一次观察

glm(y ~ gender + race + gene,data=...,family=poisson)

(我通常会省略(link="log"),因为它是默认值,但是如果它使代码更清晰,可以将其包括在内)。

similar question表明,如果您尝试使用带有剩余方差项(例如LMM /高斯响应)的模型拟合此类数据集,事情就会变得更加病理...