【问题标题】:computing multiple fixed effects on large dataset在大型数据集上计算多个固定效应
【发布时间】:2014-03-10 03:19:22
【问题描述】:

我正在尝试对包含超过 4000000 行的 CSV 数据集中的两个因子变量执行固定效应回归。这些变量可以分别假设大约 140000 和 50000 个不同的整数值。

我最初尝试在具有 8 Gb 内存的 Linux 机器上使用 R 的 biglm 和 ff 包执行回归,如下所示;但是,这似乎需要太多内存,因为 R 抱怨必须分配一个大小大于我机器上最大值的向量。

library(biglm)
library(ff)
d <- read.csv.ffdf(file='data.csv', header=TRUE)
model = y~factor(a)+factor(b)-1
out <- biglm(model, data=d)

网上的一些研究表明,由于因子是由ff加载到内存中的,如果存在许多因子值,后者不会显着提高内存使用率。

有没有人知道其他方法可以在我描述的数量级的数据集上执行上述回归,而不必求助于内存明显更多的机器?

【问题讨论】:

  • 如果有的话,我会尝试从 R 中删除所有其他数据集/对象(同时关闭所有其他项目)。您可以通过使用 rm() 并在 gc() 之后将清除数据释放回内存来做到这一点。
  • 我确实确保上述脚本是在 R 会话中运行的唯一代码。无论如何,我发现在具有更多 (32 Gb) 内存的机器上运行脚本可以防止最初的内存投诉,但会迅速导致机器开始使用交换内存并变慢。
  • 您目前使用过biglm。我认为您想将 bigglm 与高斯链接一起使用。您应该使用 ffbase 包中的 bigglm.ffdf。 require(ffbase) 和 methods(bigglm) 让你到达那里。您也不需要指定因子(a),a已经是一个因子。
  • a.as.factor 和 b.as.factor 有多少层?
  • 140000 和 50000,分别。

标签: r regression fixed effects ff


【解决方案1】:

你应该试试 lfe 包,它就是为此目的而设计的:

library(lfe)
...
out <- felm(y ~ 0|a+b, data=d)
fe <- getfe(out)

可以在此处找到该方法的证明:http://www.sciencedirect.com/science/article/pii/S0167947313001266

这是一篇关于它的 R-journal 文章:http://journal.r-project.org/archive/2013-2/gaure.pdf

【讨论】:

  • 我尝试了 lfe,但数据集仍然太大,无法在我的系统上处理。
  • 好的,那么问题不是因子中的级别数,而是您对数据集的处理。它包含 400 万行,每行有两个因子。 Factors 使用 4 字节的 int 存储,因此每行 8 个字节,只有 32MB。 lfe 将制作两份副本(一份用于模型矩阵(如果因子是唯一的协变量,则为空),一份用于结果,您将保持在 100MB 以下,远低于 8GB。
【解决方案2】:

如果您贬低变量(按类别),您可以获得固定效应的相同数学含义。因此,与其为每个假人找到一个常数,不如说是贬低它。而且贬低会非常快,因为它会被矢量化。

编辑1: 有关数学证明,请参见 Green 2012 p.400-401。

【讨论】:

  • 对不起 - 证明的完整参考是什么?我在原始帖子中可能不够清楚,但我的目标是确定固定效应的值。虽然我遵循贬低数据w.r.t。每个固定效应都将允许一个人执行等效回归,如何使用它来获得实际的固定效应本身? (欢迎提供更多参考资料。)
  • @lebedov 抱歉耽搁了,我错过了这个通知。我不明白你对FE自己感兴趣。我以为这只是性能问题。
  • 但“贬低 = 固定效应”仅适用于线性模型。
  • @hansonhill 当然,问题不在于非线性模型
  • 另外,当使用贬损变量进行回归时,标准误将是错误的,即更低。
猜你喜欢
  • 2015-05-27
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2023-01-26
相关资源
最近更新 更多