问题描述
我在大型文件(500000行)上使用混合模型。
我的模型公式如下:Y ~ 0 + num1:factor1 + num1:factor2 + num2:factor3 + factor4 + (0 + num3|subject) + (0 + num4|subject) + (1|subject)
,
其中num
-数字变量; factor
-分类变量/因素。
由于类别变量具有许多唯一级别,因此固定效果矩阵为非常稀疏(稀疏度约为0.9)。
如果要处理密度高的矩阵,要拟合这样的矩阵需要大量的时间和RAM。
线性回归也有同样的问题。
我的密集矩阵是20GB
,但是当我将其转换为稀疏矩阵时,它仅变成了35 MB
。
因此,我拒绝使用lm
函数,而是使用了另外两个函数:
-
sparse.model.matrix
(以创建稀疏模型/设计矩阵)和 -
MatrixModels:::lm.fit.sparse
(以适合稀疏矩阵并计算系数)。
我可以对混合模型应用类似的方法吗?
我可以使用哪些功能/软件包来实现此目的?
也就是说,我的主要问题是是否可以实现稀疏矩阵的混合模型?
我应该使用什么函数来创建X
和Z
稀疏模型矩阵?
然后,我应该使用哪个函数将稀疏矩阵拟合模型以获得系数?
我非常感谢您对此提供的任何帮助!
解决方法
- 从CRAN的1.0.2.1版开始,
glmmTMB
具有一个sparseX
参数:
sparseX:包含(可能)包含以下元素的命名逻辑向量 “ cond”,“ zi”,“ disp”指示固定效果模型 应当为特定模型组件生成矩阵 作为稀疏矩阵,例如‘c(cond = TRUE)’。默认为全部 ‘假’
您可能希望使用glmmTMB([formula],[data],sparseX=c(cond=TRUE))
(默认情况下,glmmTMB
使用family="gaussian"
)。
glmmTMB
的速度不如lme4
快:我不知道您的行驶里程是多少(但对此感兴趣)。还有关于here的讨论,关于如何破解lme4
中的稀疏模型矩阵(通过使多级因子成为具有较大固定方差的随机效应)。