加速R中的lmer功能

mam*_*ask 13 performance r lme4 mixed-models

在尝试R使用lme4包时改进线性混合效果模型的模型拟合时间时,我想分享一些我的想法.

数据集大小:数据集大约包含400,000行和32列.遗憾的是,无法分享有关数据性质的信息.

假设和检查:假设响应变量来自正态分布.在模型拟合过程之前,使用相关表和aliasR中提供的函数测试变量的共线性和多重共线性.

连续变量按比例缩放以帮助收敛.

模型结构:模型方程包含31个固定效应(包括截距)和30个随机效应(不包括截距).对于具有2700个级别的特定因子变量,随机效应是随机的.协方差结构是方差分量,因为假设随机效应之间存在独立性.

模型方程示例:

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%.

问题:是否有其他替代方法可以通过相应地定义lmer参数输入来缩短模型拟合时间?在模型拟合时间方面,R和SAS之间存在很大差异.

任何建议表示赞赏.

Dou*_*tes 10

lmer()通过针对随机效应的协方差矩阵中的参数优化关于分布的类似日志或分析的REML标准来确定参数估计.在您的示例中,将有31个这样的参数,对应于31个术语中每个术语的随机效应的标准偏差.对该大小的约束优化需要时间.

SAS PROC MIXED可能具有特定的优化方法,或者具有更复杂的方法来确定起始估计.SAS是一个封闭源系统意味着我们不知道他们做了什么.

顺便说一句,您可以将随机效果写为(1 + Var1 + Var2 + ... + Var30 || Group)

  • 我目前有两个[Julia](http://JuliaLang.org)软件包用于拟合线性混合效果模型 - [MixedModels](https://github.com/dmbates/MixedModels.jl)中的旧算法[ReTerms]中的新算法(https://github.com/dmbates/ReTerms.jl).计划是将ReTerms折叠为MixedModels并记录新算法.我目前不打算在[lme4](https://github.com/lme4/lme4)中实现新算法.我认为,在R/Rcpp中很难实现一些关键部分. (4认同)
  • 亲爱的道格拉斯.E.贝茨,你的答案是一个惊喜.我设法在朱莉娅`中使用相同的模型.结果表明,在适合特定模型时,"Julia"比"R"快约74倍.这是性能上的巨大差异.此外,结果是一致的.有没有计划在不久的将来在`R lme4`中进行相同的开发?谢谢您的帮助.Konstantinos Mammas (3认同)
  • 我是 stackoverflow 的新手,显然错过了一些微妙之处。我通常将自己称为 Doug Bates,而不是 user1864481 (2认同)
  • 这很清楚,也为我打开了一个全新的任务;是否使用 `Julia` 而不是 `R` 来拟合广义线性模型或线性混合效应模型。非常感谢您的宝贵帮助。我认为这次谈话会让很多人重新考虑使用哪种统计语言来拟合混合模型。 (2认同)

use*_*472 6

如果使用glmer而不是lmer,则有一个参数nAGQ。我发现该设置nAGQ=0极大地减少了拟合相当复杂的模型所需的时间(13 个固定效应,一个具有不同截距和斜率的随机效应,300k 行)。这基本上告诉我们glmer对 GLMM 使用不太精确的参数估计形式。请参阅?glmer更多详细信息或这篇文章。


小智 5

我们在 R 包 Rfast 中实现了假设复合对称的随机截距回归。命令是 rint.reg。它比相应的 lme4 函数快 30 多倍。我不知道这是否有帮助,但以防万一。

https://cran.r-project.org/web/packages/Rfast/index.html