Stata:平行趋势不满足?主成分DID来帮你!-pcdid
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
作者:郑宇 (南京大学)
邮箱:cn_vip@outlook.com
目录
1. 背景介绍
2. pcdid 命令
2.1 命令介绍
2.2 基本用法
2.3 返回值
2.4 兼容性问题
3. Stata 演示
4. 结束语
5. 参考资料
6. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 背景介绍
双重差分 (Difference-in-Differences,DID) 方法是实证经济学和其他学科政策评估的主力军。其关键假设是控制组和处理组之间的趋势是平行的,即平行 (或共同) 趋势假设 (Parallel Trend Assumption,PTA)。在两组表现出潜在的不平行或随机趋势时,经典的 DID 方法的估计结果往往并不可靠。本推文将要介绍的主成分双重差分 (Principal Components Difference-in-Differences Estimators,PCDID) 方法在具有非平行或非平稳趋势的场景中的估计结果将更加可信。
与合成控制、无混淆和矩阵完成估计等现有方法不同,PCDID 使用因子增强回归来估计与处理效果相关的特定参数。具体而言,PCDID 执行以下操作:
对来自控制组的数据使用数据驱动方法 (主成分分析) 来形成因子代理,以捕获由非平行趋势引起的内生性; 利用处理组的所有 (干预前和干预后) 数据,使用因子代理作为额外的协变量运行因子增强回归。
该方法类似于控制函数方法,因为因子代理与控制函数起着相同的作用。通过使用整个样本周期进行估计,PCDID在减少有限样本偏差和提高渐近效率方面具有优势。下面,我们将主要介绍实现 PCDID 估计方法的 Stata 新命令 pcdid
的用法。
2. pcdid 命令
2.1 命令介绍
. *命令安装
. ssc install pcdid // 安装程序文件
. net get pcdid.pkg // 下载作者提供的数据文件到当前工作路径
如果网速太慢,可以使用 cnssc
命令下载:
. ssc install cnssc, replace
. cnssc install pcdid
. cnssc get pcdid.pkg
*命令语法
pcdid depvar treatvar [didvars] [indepvars] [if] [,options]
其中,主要变量为:
depvar
:被解释变量;treatvar
:控制/处理组指示变量 (=0, 1);[didvars]
:处理变量 (离散或连续) ;[indepvars]
:其他协变量。
主要选项为:
alpha
:执行平行趋势阿尔法检验;fproxy(#)
:设置使用的因子数,若不设置,默认由递归因子数测试自动确定;stationary
:高级选项,假设所有因子在递归因子数测试中都不变;kmax(#)
:高级选项,设置递归因子数测试中的最大因子数,默认为10;treatlist(string)
:将处理组限制为字符串表达式中指定的;nwlag(#)
:在计算 NW 标准误时设置自相关的最大滞后阶数,默认为int(T^0.25)
pdall
:计算预测控制组结果所需的系数。若未指定此选项,则之后的 pdd 命令会将所有预测的控制组结果设置为零。
2.2 基本用法
下面用一个包含如下变量的长面板数据来介绍下此命令用法:
id:个体变量; time:时间变量; y:被解释变量; treated:1 为处理组,0 为对照 (未处理) 组; treated_post:对于政策干预后处理组的所有观测值为 1,反之为 0; x1 和 X2:其他协变量。
*首先,在使用 pcdid 之前须将数据声明为面板数据
xtset id time
*自动确定因子数量的 PCDID 模型
pcdid y treated treated_post x1 x2
*生成上述 pcdid 命令预测的 yhat
pdd yhat
*生成包含反事实结果的 yhat0
replace treated_post=0
pdd yhat0
*例 1:使用 3 个因子代理执行 pcdid 估计并执行平行趋势 alpha 检验
pcdid y treated treated_post x1 x2, alpha fp(3)
*例 2:假设政策干预后至少 3 期才收效,设 _post2=1,否则=0
pcdid y treated treated_post treated_post2 x1 x2
*例 3:假设 id=1 是一个处理组,以下命令使用 NW 滞后 3 阶对该处理组进行 pcdid 基本估计
pcdid y treated treated_post x1 x2, tr(id==1) nwlag(3)
*例 4:为所有控制组和处理组生成预测结果和残差
pcdid y treated treated_post x1 x2, pdall
pdd yhat
gen resid = y - yhat
replace treated_post = 0 //生成假设没有接受处理的反事实结果
pdd yhat0
replace treated_post = 0 //生成假设没有接受处理且 x1=1 的反事实结果
replace x1 = 1
pdd yhat01
line y yhat yhat0 yhat01 time if id==1 //绘制 id==1 的结果
2.3 返回值
pcdid
将因子代理保存在名为 fproxy.dta 的单独数据文件中,须确保与其他数据集和变量没有命名冲突。pcdid
在 e()
中存储以下内容:
Scalars
e(Ne) number of treated units
e(Nc) number of control units
e(T) number of time periods
e(nobs) number of observations
e(factnum) number of factors used
e(factnum0) number of I(0) factors determined by the recursive procedure
e(factnum1) number of I(1) factors determined by the recursive procedure
e(alphastat) alpha statistic
e(alphastatse) alpha statistic standard error
e(alphastatz) alpha statistic z-score
e(alphastatp) alpha statistic p-value
e(kmax) maximum number of factors set by user
e(nwlag) maximum lag order for Newey-West standard error
e(treatlistnum) =0 if e(treatlist) is empty, =1 otherwise
Macros
e(cmd) "pcdid"
e(id) id variable in xtset
e(time) time variable in xtset
e(depvar) dependent variable
e(treatvar) control/treated unit indicator variable
e(indeps) treatment variable(s) and other covariates
e(treatlist) string expression specified by the treatlist option
Matrices
e(b) coefficient
e(V) variance
e(mata) unit-specific coefficients for the alpha test
e(matb) unit-specific coefficients (treated units) for the pcdid estimator
e(matc) unit-specific coefficients (control units; for predictions only)
e(bmgc) number of treated units used in computing each MG coefficient
2.4 兼容性问题
这是该命令的 1.0 版本 (2021 年 2 月 9 日); 推荐在 Stata14.0 或更高版本的 Stata 上运行,尽管用户可以修改 ado 文件中的版本行,使其可以在早期版本下运行; 在使用 pcdid
前,必须用xtset
命令使数据被 Stata 识别为面板数据;可以在「作者主页」上找到最新版本的材料、论文和附加说明。
3. Stata 演示
由于 pcdid
命令的帮助文件中并未给出案例,这里我们使用网上的公开数据进行演示。
. webuse parallelt, clear
. *保留三组中的一组数据,并定义面板结构
. keep id2 t2 treated2 y2 z1 z2
. xtset id2 t2
. *由于此数据不包含 treated,因此手动生成
. bys id2: egen temp=sum(treated2)
. ren treated2 treated_post
. g treated=1 if temp!=0
. replace treated=0 if treated==.
. *下面用此数据集演示上述 2.2 节中的例 4
. pcdid y2 treated treated_post z1 z2, pdall
PCDID: Principal Components Number of obs = 10000
Diff-in-Diff Regression Number of groups = 1000
(by CK, *PCDID Approach*) (Treated = 520)
(Control = 480)
Obs per group = 10
Method: Mean-Group (PCDID-MG) Number of factors used = 2
----------------------------------------------------------------------------
y2 | Coefficient Std. err. z P>|z| [95% conf. interval]
-------------+--------------------------------------------------------------
treated_post | 0.413 0.019 21.92 0.000 0.376 0.450
z1 | 0.846 0.018 47.48 0.000 0.811 0.880
z2 | -0.661 0.017 -38.47 0.000 -0.694 -0.627
fproxy1 | -2.346 2.059 -1.14 0.254 -6.382 1.689
fproxy2 | -1.153 1.260 -0.92 0.360 -3.623 1.317
_cons | 7.874 0.016 490.75 0.000 7.843 7.905
---------------------------------------------------------------------------
# of treated groups in computing the MG coefficient on treated_post = 520
Number of factors determined by a recursive procedure:
I(0) factors = 1
I(1) factors = 1
Maximum factors set by user = 10
. pdd yhat
. g resid = y2-yhat
. replace treated_post = 0
. pdd yhat0
. replace treated_post = 0
. replace z1 = 1
. pdd yhat01
. line y2 yhat yhat0 yhat01 t2 if id==1
4. 结束语
平行 (或共同) 趋势假设是双重差分法应用的重要前提。而在处理组与对照组表现出潜在的非平行和随机趋势时,经典的 DID 方法的估计结果往往并不可靠。而我们本次介绍的 pcdid
在偏差和效率方面具有优势,正是用来解决这一问题。
5. 参考资料
Chan M K, Kwok S S. The PCDID approach: difference-in-differences when trends are potentially unparallel and stochastic[J]. Journal of Business & Economic Statistics, 2021: 1-18. -PDF-
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh did, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:倍分法DID 倍分法:交错DID与Stata操作 Stata倍分法新趋势:did2s-两阶段双重差分模型 Stata倍分法:全国一刀切的DID Stata-DID:不同处理时点不同持久期的倍分法(flexpaneldid) DID陷阱解析-L111 DIDM:多期多个体倍分法-did_multiplegt 面板PSM+DID如何做匹配? 倍分法:DID是否需要随机分组? DID:仅有几个实验组样本的倍分法 (双重差分) 多期DID:平行趋势检验图示 Stata:多期倍分法 (DID) 详解及其图示 倍分法DID详解 (二):多时点 DID (渐进DID) 倍分法DID详解 (一):传统 DID 倍分法DID详解 (三):多时点 DID (渐进DID) 的进一步分析 专题:内生性-因果推断 Abadie新作:简明IV,DID,RDD教程和综述
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。