使用 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 之间)
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")
因为它是默认值,但如果它使代码更清晰,也可以包含它)。
A similar question 表明,如果您尝试将具有残差项(例如 LMM/Gaussian 响应)的模型拟合到此类数据集,事情会变得更加病态...
我正在尝试 运行 混合效应泊松模型。当我输入一个特定的变量时,我遇到了模型收敛的问题,我希望得到关于为什么会这样的想法。这是我的一段数据。
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 之间)
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")
因为它是默认值,但如果它使代码更清晰,也可以包含它)。
A similar question 表明,如果您尝试将具有残差项(例如 LMM/Gaussian 响应)的模型拟合到此类数据集,事情会变得更加病态...