我需要对一个相对较大的数据框运行逻辑回归,其中包含480个条目和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
package的felm回归函数,在运行回归之前减去固定效应。这完美地工作,并允许我在几分钟内将上述回归作为正常线性模型运行。但是,lfe
不支持逻辑回归和glms。因此,对于了解不同模型的模型拟合而言,felm非常有用,但对最终的逻辑回归模型并不起作用。
biglm / bigglm :
我考虑使用bigglm
将我的功能分解为更易于管理的块。但是,有几个来源(例如link1,link2,link3)提到为了使其起作用,因子需要在各个块之间保持一致,即每个块必须包含至少一个每个因子变量的每个因子。因子A和B包含仅出现一次的级别,因此我无法将这些组拆分为具有一致级别的不同块。如果我删除固定效果A的10个因子和B的8个因子(微小的变化),我将只剩下4个级别的因子,并且将我的数据分成4个块将使其更易于管理。但是,我仍然需要弄清楚如何对我的df进行排序,以确保我的480.000条目被分为4个块,其中3个因子中的每个因子的每个因子级别至少出现一次。
GlmmGS / glmgs : 使用" Gauss-Seidel"算法。不幸的是,该包已不再开发。对于R来说相对较新并且没有深入的统计经验,我无法理解输出,也不知道如何以一种能给我正常"效果大小的方式对其进行转换。 ,"模型拟合","显着性区间" glm回归摘要提供的指标。
我向包裹的作者发了一条消息。他们回应如下:
软件包不提供与glm对象相同格式的输出。但是,你 可以很容易地计算出大部分拟合统计量(标准误差) 给出当前输出(在CRAN中)估计,拟合度 版本,我相信当前的输出是估计的向量 系数,以及标准误差的相关矢量;同样的 协方差组件,但如果你不需要担心它们 是没有随机效应的拟合模型)。只要小心了 用于计算标准误差的协方差矩阵是 与...相关的精度矩阵的对角块的逆 Gauss-Seidel算法,所以他们倾向于低估 联合可能性的标准误差。我不是在维持 包装更长,我没有时间进入具体的 细节;包装背后的开创性理论可以在中找到
glmmgs
,其他一切都需要解决 由你用笔和纸:)。
如果有人能够解释如何轻松计算大部分拟合统计数据"在某种程度上,没有任何统计学教育的人可以理解它(可能是不可能的)或提供R代码,以示例如何做到这一点我将非常感激!
革命分析:
我在一台模拟Mac上的Windows 7的虚拟机上安装了革命分析企业。该程序有一个名为lfe
的函数,该函数针对大型逻辑回归进行了优化。使用RxLogit
函数得到RxLogit
,因此该函数似乎也会遇到内存问题。但是,该软件使我能够在分布式计算集群上运行回归。所以我可以解决这个问题"通过在具有大量内存的群集上购买计算时间。但是,我想知道革命分析程序是否提供了我不知道的任何公式或方法,这些公式或方法可以让我做某种the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation)
- 像固定效果减法操作或lfe
类似的分块操作,考虑了因素。
MatrixModels / glm4 :
有人建议我使用bigglm
包的glm4
函数和MatrixModels
属性来加速计算。如果我使用所有固定效果运行sparse = TRUE
回归,我会获得glm4
"错误。如果我仅使用固定效果变量B OR A和C运行它,则计算将起作用并返回"Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed
个对象。与"glpModel"
一样,我在将输出转换为对我有意义的形式时遇到了一些问题,因为标准的glmmGS
方法似乎不起作用。
我很乐意就上述任何问题提供建议,或者在R中运行具有内存约束的多个大型固定效果的逻辑回归的完全不同的方法。
答案 0 :(得分:6)
结帐
glmmboot{glmmML}
http://cran.r-project.org/web/packages/glmmML/glmmML.pdf
Brostrom和Holmberg(http://cran.r-project.org/web/packages/eha/vignettes/glmmML.pdf)
还有一份很好的文件以下是他们的文件中的例子:
dat <- data.frame(y = rbinom(5000, size = 1, prob = 0.5),
x = rnorm(5000), group = rep(1:1000, each = 5))
fit1 <- glm(y ~ factor(group) + x, data = dat, family = binomial)
require(glmmML)
fit2 <- glmmboot(y ~ x, cluster = group,data = dat)
计算时差是&#34;巨大的&#34;!
答案 1 :(得分:3)
对于后人,我还想推荐一个speedglm
包,我发现在尝试对大型数据集进行逻辑回归时,这个包很有用。它似乎使用了大约一半的内存,并且比glm
更快地完成。
答案 2 :(得分:2)
我同意(@Ben Bolker,我猜?)建议您使用glm4
中的MatrixModels
函数。首先,如果使用sparse
参数,它可以解决您的内存问题。具有480.000个条目和6370个固定效果的密集设计矩阵将需要6371 * 480.000 * 8 = 24.464.640.000字节。但是,您的设计矩阵将非常稀疏(很多零),因此如果您使用稀疏的设计矩阵,则可以使用更小的(内存中)设计矩阵。其次,您可以利用稀疏性来进行更快速的估算。
至于选项,快速搜索显示speedglm
也有sparse
参数,尽管我还没有尝试过。无论你以何种方式结束,我都应该使用你的设计矩阵稀疏,以减少计算时间和减少内存需求。
您得到的错误(Error in Cholesky(crossprod(from), LDL = FALSE) : internal_chm_factor: Cholesky factorization failed" error
)很可能是因为您的设计矩阵是单数。在这种情况下,您的问题没有唯一的解决方案,一些选项是合并一些组级别,使用惩罚或随机效果模型。
你是对的,似乎没有glpModel
类的摘要方法。虽然,插槽似乎有明显的名称,但您不应该花很长时间才能获得估算器上的标准误差,计算方差估计值等。