学习:双重差分模型DID&PSM-基于Stata实现

双重差分模型

定义

双重差分法(Difference in Differences): 通过利用观察学习的数据,计算自然实验中“实验组”与“对照组”在干预下增量的差距。
在这里插入图片描述
步骤:

  • 分组:对于一个自然实验,其将全部的样本数据分为两组:一组是受到干预影响,即实验组;另一组是没有受到同一干预影响,即对照组;
  • 目标选定:选定一个需要观测的目标指标,如购买转化率、留存率,一般是希望提升的KPI;
  • 第一次差分:分别对在干预前后进行两次差分(相减)得到两组差值,代表实验组与对照组在干预前后分别的相对关系;
  • 第二次差分:对两组差值进行第二次差分,从而消除实验组与对照组原生的差异,最终得到干预带来的净效应。
    参考【传送门
    在这里插入图片描述
    δ ^ = ( y ˉ T , 1 − y ˉ T , 0 ) − ( y ˉ C , 1 − y ˉ C , 0 ) \hat{\delta}=\left(\bar{y}_{T, 1}-\bar{y}_{T, 0}\right)-\left(\bar{y}_{C, 1}-\bar{y}_{C, 0}\right) δ^=(yˉT,1yˉT,0)(yˉC,1yˉC,0)
    实验组干预前后的均值的差减去对照组干预前后均值的差

理解

1.在一些论文报告中,有一个DID的变量,可以看下面这个例子理解。
在这里插入图片描述
就是个体(时间)与政策虚拟变量的乘积。

stata实现

在这里插入图片描述
gen gd=t*treated
reg fte gd treated t bk kfc roys,r

diff fte, t(treated) p(t) cov(bl kfc roys) robust
在这里插入图片描述
一般情形下:是先做PSM倾向性得分匹配
答:因为在研究某一政策的影响时,可能还包含其他的政策影响因素,PSM的目的是为了去掉其他的干扰。

### PSMDID双重差分法概述 PSMDID(Propensity Score Matching and Difference-in-Differences)是一种结合倾向得分匹配 (PSM) 和双重差分 (DID) 的分析方法。这种方法旨在通过减少样本选择偏差来提高因果效应估计的准确性。 #### 倾向得分匹配 (PSM) 倾向得分是指个体接受处理的概率,通常基于可观测协变量计算得出。通过匹配具有相似倾向得分的处理组和对照组成员,可以有效控制混杂因素的影响[^1]。 ```python from sklearn.linear_model import LogisticRegression import pandas as pd def calculate_propensity_scores(data, treatment_column, covariates): """ 计算倾向得分 参数: data: 数据集 DataFrame treatment_column: 处理变量列名字符串 covariates: 协变量列表 返回: 包含原始数据及新增 'propensity_score' 列的数据框 """ model = LogisticRegression() X = data[covariates] y = data[treatment_column] propensity_model = model.fit(X, y) pscores = propensity_model.predict_proba(X)[:, 1] result_df = data.copy() result_df['propensity_score'] = pscores return result_df ``` #### 双重差分 (DID) 双重差分利用时间维度上的变化以及不同群体之间的差异来进行因果推断。具体来说,就是比较处理前后两个时期内实验组相对于对照组的变化情况[^2]。 ```python def difference_in_differences(df, time_variable, treated_group_indicator, outcome_variable): """ 实现简单的双重差分模型 参数: df: 输入数据表 time_variable: 时间变量名称 treated_group_indicator: 是否属于治疗组指示符 outcome_variable: 结果变量名称 返回: DID估计值 """ pre_treated_mean = df[(df[time_variable]=='pre') & (df[treated_group_indicator]==True)][outcome_variable].mean() post_treated_mean = df[(df[time_variable]=='post') & (df[treated_group_indicator]==True)][outcome_variable].mean() pre_control_mean = df[(df[time_variable]=='pre') & (df[treated_group_indicator]==False)][outcome_variable].mean() post_control_mean = df[(df[time_variable]=='post') & (df[treated_group_indicator]==False)][outcome_variable].mean() did_estimate = ((post_treated_mean - pre_treated_mean) - (post_control_mean - pre_control_mean)) return did_estimate ``` #### 综合应用实例 为了更好地理解如何将这两种技术结合起来,在实际研究中可能会按照如下流程操作: - 收集并整理包含多个时间段观测值的数据; - 使用逻辑回归或其他适当的方法估算每个观察单位被分配到处理条件下的概率即倾向得分; - 对于每一对来自相同时期的处理单元及其最接近的未受干预配对对象之间执行一对一或半径匹配; - 应用标准形式的DiD框架评估政策效果; 这种组合方式不仅能够增强传统DiD设计的有效性,还可以进一步降低由于不可见特征造成的潜在偏误风险[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wency(王斯-CUEB)

我不是要饭的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值