文章轉(zhuǎn)載至Stata繪圖(二) | 多期DID的平行趨勢(shì)檢驗(yàn) - Stata專版 - 經(jīng)管之家(原人大經(jīng)濟(jì)論壇) (pinggu.org)
多期DID的平行趨勢(shì)檢驗(yàn)有兩種等價(jià)的展示方法,一是回歸法,二是繪圖法,前者相對(duì)容易,而后者的操作過(guò)程稍復(fù)雜。不少人借鑒了Beck et al.(2010)的做法,但該文實(shí)際用的模型是漸進(jìn)DID,即最終所有個(gè)體均實(shí)施了政策,因此相關(guān)命令需要經(jīng)過(guò)一定修改才能用于一般的多期DID。本文的前半部分將會(huì)簡(jiǎn)單介紹多期DID,后半部分將會(huì)參考Beck et al.(2010)對(duì)圖片的設(shè)定提供一個(gè)繪圖過(guò)程。
兩期DID:Yit=常數(shù)+Dt+Gi+ Dt* Gi+ eit
——Stata命令:reg y D G D_G 其他控制變量
注:D_G是D與G的交互項(xiàng)
多期DID:Yit=常數(shù)+Xit+時(shí)間虛擬變量+ ui+ eit
——Stata命令:xtreg y x i.time 其他控制變量,fe
其中,Yit是被解釋變量;Dt表示政策后虛擬變量(取1表示政策之后,取0則表示政策之前);Gi表示處理變量(取1表示處理組,取0則表示控制組);Xit表示“個(gè)體i為處理組”且“時(shí)間t在政策之后”則取值為1,其他情況取值為0,有一種等價(jià)說(shuō)法是——Xit表示個(gè)體i在t時(shí)間是否實(shí)施了政策。
請(qǐng)注意:不要把Xit理解成是交互項(xiàng),因?yàn)樵诙嗥贒ID中,控制組樣本的Dt無(wú)法給出合適的定義。簡(jiǎn)單來(lái)說(shuō),控制組樣本根本不存在“政策年度”一說(shuō),更談不上樣本是發(fā)生在政策“之前”還是“之后”了。
Dt表示政策實(shí)施前后的虛擬變量,在兩期DID中,因?yàn)橹淮嬖趦善跀?shù)據(jù),因此其等價(jià)于時(shí)間虛擬變量。兩期DID的Dt到了多期DID中,就轉(zhuǎn)化為時(shí)間虛擬變量;Gi表示處理變量,由于多期DID中的個(gè)體效應(yīng)ui包含了Gi的信息(Gi是ui的子集),因此同時(shí)在模型中放入Gi與ui將導(dǎo)致嚴(yán)重的多重共線性問題,應(yīng)該只放入信息含量更多的ui。多期DID中的Xit來(lái)自兩期DID中的Dt* Gi,盡管本文一再?gòu)?qiáng)調(diào)不應(yīng)該把Xit理解成Dt與Gi的乘積,但是不少初學(xué)者依然會(huì)習(xí)慣性認(rèn)為Xit等價(jià)于兩個(gè)變量的乘積。
綜上,兩期DID推導(dǎo)至多期DID的變化過(guò)程是:Dt→時(shí)間虛擬變量,Gi→ui,Dt*Gi→Xit。多期DID沒有對(duì)政策時(shí)點(diǎn)是否一致性提出要求,因此多期DID還適用于政策時(shí)點(diǎn)不一致情形。
生成Xit的Stata過(guò)程對(duì)初學(xué)者來(lái)說(shuō)可能稍有難度,有的人習(xí)慣在Excel中整理數(shù)據(jù),有的人喜歡用merge命令把數(shù)據(jù)全部匹配到一起。由于不同人有不同的習(xí)慣,下面介紹如何在Excel和Stata中應(yīng)該怎么制作出這個(gè)變量。
第一種做法:使用Excel來(lái)制作Xit是非常直觀的。
第一步,你需要為數(shù)據(jù)添加一列policy_year,對(duì)于控制組樣本應(yīng)該設(shè)定為空白值,X就是最終要生成的變量。例子中一共有16個(gè)樣本。

第二步,從16個(gè)樣本中,篩選出policy_year為空白值的樣本,然后對(duì)這些樣本的X全部賦值為0。滿足條件的一共有8個(gè)

第三步,從16個(gè)樣本中,篩選出policy_year有取值的樣本(一共8個(gè)樣本),新變量dyear是用year減去policy_year。

