【Stata 18新功能】如何針對CSDID進(jìn)行安慰劑檢驗(yàn):didplacebo命令介紹(下)

一、前言
雙重差分法的重要前提為平行趨勢假定。但由于在處理后,處理效應(yīng)已與時(shí)間效應(yīng)混合,故平行趨勢假定本質(zhì)上不可檢驗(yàn)。因此,在近年的DID實(shí)踐中,越來越多的研究者通過“安慰劑檢驗(yàn)”(placebo tests),進(jìn)一步考察是否存在被遺漏的混雜事件,以及由此引起的可能偏差。但DID安慰劑檢驗(yàn)主要源于經(jīng)驗(yàn)研究的實(shí)踐,具體做法靈活多樣,編程門檻高低不一,甚至目前文獻(xiàn)中還存在一些操作誤區(qū)與誤解。
為方便學(xué)者做出更規(guī)范的DID安慰劑檢驗(yàn),降低編程難度,陳強(qiáng)老師團(tuán)隊(duì)(陳強(qiáng)、齊霽、顏冠鵬,2023)研發(fā)了Stata新命令didplacebo。該命令可自動進(jìn)行DID的時(shí)間、空間與混合安慰劑檢驗(yàn),并快捷地提供可視化結(jié)果。
陳強(qiáng)、齊霽、顏冠鵬(通訊作者),“雙重差分法的安慰劑檢驗(yàn):一個(gè)實(shí)踐的指南”,2023年,山東大學(xué)工作論文
2023年8月13日,顏冠鵬博士在第七屆Stata中國用戶大會上進(jìn)行主題演講,正式發(fā)布此命令,引起與會專家與Stata用戶的極大關(guān)注。識別海報(bào)二維碼即刻了解大會詳情。

點(diǎn)擊即可查看:【Stata 18新功能】didplacebo:DID安慰劑檢驗(yàn)的Stata新命令(上)
【Stata 18新功能】didplacebo:DID安慰劑檢驗(yàn)的Stata新命令(中)接上文:五、交疊DID的安慰劑檢驗(yàn)案例:CSDID上期推文介紹了以TWFE估計(jì)交疊DID模型的安慰劑檢驗(yàn)。然而,若處理效應(yīng)隨時(shí)間而變,則以TWFE估計(jì)交疊DID模型將帶來偏差。但由于異質(zhì)性穩(wěn)健的交疊DID方法有多種,故不便整合進(jìn)命令didplacebo中。盡管如此,交疊DID安慰劑檢驗(yàn)的原理仍基本相同,只是將TWFE估計(jì)替換為異質(zhì)性穩(wěn)健的交疊DID估計(jì)方法。為此,下面使用異質(zhì)性穩(wěn)健的CSDID(Callaway and Sant, 2021),進(jìn)一步演示交疊DID的安慰劑檢驗(yàn)。在Stata中,可通過非官方命令csdid進(jìn)行CSDID的估計(jì)(或使用Stata 18的官方命令xthdidregress),其下載安裝命令為“ssc install csdid, all replace”。安裝后,可運(yùn)行如下命令:?. sysuse bbb.dta, clear. xtset statefip wrkyr. global cov gsp_pc_growth prop_blacks prop_dropouts prop_female_headed unemploymentrate. csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform) method(dripw) wboot rseed(1) agg(simple)其中,選擇項(xiàng)“ivar(statefip)”指定個(gè)體變量為“statefip”,選擇項(xiàng)“time(wrkyr)”指定時(shí)間變量為“wrkyr”,選擇項(xiàng)“gvar(branch_reform)”指定變量“branch_reform”為個(gè)體開始受到處理的時(shí)間(以此將樣本中個(gè)體分為若干組群),選擇項(xiàng)“method(dripw)”表示進(jìn)行雙穩(wěn)健估計(jì)(這是默認(rèn)選項(xiàng),故可省略),選擇項(xiàng)“wboot”表示使用“野自助法”(wild bootstrap)估計(jì)標(biāo)準(zhǔn)誤(在小樣本下表現(xiàn)更佳),選擇項(xiàng)“rseed(1)”設(shè)定野自助法的隨機(jī)種子,而選擇項(xiàng)“agg(simple)”則指定匯報(bào)各組群與各期的總平均處理效應(yīng)。

