在R中加速lmer函数

p3rjfoxz  于 2023-05-11  发布在  其他
关注(0)|答案(3)|浏览(101)

我想分享一下我在使用lme4包改进R中线性混合效应模型的模型拟合时间时的一些想法。

**数据集大小:**数据集大约由400.000行和32列组成。不幸的是,无法共享有关数据性质的信息。
**假设和检查:**假设响应变量来自正态分布。在模型拟合过程之前,使用相关性表和R中提供的alias函数检验变量的共线性和多重共线性。

连续变量被缩放以帮助收敛。

**模型结构:**模型方程包含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在模型拟合时间方面有很大的差异。

任何建议都很感激。

qhhrdooz

qhhrdooz1#

lmer()通过针对随机效应协方差矩阵中的参数优化拟合对数似然或拟合REML标准来确定参数估计值。在您的示例中,将有31个这样的参数,对应于31项中每项的随机效应的标准差。这种规模的约束优化需要时间。
SAS PROC MIXED可能有特定的优化方法或更复杂的方法来确定起始估计值。SAS是一个闭源系统意味着我们不知道他们做什么。
顺便说一下,你可以把随机效应写成(1+Var1+Var2+...+Var30 || Group)

imzjd6km

imzjd6km2#

我们在R包Rfast中实现了假设复合对称的随机截距回归。命令是rint.reg。它比相应的lme4函数快30倍以上。我不知道这是否有帮助,但以防万一。
https://cran.r-project.org/web/packages/Rfast/index.html

i34xakig

i34xakig3#

如果使用glmer而不是lmer,则存在参数nAGQ。我发现设置nAGQ=0可以显著减少拟合一个相当复杂的模型(13个固定效应,一个具有不同截距和斜率的随机效应,300k行)所需的时间。这基本上告诉glmer对GLMM使用不太精确的参数估计形式。更多详情请参见?glmerthis帖子。

相关问题