You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用plm实现非面板索引变量的固定效应(替代fixest模型)

用plm复现fixest的多层级固定效应模型

我需要运行面板固定效应模型,面板索引为county-year层级,但要在更高的state层级设置固定效应。已经能用fixest轻松实现该模型,却不清楚如何用plm复现。

示例数据

df <- data.frame(year= rep(c(2000, 2001, 2003, 2000, 2002, 2004), each=10),
                 county= rep(c("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10"), times=6),
                 state= rep(c("s1", "s2", "s3", "s4", "s5"), each=2, times=6),
                 temperature= runif(60, min=40, max=80),
                 trade= runif(60, min=10, max=20),
                 policy.outcome= runif(60, min=0, max=100))

目标fixest模型

library(fixest)
m1.fixest <- feols(policy.outcome
 ~ temperature + trade|state+year, 
               panel.id= ~county+year,
                               data=df)
summary(m1.fixest)

plm复现方法

由于plm默认的面板结构是个体-时间,而我们需要控制更高层级的state固定效应,同时保留county-year的面板聚类标准误,可以按照以下步骤操作:

1. 加载plm包并处理数据

先构造county-year的聚类标识,再将数据转换为plm可识别的面板格式:

library(plm)

# 构造county-year聚类变量
df$county_year <- interaction(df$county, df$year)
# 转换为面板数据,以county_year为索引
pdata <- pdata.frame(df, index = "county_year")

2. 运行包含state和year固定效应的模型

在plm的pooling模型中加入state和year的虚拟变量,对应fixest中|state+year的固定效应逻辑:

# 运行模型,去掉截距(固定效应已包含截距信息)
m1.plm <- plm(policy.outcome ~ 0 + temperature + trade + factor(state) + factor(year),
              data = pdata,
              model = "pooling")

3. 设置county-year层级的聚类标准误

使用vcovHC函数设置聚类标准误,匹配fixest中panel.id=~county+year的标准误计算方式:

# 生成聚类标准误
cluster_vcov <- vcovHC(m1.plm, cluster = "group")
# 查看最终结果
summary(m1.plm, vcov = cluster_vcov)

结果验证

你可以对比summary(m1.fixest)和summary(m1.plm, vcov = cluster_vcov)的系数估计值与标准误,确认两者结果一致。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:59:52