查看原文
其他

DID大法:如何用Stata做平行趋势检验

江河JH 功夫计量经济学 2022-03-15


点击蓝字关注我们








昨天给大家推送了DID平行趋势检验的知识,但是光会理论知识不会软件操作也是不行的,计量经济学是一门要与软件结合起来学习的课程,所以,今天就跟大家分享一下在Stata中做DID的平行趋势检验的操作。本来想从中国工业经济上找一篇DID的论文,用他的代码和数据给大家实现一下,但是,中国工业经济上的数据和代码质量良莠不齐,之前提到的那篇智慧城市试点的论文,作者提供的数据和代码就完全对不上,真的不想再说什么了。





被逼无奈,就只能使用借用普林斯顿大学构造出来的DID数据来介绍一下平行趋势检验的基本思路。数据中,A、B、C、D、E、F和G是非常相似的7个地区,E、F和G三地在1994年实行了一项新政策,而A、B、C和D则没有实行。如果想要评估这项政策的实施效果,那么使用DID是再合适不过了。不过,想要使用DID就要满足平行趋势假设,因为只有当处理组和控制组在政策前足够相似才能够保证DID估计出的是政策的因果效应。

第一种方法就是绘制处理组和控制组的时间趋势图。从图中可以看出,在政策时点之前,处理组和控制组还是具有那么一丢丢的相似性,y都保持着相似的增长趋势,当然这种趋势也只能说有一点相似不能说相同,可能是构造出来的数据的效果不是特别好。总之,这种方法仅凭肉眼观察较为粗糙,想要得到更为准确、科学的结论还是应该使用事件研究法。

egen mean_y=mean(y), by(year treat)graph twoway (connect mean_y year if treat==1,sort) (connect mean_y year if treat==0,sort lpattern(dash)), ///xline(1994,lpattern(dash) lcolor(gray)) ///ytitle("y") xtitle("年度") ///ylabel(,labsize(*0.75)) xlabel(,labsize(*0.75)) ///legend(label(1 "处理组") label( 2 "控制组")) ///图例xlabel(1990 (1) 1999) graphregion(color(white)) //白底

第二种方法就是事件研究法,我们首先生成年份虚拟变量与处理组虚拟变量的交互项,将这些交互项作为解释变量进行回归。交互项的系数反映的就是特定年份处理组和控制组之间的差异,我们特别希望看到的就是政策时点前的虚拟变量与处理组虚拟变量的交互项的系数不显著。不过,在这里要特别注意是我们需要选择一期作为参照组,否则会有完全共线性问题(一般都是drop掉-1期)。

gen policy = year - 1994tab policyreplace policy = -3 if policy < -3replace policy = 3 if policy > 3//首先生成年份虚拟变量与实验组虚拟变量的交互项forvalues i = 3(-1)1{ gen pre_`i' = (policy == -`i' & treat == 1) }
gen current = (policy == 0 & treat == 1)
forvalues j = 1(1)3{ gen post_`j' = (policy == `j' & treat == 1)}
drop pre_1 //将政策前第一期作为基准组,很重要!!!
xtreg y pre_* current post_* i.year, fe r //将这些交互项作为解释变量进行回归

接下来就是进一步通过直观图形方式,对政策在不同年份之间的动态经济效应进行呈现。从图中可以看出,交互项的系数在政策前并不显著异于0(95%的置信区间包含了0值),这说明政策时点前处理组和控制组之间不存在显著差异,即满足平行趋势的假设;而政策后第一年的系数显著为负,但很快又回到0附近,说明政策在推行后第一年产生了一个显著的负效应,但随后又很快消失了。

coefplot, baselevels ///keep(pre_* current post_*) ///vertical ///转置图形yline(0,lcolor(edkblue*0.8)) ///加入y=0这条虚线 xline(3, lwidth(vthin) lpattern(dash) lcolor(teal)) ///ylabel(,labsize(*0.75)) xlabel(,labsize(*0.75)) ///ytitle("政策动态效应", size(small)) ///加入Y轴标题,大小smallxtitle("政策时点", size(small)) ///加入X轴标题,大小small addplot(line @b @at) ///增加点之间的连线ciopts(lpattern(dash) recast(rcap) msize(medium)) ///CI为虚线上下封口msymbol(circle_hollow) ///plot空心格式scheme(s1mono)

注:由于以政策时点前的第1期作为基准组,因此图中没有-1期的数据

需要本篇推文所用数据和Stata代码的朋友,请在后台回复“CT”!














点击阅读原文即可留言

学好计量功夫,练就一身绝技!

功夫计量 | Kungfu_econometrics


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存