在尝试使用 lme4
包在 R
中改善线性混合效果模型的模型拟合时间时,我想分享一些我的想法 .
Dataset Size: 数据集大约包含400,000行和32列 . 遗憾的是,无法分享有关数据性质的信息 .
Assumptions and Checks: 假设响应变量来自正态分布 . 在模型拟合过程之前,使用相关表和R中提供的 alias
函数测试变量的共线性和多重共线性 .
连续变量按比例缩放以帮助收敛 .
Model Structure: 模型方程包含31个固定效应(包括截距)和30个随机效应(不包括截距) . 对于具有2700个级别的特定因子变量,随机效应是随机的 . 协方差结构是方差分量,因为假设随机效应之间存在独立性 .
Model equation example:
lmer(Response ~ 1 + Var1 + Var2 + ... + Var30 + (Var1-1| Group) + (Var2-1| Group) + ... + (Var30-1| Group), data=data, REML=TRUE)
模型已成功安装,但是,提供结果需要大约3.1小时 . SAS中的相同型号花了几秒钟 . 网上有关于如何通过使用非线性优化算法 nloptwrap
来减少时间的文献,并且关闭了在优化完成后执行的耗时衍生计算 calc.derivs = FALSE
:
https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html
时间减少了78% .
Question: 是否有其他替代方法可以通过相应地定义 lmer
参数输入来缩短模型拟合时间?在模型拟合时间方面,R和SAS之间存在很大差异 .
任何建议表示赞赏 .
3 回答
lmer()通过针对随机效应的协方差矩阵中的参数优化关于分布的类似日志或分析的REML标准来确定参数估计 . 在您的示例中,将有31个这样的参数,对应于31个术语中每个术语的随机效应的标准偏差 . 对该大小的约束优化需要时间 .
SAS PROC MIXED可能具有特定的优化方法,或者具有更复杂的方法来确定起始估计 . SAS是一个封闭源系统意味着我们不知道他们做了什么 .
顺便说一句,您可以将随机效果写为(1 Var1 Var2 ... Var30 || Group)
我们已经实现了随机截距回归,假设R包Rfast中的复合对称性 . 该命令是rint.reg . 它比相应的lme4功能快30倍 . 我不知道这是否有帮助,但以防万一 .
https://cran.r-project.org/web/packages/Rfast/index.html
如果使用
glmer
而不是lmer
,则有一个参数nAGQ
. 我发现设置nAGQ=0
大大减少了拟合一个相当复杂的模型所需的时间(13个固定效果,一个具有不同截距和斜率的随机效果,300k行) . 这基本上告诉glmer
对GLMM使用不太精确的参数估计形式 . 有关详细信息,请参阅?glmer
,或this post .