我需要在一个相对较大的数据框架上运行逻辑回归,该数据框架包含 480.000 个条目和 3 个固定效应变量。固定效应 var A 有 3233 个级别,var B 有 2326 个级别,var C 有 811 个级别。所以总共我有 6370 个固定效果。数据是横截面数据。如果我无法使用正常运行此回归glm
函数,因为回归矩阵对于我的记忆来说似乎太大了(我收到消息“Error: cannot allocate vector of size 22.9 Gb
")。我正在寻找在我的 Macbook Air(OS X 10.9.5 8GB RAM)上运行此回归的替代方法。我还可以访问具有 16GB RAM 的服务器。
我尝试用几种不同的方式解决这个问题,但到目前为止都没有取得令人满意的结果:
lfe/felm:
使用 felm 回归函数lfe package http://cran.r-project.org/web/packages/lfe/lfe.pdf在运行回归之前减去固定效应。这非常有效,并允许我在短短几分钟内将上述回归作为正常的线性模型运行。然而,lfe
不支持逻辑回归和glm。因此,felm 非常适合了解不同模型的模型拟合情况,但不适用于最终的逻辑回归模型。
比格勒姆:
我想过使用bigglm http://cran.r-project.org/web/packages/biglm/biglm.pdf将我的功能分解为更易于管理的块。然而,有几个来源(例如link1 https://stackoverflow.com/questions/10502882/r-biglm-with-categorical-variables, link2 https://stackoverflow.com/questions/24317418/model-run-with-glm-but-not-bigglm, link3 http://blog.revolutionanalytics.com/2014/05/quick-history-2-glms-r-and-large-data-sets.html)提到为了使其发挥作用,因子水平需要在块之间保持一致,即每个块必须至少包含每个因子变量的每个因子之一。因子 A 和 B 包含仅出现一次的级别,因此我无法将这些集合拆分为具有一致级别的不同块。如果我删除 10 个固定效应 A 的因子和 8 个 B 的因子(一个微小的变化),我将只剩下 4 个以上级别的因子,并且将我的数据分成 4 个块将使其更易于管理。然而,我仍然需要弄清楚如何对 df 进行排序,以确保我的 480.000 个条目被排序为 4 个块,其中 3 个因子中的每个因子的每个因子级别至少出现一次。
GLMMGS/GLMGS:
The glmmgs http://cran.r-project.org/web/packages/glmmGS/glmmGS.pdf包中同名的函数执行固定效果减法,如下所示lfe
使用“Gauss-Seidel”算法进行逻辑回归的包。不幸的是,该软件包已不再开发。作为 R 的新手,并且对统计没有深入的经验,我无法理解输出,也不知道如何以给我正常的“效果大小”、“模型拟合”、“的方式对其进行转换” glm 回归摘要提供的“显着性区间”指标。
我向该包的作者发送了一条消息。他们善意地回复如下:
该包不提供与 glm 对象格式相同的输出。然而,你
可以轻松计算大部分拟合统计量(标准误差
给定当前输出(在 CRAN 中)
版本,我相信当前的输出是估计的向量
系数和相关的标准误差向量;同样对于
协方差分量,但如果您
是没有随机效应的拟合模型)。只需要注意的是
用于计算标准误差的协方差矩阵是
与相关的精度矩阵的对角线块的逆
Gauss-Seidel 算法,因此他们倾向于低估
联合似然的标准误。我不维护
包不再长,我没有时间进入具体的
细节;该包背后的开创性理论可以在手册中引用的纸张 http://www.stat.missouri.edu/~guhasu/gauss_seidel.pdf,其他一切都需要解决
由您用笔和纸:)。
如果有人可以解释如何“轻松计算大部分拟合统计数据”,以便没有任何统计学教育的人可以理解它(可能是不可能的),或者提供 R 代码来显示如何完成此操作的示例,我会的多谢!
革命分析:
我在 Mac 上模拟 Windows 7 的虚拟机上安装了 Revolution Analytics Enterprise。该程序有一个函数叫做RxLogit
针对大型逻辑回归进行了优化。使用RxLogit
我得到的函数the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)
,所以这个函数似乎也遇到了内存问题。但是,该软件使我能够在分布式计算集群上运行回归。因此,我可以通过在具有大量内存的集群上购买计算时间来“解决问题”。然而,我想知道革命分析程序是否提供了任何我不知道的公式或方法,可以让我做某种lfe
-类似固定效应减法运算或bigglm
-类似考虑因素的分块操作。
矩阵模型/glm4:
一个人建议我使用glm4
的功能MatrixModels
包与sparse = TRUE
属性来加速计算。如果我运行一个glm4
具有所有固定效应的回归我得到"Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed
“错误。如果我仅使用固定效应变量 B 或 A 和 C 运行它,则计算有效并返回"glpModel"
目的。与glmmGS
自标准以来,我在将该输出转换为对我有意义的形式时遇到一些问题summary()
方法似乎不起作用。
我很乐意就上述任何问题提供建议,或者也很乐意就在 R 中运行带有内存限制的多个大型固定效应的逻辑回归的完全不同的方法提供建议。