第四步,從16個(gè)樣本中,篩選出dyear≥0的樣本(一共5個(gè)樣本),然后對(duì)這些樣本的X賦值為1。


第五步,取消篩選功能后,你可以在X中發(fā)現(xiàn)仍有空白值(3個(gè)),用0填充他們,最后再把dyear刪除,X就生成完畢了。


第二種做法:使用Stata來(lái)生成x,過(guò)程相對(duì)簡(jiǎn)單,如果不想一步步操作Excel可以考慮這種做法。
第一步,數(shù)據(jù)導(dǎo)入Stata。

第二步,輸入命令:
gen x=0
replace x=1 if year>= policy_year
*平行趨勢(shì)檢驗(yàn)還需要生成處理變量treat(處理組取1,控制組取0)。
*這個(gè)變量在Excel中非常容易生成,因此方法一不詳細(xì)介紹生成過(guò)程。
gen treat=0replace treat=1 if policy_year!=.
多期DID的Stata命令
xtreg y x i.time 其他控制變量,fe r
提示:推薦使用聚類穩(wěn)健標(biāo)準(zhǔn)誤進(jìn)行回歸,也就是加上“r”,但是這么做或許會(huì)降低系數(shù)的顯著性。為什么會(huì)這樣呢?這個(gè)問題與t檢驗(yàn)的自由度有關(guān),本帖不展開討論這個(gè)技術(shù)細(xì)節(jié)。如果你在多期DID的回歸使用了聚類穩(wěn)健標(biāo)準(zhǔn)誤,那么在平行趨勢(shì)檢驗(yàn)中,你應(yīng)該繼續(xù)使用聚類穩(wěn)健標(biāo)準(zhǔn)誤,從而做到前后一致。請(qǐng)不要低估考慮“是否使用聚類穩(wěn)健標(biāo)準(zhǔn)誤”的意義,它不但影響系數(shù)的顯著性,還可能影響繪圖策略。
平行趨勢(shì)檢驗(yàn)的Stata命令——回歸法
*變量說(shuō)明:y表示被解釋變量,id表示樣本個(gè)體;year表示樣本年份;policy_year表示政策發(fā)生年份;
*treat取1表示處理組,取0表示控制組。
set more off
xtset id year
gen distance = year - policy_year
*了解數(shù)據(jù)情況。
tab distance, missing?
*請(qǐng)確認(rèn)distance變量是否存在以下兩類問題:
*1.樣本稀疏的問題,即樣本個(gè)數(shù)在某些年份非常少。
2.distance的取值范圍太寬,檢驗(yàn)太多期的平行趨勢(shì)可能是沒有必要的。
*你可以采用“縮尾處理策略”以應(yīng)對(duì)上面兩種問題:
*replace distance = -4 if distance < -4
*replace distance = 5 if distance? > 5
*生成一系列的變量:
*d_j的數(shù)學(xué)含義是:若樣本是”處理組“且為”政策實(shí)施前的第j期“則取值為1,其他情況取值為0。
*dj的數(shù)學(xué)含義是:若樣本是”處理組“且為”政策實(shí)施后的第j期“則取值為1,其他情況取值為0。
*current的數(shù)學(xué)含義是:若樣本是”處理組“且為”政策實(shí)施當(dāng)期“則取值為1,其他情況取值為0。
*例如,某個(gè)個(gè)體的政策實(shí)施于2013年,那么該個(gè)體在2012年的變量D_1取值為1,其余均為0。
盡管上面給出的數(shù)學(xué)定義是十分清晰的,但為了照顧初學(xué)者,下面給出一個(gè)直觀的數(shù)據(jù)描述。以d_1為例,若樣本是”處理組“且為”政策實(shí)施前的第1期“(distance=-1)則取值為1(橘色區(qū)域所示),其余情況取值為0。

