R回归报错无法分配内存,求替代Stata absorb的解决方案
解决方案
线性回归(替代lm)
用lfe包的felm函数,专门针对高维固定效应场景优化,无需将分类变量转为因子,直接吸收固定效应,大幅降低内存占用:
# 先安装包 install.packages("lfe") library(lfe) lmr <- felm(a_imt ~ a_imt_1 + totpop + reltrad_1 + reltrad_2 + reltrad_3 + reltrad_4 | fipsmerg, data = data)
竖线|右侧的fipsmerg就是要吸收的固定效应变量,函数会自动处理,不会生成大量虚拟变量。
Probit回归(替代glm)
用fixest包的feols函数,支持非线性模型的高维固定效应,效率和内存表现都更优:
# 先安装包 install.packages("fixest") library(fixest) myprobit <- feols(a_imt ~ a_imt_1 + totpop + reltrad_1 + reltrad_2 + reltrad_3 + reltrad_4 | fipsmerg, data = data, family = binomial(link = "probit"))
fixest会通过去均值等方法处理固定效应,避免构建超大设计矩阵,解决内存不足问题。
额外内存优化建议
- 将数据转为
data.table格式,比普通data.frame占用更少内存:
install.packages("data.table") data <- as.data.table(data)
- 检查
fipsmerg的水平数,如果存在极少观测的水平,可以先过滤掉,进一步减少计算压力。
内容的提问来源于stack exchange,提问作者Tiago Santos
相关产品推荐
相关产品推荐

