【发布时间】:2015-11-17 14:17:52
【问题描述】:
我想分享一些我在尝试使用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 在模型拟合时间方面存在很大差异。
欢迎提出任何建议。
【问题讨论】:
-
我的第一步是对数据集(行)进行二次抽样并进行拟合。
-
嗨@Roman Luštrik。我需要使用整个数据集来获得系数估计值。
-
我认为
lmer和 SAS proc 混合中使用的算法是不同的,尽管您必须让 @benbolker 确认。您还可以检查source code -
几秒钟与 0.75 小时(在您完成优化之后)确实非常令人惊讶。 SAS 和
lmer结果是否相互一致,即你真的适合同一个模型吗?所有Varx变量都是数字的吗?您能否提供一个可重现的示例(我知道您的数据是机密的,但您真正需要做的就是发布模拟代码,生成与您的数据大约相同的结构......) -
嗨,本博克。结果完全相同,变量也是数字。我将在一周后回来,所以我很乐意分享大致相同的数据结构。感谢您的宝贵时间。
标签: r performance lme4 mixed-models