結(jié)果顯示,平均處理效應(yīng)的點(diǎn)估計(jì)為-0.00075,其符號與TWFE一致。然而,95%的置信區(qū)間為[-0.0174, 0.0159],包含0,故并不顯著。然后,將回歸結(jié)果存為“csdid_bbb”,并將總平均處理效應(yīng)的估計(jì)值記為全局宏“tr_eff”(便于后續(xù)調(diào)用):. estimates store csdid_bbb. global tr_eff = _b[ATT]. dis $tr_eff-.0007548如上所示,使用命令“dis $tr_eff”即可展示全局宏tr_eff的取值。下面進(jìn)行CSDID的時(shí)間安慰劑檢驗(yàn)。首先考慮最簡單的情形,將處理時(shí)間前置1期,可定義偽處理時(shí)間如下:. gen branch_reform_1 = branch_reform - 1使用偽處理時(shí)間branch_reform_1進(jìn)行CSDID的估計(jì):. csdid log_gini $cov if wrkyr < branch_reform, ivar(statefip) time(wrkyr) gvar(branch_reform_1) wboot rseed(1) agg(simple)?其中,“if wrkyr < branch_reform”表示僅使用處理前的數(shù)據(jù)進(jìn)行時(shí)間安慰劑檢驗(yàn)。