*第一步,生成變量d_j、dj、current。
*(1)生成d_j,假設(shè)你在“tab distance, missing”中發(fā)現(xiàn),distance最小值是-4,那么生成過(guò)程如下:
forvalues i=1/4 {
gen d_`i'? = 0
replace d_`i'? = 1 if treat== 1 & distance== -`i'}
*(2)生成dj,假設(shè)你在“tab distance, missing”中發(fā)現(xiàn),distance最大值是5,那么生成過(guò)程如下:
forvalues i=1/5 {
gen d`i'? = 0
replace d`i'? = 1 if treat== 1 & distance== `i'}
*(3)生成current。
gen current? = 0
replace current = 1 if treat== 1 & distance== 0
*回歸法進(jìn)行平行趨勢(shì)檢驗(yàn):
xtreg y d_4 d_3 d_2 d_1 d1 d2 d3 d4 d5 i.year 控制變量, fe r
*判別方法:若d_4 d_3 d_2 d_1均不顯著,則表明平行趨勢(shì)假設(shè)成立。
你可能已經(jīng)注意到了,current不被包含在回歸模型中,盡管我們生成了它。原因是d_j、dj、current無(wú)法同時(shí)被放進(jìn)模型,否則會(huì)產(chǎn)生嚴(yán)格多重共線性問題,Stata會(huì)自動(dòng)在“d_4 d_3 d_2 d_1 current d1 d2 d3 d4 d5”中隨機(jī)drop掉一個(gè)變量(哪個(gè)被drop掉與順序有關(guān))。為了進(jìn)行平行趨勢(shì)檢驗(yàn),我們應(yīng)該在d_j與current中選擇一個(gè)變量并手動(dòng)去掉。如果你發(fā)現(xiàn)檢驗(yàn)結(jié)果不理想,可以嘗試調(diào)整drop對(duì)象。被drop掉的那個(gè)變量,我們稱之為基期。?若d_j的回歸系數(shù)是不顯著的,說(shuō)明d_j的系數(shù)與基期沒有顯著差異,從而支持了平行趨勢(shì)假設(shè)。本文的例子是以current為基期,如果你希望改變基期的位置,我在49樓寫了一個(gè)以d_1為基期的代碼示例。
盡管有些人還認(rèn)為,可以在dj中選擇一個(gè)變量去掉,但嚴(yán)格意義上這是不合適的。若所有d_j系數(shù)均不顯著倒也無(wú)妨,同樣可以說(shuō)明平行趨勢(shì)假定成立,但如果所有d_j的系數(shù)均顯著為正(或負(fù)),那么我們無(wú)從判斷d_j中任意兩個(gè)回歸系數(shù)是否有顯著差異。另外,偶爾也會(huì)見到一些不規(guī)范的做法,比如在不采取“縮尾處理策略”情況下(前文對(duì)此策略已經(jīng)用例子介紹了),只對(duì)current附近幾期進(jìn)行平行趨勢(shì)檢驗(yàn),這種情況下,如果你得到了一些顯著的d_j,你可能會(huì)誤以為平行趨勢(shì)檢驗(yàn)沒有通過(guò)??傊?,基期的選擇對(duì)平行趨勢(shì)檢驗(yàn)的結(jié)果是有影響的,請(qǐng)不要忽略這個(gè)問題。基于上述觀點(diǎn),tvdiff這個(gè)專門用來(lái)進(jìn)行平行趨勢(shì)檢驗(yàn)的命令,由于不允許指定基期,因此價(jià)值可能有限。
平行趨勢(shì)檢驗(yàn)的Stata命令——繪圖法
平行趨勢(shì)檢驗(yàn)的繪圖法需要你先完成回歸法的所有步驟,也就是在執(zhí)行下面這條命令之后,才可以進(jìn)行繪圖法。下面這個(gè)回歸的結(jié)果,已經(jīng)可以用來(lái)判斷檢驗(yàn)是否通過(guò)了。若檢驗(yàn)沒有通過(guò),繪圖法也就沒必要做了。
xtreg y d_4 d_3 d_2 d_1 d1 d2 d3 d4 d5 i.year 控制變量, fe r
如果你認(rèn)為以下內(nèi)容有一定操作難度,那么你可以考慮放棄用繪圖法來(lái)展示平行趨勢(shì)檢驗(yàn)的結(jié)果。正如前文所述,繪圖法與回歸法是等價(jià)的,繪圖法對(duì)論文的意義只是“錦上添花”。
方法1:采用coefplot繪制簡(jiǎn)易圖形
ssc install coefplot
coefplot,keep(d_4 d_3 d_2 d_1 d1 d2 d3 d4 d5)levels(90)vertical lcolor(black)mcolor(black)msymbol(circle_hollow)ytitle(回歸系數(shù),size(small))ylabel(,labsize(small)angle(horizontal)nogrid)yline(0,lwidth(vthin)lpattern(solid)lcolor(black))xtitle(政策實(shí)施相對(duì)時(shí)間,size(small))xlabel(,labsize(small))graphregion(fcolor(white)lcolor(white)ifcolor(white)ilcolor(white))ciopts(recast(rcap))xline(10.5,lwidth(vthin)lpattern(solid)lcolor(black))