本例中,样例数据来自 Callaway 和 Sant'Anna (2020),研究问题是各州提高最低工资对县级青少年就业率影响。
样例数据集包含 2003 年至 2007 年 500 个县级青少年就业率的数据,其中一些州在 2004 年首次接受治疗,也有一些在 2006 年或 2007 年接受治疗。
主要变量 lemplemp 是县级青少年就业率的对数值,first.treatfirst.treat 是某个州首次提高最低工资的时间,可能是 2004 年、2006 年或 2007 年;yearyear 是年份; countryrealcountryreal 是每个县的 ID。
首先进行包的安装和样例数据的调入。
writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron") #创建路径配置文件.Renviron
Sys.which("make") #测试配置路径是否成功
options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))) #设置镜像
install.packages("did") #从CRAN上下载did包
library(did) #调用did包
data(mpdta) #调入样例数据
一、平均处理效应
did
包使用 att_ gt
命令估计处理组平均处理效应 (ATT)。
out <- att_gt(yname = "lemp",
gname = "first.treat",
idname = "countyreal",
tname = "year",
xformla = ~1,
data = mpdta,
est_method = "reg"
)
summary(out)
#> Call:
#> att_gt(yname = "lemp", tname = "year", idname = "countyreal",
#> gname = "first.treat", xformla = ~1, data = mpdta, est_method = "reg")
#>
#> Group-Time Average Treatment Effects:
#> Group Time ATT(g,t) Std. Error [95% Simult. Conf. Band]
#> 2004 2004 -0.0105 0.0259 -0.0796 0.0586
#> 2004 2005 -0.0704 0.0312 -0.1535 0.0127
#> 2004 2006 -0.1373 0.0375 -0.2373 -0.0372 *
#> 2004 2007 -0.1008 0.0352 -0.1947 -0.0069 *
#> 2006 2004 0.0065 0.0229 -0.0547 0.0677
#> 2006 2005 -0.0028 0.0203 -0.0568 0.0513
#> 2006 2006 -0.0046 0.0179 -0.0522 0.0430
#> 2006 2007 -0.0412 0.0210 -0.0972 0.0148
#> 2007 2004 0.0305 0.0159 -0.0118 0.0728
#> 2007 2005 -0.0027 0.0164 -0.0465 0.0410
#> 2007 2006 -0.0311 0.0183 -0.0797 0.0176
#> 2007 2007 -0.0261 0.0179 -0.0737 0.0215
#> ---
#> Signif. codes: `*' confidence band does not cover 0
#>
#> P-value for pre-test of parallel trends assumption: 0.16812
#> Control Group: Never Treated, Anticipation Periods: 0
#> Estimation Method: Outcome Regression
可视化结果如下:
ggdid(out, ylim = c(-.25,.1))
上图中的红色圆点是政策冲击前的平均治疗效果 (采用了 95% 的置信区间),可以看出红色圆点在 95% 的置信水平下趋近于 0,符合平行趋势假设。蓝色圆点表示接受政策冲击后的平均治疗效果,在本案例中表示提高最低工资水平对县级青少年就业率的影响。
二、时间动态处理效应
did
包使用 aggte
估计动态处理效应。
es <- aggte(out, type = "dynamic")
summary(es)
#> Call:
#> aggte(MP = out, type = "dynamic")
#>
#> Overall ATT:
#> ATT Std. Error [95% Conf. Int.]
#> -0.0772 0.0205 -0.1175 -0.037 *
#>
#> Dynamic Effects:
#> Event time Estimate Std. Error [95% Simult. Conf. Band]
#> -3 0.0305 0.0153 -0.0102 0.0712
#> -2 -0.0006 0.0132 -0.0356 0.0345
#> -1 -0.0245 0.0145 -0.0630 0.0141
#> 0 -0.0199 0.0120 -0.0518 0.0120
#> 1 -0.0510 0.0175 -0.0977 -0.0042 *
#> 2 -0.1373 0.0396 -0.2426 -0.0319 *
#> 3 -0.1008 0.0346 -0.1929 -0.0087 *
#> ---
#> Signif. codes: `*' confidence band does not cover 0
#>
#> Control Group: Never Treated, Anticipation Periods: 0
#> Estimation Method: Outcome Regression
上面 summary
的输出结果中,event time
表示个体第一次接受政策冲击时的处理效应,比如 event time=0
表示个体刚好处于政策冲击期的处理效应,event time=-1
表示个体在接受政策冲击前一年的处理效应。
上图与多期 DID 平均处理效应的图相似,但这里将政策冲击看作一个事件,横坐标轴表示事件发生时间。通过对每段时期的处理效应进行估计,上图表示个体参与治疗的总体处理效应。可以看到随着提高最低工资的政策实行越久,青少年失业率降低幅度先增大再减少。
三、总体平均处理效应 (ATE)
group_effects <- aggte(out, type = "group")
summary(group_effects)
#> Call:
#> aggte(MP = out, type = "group")
#>
#> Overall ATT:
#> ATT Std. Error [95% Conf. Int.]
#> -0.031 0.0125 -0.0554 -0.0066 *
#>
#> Group Effects:
#> Group Estimate Std. Error [95% Simult. Conf. Band]
#> 2004 -0.0797 0.0274 -0.1388 -0.0207 *
#> 2006 -0.0229 0.0165 -0.0585 0.0127
#> 2007 -0.0261 0.0176 -0.0641 0.0120
#> ---
#> Signif. codes: `*' confidence band does not cover 0
#>
#> Control Group: Never Treated, Anticipation Periods: 0
#> Estimation Method: Outcome Regression
从总体平均处理效应 (ATE) 的结果来看,提高最低工资会使青少年就业率下降 3.1%,在 10% 的置信水平下显著。