Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:丁雅文 (北京大学)
邮箱:1901111380@pku.edu.cn
编者按:本文部分内容摘译自下文,特此致谢!
Source:Dettmann E, Giebler A, Weyh A. flexpaneldid. A Stata Toolbox for Causal Analysis with Varying Treatment Time and Duration. 2020. -PDF-
目录
双重差分模型 (Difference in Difference, DID) 是目前经济学界估计处理效应的主流方法之一,一般用于评估随机试验或自然实验 (例如,法律法规的调整) 的效果。经典的 DID 方法通常拥有两期 (处理前和处理后) 和两组 (处理组和控制组) 数据,并暗含了固定处理效应 (constant treatment effects) 的假定。读者可参考推文「连享会专题:倍分法DID」 进行学习。
然而在现实中,我们经常发现不同个体接受政策干预的开始时间和持续时间往往是不同的。因此,假定所有受干预个体的处理效应相同并不合理。现有研究主要采用条件倍差法 (conditional DID) 和固定效应形式的倍差法 (fixed effect DID),来解决因不同个体接受干预的开始时间和持续时间不同所导致的估计潜在偏误。本文将介绍一个基于交错采用设计框架 (the staggered adoption design framework) 的灵活条件 DID 方法,来解决上述问题。
目前计量经济学文献主要采用两种方法,来弥补经典 DID 模型固定处理效应假定的缺陷。
在经典 DID 模型两组两期的数据结构下,Angrist 和 Pischke (2009) 指出在满足共同趋势假设的条件下,条件倍差法和固定效应倍差法得到的处理效应应该相同。然而,由于不同个体接受干预的开始时间和持续时间不同,这种等价性很难推广到两组或两期以上的情况。因此,本文提出一种灵活的条件 DID 方法 (the flexible conditional DID) 方法,来更一般化地解决由于不同个体接受干预的开始时间和持续时间不同所导致的异质性处理效应。
在介绍该方法之前,我们先简单介绍一下交错采用设计框架。下图以 2008 年国际金融危机为例,展示了交错干预情况下对应的数据结构:在这个 2004-2014 年的非平衡面板中,接受干预的企业单位
本文介绍的灵活条件 DID 方法对 Heckman 等 (1988) 提出的条件倍差法主要有三点改进:
灵活的条件 DID 与以往条件 DID 所依赖的前提假定有所不同:
灵活的条件 DID 估计方法主要有两步:
第一步:数据预处理
按照所有匹配变量和结果变量的观察日期进行数据重组。具体来讲,这一步主要是为每个处理组单位寻找合适的控制组单位。与某一处理组单位开始接受干预时具有相似样本特征的控制组样本,构成该处理组单位的潜在控制组。例如,一个企业在 2007 年 1 月接受了投资补贴,潜在控制组企业应该在 2007 年 1 月具有与该企业相似的企业特征。在 Stata 中用 flexpaneldid_preprocessing
命令实现这一步。
第二步:基于一种统计距离函数进行匹配并计算处理组平均处理效应 ATT
灵活的条件 DID 匹配所用的统计距离函数结合了连续变量的平均绝对差与分类变量的广义匹配系数。处理组企业
其中,
连续变量的平均绝对差
其中,|·|代表绝对值,
广义匹配系数
其中,
Stata 中的 flexpaneldid
命令不仅可以计算这种统计距离,而且可以在匹配后进行匹配变量的平衡性检验,并进一步计算出我们关心的 ATT。采用半径匹配法计算的个体ATT估计量为:
其中,
本部分我们将介绍 flexpaneldid_preprocessing
和 flexpaneldid
命令的使用。这两个 Stata 命令均发布于 SSC。需要注意的是,在使用这两个命令之前,Stata 必须先行安装好 psmatch2
和 cem
命令。国内用户,可以使用连享会新近发布的 cnssc
命令极速安装。该命令是 Stata 官方命令 ssc
的中文镜像。
ssc install cnssc, replace
cnssc install psmatch2, replace
cnssc install cem, replace
*-安装 flexpaneldid 命令,下载范例数据:
cnssc des flexpaneldid // 命令简介
cnssc install flexpaneldid, replace // 安装
cnssc get flexpaneldid // 下载范例数据
本部分所用样例来自 Wooldridge (2010),我们想研究某一个特定的干预对企业层面专利数量的影响。数据样本和变量定义如下:样例数据集是 1972-1981 年的企业面板数据库,由企业代码 cusip 和 年份 year 确定某年唯一的企业。如果在观察期前 5 年内某企业接受过干预,则干预变量 treatment=1
,否则为 0。接受干预的企业干预开始和持续时间可能有所不同。
首先,运行 flexpaneldid_preprocessing
命令,为处理组企业寻找潜在控制组。
. use flexpaneldid_example_data.dta, clear
. flexpaneldid_preprocessing, id(cusip) treatment(treatment) ///
time(year) matchvars(employ stckpr rnd sales return ///
pats_cat rndstck_cat rndeflt_cat) ///匹配变量
matchtimerel(-1) ///相对于开始干预时间的匹配时间设定
matchvarsexact(sic_cat) ///精确匹配的变量
prepdataset("preprocessed_data.dta") replace //储存预处理数据
注意:matchtimerel(int)
规定了开始匹配的时间,例如 matchtimerel(-1)
就表示从处理组企业接受干预的前一期开始匹配。prepdataset(string) replace
用于储存包含预处理结果的数据集。考虑到使用 flexpaneldid
命令时可能会重复使用预处理集,我们建议使用该选项。
flexpaneldid_preprocessing
命令运行结果如下:
************************************************************************
********************* flexpaneldid - preprocessing *********************
************************************************************************
------------------------------------------------------------------------
id: cusip
treatment: treatment
time: year
matchvars: employ stckpr rnd sales return
pats_cat rndstck_cat rndeflt_cat
matchvarsexact: sic_cat
match_time: -1
prepdataset: preprocessed_data.dta
------------------------------------------------------------------------
************************************************************************
************************* Preprocessing ********************************
************************************************************************
Preprocessing of 61 treated:
.................................................. 50
........... 61
************************************************************************
************************* Preprocessing - Summary **********************
************************************************************************
Number of treated: 61
Number of treated dropped during preprocessing: 0
Number of treated after preprocessing: 61
Mean size of selection groups: 45.7377
运行结果表明,共有 61 个处理组企业找到了潜在控制组,每个处理组企业平均有 45.7 家潜在控制组企业。
其次,运行 flexpaneldid
命令进行样本匹配,具体代码如下:
. use example_data.dta, clear
. flexpaneldid patents, id(cusip) treatment(treatment) ///
time(year) statmatching(con(employ stckpr rnd sales) ///
cat(pats_cat rndstck_cat)) ///计算统计距离的匹配变量
///con()和cat()中分别为连续变量和类别变量
outcometimerelstart(3) ///干预持续期为3年
outcomedev(-2 -1) ///表示干预开始的前两期到前一期的结果变量变化
test ///用pstest命令进行匹配变量平衡性检验
prepdataset(’preprocessed_data.dta’) //储存预处理数据
flexpaneldid
运行结果首先汇报了该命令所添加的一些约束项,然后汇报了匹配的结果。61 个处理组企业中有 47 个找到了可匹配的控制组企业,同时,用于匹配的控制组企业仅为 39 个。
********************************************************
*********************** flexpaneldid *******************
********************************************************
--------------------------------------------------------
outcome: patents
id: cusip
treatment: treatment
time: year
outcome_time_start: 3
outcome_time_end: .
outcome_dev: -2 -1
cemmatching:
statmatcing: , con(employ stckpr rnd sales) cat(pats_cat rndstck_cat)
test: test
outcomemissing:
didmodel:
--------------------------------------------------------
********************************************************
******************** Matching: STAT ********************
********************************************************
********************************************************
********* flexpaneldid - Matching Summary **************
********************************************************
| NT T
---------------+------------------------------
All | 165 61
Matched sample | 39 47
在 flexpaneldid
命令中采用 test
选项时,Stata 会汇报 pstest
命令的平衡性检验结果。由下图输出结果可知,所有匹配变量在均值上均无显著性差异,而 stckpr、sales 和 outcome_dev 三个变量的方差在 10% 的显著性水平上具有显著性差异。
********************************************************
******************** ps-test ***************************
********************************************************
---------------------------------------------------------------
| Mean | t-test | V(T)/
Variable | Treated Control %bias | t p>|t| | V(C)
------------+--------------------------+---------------+-------
employ | 26.197 20.337 8.6 | 0.42 0.677 | 1.13
stckpr | 25.779 18.28 23.1 | 1.12 0.266 | 6.36*
rnd | 38.116 31.329 4.6 | 0.23 0.822 | 1.30
sales | 1201 1054.5 3.9 | 0.19 0.849 | 0.56*
pats_cat | 1.9362 1.8936 3.2 | 0.15 0.879 | 0.98
rndstck_cat | 3.4255 3.2979 5.2 | 0.25 0.802 | 1.05
outcome_dev | -1.617 -1.5957 -0.2 | -0.01 0.991 | 1.81*
---------------------------------------------------------------
* if variance ratio outside [0.56; 1.80]
----------------------------------------------------------------------
Ps R2 LR chi2 p>chi2 MeanBias MedBias B R %Var
----------------------------------------------------------------------
0.037 4.77 0.688 7.0 4.6 44.2* 2.27* 43
----------------------------------------------------------------------
* if B>25%, R outside [0.5; 2]
由于样例基于统计距离进行匹配,flexpaneldid
命令会额外汇报匹配变量特定规模的检验统计量 (scale-specific test statistics)。其中,Kolmogorov-Smirnov test 汇报所有连续变量的平衡性检验结果,chi-square test 汇报所有分类变量的平衡性检验结果。由于推文篇幅限制,我们只在这里贴出 employ (连续变量) 和 pats_cat (分类变量) 的平衡性检验结果。
由下图输出结果可知,employ 的调整过的
********************************************************
************************ KS-Test ***********************
********************************************************
ksmirnov employ , by(treated)
Two-sample Kolmogorov-Smirnov test for equality of distribution functions
Smaller group D P-value Corrected
----------------------------------------------
0: 0.1915 0.178
1: -0.0638 0.826
Combined K-S: 0.1915 0.355 0.280
Note: Ties exist in combined dataset;
there are 88 unique values out of 94 observations.
********************************************************
********************** Chi2-Test ***********************
********************************************************
tabulate pats_cat treated, chi2
pats_cat |
(at |
treatment | treated
time -1) | 0 1 | Total
-----------+----------------------+----------
0 | 8 8 | 16
1 | 14 12 | 26
2 | 7 9 | 16
3 | 11 11 | 22
4 | 7 7 | 14
-----------+----------------------+----------
Total | 47 47 | 94
Pearson chi2(4) = 0.4038 Pr = 0.982
flexpaneldid
命令还可附带作出连续匹配变量的 Q-Q 图,以直观反应样本匹配质量。由下图可知,所有用于匹配的连续变量在匹配之后均与 45° 线有较小的偏离,且偏离大多发生在分布的尾部,这说明样例连续变量匹配较好。
最后,flexpaneldid
命令汇报了 ATT 估计采用的距离测度方法、匹配方法、处理组和控制组样本数量等信息,以及我们关心的 ATT 估计量。估计的 ATT 系数为 -2.20,
********************************************************
************ Conditional Diff-in-Diff ******************
********************************************************
Average treatment effect for the treated
Estimator : Nearest neighbor No. of treated obs = 47
Distance metric : Statistical DF No. of unique controls = 39
Mean no. of matches = 1
-----------------------------------------------------------------------
Outcome | mean Diff | DiD* |AI robust | z P>|z|
| treated | controls | | S.E. | |
---------+----------+----------+---------+----------+---------+--------
patents | -10.0213 | -7.8176 | -2.2037 | 6.1685 | -0.3572 | 0.7225
-----------------------------------------------------------------------
* Consistent bias-corrected estimator as proposed in Abadie & Imbens (2006,2011).
Note:产生如下推文列表的 Stata 命令为:
lianxh did
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh