【问题标题】:Stata vs. R: Substantial difference in memory usage during pooled OLS (Panel)Stata 与 R:池化 OLS 期间内存使用量的显着差异(面板)
【发布时间】:2018-04-24 14:19:30
【问题描述】:

我正在尝试对包含约 34,000 个观察值的面板数据集运行合并 OLS 回归。在 R 中调用 lm() 时,此过程需要很长时间并最终消耗超过 30GB 的内存(因此,在估计回归时它会超出 RAM)。事实上,我不得不强行退出程序,因为我的电脑几乎崩溃了。

当我在 Stata 中(在同一个数据集上)运行完全相同的回归时,这个过程大约需要 1 秒。我不知道这里发生了什么,我做错了吗?

R 代码:

pooled1=lm(ret ~ l_ret + l_btm + l_roe, data=panel)

状态码:

reg ret l_ret l_btm l_roe, r

【问题讨论】:

  • 尝试在 R 中重现您的问题。lm(a ~ b + c, data = data.frame(a = rnorm(34000, 5, 2), b = rnorm(34000, 7, 2), c = c(rep(1, 17000), rep(2, 17000)))) 在我的计算机上花费不到一秒钟的时间。您是否设法生成导致类似问题的示例数据集?
  • 亲爱的@Mikko,感谢您的回答。确实,您的复制品在 R 中对我来说效果很好。因此,显然肯定还有其他事情发生。然而,查看 R 和 Stata 的数据浏览器,加载的数据集(面板)显示相同......(我已经用这些截图更新了帖子)。
  • 请粘贴str()summary()你的data.frame结果。
  • l_ret 转换为数字并重试
  • 啊当然。有趣的是,Stata 是如何自动执行此操作的。谢谢@missuse 和 Mikko!我会用解决方案更新帖子。

标签: r memory time-series regression stata


【解决方案1】:

您的 $l_ret 变量是一个字符向量。尝试将其转换为数字向量Panel$l_ret <- as.numeric(Panel$l_ret),然后再次运行分析。您的 data.frame 也是 tibble 对象。这不应该减慢 R 的速度,但您可能还想尝试将 Panel 转换为 data.frame 以尽量减少任何干扰。您可以通过Panel <- as.data.frame(Panel) 完成此操作。

【讨论】:

  • 谢谢 Mikko。我刚刚假设由于 Stata 可以运行分析,因此实际的数据集配置也可以正常检查。经验教训。
  • 在这 34000 个数字中,您可能有一个字母字符串或一个带逗号 (0,5 f.ex) 的数字。这就是它被转换为字符向量的原因。
猜你喜欢
  • 2013-01-19
  • 2023-03-22
  • 2014-04-22
  • 1970-01-01
  • 2012-08-30
  • 2018-12-22
  • 1970-01-01
  • 2015-01-09
  • 2013-10-01
相关资源
最近更新 更多