在尝试使用R
包改善lme4
中的线性混合效果模型的模型拟合时间时,我想分享一些想法。
数据集大小:数据集大约由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中的同一模型花费了几秒钟。 Web上有可用的文献,介绍如何通过使用非线性优化算法nloptwrap
减少时间并关闭在优化完成后执行的耗时的导数计算calc.derivs = FALSE
:
https://cran.r-project.org/web/packages/lme4/vignettes/lmerperf.html
时间减少了78%。
问:是否有其他替代方法可以通过相应地定义lmer
参数输入来减少模型拟合时间?在模型拟合时间方面,R和SAS之间有很大差异。
任何建议表示赞赏。
最佳答案
lmer()通过针对随机效应的协方差矩阵中的参数优化配置的对数似然度或配置的REML准则来确定参数估计。在您的示例中,将有31个这样的参数,对应于31个项中每个项的随机效应的标准偏差。该大小的受限优化需要时间。
SAS PROC MIXED可能具有特定的优化方法,或者具有确定初始估计值的更复杂的方法。 SAS是一个封闭源系统,这意味着我们不知道它们在做什么。
顺便说一句,您可以将随机效果写为(1 + Var1 + Var2 + ... + Var30 || Group)