双重差分法 | 平行趋势检验

简单介绍一下实证论文中双重差分法(DID)的平行趋势检验(Parallel Trend Test)在Stata中如何操作

(本文首发于个人微信公众号DMETP,欢迎关注!)

一、平行趋势假定

平行趋势假定是实证论文中使用DID的前提,处理组与控制组的目标变量在政策发生前(事前)只有满足平行趋势假设才能使用DID。反之,如果处理组和控制组在事前就存在一定的差异,那么用DID做出来(可能还很好看)的结果就不再能代表政策的净效应,极有可能存在其他因素影响我们被解释变量的变动,此时可以使用三重差分法(DDD)。关于三重差分模型,连老师的一篇知乎推文讲的超级详细。

二、平行趋势检验

这里主要介绍两种情况下的平行趋势检验

一是普通DID模型的平行趋势检验,包括怎么画时间趋势图,怎么画95%置信区间图(动态效应检验图)。这里以石大千等(2018)公布在《中国工业经济》官网上的数据为例,由于所公布资料无法生成处理组虚拟变量,这里将使用微信公众号『功夫计量经济学』处理之后的数据

参考文献:

石大千, 丁海, 卫平, 刘建江. 智慧城市建设能否降低环境污染[J]. 中国工业经济, 2018(06): 117-135.

二是多期DID模型的平行趋势检验,包括怎么画95%置信区间图。这里之所以没有画平行趋势图,是因为在多期DID中,各个处理组受到政策冲击的时点不一致。因此,就算能够准确识别出处理组和控制组,由于处理组政策起始时点不一致,我们也很难在同一张图中将两组目标变量的时间趋势图画出来。

李青原和章尹赛楠(2021)的思路是,单独提取从样本开始年份直到某一年年末才受到政策冲击的样本为处理组,并将从样本开始年份直到某一年年末都没受到政策冲击的样本作为控制组,画出两组间的时间趋势图,这样的方法在政策冲击时点较少时可以考虑,因此不具有一般性。

参考文献:

李青原, 章尹赛楠. 金融开放与资源配置效率——来自外资银行进入中国的证据[J]. 中国工业经济, 2021(05): 95-113.

三、动态效应检验

动态效应检验实质上就是引入有限个时间虚拟变量,并将其与处理组虚拟变量交乘,考察交乘项的显著性。动态效应检验和平行趋势检验是有区别的,平行趋势检验中,只要考察0时期前的交乘项是否显著,如果不显著,说明处理组和控制组在事前并没有显著差异,可以使用DID。

而动态效应检验不仅考察事前,也关注事后组别之间的差异,如果0时期后(包括0时期)的交乘项显著,说明政策实施存在一定的持续性效果。当然,平行趋势检验只要求事前不显著,事后显不显著不影响事前的结论

由于多期DID中处理组受到政策影响的时点不一致,那么怎样生成时间虚拟变量就成为一个问题。在李青原和章尹赛楠(2021)中,分为5个时期,分别是样本起始年份至政策实施前两年、政策实施前一年、政策实施当年,政策实施后一年、政策实施后两年至样本结束年份;而在沈坤荣和金刚(2018)中,直接省略政策推行前三年以上的年份。可见,多期DID平行趋势检验中如何设计时间虚拟变量需要兼顾理论假设和最终结果,同时需要想象力~

参考文献:

沈坤荣, 金刚. 中国地方政府环境治理的政策效应——基于“河长制”演进的研究[J]. 中国社会科学, 2018(05): 92-115.

四、Stata代码

*==============================================================================*
*                        双重差分法(DID) | 平行趋势检验                        *
*==============================================================================*

** Stata Version: 16 | 17

