Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:彭晴 (暨南大学)
邮箱:natasha_pong@163.com
目录
双重倍差法 (Difference-in-Differences,DID),是目前实证分析中用于识别因果关系的流行方法之一。标准的 DID 模型将样本分为两组:实验组和对照组;将时间分为两个阶段:政策发生前和政策发生后。所有的实验组样本都在同一时间点受到政策冲击。
随着 DID 方法的拓展,许多实证研究将其拓展为多期 DID,即实验组并非在同一时点遭受政策冲击。但是,自 2019 年来,不少学者纷纷指出这种多期 DID 有可能会产生有偏估计 (Athey and Imbens,2022;Baker et al.,2022;Goodman-Bacon,2021)。
其主要原因在于,多期 DID 估计的本质是多个不同处理效应的加权平均,权重可能存在为负的情形。在权重为负的情下,不同处理效应加权平均后得到的平均处理效应,可能会与真实的平均处理效应方向相反。Baker et al. (2021) 通过数据模拟发现,多期 DID 估计出来有偏误的处理效应甚至会与真实处理效应的符号相反。
为此,Callaway and Sant'Anna (2021) 提出了一种用于识别异质性多期 DID 的新方法,该新方法适用于以下三种情形:
下面本文将详细介绍 Callaway and Sant'Anna (2021) 提出的多期 DID 估计量,以及对应的 Stata 实操和 R 语言实操。
假设时间用
Callaway and Sant'Anna (2021) 提出的多期 DID 估计量必须满足以下几个假设:
其中,
值得注意的是,假设 3 和 4 是两个不同的有条件平行趋势假设。假设 3 意味着,在控制协变量
假设一个双向固定效应模型,具体形式如下:
其中,
首先,Callaway and Sant’Anna (2021) 按照首次被处理的时间将处理组分为不同组别 (用字母
需要注意的是,作者提到可以采用三种方法进行估计:回归 (OR)、逆概率加权法 (IPW) 以及双重稳健法 (DR) 。此处只介绍了逆概率加权法的估计量,其他两种方法详见 Callaway and Sant’Anna (2021) 的论文。
其次,Callaway and Sant’Anna (2021) 提供了不同的加总方法,用于计算平均处理效应
选择不同的权重
csdid
命令安装:
ssc install csdid, replace
csdid
命令语法:
csdid depvar [indepvars] [if] [in] [weight], [ivar(varname)] time(varname) gvar(varname) [options]
其中,
depvar
:指定回归的被解释变量;indepvars
:指定回归的解释变量;ivar
:指定面板回归中的个体标识,如国家 ID、企业 ID 等;time
:指定面板回归中的时间标识;gvar
:分组标识,按首次被处理的时间分组;notyet
: 定义 “从未被处理” 的样本 (Nevered-treated) 和 “还未被处理” 的样本 (Not-yet-treated) 为对照组。当不添加 notyet
时 (默认情况),只选择 “从未被处理” 的样本 (Nevered-treated) 作为对照组。此外,添加 method(method)
选项,用于选择估计方法。可选择的估计方法包括:drimp
为基于逆概率加权最小二乘法得到的双重稳健 DID 估计量,为默认估计方法;dripw
为基于逆概率的普通最小二乘法得到的双重稳健 DID 估计量;reg
为普通最小二乘法;stdipw
为标准化的逆概率加权法;ipw
为逆概率加权法。
添加 agg(aggtype)
选项,用于选择计算平均处理效应的加权方法。可选择的加权方法包括:simple
对应上述的 Simple ATT;group
对应上述的 Group ATT;calendar
对应上述的 Calendar Time ATT;event
对应上述的 Dynamic ATT。
关于标准误,默认情形是计算稳健标准误。添加 wboot
选项,可用 WildBootstrap 方法计算标准误;添加 cluster
选项,可计算聚类标准误。
本文选择作者提供的样本数据 mpdta.dta
来展示 csdid
命令的基本操作。
mpdta.dta
数据集包括 500 个 country,时间范围是 2004年—2007年,一共有 2500 个观测值。其包括如下 6 个变量:year 为时间标识,countryreal 为个体标识,lpop 为协变量,lemp 为被解释变量,first_treat 为首次被处理的时间。
当 first_treat 取值为 0 时表示,该样本为 “从未被处理” 的样本 (Nevered-treated)。treat 为是否为处理组的标识,取值为 1 时表示该样本为处理组。
. use "https://friosavila.github.io/playingwithstata/drdid/mpdta.dta", clear
. des
Contains data from https://friosavila.github.io/playingwithstata/drdid/mpdta.dta
Observations: 2,500 Written by R.
Variables: 6 17 May 2021 11:45
---------------------------------------------------------------------------------
Variable Storage Display Value
name type format label Variable label
---------------------------------------------------------------------------------
year int %9.0g year
countyreal long %9.0g countyreal
lpop double %9.0g lpop
lemp double %9.0g lemp
first_treat int %9.0g first.treat
treat byte %9.0g treat
---------------------------------------------------------------------------------
首先,我们采用 dripw
方法估计出每个组别
. csdid lemp lpop, ivar(countyreal) time(year) gvar(first_treat) method(dripw)
Difference-in-difference with Multiple Time Periods
Number of obs = 2,500
Outcome model : least squares
Treatment model: inverse probability
------------------------------------------------------------------------------
| Coefficient Std. err. z P>|z| [95% conf. interval]
-------------+----------------------------------------------------------------
g2004 |
t_2003_2004 | -0.015 0.022 -0.66 0.511 -0.058 0.029
t_2003_2005 | -0.076 0.029 -2.67 0.008 -0.133 -0.020
t_2003_2006 | -0.140 0.035 -3.97 0.000 -0.210 -0.071
t_2003_2007 | -0.107 0.033 -3.25 0.001 -0.171 -0.042
-------------+----------------------------------------------------------------
g2006 |
t_2003_2004 | -0.000 0.022 -0.02 0.983 -0.044 0.043
t_2004_2005 | -0.006 0.018 -0.34 0.737 -0.042 0.030
t_2005_2006 | 0.001 0.019 0.05 0.961 -0.037 0.039
t_2005_2007 | -0.041 0.020 -2.09 0.036 -0.080 -0.003
-------------+----------------------------------------------------------------
g2007 |
t_2003_2004 | 0.027 0.014 1.90 0.057 -0.001 0.054
t_2004_2005 | -0.005 0.016 -0.29 0.771 -0.035 0.026
t_2005_2006 | -0.028 0.018 -1.56 0.118 -0.064 0.007
t_2006_2007 | -0.029 0.016 -1.77 0.076 -0.061 0.003
------------------------------------------------------------------------------
Control: Never Treated
See Callaway and Sant'Anna (2021) for details
从估计结果可知,组别
进一步地,我们还可以选择不同的加总方式,计算平均处理效应。此处,我们以计算动态平均处理效应为例进行展示。在上述命令的基础上,添加选项 agg(event)
可计算动态平均处理效应。
. csdid lemp lpop, ivar(countyreal) time(year) gvar(first_treat) method(dripw) agg(event)
Difference-in-difference with Multiple Time Periods
Number of obs = 2,500
Outcome model : least squares
Treatment model: inverse probability
------------------------------------------------------------------------------
| Coefficient Std. err. z P>|z| [95% conf. interval]
-------------+----------------------------------------------------------------
T-3 | 0.027 0.014 1.90 0.057 -0.001 0.054
T-2 | -0.004 0.013 -0.28 0.780 -0.029 0.022
T-1 | -0.023 0.014 -1.60 0.109 -0.052 0.005
T+0 | -0.021 0.011 -1.83 0.067 -0.044 0.001
T+1 | -0.053 0.016 -3.24 0.001 -0.085 -0.021
T+2 | -0.140 0.035 -3.97 0.000 -0.210 -0.071
T+3 | -0.107 0.033 -3.25 0.001 -0.171 -0.042
------------------------------------------------------------------------------
Control: Never Treated
See Callaway and Sant'Anna (2021) for details
首先,安装作者提供的 did-R-Package。
install.packages("did")
安装好之后,可调用 did
包。
library("did")
调用 did
包之后,导入作者提供的样本数据 mpdta.rda
。
load("mpdta.rda")
接着,att_gt
命令可计算每个组别 yname
为被解释变量;tname
为时间标识;idname
为个体标识;gname
分组标识,按首次被处理的时间分组;xformla
为协变量;data
为所使用的数据集。
除此之外,我们还可以增加一些 option。例如,可增加 control_group = "notyettreated"
选项,表示定义 “从未被处理” 的样本 (Nevered-treated) 和 “还未被处理” 的样本 (Not-yet-treated) 为对照组。与 Stata 一致,默认情形为只选择 “从未被处理” 的样本 (Nevered-treated) 为对照组。
下面为使用 R 包计算出来的结果,与 Stata 计算出来的结果一致。
out <- att_gt(yname="lemp",
tname="year",
idname="countyreal",
gname="first.treat",
xformla=~lpop,
data=mpdta)
Group-Time Average Treatment Effects:
Group Time ATT(g,t) Std. Error [95% Simult. Conf. Band]
2004 2004 -0.0145 0.0229 -0.0760 0.0470
2004 2005 -0.0764 0.0308 -0.1590 0.0061
2004 2006 -0.1404 0.0396 -0.2467 -0.0342 *
2004 2007 -0.1069 0.0331 -0.1958 -0.0180 *
2006 2004 -0.0005 0.0223 -0.0603 0.0594
2006 2005 -0.0062 0.0194 -0.0582 0.0458
2006 2006 0.0010 0.0204 -0.0538 0.0557
2006 2007 -0.0413 0.0198 -0.0945 0.0119
2007 2004 0.0267 0.0135 -0.0094 0.0628
2007 2005 -0.0046 0.0169 -0.0498 0.0407
2007 2006 -0.0284 0.0181 -0.0769 0.0200
2007 2007 -0.0288 0.0150 -0.0689 0.0113
---
Signif. codes: `*' confidence band does not cover 0
P-value for pre-test of parallel trends assumption: 0.23267
Control Group: Never Treated, Anticipation Periods: 0
Estimation Method: Doubly Robust
最后,我们使用 aggte
命令计算动态平均处理效应,其结果也与 Stata 计算的一致。其中,out
为上面 att_gt
命令运行的结果,type
为选择的加总方式。
aggte(out, type="dynamic")
Overall summary of ATT's based on event-study/dynamic aggregation:
ATT Std. Error [ 95% Conf. Int.]
-0.0804 0.0206 -0.1207 -0.04 *
Dynamic Effects:
Event time Estimate Std. Error [95% Simult. Conf. Band]
-3 0.0267 0.0146 -0.0109 0.0644
-2 -0.0036 0.0129 -0.0369 0.0297
-1 -0.0232 0.0146 -0.0611 0.0146
0 -0.0211 0.0113 -0.0502 0.0081
1 -0.0530 0.0170 -0.0969 -0.0091 *
2 -0.1404 0.0401 -0.2440 -0.0369 *
3 -0.1069 0.0345 -0.1960 -0.0178 *
---
Signif. codes: `*' confidence band does not cover 0
Control Group: Never Treated, Anticipation Periods: 0
Estimation Method: Doubly Robust
需要注意的是,在 R 语言中,可选择的加总方式也分为四种 (与上述介绍的一致)。但与 Stata 命令不同的是,计算动态平均处理效应的 option 在 R 中为 dynamic
(在 Stata 中为 event
)。其余三种加总方式,在 Stata 和 R 语言中的表示方式一致,分别为 simple
、group
和 calendar
。
Note:产生如下推文列表的 Stata 命令为:
lianxh did, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh