我在一个大文件(500000 行)上使用混合模型。
我的模型公式如下所示:
Y ~ 0 + num1:factor1 + num1:factor2 + num2:factor3 + factor4 + (0 + num3|subject) + (0 + num4|subject) + (1|subject)
,
其中 num
- 数字变量; factor
- 分类变量/因素。
由于分类变量有许多独特的水平,固定效应矩阵 非常稀疏(稀疏度~0.9)。
拟合这样一个矩阵,如果它被处理为密集需要大量的时间和 RAM。
线性回归也有同样的问题。
我的密集矩阵是 20GB
,但是当我将它转换为稀疏矩阵时,它变成了 35MB
。
所以,我拒绝使用 lm
函数,而是使用另外两个函数:
sparse.model.matrix
(创建稀疏模型/设计矩阵)和MatrixModels:::lm.fit.sparse
(拟合稀疏矩阵并计算系数)。
我可以将类似的方法应用于混合模型吗?
我可以使用哪些函数/包来实现它?
也就是说,我的主要问题是是否可以用稀疏矩阵实现混合模型?
我应该使用什么函数来创建 X
和 Z
稀疏模型矩阵?
那么,我应该使用哪个函数来拟合具有稀疏矩阵的模型以获得系数?
如果对此有任何帮助,我将非常非常感谢!
最佳答案
- 从 CRAN 的 1.0.2.1 版本开始,
glmmTMB
有一个sparseX
参数:
sparseX: a named logical vector containing (possibly) elements named "cond", "zi", "disp" to indicate whether fixed-effect model matrices for particular model components should be generated as sparse matrices, e.g. ‘c(cond=TRUE)’. Default is all ‘FALSE’
您可能需要 glmmTMB([formula], [data], sparseX=c(cond=TRUE))
(glmmTMB
使用 family="gaussian “
默认情况下)。
glmmTMB
对于线性混合模型来说不如 lme4
快:我不知道你的里程数是多少(但会对这里感兴趣)。还有一些讨论here关于如何破解 lme4
中的稀疏模型矩阵的等价物(通过让多级因子成为具有较大固定方差的随机效应)。
关于r - 带有 lme4 或其他包的稀疏混合模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64666255/