使用 glmer 模拟收敛问题

model convergence issues using 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 上发送的数据 off-line,使用 lme4 的开发版本,我没有得到任何收敛警告——这样的 platform-dependence 并不是很不寻常 ...

但是,我想我可以根据您发送的数据的结构来解释您的结果。这是一个典型个人的示例,为了保密修改了值:

     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") 因为它是默认值,但如果它使代码更清晰,也可以包含它)。

A similar question 表明,如果您尝试将具有残差项(例如 LMM/Gaussian 响应)的模型拟合到此类数据集,事情会变得更加病态...