r - 带有 lme4 或其他包的稀疏混合模型

标签 r matrix sparse-matrix lme4 mixed-models

我在一个大文件(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 函数,而是使用另外两个函数:

  1. sparse.model.matrix(创建稀疏模型/设计矩阵)和
  2. MatrixModels:::lm.fit.sparse(拟合稀疏矩阵并计算系数)。

我可以将类似的方法应用于混合模型吗?
我可以使用哪些函数/包来实现它?

也就是说,我的主要问题是是否可以用稀疏矩阵实现混合模型
我应该使用什么函数来创建 XZ 稀疏模型矩阵?
那么,我应该使用哪个函数来拟合具有稀疏矩阵的模型以获得系数?

如果对此有任何帮助,我将非常非常感谢!

最佳答案

  • 从 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/

相关文章:

r - 在 R 中执行非负矩阵分解

r - GNU R是否有任何现有的语法检查器

r - 使用 rmongodb 加速大型结果集处理

r - 将逗号分隔列表转换为数据框

python - 如何添加列表作为 numpy n 维矩阵的元素

python - 稀疏 Scipy/Numpy : an efficient way to implement sum of pairwise mins operation

r - 使用 mutate 创建行而不是列

r - 为什么我的 R 突变与 rowSums 不起作用(错误 : Problem with `mutate()` input `..2` . x 'x' 必须是数字 ℹ 输入 `..2` 是 `rowSums(.)` 。)?

python - Scipy:数组中的稀疏指示矩阵

Python:如何使用 Python 存储稀疏矩阵?