带有 lme4 或其他包的稀疏混合模型
Sparse Mixed Model with lme4 or other package
我在一个大文件(500000 行)上使用混合模型。
我的模型公式如下所示:
Y ~ 0 + num1:factor1 + num1:factor2 + num2:factor3 + factor4 + (0 + num3|subject) + (0 + num4|subject) + (1|subject)
,
其中 num
- 数值变量; factor
- 分类 variables/factors.
由于分类变量有很多独特的水平,固定效应矩阵是非常稀疏(稀疏度~0.9)。
拟合这样一个矩阵,如果它处理得如此密集,则需要大量时间和 RAM。
我对线性回归有同样的问题。
我的密集矩阵是 20GB
,但是当我将它转换为稀疏矩阵时,它变成了 35 MB
.
所以,我拒绝使用 lm
函数,而是使用另外两个函数:
sparse.model.matrix
(创建稀疏model/design矩阵)和
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
中的稀疏模型矩阵的等价物(通过让 many-level 因子成为具有较大固定方差的随机效应)。
我在一个大文件(500000 行)上使用混合模型。
我的模型公式如下所示:
Y ~ 0 + num1:factor1 + num1:factor2 + num2:factor3 + factor4 + (0 + num3|subject) + (0 + num4|subject) + (1|subject)
,
其中 num
- 数值变量; factor
- 分类 variables/factors.
由于分类变量有很多独特的水平,固定效应矩阵是非常稀疏(稀疏度~0.9)。
拟合这样一个矩阵,如果它处理得如此密集,则需要大量时间和 RAM。
我对线性回归有同样的问题。
我的密集矩阵是 20GB
,但是当我将它转换为稀疏矩阵时,它变成了 35 MB
.
所以,我拒绝使用 lm
函数,而是使用另外两个函数:
sparse.model.matrix
(创建稀疏model/design矩阵)和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
中的稀疏模型矩阵的等价物(通过让 many-level 因子成为具有较大固定方差的随机效应)。