我正在尝试使用 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 RAM 的集群。
感谢您的任何帮助
要更准确地诊断问题所在,请尝试使用省略的各种项来拟合您的模型。该模型中有几个术语可能会让您大吃一惊:
- 固定效应涉及
center
将炸毁至 300 列 * 10^6 行;取决于是否year
是数字或因子,year*center
term 最多可扩展至 600 列或 (nyears*300) 列
- 我不清楚是否
bam
使用稀疏矩阵s(.,bs="re")
条款;如果没有,你就会在big麻烦(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)
可能有意义,以评估中心间的变异和年份之间的协变......如果有很多年,请考虑使其成为一个平滑的术语......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)