mgcv bam()错误:无法分配大小为99.6 Gb

时间:2017-12-27 21:55:05

标签: r gam

我正在尝试使用bam(mgcv库)拟合添加剂混合模型。我的数据集对来自300个健康中心的2.10 ^ 5名儿童的生长进行纵向研究,有10 ^ 6个观察结果。我正在寻找每个中心的斜坡。 该模型是

bam(haz ~ s(month, bs = "cc", k = 12)+ sex+ s(age)+ center+ year+ year*center+s(child, bs="re"), data)

每当我尝试安装模型时,都会显示以下错误消息:

Error: cannot allocate vector of size 99.6 Gb
In addition: Warning message:
In matrix(by, n, q) : data length exceeds size of matrix

我正在使用500 Gb de RAM的群集。

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

要更准确地诊断出问题所在,请尝试使用遗漏的各种术语来拟合模型。模型中有几个术语可能会对您产生影响:

  • 涉及center的固定效应会爆炸300列* 10 ^ 6行;取决于year是数字还是因子,year*center字词可能会炸掉600列或(n年* 300)列
  • 我不清楚bam是否对s(.,bs="re")项使用稀疏矩阵;如果没有,你会遇到麻烦(2 * 10 ^ 5列* 10 ^ 6行)

数量级,10 ^ 6数值的向量(模型矩阵的一列)需要7.6 Mb,因此500 GB / 7.6 MB将是大约65,000列......

这里只是猜测,但我会试用gamm4包。它并非专门针对低内存使用,但是:

  当随机效应不是i.i.d.或时,

'gamm4'最有用   当有大量的随机系数[原文如此](超过   几百个),每个只申请一小部分   回应数据。

我还会将大部分术语变成随机效果:

gamm4::gamm4(haz ~ s(month, bs = "cc", k = 12)+ sex+ s(age)+ 
 (1|center)+ (1|year)+ (1|year:center)+(1|child), data)

或者,如果数据集中的年份不是很多,则将年份视为固定效应:

gamm4::gamm4(haz ~ s(month, bs = "cc", k = 12)+ sex+ s(age)+ 
 year + (1|center)+ (1|year:center)+(1|child), data)

如果有少数年,那么(year|center)可能有意义,评估中间变异和年份之间的协变......如果有多年,请考虑使其成为一个平滑的术语......