文章轉載至Stata繪圖(二) | 多期DID的平行趨勢檢驗 - Stata專版 - 經(jīng)管之家(原人大經(jīng)濟論壇) (pinggu.org)
多期DID的平行趨勢檢驗有兩種等價的展示方法蕴忆,一是回歸法,二是繪圖法凉夯,前者相對容易虚青,而后者的操作過程稍復雜峡蟋。不少人借鑒了Beck et al.(2010)的做法似忧,但該文實際用的模型是漸進DID,即最終所有個體均實施了政策班眯,因此相關命令需要經(jīng)過一定修改才能用于一般的多期DID希停。本文的前半部分將會簡單介紹多期DID,后半部分將會參考Beck et al.(2010)對圖片的設定提供一個繪圖過程署隘。
兩期DID:Yit=常數(shù)+Dt+Gi+ Dt* Gi+ eit
——Stata命令:reg y D G D_G 其他控制變量
注:D_G是D與G的交互項
多期DID:Yit=常數(shù)+Xit+時間虛擬變量+ ui+ eit
——Stata命令:xtreg y x i.time 其他控制變量,fe
其中宠能,Yit是被解釋變量;Dt表示政策后虛擬變量(取1表示政策之后磁餐,取0則表示政策之前)违崇;Gi表示處理變量(取1表示處理組,取0則表示控制組)诊霹;Xit表示“個體i為處理組”且“時間t在政策之后”則取值為1亦歉,其他情況取值為0,有一種等價說法是——Xit表示個體i在t時間是否實施了政策畅哑。
請注意:不要把Xit理解成是交互項,因為在多期DID中水由,控制組樣本的Dt無法給出合適的定義荠呐。簡單來說,控制組樣本根本不存在“政策年度”一說砂客,更談不上樣本是發(fā)生在政策“之前”還是“之后”了泥张。
Dt表示政策實施前后的虛擬變量,在兩期DID中鞠值,因為只存在兩期數(shù)據(jù)媚创,因此其等價于時間虛擬變量。兩期DID的Dt到了多期DID中彤恶,就轉化為時間虛擬變量钞钙;Gi表示處理變量,由于多期DID中的個體效應ui包含了Gi的信息(Gi是ui的子集)声离,因此同時在模型中放入Gi與ui將導致嚴重的多重共線性問題芒炼,應該只放入信息含量更多的ui。多期DID中的Xit來自兩期DID中的Dt* Gi术徊,盡管本文一再強調不應該把Xit理解成Dt與Gi的乘積本刽,但是不少初學者依然會習慣性認為Xit等價于兩個變量的乘積。
綜上,兩期DID推導至多期DID的變化過程是:Dt→時間虛擬變量子寓,Gi→ui暗挑,Dt*Gi→Xit。多期DID沒有對政策時點是否一致性提出要求斜友,因此多期DID還適用于政策時點不一致情形炸裆。
生成Xit的Stata過程對初學者來說可能稍有難度,有的人習慣在Excel中整理數(shù)據(jù)蝙寨,有的人喜歡用merge命令把數(shù)據(jù)全部匹配到一起晒衩。由于不同人有不同的習慣,下面介紹如何在Excel和Stata中應該怎么制作出這個變量墙歪。
第一種做法:使用Excel來制作Xit是非常直觀的听系。
第一步,你需要為數(shù)據(jù)添加一列policy_year虹菲,對于控制組樣本應該設定為空白值靠胜,X就是最終要生成的變量。例子中一共有16個樣本毕源。
第二步浪漠,從16個樣本中,篩選出policy_year為空白值的樣本霎褐,然后對這些樣本的X全部賦值為0址愿。滿足條件的一共有8個
第三步,從16個樣本中冻璃,篩選出policy_year有取值的樣本(一共8個樣本)响谓,新變量dyear是用year減去policy_year。
第四步省艳,從16個樣本中娘纷,篩選出dyear≥0的樣本(一共5個樣本),然后對這些樣本的X賦值為1跋炕。
第五步赖晶,取消篩選功能后,你可以在X中發(fā)現(xiàn)仍有空白值(3個)辐烂,用0填充他們遏插,最后再把dyear刪除,X就生成完畢了棉圈。
第二種做法:使用Stata來生成x涩堤,過程相對簡單,如果不想一步步操作Excel可以考慮這種做法分瘾。
第一步胎围,數(shù)據(jù)導入Stata吁系。
第二步,輸入命令:
gen x=0
replace x=1 if year>= policy_year
*平行趨勢檢驗還需要生成處理變量treat(處理組取1白魂,控制組取0)汽纤。
*這個變量在Excel中非常容易生成,因此方法一不詳細介紹生成過程福荸。
gen treat=0replace treat=1 if policy_year!=.
多期DID的Stata命令
xtreg y x i.time 其他控制變量,fe r
提示:推薦使用聚類穩(wěn)健標準誤進行回歸蕴坪,也就是加上“r”,但是這么做或許會降低系數(shù)的顯著性敬锐。為什么會這樣呢背传?這個問題與t檢驗的自由度有關,本帖不展開討論這個技術細節(jié)台夺。如果你在多期DID的回歸使用了聚類穩(wěn)健標準誤径玖,那么在平行趨勢檢驗中,你應該繼續(xù)使用聚類穩(wěn)健標準誤颤介,從而做到前后一致梳星。請不要低估考慮“是否使用聚類穩(wěn)健標準誤”的意義,它不但影響系數(shù)的顯著性滚朵,還可能影響繪圖策略冤灾。
平行趨勢檢驗的Stata命令——回歸法
*變量說明:y表示被解釋變量,id表示樣本個體辕近;year表示樣本年份韵吨;policy_year表示政策發(fā)生年份;
*treat取1表示處理組移宅,取0表示控制組学赛。
set more off
xtset id year
gen distance = year - policy_year
*了解數(shù)據(jù)情況。
tab distance, missing?
*請確認distance變量是否存在以下兩類問題:
*1.樣本稀疏的問題吞杭,即樣本個數(shù)在某些年份非常少。
2.distance的取值范圍太寬变丧,檢驗太多期的平行趨勢可能是沒有必要的芽狗。
*你可以采用“縮尾處理策略”以應對上面兩種問題:
*replace distance = -4 if distance < -4
*replace distance = 5 if distance? > 5
*生成一系列的變量:
*d_j的數(shù)學含義是:若樣本是”處理組“且為”政策實施前的第j期“則取值為1,其他情況取值為0痒蓬。
*dj的數(shù)學含義是:若樣本是”處理組“且為”政策實施后的第j期“則取值為1童擎,其他情況取值為0。
*current的數(shù)學含義是:若樣本是”處理組“且為”政策實施當期“則取值為1攻晒,其他情況取值為0顾复。
*例如,某個個體的政策實施于2013年鲁捏,那么該個體在2012年的變量D_1取值為1芯砸,其余均為0。
盡管上面給出的數(shù)學定義是十分清晰的,但為了照顧初學者假丧,下面給出一個直觀的數(shù)據(jù)描述双揪。以d_1為例,若樣本是”處理組“且為”政策實施前的第1期“(distance=-1)則取值為1(橘色區(qū)域所示)包帚,其余情況取值為0渔期。
*第一步,生成變量d_j渴邦、dj疯趟、current。
*(1)生成d_j谋梭,假設你在“tab distance, missing”中發(fā)現(xiàn)信峻,distance最小值是-4,那么生成過程如下:
forvalues i=1/4 {
gen d_`i'? = 0
replace d_`i'? = 1 if treat== 1 & distance== -`i'}
*(2)生成dj章蚣,假設你在“tab distance, missing”中發(fā)現(xiàn)站欺,distance最大值是5,那么生成過程如下:
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
*回歸法進行平行趨勢檢驗:
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均不顯著矾策,則表明平行趨勢假設成立。
你可能已經(jīng)注意到了峭沦,current不被包含在回歸模型中贾虽,盡管我們生成了它。原因是d_j吼鱼、dj蓬豁、current無法同時被放進模型,否則會產生嚴格多重共線性問題菇肃,Stata會自動在“d_4 d_3 d_2 d_1 current d1 d2 d3 d4 d5”中隨機drop掉一個變量(哪個被drop掉與順序有關)地粪。為了進行平行趨勢檢驗,我們應該在d_j與current中選擇一個變量并手動去掉琐谤。如果你發(fā)現(xiàn)檢驗結果不理想蟆技,可以嘗試調整drop對象。被drop掉的那個變量斗忌,我們稱之為基期质礼。?若d_j的回歸系數(shù)是不顯著的,說明d_j的系數(shù)與基期沒有顯著差異织阳,從而支持了平行趨勢假設眶蕉。本文的例子是以current為基期,如果你希望改變基期的位置唧躲,我在49樓寫了一個以d_1為基期的代碼示例造挽。
盡管有些人還認為碱璃,可以在dj中選擇一個變量去掉,但嚴格意義上這是不合適的刽宪。若所有d_j系數(shù)均不顯著倒也無妨厘贼,同樣可以說明平行趨勢假定成立,但如果所有d_j的系數(shù)均顯著為正(或負)圣拄,那么我們無從判斷d_j中任意兩個回歸系數(shù)是否有顯著差異嘴秸。另外,偶爾也會見到一些不規(guī)范的做法庇谆,比如在不采取“縮尾處理策略”情況下(前文對此策略已經(jīng)用例子介紹了)岳掐,只對current附近幾期進行平行趨勢檢驗,這種情況下饭耳,如果你得到了一些顯著的d_j串述,你可能會誤以為平行趨勢檢驗沒有通過∧ぃ總之纲酗,基期的選擇對平行趨勢檢驗的結果是有影響的,請不要忽略這個問題新蟆∶偕蓿基于上述觀點,tvdiff這個專門用來進行平行趨勢檢驗的命令琼稻,由于不允許指定基期吮螺,因此價值可能有限。
平行趨勢檢驗的Stata命令——繪圖法
平行趨勢檢驗的繪圖法需要你先完成回歸法的所有步驟帕翻,也就是在執(zhí)行下面這條命令之后鸠补,才可以進行繪圖法。下面這個回歸的結果嘀掸,已經(jīng)可以用來判斷檢驗是否通過了紫岩。若檢驗沒有通過,繪圖法也就沒必要做了睬塌。
xtreg y d_4 d_3 d_2 d_1 d1 d2 d3 d4 d5 i.year 控制變量, fe r
如果你認為以下內容有一定操作難度被因,那么你可以考慮放棄用繪圖法來展示平行趨勢檢驗的結果细办。正如前文所述,繪圖法與回歸法是等價的斥废,繪圖法對論文的意義只是“錦上添花”词渤。
方法1:采用coefplot繪制簡易圖形
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(政策實施相對時間,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))