lme4 :: glmer与Stata的melogit命令

时间:2017-06-21 13:25:02

标签: r stata lme4 mixed-models

最近我一直试图将大量随机效果模型适用于相对较大的数据集。假设在最多25个时间点观察到大约50,000人(或更多)。如此大的样本量,我们包含了许多我们正在调整的预测变量 - 可能有50个左右的固定效应。我使用R中的lme4::glmer将模型拟合为二元结果,每个主题使用随机截距。我不能详细说明数据,但我使用的glmer命令的基本格式是:

fit <-  glmer(outcome ~ treatment + study_quarter + dd_quarter + (1|id),
              family = "binomial", data = dat)

其中study_quarterdd_quarter都是每个约20个级别的因素。

当我尝试在R中使用此模型时,它会运行大约12-15个小时,并返回一个无法收敛的错误。我做了一系列故障排除(例如,遵循these指南),没有任何改进。最后收敛甚至不接近(最大梯度在5-10左右,而收敛标准是0.001我认为)。

然后我尝试使用melogit命令在Stata中拟合模型。该模型适合在2分钟内完成,没有收敛问题。相应的Stata命令是

melogit outcome treatment i.study_quarter i.dd_quarter || id:

是什么给出的? Stata是否只有更好的拟合算法,或者更适合大型模型和大型数据集?令人惊讶的是,运行时间有多么不同。

2 个答案:

答案 0 :(得分:8)

使用可选参数glmernAGQ=0L拟合可能会快得多。您有许多固定效应参数(每个study_quarterdd_quarter共有20个级别,共生成28个对比),默认优化方法(对应nAGQ=1L)会将所有这些系数放在一起进入一般非线性优化调用。使用nAGQ=0L,这些系数在快得多的惩罚迭代重加权最小二乘(PIRLS)算法中被优化。默认值通常会提供更好的估计值,因为估计值的偏差较小,但差异通常非常小,时差很大。

我将这些算法的差异写成Jupyter笔记本nAGQ.ipynb。该写法使用MixedModels Julia包而不是lme4,但方法类似。 (我是lme4的作者之一和MixedModels的作者。)

如果你打算做很多GLMM,我会考虑在JuliaMixedModels这样做。它通常比R快得多,即使lme4中包含所有复杂的代码。

答案 1 :(得分:0)

你确定Stata正在阅读整个文件吗?

http://www.stata.com/manuals13/rlimits.pdf

我问的原因是因为听起来像你有5万人观察了25次(1,250,000行);根据你使用的Stata版本,你可能会得到截断的结果。

修改 由于它不是文件长度问题,你尝试过其他包用于混合效果,如nlme?我怀疑非线性混合效果模型会使您的数据更快一些。

修改 此资源可能比关于不同模型的任何内容更有帮助:https://stats.stackexchange.com/questions/173813/r-mixed-models-lme-lmer-or-both-which-one-is-relevant-for-my-data-and-why