我需要对具有 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:使用lfe
包的 felm 回归函数,在运行回归之前减去固定效应。这完美地工作,并允许我在短短几分钟内将上述回归作为正常的线性模型运行。但是,lfe
不支持逻辑回归和 glms。所以 felm 非常适合了解模型是否适合不同模型,但不适用于最终的逻辑回归模型。
biglm/bigglm:我考虑过使用bigglm
将我的功能分解成更易于管理的块。但是,有几个来源(例如link1、link2、link3) 提到为了使它起作用,因子水平需要跨块保持一致,即每个块必须包含每个因子变量的每个因子中的至少一个。因素 A 和 B 包含只出现一次的关卡,因此我无法将这些集合分成具有一致关卡的不同块。如果我删除 10 个固定效应 A 因子和 8 个 B 因子(一个微小的变化),我将只剩下 4 个以上水平的因子,将我的数据分成 4 个块将使它更易于管理。但是,我仍然需要弄清楚如何对我的 df 进行排序,以确保我的 480.000 个条目被分类为 4 个块,其中 3 个因子中的每个因子的每个因子级别至少出现一次。
GlmmGS/glmgs:glmmgs
同名包中的函数执行固定效应减法,就像lfe
使用“Gauss-Seidel”算法进行逻辑回归的包一样。不幸的是,该软件包不再被开发。对 R 来说相对较新,并且对统计没有深入的经验,我无法理解输出,也不知道如何以一种可以给我正常的“效果大小”、“模型拟合”、“ glm 回归摘要提供的显着性区间”指标。
我向包的作者发送了一条消息。他们友好地回应如下:
该包不提供与 glm 对象相同格式的输出。但是,给定当前输出(在 CRAN 版本中,我相信当前输出是系数估计的向量,以及相关向量标准误差;对于协方差分量也是如此,但如果您正在拟合没有随机效应的模型,则不必担心它们)。请注意,用于计算标准误差的协方差矩阵是与 Gauss-Seidel 算法相关的精度矩阵的对角块的逆矩阵,因此它们往往会低估联合似然的标准误差。我不再维护该软件包,也没有时间了解具体细节; 手册中引用的纸张,其他一切都需要您用笔和纸来解决:)。
如果有人可以解释如何“轻松计算大多数拟合统计数据”,让没有任何统计学知识的人可以理解它(可能是不可能的),或者提供 R 代码来举例说明如何做到这一点,我会非常感谢!
革命分析:我在我的 Mac 上模拟 Windows 7 的虚拟机上安装了革命分析企业。该程序有一个RxLogit
针对大型逻辑回归进行了优化的函数。使用RxLogit
我得到的函数the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)
,所以该函数似乎也遇到了内存问题。但是,该软件使我能够在分布式计算集群上运行我的回归。因此,我可以通过在具有大量内存的集群上购买计算时间来“解决问题”。但是,我想知道革命分析程序是否提供了任何我不知道的公式或方法,这些公式或方法可以让我进行某种考虑因素lfe
的固定效应减法运算或分块运算。bigglm
MatrixModels/glm4:有人建议我使用带有属性的包的glm4
功能来加快计算速度。如果我使用所有固定效果运行回归,我会得到一个“错误。如果我只使用固定效果变量 B OR A 和 C 运行它,则计算工作并返回一个对象。就像我在将输出转换为一种对我有意义的形式,因为标准方法似乎不适用于它。MatrixModels
sparse = TRUE
glm4
"Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed
"glpModel"
glmmGS
summary()
我很乐意就上述任何问题或完全不同的方法在 R 中运行具有多个大型固定效应和内存限制的逻辑回归提供建议。