基于Python+pandas的面板数据双重差分(DID)回归实现咨询
多期双重差分(DID)回归实现方案
你的数据属于典型的多期DID适用场景:不同企业在不同年份进入处理状态(WFR=1),没有统一的政策实施时点,具体落地步骤如下:
1. 前置数据校验
- 确认面板结构的唯一性:同一企业同一年度只能有一条观测,可通过
df.duplicated(['NAME','YEAR']).sum()校验,存在重复值要先做去重或聚合处理 - 核查处理状态逻辑:若存在企业处理状态从1变回0的情况(比如示例中企业B 2009/2011年WFR=1,2017年后变为0),要先确认是否符合业务真实规则,若为统计错误需提前修正
- 连续变量异常值处理:对LCR、MR、RA三类连续指标做1%和99%分位的缩尾处理,避免极端值干扰回归结果
2. 基准回归实现
多期DID不需要额外生成处理组×时间的交互项,你现有的WFR字段本身就是个体-时间维度的处理状态标识,直接作为核心解释变量即可。Python环境下可使用linearmodels库实现双向固定效应回归,代码如下:
import pandas as pd from linearmodels import PanelOLS # 将数据集转为面板格式,索引依次设为个体(企业)、时间(年份) df_panel = df.set_index(['NAME', 'YEAR']) # 构建回归模型:控制个体固定效应、时间固定效应,加入MR、RA两个控制变量 # 标准误聚类到企业层面,允许同一企业不同年度的扰动项存在自相关 model = PanelOLS.from_formula( formula='LCR ~ 1 + WFR + MR + RA + EntityEffects + TimeEffects', data=df_panel ) res = model.fit(cov_type='clustered', cluster_entity=True) print(res)
回归结果中WFR的系数就是WFR对LCR的净影响效应,若系数通过显著性检验即可证明二者存在因果关联。
3. 稳健性检验(必做步骤,保证结论可靠性)
- 平行趋势检验:生成处理时点前后的时间虚拟变量,和处理组标识做交互后放入回归,若政策实施前的交互项系数均不显著,即满足DID的平行趋势假设
- 安慰剂检验:随机给企业分配处理状态和处理时点,重复模拟回归1000次以上,若真实回归的WFR系数落在随机模拟系数分布的5%分位外,即可排除结论的偶然性
- 标准误稳健性检验:更换聚类维度,比如同时聚类到企业和年份,或仅聚类到年份,确认WFR系数的显著性没有发生本质变化
- 子样本回归:剔除特殊行业、特殊年份的样本后重新回归,确认结论依然成立
内容的提问来源于stack exchange,提问作者Marzieh Karimi
相关产品推荐
相关产品推荐