** 【数据来源】普通DID(原始数据):石大千等(2018), 参见在《中国工业经济》网站(http://ciejournal.ajcass.org/Magazine/show/?id=54281)
*-             普通DID(加工数据):『功夫计量经济学』微信公众号(https://mp.weixin.qq.com/s/06v6s90G1pp-yLju_yAy1Q)
*-             多期DID(原始数据):李青原和章尹赛楠(2021),参见在《中国工业经济》网站(http://ciejournal.ajcass.org/Magazine/show/?id=77331)

** 【参考文献】[1] 石大千, 丁海, 卫平, 刘建江. 智慧城市建设能否降低环境污染[J]. 中国工业经济, 2018(06): 117-135.
*-             [2] 李青原, 章尹赛楠. 金融开放与资源配置效率——来自外资银行进入中国的证据[J]. 中国工业经济, 2021(05): 95-113.
*-             [3] 沈坤荣, 金刚. 中国地方政府环境治理的政策效应——基于“河长制”演进的研究[J]. 中国社会科学, 2018(05): 92-115+206.

  cd "C:\Users\KEMOSABE\Desktop\parallel_trend_test"

  graph set window fontface     "Times New Roman"
  graph set window fontfacesans "宋体"

**# 一、普通DID的平行趋势检验

  use smart_city2018.dta, clear

  global xlist "lnrgdp lninno lnurb lnopen lnss"

**# 1.1 时间趋势图

  bysort du year: egen mean_lnrso = mean(lnrso)

  twoway(line mean_lnrso year if du == 1,                                    ///
              lpattern(solid)                                                ///
              lcolor(black)                                                  ///
              lwidth(thin)                                                   ///
              scheme(qleanmono)                                              ///
              ytitle("{stSans:人}""{stSans:均}""{stSans:废}"                 ///
                     "{stSans:气}""{stSans:排}""{stSans:放}"                 ///
                     "{stSans:量}"  , size(medlarge) orientation(h))         ///
              xtitle("{stSans:年份}", size(medlarge))                        ///
              xline(2012, lpattern(solid) lcolor(black) lwidth(thin))        ///
              saving(parallel_trend_test_1-1, replace))                      ///
        (line mean_lnrso year if du == 0,                                    ///
              lpattern(shortdash)                                            ///
              lcolor(black)                                                  ///
              lwidth(thin))  ,                                               ///
        xlabel(2005(2)2015   , labsize(medlarge))                            ///
        ylabel(-2.5(0.25)-1.5, labsize(medlarge) format(%3.2f))              ///
        legend(label(1 "{stSans:处理组}")                                    ///
               label(2 "{stSans:控制组}")                                    ///
               size(medlarge) position(1) symxsize(10))

  graph export "parallel_trend_test_1-1.emf", replace

  discard  // 结果已保存至路径文件夹

**# 1.2 动态效应检验(事件研究法)

  gen current = 2012.year * du

  forvalue i = 4(-1)1 {
      gen before`i' = (year == 2012 - `i') * du
      }

  forvalue k = 1/3 {
      gen after`k'  = (year == 2012 + `k') * du
      }

  drop before4  // 将2008年作为基准年

  qui reghdfe lnrso before* current after* $xlist , absorb(id year) cluster(id)

  coefplot,                                                                  ///
      keep(before* current after*)                                           ///
      vertical                                                               ///
      scheme(qleanmono)                                                      ///
      coeflabels(before3 = -3                                                ///
                 before2 = -2                                                ///
                 before1 = -1                                                ///
                 current =  0                                                ///
                 after1  =  1                                                ///
                 after2  =  2                                                ///
                 after3  =  3)                                               ///
      msymbol(O) msize(small) mcolor(black)                                  ///
      addplot(line @b @at,    lcolor(black) lwidth(thin) lpattern(solid))    ///
      ciopts(recast(rcap)     lcolor(black) lwidth(thin))                    ///
      yline(0, lpattern(dash) lcolor(black) lwidth(thin))                    ///
      ytitle("{stSans:系}""{stSans:数}", size(medlarge) orientation(h))      ///
      xtitle("{stSans:期数}"           , size(medlarge))                     ///
      xlabel(, labsize(medlarge))                                            ///
      ylabel(, labsize(medlarge) format(%02.1f))                             ///
      saving(parallel_trend_test_1-2, replace)

  graph export "parallel_trend_test_1-2.emf", replace

  discard
  clear all
  cls

**# 二、多期DID的平行趋势检验

  use 平行趋势检验.dta, clear

  global y        "TFPQD_OP TFPQD_LP"
  global adjyear  "yb2 yb1 y0 ya1 ya2"
  global ctrlvars "ADM PPE ADV RD HHI INDSIZE NFIRMS FCFIRM MARGIN LEVDISP SIZEDISP ENTRYR EXITR"
  global options  "absorb((city)*(year) (ind3)*(year)) cluster(city year) keepsing"

  gen year_enter = 2007

  replace year_enter = 2004 if city == 5101 | city == 5000 | city == 2102 |  ///
                               city == 3501 | city == 4401 | city == 3701 |  ///
                               city == 3201 | city == 3702 | city == 3101 |  ///
                               city == 4403 | city == 1200 | city == 4201 |  ///
                               city == 4404 | prov ==   44 | prov ==   45 |  ///
                               prov ==   43 | prov ==   32 | prov ==   33
  replace year_enter = 2005 if city == 1100 | city == 5301 | city == 2101 |  ///
                               city == 3502 | city == 6101
  replace year_enter = 2006 if city == 2201 | city == 2301 | city == 6201 |  ///
                               city == 6401

  gen yb2 = (year_enter == year + 2)
  gen yb1 = (year_enter == year + 1)
  gen y0  = (year_enter == year)
  gen ya1 = (year_enter == year - 1)
  gen ya2 = (year_enter <= year - 2)

**# 2.1 动态效应检验(TFPQD_OP)

  qui reghdfe TFPQD_OP $adjyear $ctrlvars , $options

  coefplot,                                                                  ///
      keep( $adjyear )                                                       ///
      vertical                                                               ///
      scheme(qleanmono)                                                      ///
      coeflabels(yb2 = -2                                                    ///
                 yb1 = -1                                                    ///
                 y0  =  0                                                    ///
                 ya1 =  1                                                    ///
                 ya2 =  2)                                                   ///
      msymbol(O) msize(small) mcolor(black)                                  ///
      addplot(line @b @at,    lcolor(black) lwidth(thin) lpattern(solid))    ///
      ciopts(recast(rcap)     lcolor(black) lwidth(thin))                    ///
      yline(0, lpattern(dash) lcolor(black) lwidth(thin))                    ///
      ytitle("{stSans:系}""{stSans:数}", size(medlarge) orientation(h))      ///
      xtitle("{stSans:期数}"           , size(medlarge))                     ///
      xlabel(, labsize(medlarge))                                            ///
      ylabel(, labsize(medlarge) format(%03.2f))                             ///
      saving(parallel_trend_test_2-1, replace)

  graph export "parallel_trend_test_2-1.emf", replace

  discard

**# 2.2 动态效应检验(TFPQD_LP)

  qui reghdfe TFPQD_LP $adjyear $ctrlvars , $options

  coefplot,                                                                  ///
      keep( $adjyear )                                                       ///
      vertical                                                               ///
      scheme(qleanmono)                                                      ///
      coeflabels(yb2 = -2                                                    ///
                 yb1 = -1                                                    ///
                 y0  =  0                                                    ///
                 ya1 =  1                                                    ///
                 ya2 =  2)                                                   ///
      msymbol(O) msize(small) mcolor(black)                                  ///
      addplot(line @b @at,    lcolor(black) lwidth(thin) lpattern(solid))    ///
      ciopts(recast(rcap)     lcolor(black) lwidth(thin))                    ///
      yline(0, lpattern(dash) lcolor(black) lwidth(thin))                    ///
      ytitle("{stSans:系}""{stSans:数}", size(medlarge) orientation(h))      ///
      xtitle("{stSans:期数}"           , size(medlarge))                     ///
      xlabel(, labsize(medlarge))                                            ///
      ylabel(, labsize(medlarge) format(%03.2f))                             ///
      saving(parallel_trend_test_2-2, replace)

  graph export "parallel_trend_test_2-2.emf", replace

  discard

五、运行结果

1. 普通DID的平行趋势检验

用石大千等(2018)的数据绘制出如下图 1图 2。其中,图 1是时间趋势图,可以看到,在政策实施年份(2012)年之前,处理组和控制组的人均废气排放量变动趋势大体一致,但在2005-2006这两年间两组目标变量的变动方向相反。在2012年以后,控制组人均废气排放量有过上扬的历史,随后在2013年开始逐年下降,但下降幅度不大;处理组的人均废气排放量在2012年以后年份均处于下降通道,且在2014年下降幅度较大。因此,可以初步判断两组间在政策实施年份前的时间趋势假定基本是满足的,政策实施年份以后趋势线的差异基本判断是由智慧城市试点造成的。当然,这个结论并不稳健,需要进一步检验两组间的动态效应

图 2是动态效应检验图。其中,垂直于横轴的带盖短直线是各期数与处理组虚拟变量的交乘项回归系数的95%置信区间。可以看到,在期数为0(该例为2012年)以前,除政策实施年份三年前的系数显著(95%置信区间没有越过系数 = 0的水平虚线),其余期数都是不显著的,这也与时间趋势图所揭示的信息基本保持一致。而在政策实施以后的所有年份,系数基本显著(期数为2时有微微不显著),说明该政策的影响具有一定的持续性(或称时滞性),并且在样本期间内于实施后的第三年该政策具有最大的效果

当然,基准年的选择对显著性的影响很大,这里将2008年作为基准年,也可以通过选择不同的基准年对结果进行适当调整。

图 1 普通DID的时间趋势图
图 2 普通DID的动态效应检验图

2. 多期DID的平行趋势检验

图 3图 4分别是使用李青原和章尹赛楠(2021)公布的数据画出来的基于OP法和LP法计算的TFP离散度的动态效应检验图。在李青原和章尹赛楠(2021)公布的附件中,作者在平行趋势检验部分提供了回归结果表,但没有将其绘制成图。如图 3所示,在政策实施之前,系数都是不显著的,政策实施以后,系数同样都不显著。这说明了基于OP法计算的TFP离散度满足平行趋势假定,但政策实施不具有持续性。虽然政策不具有持续性,但系数为负是符合基本理论假设的,并且在政策实施一年后开始,系数与t值较之前明显增大。

图 4就比较完美了,实施年份之前都不显著,实施年份之后都显著,且系数符合理论假设,这说明基于OP法计算的TFP离散度既满足平行趋势假定,而且政策实施的影响具有一定的持续性

图 3 基于OP法计算的TFP离散度的动态效应检验图
图 4 基于LP法计算的TFP离散度的动态效应检验图
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容