r - glmmLasso 函数无法完成运行
问题描述
我正在尝试在 RStudio 中使用 glmmLasso 构建混合模型套索模型。但是,我正在寻求一些帮助。
我的模型方程如下:
glmmModel <- glmmLasso(outcome ~ year + married ,list(ID=~1), lambda = 100, family=gaussian(link="identity"), data=data1,control = list(print.iter=TRUE))
其中结果是连续变量,年份是收集数据的年份,已婚是对象是否已婚的二元指标 (1/0)。我最终想在我的模型中包含更多的协变量,但是为了首先成功地运行它,现在我只是试图用这两个协变量运行一个模型。我的 data1 数据框是 48000 个观察值和 57 个变量。
但是,当我单击运行时,模型会运行数小时(48+)而不会停止。我得到的唯一反馈是“ITERATION 1”、“ITERATION 2”等......我有什么遗漏或做错了吗?请注意,我在只有 8 GB RAM 的机器上运行,但我认为这不应该是问题,对吧?我的数据集(48000 个观察值)并不是特别大(至少我不这么认为)。关于如何解决此问题的任何建议或想法将不胜感激。谢谢!
解决方案
这太长了,不能发表评论,但我觉得你应该回答这个困惑。
体验“慢”性能的情况并不少见。事实上,在许多 glmm 实现中,它比没有更常见。事实上,广义线性混合效应模型很难估计。对于纯高斯模型(无惩罚器),一系列证明为我们提供了 REML 估计器,可以非常有效地估计它,但对于广义模型,情况并非如此。因此请注意,随机效应模型矩阵可以变得绝对庞大。请记住,对于每个随机效应,您都会获得一个块对角矩阵,因此即使对于小型数据,您也可能拥有一个包含 2000 多列的模型矩阵,需要通过 PIRLS(反演等)进行优化。
一些包(glmmTMB、lme4 和 nlme)具有非常有效的实现,它们滥用随机效应矩阵的块对角性和高性能 C/C++ 库来执行优化的稀疏矩阵计算,而glmmLasso(链接到源)包使用 R-base 来执行它的所有计算。不管我们怎么做,它不会滥用稀疏计算并在 R 中实现它的代码,这会导致它变慢。
作为旁注,我的论文项目有大约 24000 次观察,有 3 个随机效应变量(和一些奇怪的 20 个固定效应)。该数据集的拟合过程可能需要 15 分钟到 3 小时,具体取决于复杂性,并且主要由随机效应结构决定。
所以从这里的答案:
是的 glmmLasso 会很慢。这可能需要数小时、数天甚至数周,具体取决于您的数据集。我建议使用跨独立组的分层(或/和聚类)子样本,使用较小的数据集(可能是 3000 - 4000?)拟合模型,以获得初始起点,并“希望”这些接近真实值. 要有耐心。如果您认为神经网络很复杂,欢迎来到广义混合效应模型的世界。
推荐阅读
- r - 在R中将嵌套列表转换为数据框
- firebase - Firebase Auth REST API - 使用电子邮件/密码登录不会返回刷新令牌
- r - 为什么在 R 中使用 gsub() 删除美元符号实际上会改变数据?
- python - 向量化 softmax 交叉熵梯度
- linux - 了解 ASAN 输出
- python - Pandas 通过条件检查将多列数据框从长到宽重塑
- python - 如何将用户的头像与 cloudinary / Django 相关联?
- python-3.x - 将 nltk.pos_tag 应用于整个数据框
- scala - 在 Scala spark 中用 \r 编写 csv 文件
- c - switch case 中的错误,标签只能是语句的一部分,而声明不是语句