【问题标题】:Error during wrapup: long vectors not supported yet: in glm() function总结期间出错:尚不支持长向量:在 glm() 函数中
【发布时间】:2020-06-10 16:20:51
【问题描述】:

我在 Stackoverflow 上发现了几个关于这个主题的问题(其中一些没有任何答案),但与回归中的这个错误没有任何关系(到目前为止)。

我在r 中运行一个概率模型(我猜)有太多固定效应(年份和地点):

myprobit <- glm(factor(Y) ~ factor(T) + factor(X1) + factor(X2) + factor(X3) +
                 factor(YEAR) + factor(PLACE),
                 family = binomial(link = "probit"),
                 data = DT)

PLACE 变量有大约 1000 个唯一值和YEAR 8 个值。数据集DT 有 13,099,225 个 obs 和 79 列。

我得到的错误是:

Error: cannot allocate vector of size 59.3 Gb
Error during wrapup: long vectors not supported yet: ../include/Rinlinedfuns.h:519

我使用的机器有 128 GB 的 RAM。

所以,如果不更改功能,我不知道我能做什么。有谁知道如何处理这个问题?谢谢!

【问题讨论】:

  • 您可以先删除DT 中您未使用的所有额外列。但是,是的,我最好的猜测是你在构建 model.matrix 时得到了很大的分配,因为你有很多级别的因素。这个矩阵将有 1300 万行和超过 1000 列。您可以使用 biglm 之类的包进行探索。
  • 谢谢@Axeman。我不知道那个包裹。当然,这是一个很好的起点。

标签: r bigdata out-of-memory glm


【解决方案1】:

为了结束这个问题,我不得不提到@Axeman 的回答是解决我的问题的唯一方法。整个问题是,没有足够的内存来管理如此庞大的设计矩阵。

因此,使用biglm 包和bigglm() 函数运行概率回归是我迄今为止找到的唯一解决方案。

尽管如此,我意识到,由于 biglm 包的工作方式,迭代地获取数据块,在 RHS 中使用 factor() 变量,每次在块中未表示因子级别时都会出现问题。也就是说,如果一个因子变量有 5 个级别,但在数据块中只出现了 4 个级别,那么我的估计就会出错。

Stackoverflow 上有几个关于此的问题和问题。

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2014-08-11
    • 2014-02-04
    • 2017-01-17
    • 2014-08-08
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多