You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用plm替代biglm实现固定效应回归失败,寻求修改方案

解决plm运行面板固定效应回归的问题

首先,咱们先聊聊你当前代码里的核心问题:你把数据按FundId拆分后,每个子集里只有单个基金的时间序列数据——相当于每个子集是单个体的时间序列,但plm的固定效应模型需要的是多个体+多时间点的面板结构,单个个体根本没有“固定效应”可以估计,这就是plm没法正常运行的原因。

你原本用biglm是为了处理大数据,现在想转plm加固定效应,完全不需要拆分数据,直接在整个数据集上运行面板回归就好,下面是修改后的可行方案:

方法1:用plm正确实现个体固定效应回归

library(biglm)
library(plm)
library(data.table)

# 你的样本数据
union_with_factors = data.table(
  t = c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),
  excessr = c(10,23,13,53,43,76,34,12,45,13,42,31,4,53,64),
  FundId = c("x","x","x","x","x","y","y","y","y","y","z","z","z","z","z"),
  mkt_rf = c(1,1,2,1,3,1,1,2,1,3,1,1,2,1,3)
)

# 直接在整个数据集上运行个体固定效应回归
# 指定index为个体(FundId)和时间(t),model="within"对应固定效应
fit_plm <- plm(excessr ~ mkt_rf, 
               data = union_with_factors,
               index = c("FundId", "t"),  # 告诉plm谁是个体、谁是时间维度
               model = "within")          # 个体固定效应模型

# 查看回归结果
summary(fit_plm)
# 提取系数
coef(fit_plm)

这段代码的逻辑很清晰:把整个数据集当作面板数据,plm会自动识别每个FundId是一个独立个体,每个t是时间点,model="within"会帮你控制每个基金的个体固定效应,最终估计出mkt_rfexcessr的净影响。

针对大数据的优化建议

如果你的真实数据集体量特别大,plm在内存效率上可能不够理想,推荐试试fixest包的feols()函数——它专门针对大面板数据做了优化,运行速度更快、内存占用更低,语法也更直观:

library(fixest)

# 用feols实现个体固定效应,|后面直接跟着要控制的固定效应变量
fit_fixest <- feols(excessr ~ mkt_rf | FundId,  
                    data = union_with_factors)

summary(fit_fixest)
coef(fit_fixest)

再说说你原来的代码为啥不行

你之前拆分数据后,每个子集只有一个FundId,plm的固定效应是用来捕捉个体间的差异的,单个个体没有差异可捕捉,自然没法正常估计,甚至会输出无意义的结果。

内容的提问来源于stack exchange,提问作者Rbeginner

火山引擎 最新活动