上表顯示,95%的置信區(qū)間包含0,故安慰劑效應(yīng)并不顯著。更一般地,若想同時(shí)完成前置1-10期的安慰劑檢驗(yàn),可通過for循環(huán)程序來批量實(shí)現(xiàn),并實(shí)現(xiàn)自動的圖表輸出。下面,定義取值為10的全局暫元變量K,表示迭代次數(shù)。每次迭代時(shí),創(chuàng)建變量branch_reform_new作為偽處理時(shí)間并運(yùn)行csdid命令,將平均處理效應(yīng)和方差分別存儲于att_b矩陣和att_V矩陣,再使用命令ereturn post和ereturn display顯示返回結(jié)果。具體程序如下:. global K = 10. matrix att_b = J(1, $K, 0). matrix att_V = J($K, $K, 0). forvalues i = 1(1)$K{cap drop branch_reform_newqui gen branch_reform_new = branch_reform - `i'qui csdid log_gini $cov if wrkyr < branch_reform, ivar(statefip) time(wrkyr) gvar(branch_reform_new) wboot rseed(1) agg(simple)matrix att_b[1, `i'] = e(b)[., "ATT"]matrix att_V[`i', `i'] = e(V)["ATT", "ATT"]}. mata: st_local("names", invtokens("F":+strofreal(1..$K):+".ATT")). matrix colnames att_b = `names'. matrix colnames att_V = `names'. matrix rownames att_V = `names'. ereturn post att_b att_V. ereturn display

結(jié)果顯示,前置1至10年的安慰劑效應(yīng)均不在5%水平上顯著,盡管前置5年與10年的安慰劑效應(yīng)都在10%水平上顯著。更直觀地,可使用非官方命令coefplot將以上置信區(qū)間可視化:. ssc install coefplot, replace. coefplot,vertical msymbol(smcircle_hollow) yline(0, lp(dash)) xtitle("number of periods forwarded as fake treatment time") ytitle("placebo effect") title("In-time Placebo Test") legend(order(2 "Placebo Effect" 1 "95% Confidence Interval")) ciopts(recast(rcap)) addplot(line @b @at) coeflabels(F.ATT=1 F2.ATT=2 F3.ATT=3 F4.ATT=4 F5.ATT=5 F6.ATT=6 F7.ATT=7 F8.ATT=8 F9.ATT=9 F10.ATT=10)

下面,進(jìn)行CSDID的空間安慰劑檢驗(yàn)。為此,定義一個(gè)名為“InSpacePlaceboTest”的程序估計(jì)安慰劑效應(yīng):. capture drop branch_reform_new . capture program drop InSpacePlaceboTest. program def InSpacePlaceboTest, rclasspreservextshuffle branch_reform, gen(branch_reform_new)qui csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform_new) agg(simple)return scalar pbo_eff = _b[ATT]. end其中,使用命令didplacebo的附帶命令xtshuffle,可快捷地實(shí)現(xiàn)針對面板數(shù)據(jù)的隨機(jī)置換,詳見help xtshuffle。命令xtshuffle是didplacebo的基礎(chǔ)命令,為didplacebo所調(diào)用,且在安裝didplacebo時(shí)已同時(shí)安裝。該命令將處理時(shí)間branch_reform進(jìn)行隨機(jī)置換(每位個(gè)體不同時(shí)期的branch_reform變量取值作為整體進(jìn)行置換),并將置換所得的偽處理時(shí)間記為“branch_reform_new”,而面板中其余數(shù)據(jù)不變。然后,使用命令simulate運(yùn)行“InSpacePlaceboTest”程序500次(由于每次運(yùn)行csdid較費(fèi)時(shí),故此命令將花較長時(shí)間,讀者可自行減少運(yùn)行次數(shù)):. simulate pbo_eff = r(pbo_eff), seed(1) reps(500): InSpacePlaceboTest接著,將內(nèi)存中的安慰劑效應(yīng)估計(jì)值存為數(shù)據(jù)集bbb_InSpacePbo.dta(以便后續(xù)使用),并畫安慰劑效應(yīng)分布的直方圖與核密度圖:. save bbb_InSpacePbo.dta, replace. graph twoway (kdensity pbo_eff) (histogram pbo_eff, fcolor(gs8%50) lcolor(white) lalign(center) below), xline(0, lp(dash)) xline($tr_eff) xtitle("distribution of placebo effect") ytitle("density") title("In-space Placebo Test") legend(order(1 "Kernel density estimate" 2 "Histogram") rows(1)) name(pbounit, replace)

從上圖可知,處理效應(yīng)的取值位于安慰劑效應(yīng)分布的中部,并非極端值。進(jìn)一步,計(jì)算雙邊p值:. gen extreme_abs = (abs(pbo_eff)>=abs($tr_eff)). sum extreme_abs

由上表可知,雙邊p值為0.956。計(jì)算左邊p值:. gen extreme_left = (pbo_eff<=$tr_eff). sum extreme_left

由上表可知,左邊p值為0.492。計(jì)算右邊p值:. gen extreme_right = (pbo_eff>=$tr_eff). sum extreme_right

由上表可知,右邊p值為0.508??傊瑹o論雙邊、左邊或右邊p值,均大幅超過常用的顯著性水平(比如5%或10%)。下面,進(jìn)行CSDID的混合安慰劑檢驗(yàn)。首先進(jìn)行準(zhǔn)備工作。. sysuse bbb.dta, clear. xtset statefip wrkyr. global cov gsp_pc_growth prop_blacks prop_dropouts prop_female_headed unemploymentrate. csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform) wboot rseed(1) agg(simple). global tr_eff = _b[ATT]其次,定義一個(gè)名為“MixedPlaceboTest2”的程序,以估計(jì)無約束的交疊DID安慰劑效應(yīng)(version 2):. capture program drop MixedPlaceboTest2. prog def MixedPlaceboTest2, rclasspreservextrantreat _intra, method(2) gen(_intra_new)tofirsttreat _intra_new, gen(branch_reform_new)qui csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform_new) agg(simple)return scalar pbo_eff = _b[ATT]. end其中,使用命令didplacebo的附帶命令xtrantreat,method(2)針對交疊DID以無約束(unrestricted)的方式隨機(jī)生成偽處理變量_intra_new。這意味,樣本中的每位個(gè)體均隨機(jī)抽取一個(gè)偽處理時(shí)間,故一般無法保持組群結(jié)構(gòu)(組群內(nèi)的個(gè)體數(shù)目一般與原始樣本不同),詳見help xtrantreat。若希望保持組群結(jié)構(gòu),可使用命令xtrantreat,method(3)(詳見下文)。然后,再用命令didplacebo的另一附帶命令tofirsttreat將偽處理變量_intra_new變?yōu)閭€(gè)體首次受處理的時(shí)間branch_reform_new。之后,使用命令simulate運(yùn)行程序“MixedPlaceboTest2”500次(由于每次運(yùn)行csdid較費(fèi)時(shí),故此命令將花較長時(shí)間,讀者可自行減少運(yùn)行次數(shù)):. simulate pbo_eff = r(pbo_eff), seed(1) reps(500): MixedPlaceboTest2將內(nèi)存中所有的安慰劑效應(yīng)估計(jì)值存為數(shù)據(jù)集“bbb_MixedPbo2.dta”(以便后續(xù)使用),并畫安慰劑效應(yīng)分布的直方圖與核密度圖:. save bbb_MixedPbo2.dta, replace. graph twoway (kdensity pbo_eff) (histogram pbo_eff, fcolor(gs8%50) lcolor(white) lalign(center) below), xline(0, lp(dash)) xline($tr_eff) xtitle("distribution of placebo effect") ytitle("density") title("Unrestricted Mixed Placebo Test") legend(order(1 "Kernel density estimate" 2 "Histogram") rows(1)) name(pbomix, replace)

從上圖可知,處理效應(yīng)的取值位于安慰劑效應(yīng)分布的中部,并非極端值。進(jìn)一步,計(jì)算雙邊p值:. gen extreme_abs = (abs(pbo_eff)>=abs($tr_eff)). sum extreme_abs

由上表可知,雙邊p值高達(dá)0.958。計(jì)算左邊p值:. gen extreme_left = (pbo_eff<=$tr_eff). sum extreme_left

由上表可知,左邊p值為0.534。計(jì)算右邊p值:. gen extreme_right = (pbo_eff>=$tr_eff). sum extreme_right

由上表可知,右邊p值為0.466??傊?,無約束混合安慰劑檢驗(yàn)的雙邊、左邊與右邊p值均遠(yuǎn)大于常規(guī)的顯著性水平(比如5%或10%),故平均處理效應(yīng)并不顯著。最后,進(jìn)行有約束(restricted)的混合安慰劑檢驗(yàn),可保持交疊DID模型的組群結(jié)構(gòu)不變。首先進(jìn)行準(zhǔn)備工作。. use bbb.dta, clear. xtset statefip wrkyr. global cov gsp_pc_growth prop_blacks prop_dropouts prop_female_headed unemploymentrate. csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform) wboot rseed(1) agg(simple). global tr_eff = _b[ATT]其次,定義一個(gè)名為“MixedPlaceboTest3”的程序,以估計(jì)有約束的交疊DID安慰劑效應(yīng)(version 3):?. capture program drop MixedPlaceboTest3. prog def MixedPlaceboTest3, rclasspreservextrantreat _intra, method(3) gen(_intra_new)tofirsttreat _intra_new, gen(branch_reform_new)qui csdid log_gini $cov, ivar(statefip) time(wrkyr) gvar(branch_reform_new) agg(simple)return scalar pbo_eff = _b[ATT]. end其中,使用命令didplacebo的附帶命令xtrantreat,method(3)針對交疊DID以有約束的方式隨機(jī)生成偽處理變量(version 3)。具體而言,若樣本中共包含G個(gè)組群(cohorts,含從未受處理的控制組),則隨機(jī)地將樣本劃分為G 個(gè)組群(保持每個(gè)組群內(nèi)的個(gè)體數(shù)目與原始樣本的相應(yīng)組群相同);再隨機(jī)地給每個(gè)新劃分的組群分配不同的偽處理時(shí)間。然后,使用命令simulate運(yùn)行程序“MixedPlaceboTest3”500次(由于每次運(yùn)行csdid較費(fèi)時(shí),故此命令將花較長時(shí)間,讀者可自行減少運(yùn)行次數(shù)):. simulate pbo_eff = r(pbo_eff), seed(1) reps(500): MixedPlaceboTest3將內(nèi)存中的安慰劑效應(yīng)估計(jì)值存為數(shù)據(jù)集“bbb_MixedPbo3.dta”(以便后續(xù)使用),并畫安慰劑效應(yīng)分布的直方圖與核密度圖:. save bbb_MixedPbo3.dta, replace. graph twoway (kdensity pbo_eff) (histogram pbo_eff, fcolor(gs8%50) lcolor(white) lalign(center) below), xline(0, lp(dash)) xline($tr_eff) xtitle("distribution of placebo effect") ytitle("density") title("Restricted Mixed Placebo Test") legend(order(1 "Kernel density estimate" 2 "Histogram") rows(1)) name(pbomix, replace)

從上圖可知,處理效應(yīng)的取值位于安慰劑效應(yīng)分布的中部,并非極端值。進(jìn)一步,計(jì)算雙邊p值:. gen extreme_abs = (abs(pbo_eff)>=abs($tr_eff)). sum extreme_abs

由上表可知,雙邊p值為0.966。計(jì)算左邊p值:. gen extreme_left = (pbo_eff<=$tr_eff). sum extreme_left

由上表可知,左邊p值為0.526。計(jì)算右邊p值:. gen extreme_right = (pbo_eff>=$tr_eff). sum extreme_right

由上表可知,右邊p值為0.474??傊?,有約束混合安慰劑檢驗(yàn)的雙邊、左邊與右邊p值均遠(yuǎn)大于常規(guī)的顯著性水平(比如5%或10%),故平均處理效應(yīng)并不顯著。六、總結(jié)由于DID所依賴的平行趨勢假定本質(zhì)上不可檢驗(yàn),近年來日益流行使用安慰劑檢驗(yàn)進(jìn)行證偽檢驗(yàn)。本團(tuán)隊(duì)新開發(fā)的didplacebo命令,可方便地進(jìn)行標(biāo)準(zhǔn)DID與交疊DID的時(shí)間、空間與混合安慰劑檢驗(yàn),且可兼容regress、xtreg、areg、xtdidregress以及第三方命令reghdfe的估計(jì)結(jié)果。若需使用其它估計(jì)命令(例如csdid等異質(zhì)性穩(wěn)健方法),可搭配didplacebo的附屬命令tofirsttreat、xtrantreat和xtshuffle,針對其他DID命令進(jìn)行安慰劑檢驗(yàn)。通過didplacebo的一系列命令,可便捷地針對不同的DID設(shè)計(jì)進(jìn)行安慰劑檢驗(yàn),從而增強(qiáng)DID實(shí)證研究結(jié)論的可靠性與準(zhǔn)確性。相信安慰劑檢驗(yàn)將日益成為DID實(shí)證研究者的標(biāo)準(zhǔn)工具之一。