久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

DID從經(jīng)典到前沿方法的保姆級(jí)教程, 釋放最完整數(shù)據(jù)和代碼,!

 計(jì)量經(jīng)濟(jì)圈 2023-06-08 發(fā)布于浙江
關(guān)于多期DID或交疊DID: 1.DID相關(guān)前沿問(wèn)題“政策交錯(cuò)執(zhí)行+堆疊DID+事件研究”, 附完整slides,2.交錯(cuò)(漸進(jìn))DID中, 用TWFE估計(jì)處理效應(yīng)的問(wèn)題, 及Bacon分解識(shí)別估計(jì)偏誤,,3.典范! 這篇AER在一圖表里用了所有DID最新進(jìn)展方法, 審稿人直接服了,!4.最新Sun和Abraham(2020)和TWFE估計(jì)多期或交錯(cuò)DID并繪圖展示結(jié)果!詳細(xì)解讀code,!5.多期DID或漸進(jìn)DID或交疊DID, 最新Stata執(zhí)行命令整理如下供大家學(xué)習(xí),,6.多期DID前沿方法大討論, e.g., 進(jìn)入-退出型DID, 異質(zhì)性和動(dòng)態(tài)性處理效應(yīng)DID, 基期選擇問(wèn)題等,7.交疊DID中平行趨勢(shì)檢驗(yàn), 事件研究圖繪制, 安慰劑檢驗(yàn)的保姆級(jí)程序指南,!8.欣慰! 營(yíng)養(yǎng)午餐計(jì)劃終于登上TOP5! 交疊DID+異質(zhì)性穩(wěn)健DID,!9.用事件研究法開展政策評(píng)估的過(guò)程, 手把手教學(xué)文章!10.從雙重差分法到事件研究法, 雙重差分濫用與需要注意的問(wèn)題,,11.系統(tǒng)梳理DID最新進(jìn)展: 從多期DID的潛在問(wèn)題到當(dāng)前主流解決方法和代碼! 12.標(biāo)準(zhǔn)DID中的平行趨勢(shì)檢驗(yàn),動(dòng)態(tài)效應(yīng), 安慰劑檢驗(yàn), 預(yù)期效應(yīng)教程
今天,,我們根據(jù)一份《DID handbook》再?gòu)念^到尾整理一下,從經(jīng)典DID到Bacon分解到交疊DID最新進(jìn)展的各種估計(jì)方法適用條件及其實(shí)現(xiàn)代碼,,并跟隨這份Handbook的例子復(fù)現(xiàn)各種DID估計(jì)方法的結(jié)果并對(duì)其差異進(jìn)行對(duì)比,。下方所有數(shù)據(jù)和代碼都放在網(wǎng)盤里,可以直接放在Stata中運(yùn)行出來(lái)結(jié)果,。這真的是保姆級(jí)教程,,如果看完這個(gè)你還不懂DID,那就真的需要再回到課堂學(xué)學(xué)了??,。

正文

《DID保姆級(jí)手冊(cè)》
*感謝計(jì)量社群群友@regmoneky 整理,,增添了部分內(nèi)容的注釋,原文來(lái)自下方Source,。
Source:DID_Handbook,,https://github.com/IanHo2019/DID_Handbook;歡迎對(duì)更好的編碼或錯(cuò)誤糾正提出意見,,作者聯(lián)系方式:[email protected],。
雙重差分法(也可縮寫為DIDDiDDD,,我更傾向于使用DID)是當(dāng)今社會(huì)科學(xué)中最流行的統(tǒng)計(jì)技術(shù)之一,,廣泛應(yīng)用于定量研究中。其受歡迎的主要原因在于使用者對(duì)理解和應(yīng)用DID開展實(shí)證研究方面相對(duì)"容易上手",。然而,,在閱讀了一系列最近(2017年至今)發(fā)表的高質(zhì)量計(jì)量經(jīng)濟(jì)學(xué)論文后,我意識(shí)到雙重差分并沒(méi)有我之前所想的那么簡(jiǎn)單,。構(gòu)建這個(gè)資源庫(kù)的主要目標(biāo)是分享我對(duì)雙重差分的更深入理解,,以及我在運(yùn)行雙重差分時(shí)使用的Stata代碼,。請(qǐng)注意,我在這里只對(duì)每種雙重差分格式的一些細(xì)節(jié)進(jìn)行了概述,,更詳細(xì)的內(nèi)容請(qǐng)閱讀那些論文,。
經(jīng)典、傳統(tǒng)和教科書雙重差分

雙重差分,,顧名思義,,涉及在兩個(gè)時(shí)期對(duì)兩個(gè)群體進(jìn)行比較。第一個(gè)差分是在群體之間進(jìn)行的,,而第二個(gè)差分總是在時(shí)間之間進(jìn)行的,。在處理時(shí)間之后成為接受處理的群體,被稱為接受處理的群體,。其他單位被稱為對(duì)照組,。雙重差分通常側(cè)重于識(shí)別和估計(jì)接受治療群體上的平均處理效應(yīng)(ATT),即測(cè)量治療對(duì)那些從未接受治療轉(zhuǎn)變?yōu)榻邮苤委煹娜说钠骄?yīng),。在實(shí)證研究中,,實(shí)施雙重差分規(guī)范的主導(dǎo)方法是運(yùn)行雙向固定效應(yīng)(TWFE)回歸:

雙重差分(Difference in Difference,簡(jiǎn)稱DID)假設(shè)平行趨勢(shì),、無(wú)預(yù)期和處理效應(yīng)同質(zhì)性,,TWFE回歸中的估計(jì)結(jié)果等于參與政策處理的因果效應(yīng)。然而,,不幸的是,,這種TWFE回歸通常對(duì)處理效應(yīng)的異質(zhì)性不具有穩(wěn)健性。這是當(dāng)前DID文獻(xiàn)中一個(gè)熱門的研究課題,。
需要注意的是,,這里我們只考慮吸收型政策處理(absorbing treatment):一旦一個(gè)個(gè)體接受政策處理,它在未來(lái)的任何時(shí)間段內(nèi)都不能退出政策處理,。一些研究人員嘗試將DID推廣到非吸收型政策處理(也稱為“轉(zhuǎn)換型政策處理(switching treatment)”)設(shè)計(jì),;這是可行的,但需要額外的假設(shè),。

Stata中,可以使用命令xtreg,、areg,、reghdfextdidregress輕松運(yùn)行TWFE回歸。需要注意的是,,xtdidregress僅適用于Stata 17或更高版本,,而reghdfe只能在安裝了reghdfeftools包之后使用。我喜歡使用reghdfe,,因?yàn)樗哂徐`活的選項(xiàng)并且計(jì)算速度較快,。reghdfe的基本語(yǔ)法如下:

reghdfe Y D, absorb(id t) cluster(id)
absorb選項(xiàng)指定固定效應(yīng),,cluster選項(xiàng)指定標(biāo)準(zhǔn)誤差聚類的級(jí)別。
這種雙重差分的格式僅涉及兩個(gè)時(shí)間段和兩個(gè)群體,,這就是為什么我稱之為經(jīng)典,、傳統(tǒng)和教科書格式。經(jīng)典意味著“標(biāo)準(zhǔn)”:它是最早,、最簡(jiǎn)單的一種,,展示了DID背后的關(guān)鍵理論;傳統(tǒng)意味著“傳統(tǒng)”:它已經(jīng)建立了很長(zhǎng)時(shí)間,,但在現(xiàn)代應(yīng)用中逐漸過(guò)時(shí),;教科書意味著:它已經(jīng)在許多教科書中被介紹過(guò),比如Jeffrey Wooldrige的《橫截面和面板數(shù)據(jù)的計(jì)量經(jīng)濟(jì)分析》(2010)和Bruce Hansen的《計(jì)量經(jīng)濟(jì)學(xué)》(2022),。如果那些接受處理的個(gè)體在同一時(shí)期進(jìn)行處理,,TWFE DID可以推廣到多時(shí)期多個(gè)體的情況。這種處理有時(shí)被稱為分塊政策處理(block treatment),。
2017年之前,,許多研究人員天真地認(rèn)為TWFE DID也可以輕松推廣到個(gè)體在不同時(shí)期接受政策處理的情況(即交錯(cuò)處理staggered treatment),。然而,,事實(shí)并非如此!正如下文所描述的那樣,,這絕對(duì)不容易,。
靜態(tài)雙重差分下的Bacon分解
首先,,什么是靜態(tài)雙重差分(Static DID)?靜態(tài)雙重差分的估計(jì)的是,,一個(gè)不隨時(shí)間變化的單一處理效應(yīng),。也就是說(shuō),通過(guò)運(yùn)行靜態(tài)雙重差分模型,,我們只得到一個(gè)β值,,并且使用一個(gè)系數(shù)總結(jié)自政策實(shí)施以來(lái)的處理效應(yīng)。經(jīng)典的雙重差分正是一種靜態(tài)雙重差分,。
其次,,什么是Bacon分解(Bacon Decomposition,交錯(cuò)(漸進(jìn))DID中, 用TWFE估計(jì)處理效應(yīng)的問(wèn)題, 及Bacon分解識(shí)別估計(jì)偏誤),?這個(gè)概念來(lái)自Goodman-Bacon2021),。該作者提出并證明了雙重差分分解定理,指出TWFE雙重差分估計(jì)量(適用于交錯(cuò)處理情況)等于所有可能的兩組/兩時(shí)期雙重差分估計(jì)量的加權(quán)平均值,。為了強(qiáng)調(diào)這一發(fā)現(xiàn),,作者將雙重差分估計(jì)量寫為
雙重差分分解定理非常重要,,因?yàn)樗嬖V我們,,在經(jīng)典的雙重差分中,,如果包括在多個(gè)時(shí)間段接受政策處理的個(gè)體,就存在一種“不好”的比較情況,,即在晚期處理之前和之后將晚期處理組與早期處理組進(jìn)行比較,。建議在運(yùn)行靜態(tài)雙重差分模型時(shí)進(jìn)行Bacon分解,可以看出我們的估計(jì)結(jié)果更多來(lái)自何處的貢獻(xiàn),。例如,,一個(gè)負(fù)的雙重差分估計(jì)結(jié)果可能只是因?yàn)樵谝粋€(gè)權(quán)重較大的不好的比較中出現(xiàn)了負(fù)的結(jié)果。
Stata中進(jìn)行Bacon分解,,Andrew Goodman-Bacon(明尼阿波利斯聯(lián)邦儲(chǔ)備銀行),、Thomas Goldring(喬治亞州立大學(xué))和Austin Nichols(亞馬遜)編寫了bacondecomp包?;菊Z(yǔ)法如下:

bacondecomp Y D, ddtail

Y為因變量,,D為處理虛擬變量,ddtail選項(xiàng)用于更詳細(xì)的分解,。
Stata 18(發(fā)布于2023425日)引入了一個(gè)新的估計(jì)命令estat bdecomp,,用于執(zhí)行Bacon分解。它可用于didregressxtdidregress命令之后,,并且通過(guò)添加graph選項(xiàng)可以輕松創(chuàng)建圖表,。
遺憾的是,Stata中的Bacon分解僅在具有強(qiáng)平衡面板數(shù)據(jù)的情況下有效,。對(duì)于具有不平衡面板數(shù)據(jù)的情況,,為了進(jìn)行Bacon分解并找到附加每個(gè)系數(shù)的權(quán)重,可以嘗試由Clement de Chaisemartin,、Xavier D'HaultfoeuilleAntoine Deeb(世界銀行)編寫的twowayfeweights,。
平衡面板數(shù)據(jù)的合成雙重差分(Synthetic DID
Arkhangelsky等人(2022)提出了一種方法,即合成雙重差分(SDID,,前沿, 合成雙重差分法SDID方法介紹和示例, 附code和數(shù)據(jù),!),它結(jié)合了雙重差分(DID)和合成控制(SC)方法吸引人的特點(diǎn),。
DID類似,,SDID允許在所有處理前期期間處理組和對(duì)照組之間存在恒定的差異。
SC類似,,SDID通過(guò)重新加權(quán)和匹配處理前趨勢(shì)來(lái)放寬傳統(tǒng)的“平行趨勢(shì)”假設(shè),。
SDID的關(guān)鍵步驟是找到個(gè)體權(quán)重(wi),以確保比較是在政策處理前近似遵循平行趨勢(shì)的個(gè)體和對(duì)照組之間進(jìn)行的,,并找到時(shí)間權(quán)重(λt),給那些與政策處理后期間更相似的“政策處理前期間”更高的權(quán)重,。通過(guò)將這些權(quán)重應(yīng)用于標(biāo)準(zhǔn)雙重差分(簡(jiǎn)單地對(duì)所有組和期間分配相等權(quán)重),,我們可以得到政策處理的因果效應(yīng)的一致估計(jì),。幸運(yùn)的是,該方法可以應(yīng)用于有交錯(cuò)政策處理的情況,。不幸的是,,在不平衡面板數(shù)據(jù)的情況下無(wú)法使用該方法,并且它無(wú)法估計(jì)動(dòng)態(tài)效應(yīng),。
Stata中,,可以使用sdid包(由Damian ClarkeExeter大學(xué))和Daniel Paila?ir(智利大學(xué))編寫)來(lái)實(shí)施SDID?;菊Z(yǔ)法如下:
sdid depvar groupvar timevar treatment, vce(vcetype)
其中:depvar是因變量,;groupvar是指示個(gè)體的變量,timevar是指示時(shí)間期間的變量,;treatment指示在特定時(shí)間期間受到政策處理的個(gè)體,。vce(vcetype)是一個(gè)必選選項(xiàng),用于指定用于估計(jì)方差的方法,??捎玫耐茢喾椒òㄗ灾ǎ?/span>bootstrap)、刀切法(jackknife),、安慰劑法(placebo)和無(wú)推斷法(noinference),。如果只有一個(gè)個(gè)體接受處理,則無(wú)法使用自助法和刀切法,。對(duì)于使用安慰劑法,,我們需要至少一個(gè)比受處理個(gè)體更多的對(duì)照個(gè)體。

值得注意的是,,可以使用graphg1on選項(xiàng)創(chuàng)建圖表(如Arkhangelsky等人,,2022中的圖1),顯示個(gè)體權(quán)重(散點(diǎn)圖),、時(shí)間權(quán)重(面積圖)和結(jié)果趨勢(shì)(線圖),。

動(dòng)態(tài)雙重差分(Dynamic DID

通常,研究人員對(duì)僅估計(jì)靜態(tài)效應(yīng)并不滿意,;他們可能還想看到政策的長(zhǎng)期效應(yīng),。例如,一旦Sibal YangCanvas上發(fā)布了新的問(wèn)題集,,那么在截止日期之前的每一天,,問(wèn)題集對(duì)學(xué)生幸福感的影響是什么?無(wú)論如何,,經(jīng)典的動(dòng)態(tài)雙重差分模型允許處理政策效應(yīng)隨時(shí)間而變化的情況,。下面是動(dòng)態(tài)雙重差分模型的一個(gè)示例:

在動(dòng)態(tài)模型中,研究人員需要解決多重共線性的問(wèn)題。避免多重共線性的最常見方法是如上所示排除-1期間的處理虛擬變量(即政策處理前的最后一個(gè)期間),。此外,,上面我對(duì)較遠(yuǎn)的相對(duì)期間進(jìn)行了分組,這也是解決不平衡問(wèn)題的常見方法,。
在這種雙重差分的格式中,,要想取得無(wú)偏估計(jì)就要比經(jīng)典雙重差分復(fù)雜得多。許多計(jì)量經(jīng)濟(jì)學(xué)家試圖解決這個(gè)問(wèn)題,,而且他們現(xiàn)在仍在努力,。接下來(lái),我只介紹幾個(gè)全新的(動(dòng)態(tài)的)雙重差分估計(jì)值以及在Stata中使用它們的相應(yīng)命令,。請(qǐng)注意,,以下某些Stata包還在開發(fā)中,因此在將其應(yīng)用于研究之前,,最好閱讀它們的最新文檔,。
基于交互權(quán)重的雙重差分估計(jì)(Interaction-Weighted Estimator for DID
SunAbraham2021)為靜態(tài)/動(dòng)態(tài)固定效應(yīng)TWFE模型中的系數(shù)識(shí)別提出了假設(shè)。具體而言,,如果處理效應(yīng)隨時(shí)間變化(即βk隨著k的變化),,那么靜態(tài)TWFE固定效應(yīng)模型中的估計(jì)值將存在偏差,但在動(dòng)態(tài)TWFE固定效應(yīng)模型中,,估計(jì)值在同質(zhì)性假設(shè)下仍然有效(即βk在受處理組之間不會(huì)發(fā)生變化),。遺憾的是,當(dāng)允許處理效應(yīng)的異質(zhì)性時(shí),,靜態(tài)和動(dòng)態(tài)TWFE固定效應(yīng)模型中的估計(jì)值都存在偏差,。
為了應(yīng)對(duì)TWFE模型中的系數(shù)被污染問(wèn)題,SunAbraham2021)提出了一種基于交互權(quán)重(IW)的估計(jì)方法,。他們的估計(jì)值通過(guò)估計(jì)隊(duì)列特定處理組的平均處理效應(yīng)”(cohort-specific average treatment effect on the treated, CATT)的可解釋加權(quán)平均值,。在這里,隊(duì)列被定義為同時(shí)首次接受政策處理的所有個(gè)體組成的群組,。

其中一位作者,,Liyang Sun(麻省理工學(xué)院),編寫了一個(gè)Stata軟件包eventstudyinteract,,用于實(shí)施他們的IW估計(jì)方法并構(gòu)建估計(jì)的置信區(qū)間,。要使用eventstudyinteract命令,還必須安裝另一個(gè)軟件包:avar,?;菊Z(yǔ)法如下:

eventstudyinteract y rel_time_list, absorb(id t) cohort(variable) control_cohort(variable) vce(vcetype)

請(qǐng)注意,我們必須包含一個(gè)相對(duì)時(shí)間指標(biāo)列表,,就像在經(jīng)典的動(dòng)態(tài)雙重差分回歸中一樣,。
不幸的是,,這個(gè)命令與estout軟件包不太兼容;因此,,要在圖表中報(bào)告結(jié)果,,可能需要先將結(jié)果存儲(chǔ)在一個(gè)矩陣中,然后再處理該矩陣,。

DID的雙重穩(wěn)健估計(jì)值(Doubly Robust Estimator for DID

前沿: 雙重穩(wěn)健DID, 給你的DID加一把鎖!

CallawaySant'Anna2021)特別關(guān)注分解的因果參數(shù),,即組別g在時(shí)間t的平均處理效應(yīng),,其中“組別”是根據(jù)個(gè)體首次接受政策處理的時(shí)間段定義的。他們將該參數(shù)稱為“組別-時(shí)間平均處理效應(yīng)”,,用ATT(g, t)表示,,并提出了三種不同類型的DID估計(jì)方法來(lái)估計(jì)該參數(shù):
結(jié)果回歸(outcome regressionOR),;
逆概率加權(quán)(inverse probability weighting,,IPW);

雙重穩(wěn)?。?/span>doubly robust,,DR)。

在估計(jì)中,,CallawaySant'Anna建議使用DR方法,,因?yàn)樵摲椒ㄖ灰笪覀冋_地指定比較組的結(jié)果或傾向得分模型中的一個(gè)(但不一定是兩者)。

這兩位作者與Fernando Rios-Avila合作編寫了一個(gè)Stata軟件包csdid,,用于實(shí)施CallawaySant'Anna2021)中提出的DID估計(jì)方法,。在內(nèi)部,所有2?2DID估計(jì)都是使用drdid命令獲得的,,因此要運(yùn)行csdid,,我們必須安裝兩個(gè)軟件包:csdiddrdid

基本語(yǔ)法如下:

csdid Y covar, ivar(id) time(t) gvar(group)

要運(yùn)行這個(gè)模型,,我們需要gvar變量:它為接受處理的個(gè)體首次接受政策處理的時(shí)間,,對(duì)于未接受政策處理的個(gè)體等于0。請(qǐng)注意,,該命令允許我們將協(xié)變量包括在回歸中,;在某些情況下,平行趨勢(shì)假設(shè)可能僅在對(duì)觀察到的協(xié)變量進(jìn)行調(diào)整后成立,。
該命令具有幾種內(nèi)置的估計(jì)系數(shù)方法,;默認(rèn)方法是dripw,即基于逆概率加權(quán)和普通最小二乘法的雙重穩(wěn)健DID估計(jì)值,,該方法來(lái)自于Sant'AnnaZhao2020)的研究,。可以使用method( )選項(xiàng)將其更改為其他可用的方法。此外,,默認(rèn)情況下,,估計(jì)的是穩(wěn)健和漸近標(biāo)準(zhǔn)誤。然而,,還有其他選項(xiàng)可供選擇,,例如使用wboot選項(xiàng)進(jìn)行乘積Wild Bootstrap估計(jì)。在Stata命令窗口中輸入help csdid以了解更多詳細(xì)信息,。
CallawaySant'Anna2021)還提供了一些聚合方案,,用于形成更加總體的因果參數(shù)。在Stata中,,我們可以使用post-estimation estatcsdid_estat命令生成聚合估計(jì)結(jié)果,。如果使用自助法程序(bootstrap procedures)估計(jì)標(biāo)準(zhǔn)誤,推薦使用第二個(gè)命令,。
雙重差分的多組-時(shí)間估計(jì)值
2020年以來(lái),,Clément de ChaisemartinSciencePo)和Xavier D'Haultf?uilleCREST)撰寫了一系列論文,提出了不同的雙重差分估計(jì)技術(shù),。他們的主要貢獻(xiàn)包括:
當(dāng)處理效應(yīng)隨時(shí)間或跨群體呈現(xiàn)異質(zhì)時(shí),,他們的估計(jì)值是有效的。
他們的估計(jì)值允許政策處理的轉(zhuǎn)換(即允許個(gè)體退出),。當(dāng)然,,需要額外的假設(shè);de ChaisemartinD'Haultf?uille2020)明確提出了關(guān)于Y(1)的強(qiáng)外生性,、Y(1)的共同趨勢(shì)以及始終在特定時(shí)間窗口中接受政策處理的穩(wěn)定群組的存在,。
他們的估計(jì)值考慮了面板數(shù)據(jù)中較晚出現(xiàn)的政策處理的折扣(受政策處理時(shí)間短,當(dāng)然受到政策的影響相對(duì)就小一些),。這可能是經(jīng)濟(jì)學(xué)和統(tǒng)計(jì)學(xué)能夠很好結(jié)合的證據(jù),。
他們提出了幾種安慰劑估計(jì)值(通過(guò)模仿實(shí)際估計(jì)值構(gòu)造),以檢驗(yàn)“無(wú)預(yù)期”和“平行趨勢(shì)”假設(shè),。
請(qǐng)注意,,當(dāng)使用尚未接受處理的群組作為對(duì)照組且回歸中沒(méi)有控制變量時(shí),他們的估計(jì)值在數(shù)值上等價(jià)于上一節(jié)中介紹的CallawaySant'Anna2021)的估計(jì)值,。此外,,請(qǐng)注意,de ChaisemarD'Haultf?uille使用“staggered”一詞來(lái)稱呼不允許政策轉(zhuǎn)換的處理設(shè)計(jì),。這與文獻(xiàn)非常不一致,;通常我們稱這種政策處理設(shè)計(jì)為“吸收型處理”,而將“交錯(cuò)型處理”用于描述不同組別受到政策影響的時(shí)間存在差異的設(shè)計(jì),。

de ChaisemarD'Haultf?uille編寫了一個(gè)Stata軟件包did_multiplegt,,用于應(yīng)用他們的估計(jì)器,。基本語(yǔ)法如下:

did_multiplegt Y G T D

其中Y是結(jié)果變量,,G是群組變量,,T是時(shí)間變量,D是處理虛擬變量,。該命令有很多選項(xiàng),,這里只介紹幾個(gè)重要的選項(xiàng):

如果指定了robust_dynamic選項(xiàng),則將使用de ChaisemartinD'Haultfoeuille2022)中提出的估計(jì)值,;否則將使用de ChaisemarD'Haultf?uille2020)中的估計(jì)值,。如果要估計(jì)動(dòng)態(tài)處理效應(yīng),則必須指定robust_dynamic,。我們可以使用dynamic(#)選項(xiàng)指定要估計(jì)的動(dòng)態(tài)效應(yīng)的期數(shù)。

當(dāng)指定了robust_dynamic時(shí),,Stata使用de ChaisemartinD'Haultfoeuille2022)中提出的長(zhǎng)差分安慰劑(long difference placeboes),。我們可以使用firstdiff_placebo選項(xiàng)使Stata使用de ChaisemarD'Haultf?uille2020)中提出的一階差分安慰劑。通過(guò)placebo(#)選項(xiàng),,可以指定要估計(jì)的安慰劑估計(jì)值的數(shù)量,。該數(shù)量最多可以等于數(shù)據(jù)中的時(shí)間期數(shù)。

該命令通過(guò)使用自助法來(lái)估計(jì)標(biāo)準(zhǔn)誤,。我們可以使用cluster()選項(xiàng)來(lái)要求Stata在特定級(jí)別上使用塊自助法(block bootstrap),。不能直接在cluster()中使用交互項(xiàng),但可以在運(yùn)行回歸之前使用group()函數(shù)生成交互項(xiàng),。

discount#)選項(xiàng)允許我們對(duì)面板中后期估計(jì)的處理效應(yīng)進(jìn)行折扣,。

該命令默認(rèn)在每個(gè)回歸之后生成圖形。通過(guò)graphoptions()選項(xiàng),,我們可以修改圖形的外觀,。

這兩位作者為他們的軟件包編寫了一個(gè)信息豐富的文檔(包含一個(gè)長(zhǎng)的常見問(wèn)題解答部分)??梢栽诿畲翱谥休斎?/span>help did_multiplegt來(lái)查看文檔,。
基于插補(bǔ)的雙重差分估計(jì)值(Imputation Estimator for DID
BorusyakJaravelSpiess2023)提出了一種使用插補(bǔ)過(guò)程的有限樣本高效穩(wěn)健雙重差分估計(jì)值,。插補(bǔ)方法受到歡迎的原因包括:

它在計(jì)算上高效(只需要估計(jì)一個(gè)簡(jiǎn)單的TWFE模型),;

插補(bǔ)方法可以輕松地將平行趨勢(shì)和無(wú)預(yù)期假設(shè)與估計(jì)值聯(lián)系起來(lái)。

其中一位作者,,Kirill Borusyak(倫敦大學(xué)學(xué)院),,編寫了一個(gè)Stata軟件包did_imputation,用于實(shí)施他們的插補(bǔ)方法,,以估計(jì)動(dòng)態(tài)處理效應(yīng)并進(jìn)行事件研究中的前期趨勢(shì)檢驗(yàn),?;菊Z(yǔ)法如下:

did_imputation Y id t Ei, fe(id t) horizons(#) pretrends(#)

其中,horizons選項(xiàng)告訴Stata我們希望估計(jì)多少個(gè)前瞻期的處理效應(yīng),,而pretrends選項(xiàng)告訴Stata要對(duì)某些時(shí)期進(jìn)行前期趨勢(shì)檢驗(yàn),。前期趨勢(shì)系數(shù)報(bào)告為pre1pre2等,。與前面提到的方法不同,,這里的前期趨勢(shì)系數(shù)的數(shù)量不會(huì)影響處理效應(yīng)估計(jì)后的其他估計(jì)(他們始終在平行趨勢(shì)和無(wú)預(yù)期假設(shè)下計(jì)算)。

此外,,Borusyak,、JaravelSpiess2022)是一篇出色的論文,指出了經(jīng)典雙重差分中臭名昭著的“負(fù)權(quán)重”問(wèn)題,。這個(gè)問(wèn)題的出現(xiàn)是因?yàn)?/span>OLS估計(jì)對(duì)處理效應(yīng)的同質(zhì)性施加了非常強(qiáng)的限制,。這就是為什么有些計(jì)量經(jīng)濟(jì)學(xué)家稱經(jīng)典的動(dòng)態(tài)雙重差分為一個(gè)受污染的估計(jì)值。
待續(xù)...
潛在候選論文:Dube等人(2023),。
實(shí)例
在本節(jié)中,,我將展示如何在實(shí)證分析中使用上述估計(jì)方法,特別是使用Stata中的特定命令/軟件包,。
時(shí)間固定效應(yīng)(TWFE)與合成雙重差分(SDID
在這里,,我將使用三個(gè)真實(shí)世界的數(shù)據(jù)集來(lái)展示如何運(yùn)行TWFE回歸。如果可行,,我還將展示運(yùn)行SDID的代碼,,然后進(jìn)行比較。
我將使用的數(shù)據(jù)來(lái)自三篇論文:
"OW05_prop99.dta"來(lái)自OrzechowskiWalker2005),,你可以從這里獲取最新版本,。Abadie等人(2010)和Arkhangelsky等人(2021)使用這些數(shù)據(jù)來(lái)估計(jì)提案99(增加香煙稅)對(duì)加利福尼亞州人均銷售的香煙的影響。請(qǐng)注意,,這是一個(gè)分塊政策處理(block treatment)的案例,。
"BCGV22_gender_quota.dta"來(lái)自Bhalotra等人(2022)。他們使用這些數(shù)據(jù)來(lái)估計(jì)議會(huì)性別配額(在議會(huì)中為婦女保留席位)對(duì)議會(huì)中婦女比例的影響,。請(qǐng)注意,,這是一個(gè)交錯(cuò)處理的案例。
"SZ18_state_taxes.dta"來(lái)自SerratoZidar2018),。他們使用這些數(shù)據(jù)來(lái)估計(jì)州企業(yè)稅收減稅/增稅對(duì)稅收和經(jīng)濟(jì)活動(dòng)的影響,。請(qǐng)注意,這是一個(gè)交錯(cuò)處理的案例,;然而,,SerratoZidar2018)使用動(dòng)態(tài)標(biāo)準(zhǔn)差分模型(即,未解決負(fù)權(quán)重問(wèn)題),,因此他們的結(jié)果可能存在偏差,。此外,,請(qǐng)注意,不幸的是sdid命令無(wú)法運(yùn)行動(dòng)態(tài)模型,,因此我們無(wú)法使用SDID來(lái)更新SerratoZidar2018)的結(jié)果,。

我將使用的回歸命令包括:

xtdidregressStata內(nèi)置命令,,用于在面板數(shù)據(jù)上運(yùn)行雙重差分回歸,。使用此命令后,我們可以使用estat創(chuàng)建趨勢(shì)圖并進(jìn)行一些基本檢驗(yàn),。

xtreg,、aregreghdfe最初用于運(yùn)行固定效應(yīng)模型,但也可以輕松應(yīng)用于運(yùn)行雙重差分回歸,。

sdid,,用于運(yùn)行SDID的外部命令。通過(guò)method()選項(xiàng),,我們還可以使用它來(lái)運(yùn)行標(biāo)準(zhǔn)雙重差分和合成控制模型,。

xthdidregress,是Stata 18引入的一種用于估計(jì)異質(zhì)性ATT的命令,。請(qǐng)注意,xthdidregress命令允許多種加權(quán)方式,,我選擇使用aipw(增強(qiáng)逆概率加權(quán),,也稱為“雙重穩(wěn)健”)。盡管Stata 18的文檔沒(méi)有明確說(shuō)明此命令是由哪位作者提出,,但我猜測(cè)這個(gè)命令的思想源于CallawaySant'Anna2021),。請(qǐng)注意,回歸后,,estat aggregation允許我們?cè)谕唤M或時(shí)間內(nèi)匯總ATT,,分析指定時(shí)間窗口內(nèi)的動(dòng)態(tài)效應(yīng),并創(chuàng)建圖表,。

在此處可以找到在這三個(gè)數(shù)據(jù)集上運(yùn)行回歸的完整代碼,。

下面這些代碼經(jīng)過(guò)測(cè)試,可以直接在Stata運(yùn)行,,數(shù)據(jù)附在文后網(wǎng)盤里(網(wǎng)盤里的代碼1),。

cd "C:\Users\xiwan\Desktop\DataforDID"  

**# Block Treatment: Orzechowski & Walker (2005)

use "OW05_prop99.dta", clear

encode state, gen(state_code)

xtset state_code year

* TWFE DID

xtdidregress (packspercapita) (treated), group(state_code) time(year) vce(cluster state_code)

estat trendplots // visualization

estat ptrends // parallel-trends test

estat granger // anticipation test

*estat grangerplot // time-specific treatment effects

eststo twfe1: qui xtreg packspercapita treated i.year, fe cluster(state_code)

eststo twfe2: qui areg packspercapita treated i.year, absorb(state_code) cluster(state_code)

eststo twfe3: qui reghdfe packspercapita treated, absorb(state_code year) cluster(state_code)

estout twfe*, keep(treated) ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) legend ///

stats(N r2_a, nostar labels("Observations" "Adjusted R2") fmt("%9.0fc"3))

* Sythetic DID

eststo syn_did: sdid packspercapita state year treated, vce(placebo) seed(1) ///

graph g1on ///

g1_opt(xtitle("") ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

) ///

g2_opt(ylabel(0(25)150) ytitle("Packs per capita") ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

) ///

graph_export("prop99_did_", .pdf)

ereturn list

matrix list e(omega) // unit-specific weights

matrix list e(lambda) // time-specific weights

estout twfe* syn_did, keep(treated) ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) legend ///

stats(N r2_a, nostar labels("Observations" "Adjusted R2") fmt("%9.0fc"3))

* Compare SDID, DID, and SC

foreach m in sdid did sc {

if "`m'"=="did" {

local g_opt = "msize(small)"

}

else {

local g_opt = ""

}

sdid packspercapita state year treated, ///

method(`m') vce(noinference) graph g1on `g_opt' ///

g1_opt(xtitle("") ytitle("") ///

xlabel(, labsize(tiny)) ///

ylabel(-100(25)50, labsize(small)) ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

) ///

g2_opt(title("`m'") xtitle("") ytitle("") ///

xlabel(, labsize(small)) ///

ylabel(0(25)150, labsize(small)) ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

)

graph save g1_1989 "`m'_1.gph", replace

graph save g2_1989 "`m'_2.gph", replace

}

graph combine "sdid_2.gph" "did_2.gph" "$figdir\sc_2.gph" "sdid_1.gph" "did_1.gph" "sc_1.gph", ///

cols(3) xsize(3.5) ysize(2) ///

graphregion(fcolor(white) lcolor(white))

graph export "compare_sdid_did_sc.pdf", replace

*****************************************************

**# Staggered Treatment: Bhalotra et al. (2022)

use "BCGV22_gender_quota.dta", clear

drop if lngdp==.

tab year

isid country year

* Balanced panel: 115 countries, years from 1990 to 2015.

* Treated group: 9 countries.

* Control group: 106 other states.

eststo stagg1: sdid womparl country year quota, vce(bootstrap) seed(3) ///

graph g1on ///

g1_opt(xtitle("") ytitle("") xlabel(, labsize(tiny)) ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

) ///

g2_opt(ytitle("") ///

plotregion(fcolor(white) lcolor(white)) ///

graphregion(fcolor(white) lcolor(white)) ///

)

ereturn list

matrix list e(tau) // adoption-period specific estimate

matrix list e(lambda)

matrix list e(omega)

matrix list e(adoption) // different adoption years

eststo stagg2: sdid womparl country year quota, covariates(lngdp, optimized) vce(bootstrap) seed(3)

eststo stagg3: sdid womparl country year quota, covariates(lngdp, projected) vce(bootstrap) seed(3)

estout stagg*, ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) legend ///

stats(N, nostar labels("Observations") fmt("%9.0fc"))

******************************************************************

**# Staggered Treatment: Serrato & Zidar (2018)

use "SZ18_state_taxes.dta", replace

keep if year >= 1980 & year <= 2010

drop if fips_state == 11 | fips_state == 0 | fips_state > 56

xtset fips_state year

* Balanced panel: 50 states, years from 1980 to 2010.

* Treated group: 15 states.

* Control group: 35 other states.

* Construct dependent variables

gen log_rev_corptax = 100*ln(rev_corptax+1)

gen log_gdp = 100*ln(GDP)

g r_g = 100*rev_corptax/GDP

* Screen out the tax change with a pre-determined threshold

local threshold = 0.5

gen ch_corporate_rate = corporate_rate - L1.corporate_rate

replace ch_corporate_rate = 0 if abs(ch_corporate_rate) <= `threshold'

gen ch_corporate_rate_inc = (ch_corporate_rate > 0 & !missing(ch_corporate_rate))

gen ch_corporate_rate_dec = (ch_corporate_rate < 0 & !missing(ch_corporate_rate))

* Contruct treatment dummies

** Static

gen change_year = year if ch_corporate_rate_dec==1

bysort fips_state: egen tchange_year = min(change_year)

gen treated = (year >= tchange_year)

** Dynamic

gen period = year - tchange_year

gen Dn5 = (period < -4)

forvalues i = 4(-1)1 {

gen Dn`i' = (period == -`i')

}

forvalues i = 0(1)5 {

gen D`i' = (period == `i')

}

gen D6 = (period >= 6 & period != .)

* Static DID

local ylist = "log_rev_corptax log_gdp r_g"

local i = 1

foreach yvar in `ylist' {

quietly{

eststo areg`i': areg `yvar' treated i.fips_state, absorb(year) cluster(fips_state)

eststo hdreg`i': reghdfe `yvar' treated, absorb(fips_state year) cluster(fips_state)

eststo sdid`i': sdid `yvar' fips_state year treated, vce(bootstrap) seed(2018)

local ++i

}

}

estout areg1 hdreg1 sdid1 areg2 hdreg2 sdid2 areg3 hdreg3 sdid3, keep(treated) ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) legend ///

stats(N r2_a, nostar labels("Observations" "Adj. R2") fmt("%9.0fc" 3))

* Dynamic DID (sdid cannot do this)

local ylist = "log_rev_corptax log_gdp r_g"

local i = 1

foreach yvar in `ylist' {

quietly{

eststo areg`i': areg `yvar' Dn5-Dn2 D0-D6 i.fips_state, absorb(year) cluster(fips_state)

eststo hdreg`i': reghdfe `yvar' Dn5-Dn2 D0-D6, absorb(fips_state year) cluster(fips_state)

local ++i

}

}

estout areg1 hdreg1 areg2 hdreg2 areg3 hdreg3, keep(D*) ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) legend ///

stats(N r2_a, nostar labels("Observations" "Adj. R2") fmt("%9.0fc" 3))

**# Stata 18 new command: xthdidregress

local controls = "FederalIncomeasStateTaxBase sales_wgt throwback FedIncomeTaxDeductible Losscarryforward FranchiseTax"

local ps_var = "FederalIncomeasStateTaxBase sales_wgt throwback FedIncomeTaxDeductible FranchiseTax"

xthdidregress aipw (log_gdp `controls') (treated `ps_var'), group(fips_state) vce(cluster fips_state)

* Visualizing ATT for each cohort

estat atetplot

graph export "SZ18_cohort_ATT.pdf", replace

* Visualizing ATT over cohort

estat aggregation, cohort ///

graph(xlab(, angle(45) labsize(small)) legend(rows(1) position(6)))

graph export "SZ18_cohort_agg_ATT.pdf", replace

* Visualizing ATT over time

estat aggregation, time ///

graph(xlab(, angle(45) labsize(small)) legend(rows(1) position(6)))

graph export "SZ18_time_agg_ATT.pdf", replace

* Visualizing dynamic effects

estat aggregation, dynamic(-5/6) ///

graph( ///

title("Dynamic Effects on Log State GDP", size(medlarge)) ///

xlab(, labsize(small) nogrid) ///

legend(rows(1) position(6)) ///

xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///

)

graph export "SZ18_dynamic_ATT.pdf", replace


Bacon分解、事件研究圖和安慰劑檢驗(yàn)

可以通過(guò)運(yùn)行以下代碼將要使用的數(shù)據(jù)集加載到Stata中:

use "http:///bacon_example.dta", clear

面板數(shù)據(jù)包含1964年至1996年美國(guó)49個(gè)州(包括華盛頓特區(qū),,但不包括阿拉斯加和夏威夷)的州級(jí)信息(特別是無(wú)過(guò)錯(cuò)離婚開始年份和自殺死亡率),。這些數(shù)據(jù)最初由StevensonWolfers2006)用于估計(jì)無(wú)過(guò)錯(cuò)(或單方面)離婚對(duì)女性自殺率的影響。

這里,,首先做一個(gè)無(wú)過(guò)錯(cuò)離婚改革(一種分散處理)對(duì)女性自殺進(jìn)行靜態(tài)的雙重差分估計(jì):

處理組包括采用單方面離婚法的州,,而對(duì)照組包括其余州,。

所有以下命令的估計(jì)系數(shù)應(yīng)相同(但由于不同的算法,標(biāo)準(zhǔn)誤差和R平方不同),。

xtdidregress (asmrs pcinc asmrh cases) (post), group(stfips) time(year) vce(cluster stfips)

xtreg asmrs post pcinc asmrh cases i.year, fe vce(cluster stfips)

areg asmrs post pcinc asmrh cases i.year, absorb(stfips) vce(cluster stfips)

reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)

其中,,asmrs是自殺死亡率,post是政策處理虛擬變量,。其他變量都是控制變量,。Stata報(bào)告的雙重差分系數(shù)為-2.516(標(biāo)準(zhǔn)誤差為2.283),與零無(wú)顯著差異,。

然后,,我們可以對(duì)TWFE DID模型應(yīng)用Bacon分解定理。

bacondecomp asmrs post pcinc asmrh cases, ddetail

下面這個(gè)Bacon分解結(jié)果為新版本bacondecomp得出的,。其中,,Timing-groups表示不同政策處理時(shí)間帶來(lái)的差異,它占據(jù)了總效應(yīng)的 37.76%,,對(duì)應(yīng)的是舊版本bacondecomp中的Earlier T vs. Later C 和Later T vs. Earlier C兩部分的權(quán)重,,Always_v_timing的權(quán)重為37.8%,對(duì)應(yīng)的是舊版本bacondecomp中的T vs. Already treated,,即新處理組與已處理組的對(duì)比差異,。Never_v_timing的權(quán)重為23.9%,對(duì)應(yīng)的是舊版本bacondecomp中的T vs. Never treated,,即處理組對(duì)應(yīng)著從未接受處理過(guò)的對(duì)照組的差異,。而同組內(nèi)的差異占比為 0.509%,始終處理與從未接受處理組的效應(yīng)僅占 0.0018%,。

要看偏差,,主要是看T vs. Already treated或新版本中的Always_v_timing的權(quán)重。

它報(bào)告數(shù)據(jù)集中有14個(gè)時(shí)間組(在不同時(shí)間接受處理可以作為彼此的對(duì)照組),,包括一個(gè)從未處理的組和一個(gè)始終處理的組,。最大的權(quán)重分配給始終處理組和時(shí)間組之間的比較。

我們還可以使用以下編碼(在xtdidregress之后)進(jìn)行分解,。散點(diǎn)圖可以在這里找到,。

estat bdecomp, graph

請(qǐng)記住,Bacon分解作為一種診斷工具,,而不是一種修正方法,。分解告訴我們DID模型中“不好的組別的比較”的嚴(yán)重程度,但它不能解決此問(wèn)題,。
接下來(lái),,我進(jìn)行的是相應(yīng)的動(dòng)態(tài)DID回歸。我使用eventdd命令,,因?yàn)樗梢酝瑫r(shí)運(yùn)行模型并生成圖表,。該命令允許進(jìn)行一些基本的回歸(例如xtregreghdfe),,對(duì)于從高級(jí)DID回歸中繪制結(jié)果,我推薦使用event_plot包(將在下一個(gè)示例中詳細(xì)介紹),。要使用eventdd,,必須安裝兩個(gè)軟件包,即eventddmatsort,。

最后,,我通過(guò)隨機(jī)選擇安慰劑處理時(shí)間并重復(fù)進(jìn)行1000TWFE回歸來(lái)進(jìn)行時(shí)間安慰劑檢驗(yàn)。這項(xiàng)工作是使用Stata內(nèi)置命令permute完成的,。檢驗(yàn)結(jié)果顯示,,我上述的估計(jì)可能不是來(lái)自于一個(gè)不可觀察的時(shí)間趨勢(shì)。安慰劑檢驗(yàn)的圖表(由附加命令dpplot創(chuàng)建)可以在這里找到,。

完整的編碼可以在這里找到,。

下面這些代碼經(jīng)過(guò)測(cè)試,可以直接在Stata運(yùn)行(網(wǎng)盤里的代碼2),。

*** Bacon Decomposition *************************

use "http:///bacon_example.dta", clear

* We see multiple treatment years.

tab year

tab _nfd // the year of the passage of no-fault divorce law

* Regression of female suicide on no-fault divorce reforms

eststo reg1: quietly reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)

estout reg1, keep(post pcinc asmrh cases _cons) ///

varlabels(_cons "Constant") ///

coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///

starlevels(* .1 ** .05 *** .01) ///

stats(N r2_a, nostar labels("Observations" "R-Square") fmt("%9.0fc" 3))

bacondecomp asmrs post pcinc asmrh cases, ddetail

graph export "DID_Decomposition_bacondecomp.pdf", replace

xtdidregress (asmrs pcinc asmrh cases) (post), group(stfips) time(year) vce(cluster stfips)

estat bdecomp, graph

graph export "DID_Decomposition_estat.pdf", replace

*** Event Study Plots *****************************************************

gen rel_time = year - _nfd

* The following uses "xtreg".

eventdd asmrs pcinc asmrh cases i.year, ///

timevar(rel_time) method(fe, cluster(stfips)) ///

noline graph_op( ///

xlabel(-20(5)25, nogrid) ///

xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///

legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///

)

* The following uses "reghdfe".

eventdd asmrs pcinc asmrh cases, ///

timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) ///

noline graph_op( ///

xlabel(-20(5)25, nogrid) ///

xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///

legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///

)

* Only balanced periods in which all units have data are shown in the plot.

eventdd asmrs pcinc asmrh cases i.year, ///

timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) balanced ///

noline graph_op( ///

xlabel(, nogrid) ///

xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///

legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///

)

* Only specified periods are shown in the plot; periods beyond the window are accumulated.

eventdd asmrs pcinc asmrh cases i.year, ///

timevar(rel_time) method(hdfe, cluster(stfips) absorb(stfips year)) ///

accum leads(5) lags(10) ///

noline graph_op( ///

xlabel(, nogrid) ///

xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///

legend(order(1 "Point Estimate" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///

)

*** Placebo Test *****************************************

* Randomly select a placebo treatment time and run TWFE regression for 1000 times

permute post coefficient=_b[post], reps(1000) seed(1) saving("placebo_test.dta", replace): reghdfe asmrs post pcinc asmrh cases, absorb(stfips year) cluster(stfips)

use "placebo_test.dta", clear

dpplot coefficient, ///

xline(-2.516, lc(red) lp(dash)) xline(0, lc(gs12) lp(solid)) ///

xtitle("Effect estimate") ytitle("Density of distribution") ///

xlabel(-3(1)2 -2.516, nogrid labsize(small)) ///

ylabel(, labsize(small)) caption("")

graph export "placebo_test_plot.pdf", replace

交錯(cuò)處理的動(dòng)態(tài) DID

如果一家公司以低于其在國(guó)內(nèi)市場(chǎng)上通常銷售的價(jià)格出口產(chǎn)品,,我們稱該公司在傾銷產(chǎn)品。這種不公平的外國(guó)定價(jià)行為可能對(duì)進(jìn)口市場(chǎng)的企業(yè)和經(jīng)濟(jì)產(chǎn)生不利的扭曲作用,??紤]到這種不利影響,WTO反傾銷協(xié)議允許政府采取一些反傾銷行動(dòng)來(lái)應(yīng)對(duì)外國(guó)的傾銷行為,。最典型的反傾銷行動(dòng)是對(duì)特定產(chǎn)品從特定出口國(guó)征收較高的進(jìn)口關(guān)稅,,希望將不公平的低價(jià)提高到正常價(jià)格,從而減輕對(duì)進(jìn)口國(guó)的損害,。
在這里,我將使用動(dòng)態(tài)DID模型來(lái)估計(jì)美國(guó)對(duì)中國(guó)出口商實(shí)施的反傾銷關(guān)稅在2000年到2009年的動(dòng)態(tài)效應(yīng),。BownCrowley2007)稱這種效應(yīng)為“貿(mào)易破壞”,,并通過(guò)使用美國(guó)和日本的數(shù)據(jù)運(yùn)行IVFEGMM模型來(lái)估計(jì)靜態(tài)政策效應(yīng),。有關(guān)該論文的文獻(xiàn)綜述可以在這里找到,。

我將使用一個(gè)“產(chǎn)品-年”層面的數(shù)據(jù)集,該數(shù)據(jù)集是從全球反傾銷數(shù)據(jù)庫(kù)和中國(guó)海關(guān)數(shù)據(jù)合并而來(lái)(感謝清華大學(xué)中國(guó)數(shù)據(jù)中心),。我將運(yùn)行的動(dòng)態(tài)DID模型如下:

除非另有說(shuō)明,,否則標(biāo)準(zhǔn)誤差在“產(chǎn)品-年”的層面進(jìn)行聚類。
處理組是來(lái)自中國(guó)的那些受到美國(guó)反傾銷關(guān)稅的產(chǎn)品,,而對(duì)照組是來(lái)自中國(guó)的那些經(jīng)歷了反傾銷調(diào)查但最終未受到反傾銷關(guān)稅的產(chǎn)品,。請(qǐng)注意,我沒(méi)有將那些從未接受調(diào)查的產(chǎn)品納入對(duì)照組,。原因是反傾銷調(diào)查是非隨機(jī)的,;受調(diào)查的產(chǎn)品的出口價(jià)格始終低于沒(méi)有接受調(diào)查的產(chǎn)品,。如果我將受到反傾銷關(guān)稅的產(chǎn)品與未經(jīng)調(diào)查的產(chǎn)品進(jìn)行比較,那么我的估計(jì)很可能存在偏誤,。

關(guān)于對(duì)特定產(chǎn)品(在6位數(shù)級(jí)別上進(jìn)行編碼)實(shí)施反傾銷關(guān)稅的年份的信息存儲(chǔ)在變量year_des_duty中,。我使用這個(gè)變量和年份來(lái)構(gòu)建一系列相對(duì)時(shí)間虛擬變量:

gen period_duty = year - year_des_duty
gen Dn3 = (period_duty < -2)
forvalues i = 2(-1)1 {
gen Dn`i' = (period_duty == -`i')
}
forvalues i = 0(1)3 {
gen D`i' = (period_duty == `i')
}

gen D4 = (period_duty >= 4) & (period_duty != .)

傳統(tǒng)上,研究人員使用政策處理前的系數(shù)來(lái)檢驗(yàn)預(yù)趨勢(shì)(pre-trends):如果處理前的系數(shù)與0沒(méi)有顯著差異,,那么他們會(huì)得出平行趨勢(shì)假設(shè)成立的結(jié)論,。然而,SunAbraham2021)證明了這種做法存在嚴(yán)重缺陷,,并需要進(jìn)行修正,。

使用雙重差分的交互加權(quán)估計(jì)的(interaction-weighted estimation of DID)編碼如下:

gen first_union = year_des_duty
gen never_union = (first_union == .)
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
eventstudyinteract ln_`y' Dn3 Dn2 D0-D4, \\\
cohort(first_union) control_cohort(never_union) \\\
absorb(product year) vce(cluster product#year)
}
我們需要告訴Stata每個(gè)個(gè)體的初始處理時(shí)間對(duì)應(yīng)的變量是哪個(gè),將其命名為first_union,。對(duì)于從未接受政策處理的個(gè)體,,該變量應(yīng)設(shè)置為缺失。此外,,我們還需要提供一個(gè)虛擬變量,,對(duì)應(yīng)于對(duì)照組,可以是從未接受處理的個(gè)體或最后接受處理的個(gè)體,。在這里,,我將從未接受處理的個(gè)體作為對(duì)照組,并構(gòu)建一個(gè)名為never_union的變量來(lái)表示它,。
值得注意的是,,Kirill Borusyak編寫了一個(gè)名為event_plot的包,用于方便地繪制雙重差分估計(jì)結(jié)果,,包括后處理系數(shù)和(如果有的話)預(yù)趨勢(shì)系數(shù),,以及置信區(qū)間。我使用這個(gè)命令創(chuàng)建了四張圖,,他們展示了四個(gè)結(jié)果變量的動(dòng)態(tài)效應(yīng),。對(duì)于繪圖,我通常會(huì)自定義繪圖類型,,但實(shí)際上,,如果你對(duì)可視化的要求不像我這么高,可以節(jié)省很多時(shí)間,,使用默認(rèn)類型(使用default_look選項(xiàng)),。

雙重穩(wěn)健估計(jì)(doubly robust estimation of DID)的編碼如下:

gen gvar = year_des_duty
recode gvar (. = 0)
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
quietly csdid ln_`y', ivar(product) time(year) gvar(gvar) \\\
method(dripw) wboot(reps(10000)) rseed(1)
csdid_estat event, window(-3 4) estore(cs_`y') wboot(reps(10000)) rseed(1)

}

cs_did命令在Stata結(jié)果窗口中可能顯示一個(gè)非常長(zhǎng)的輸出表格,因此我在csdid之前加上了quietly命令,。此外,,在許多應(yīng)用中,我更關(guān)心不同時(shí)間點(diǎn)的異質(zhì)性處理效應(yīng),而不是跨不同組的效應(yīng)(而不是由CallawaySant'Anna, 2021定義的組-時(shí)間平均處理效應(yīng)),;因此,,我使用csdid_estat僅在-34期間產(chǎn)生匯總估計(jì)結(jié)果。現(xiàn)在結(jié)果窗口中的輸出表格較短,。還值得注意的是,,我使用wboot選項(xiàng)來(lái)估計(jì)Wild Bootstrap標(biāo)準(zhǔn)誤差,重復(fù)10,000次,。

與之前一樣,,我使用event_plot命令創(chuàng)建四面張圖來(lái)展示動(dòng)態(tài)效應(yīng)。這次,,我使用default_look選項(xiàng)節(jié)省時(shí)間,;此外,我使用together選項(xiàng)將前后滯后項(xiàng)顯示為一個(gè)連續(xù)的曲線,。

de ChaisemartinD'HaultfoeuilleDID估計(jì)的編碼如下:

egen clst = group(product year)
local ylist = "value quantity m_quantity company_num"
foreach y in `ylist'{
did_multiplegt ln_`y' year_des_duty year treated, ///
robust_dynamic dynamic(4) placebo(2) jointtestplacebo ///
seed(1) breps(100) cluster(clst)
}

這里使用de ChaisemartinD'Haultfoeuille2022)的估計(jì)方法,,因?yàn)槲蚁牍烙?jì)動(dòng)態(tài)效應(yīng)。值得注意的是,,我使用長(zhǎng)差分安慰劑進(jìn)行安慰劑檢驗(yàn),;動(dòng)態(tài)效應(yīng)是使用長(zhǎng)差分的雙重差分估計(jì)值來(lái)估計(jì)的,因此使用長(zhǎng)差分安慰劑是正確,。相比之下,,一階差分安慰劑估計(jì)值是連續(xù)時(shí)間段之間的雙重差分;如果在這里添加firstdiff_placebo,,用于說(shuō)明動(dòng)態(tài)處理效應(yīng)的圖形將是無(wú)意義的(即不可比較的),。

相關(guān)討論可以在這里找到(https://www./forums/forum/general-stata-discussion/general/1599964-graph-for-the-dynamic-treatment-effect-using-did_multiplegt-package)。

我個(gè)人不喜歡did_multiplegt自動(dòng)生成的圖形,,而且不幸的是,,graphoptions( )選項(xiàng)不如我期望的靈活。因此,,我選擇撤回并將估計(jì)結(jié)果存儲(chǔ)在矩陣中,。然后,可以使用event_plot命令創(chuàng)建圖形,。創(chuàng)建圖形的過(guò)程與我在應(yīng)用SunAbraham2021)的估計(jì)值時(shí)所做的非常相似。我的四張圖形展示如下:

imputation DID估計(jì)的編碼如下:

gen id = product
gen Ei = year_des_duty
local ylist = "value quantity company_num m_quantity"
foreach y in `ylist'{
did_imputation ln_`y' id year Ei, \\\
fe(product year) cluster(clst) horizons(0/4) pretrends(2) minn(0) autosample
}
我們需要為個(gè)體的處理日期提供一個(gè)變量,,其中缺失值表示從未接受處理的個(gè)體,。我按照軟件文檔將其命名為Ei

可以在這里找到使用插補(bǔ)方法估計(jì)的動(dòng)態(tài)效應(yīng)的四張圖形,,具體如下,。這次,我使用了default_look選項(xiàng),但不使用together選項(xiàng),,所以前瞻和滯后期顯示為兩條分別用不同顏色表示的曲線,。

總結(jié)一下,無(wú)論采用哪種估計(jì)方法,,結(jié)果都顯示出美國(guó)反傾銷稅征收對(duì)四個(gè)結(jié)果變量產(chǎn)生了持續(xù)且負(fù)面的影響,。

下面這些代碼經(jīng)過(guò)測(cè)試,可以直接在Stata運(yùn)行(網(wǎng)盤里的代碼3),。

cd "C:\Users\xiwan\Desktop\DataforDID"
clear all
*************************************************
use "CCD_GAD_USA_affirm.dta", clear
**# Create a series of dummies for duty impositions
gen period_duty = year - year_des_duty
gen treated = (period_duty < . & period_duty >= 0)
gen Dn3 = (period_duty < -2)
forvalues i = 2(-1)1 {
gen Dn`i' = (period_duty == -`i')
}
forvalues i = 0(1)3 {
gen D`i' = (period_duty == `i')
}
gen D4 = (period_duty >= 4) & (period_duty != .)
**# Classical Dynamic DID
* install reghdfe ftools
encode hs06, generate(product) // string variables not allowed for xtset and regression
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
quietly{
eststo reg_`y': reghdfe ln_`y' Dn3 Dn2 D0-D4, absorb(product year) vce(cluster product#year)
}
}
estout reg*, keep(D*) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adjusted R-Square") fmt("%9.0fc" 3))
******************************************************
**# Sun and Abraham (2021)
* install eventstudyinteract avar
gen first_union = year_des_duty
gen never_union = (first_union == .)
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
* Regression
eventstudyinteract ln_`y' Dn3 Dn2 D0-D4, cohort(first_union) control_cohort(never_union) absorb(product year) vce(cluster product#year)
* Visualization
if "`y'"=="value"{
local panel = "A)"
local title = "ln(Value)"
}
if "`y'"=="quantity"{
local panel = "B)"
local title = "ln(Total Quantity)"
}
if "`y'"=="company_num"{
local panel = "C)"
local title = "ln(Number of Exporters)"
}
if "`y'"=="m_quantity"{
local panel = "D)"
local title = "ln(Mean Quantity)"
}
forvalue i=1/7 {
local m_`i' = e(b_iw)[1,`i']
local v_`i' = e(V_iw)[`i',`i']
}
matrix input matb_sa= (`m_1',`m_2',0,`m_3',`m_4',`m_5',`m_6',`m_7')
mat colnames matb_sa= ld3 ld2 ld1 lg0 lg1 lg2 lg3 lg4
matrix input mats_sa= (`v_1',`v_2',0,`v_3',`v_4',`v_5',`v_6',`v_7')
mat colnames mats_sa= ld3 ld2 ld1 lg0 lg1 lg2 lg3 lg4
event_plot matb_sa#mats_sa, ///
stub_lag(lg#) stub_lead(ld#) ///
ciplottype(rcap) plottype(scatter) ///
lag_opt(msymbol(D) mcolor(black) msize(small)) ///
lead_opt(msymbol(D) mcolor(black) msize(small)) ///
lag_ci_opt(lcolor(black) lwidth(medthin)) ///
lead_ci_opt(lcolor(black) lwidth(medthin)) ///
graph_opt( ///
title("`panel' `title'", size(medlarge) position(11)) ///
xtitle("Period", height(5)) xsize(5) ysize(4) ///
ytitle("Coefficient", height(5)) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
yline(0, lpattern(solid) lcolor(gs12) lwidth(thin)) ///
xlabel(-3 "< -2" -2(1)3 4 "> 3", labsize(small)) ///
ylabel(, labsize(small)) ///
legend(order(1 "Coefficient" 2 "95% CI") size(*0.8)) ///
name(sa_`y', replace) ///
graphregion(color(white)) ///
)
}
* install grc1leg: net install grc1leg.pkg, replace
grc1leg sa_value sa_quantity sa_company_num sa_m_quantity, ///
legendfrom(sa_value) cols(2) ///
graphregion(fcolor(white) lcolor(white)) ///
name(sa_fig, replace)
gr draw sa_fig, ysize(5) xsize(6.5)
graph export "SA_DID_Trade_Destruction.pdf", replace
***************************************************************
**# Callaway & Sant'Anna (2021)
* install csdid drdid
gen gvar = year_des_duty
recode gvar (. = 0)
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
quietly csdid ln_`y', ivar(product) time(year) gvar(gvar) method(dripw) wboot(reps(10000)) rseed(1)
csdid_estat event, window(-3 4) estore(cs_`y') wboot(reps(10000)) rseed(1)
}
estout cs_*, keep(T*) ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adjusted R-Square") fmt("%9.0fc" 3))
* Visualization
local ylist = "value quantity company_num m_quantity"
foreach y in `ylist'{
if "`y'"=="value"{
local panel = "A)"
local title = "ln(Value)"
}
if "`y'"=="quantity"{
local panel = "B)"
local title = "ln(Total Quantity)"
}
if "`y'"=="company_num"{
local panel = "C)"
local title = "ln(Number of Exporters)"
}
if "`y'"=="m_quantity"{
local panel = "D)"
local title = "ln(Mean Quantity)"
}
event_plot cs_`y', default_look ///
stub_lag(Tp#) stub_lead(Tm#) together ///
graph_opt( ///
xtitle("Period") ytitle("ATT") ///
title("`panel' `title'", size(medlarge) position(11)) ///
xlab(-3(1)4, labsize(small)) ///
ylab(, angle(90) nogrid labsize(small)) ///
legend(lab(1 "Coefficient") lab(2 "95% CI") size(*0.8)) ///
name(cs_`y', replace) ///
)
}
grc1leg cs_value cs_quantity cs_company_num cs_m_quantity, ///
legendfrom(cs_value) cols(2) ///
graphregion(fcolor(white) lcolor(white)) ///
name(cs_fig, replace)
gr draw cs_fig, ysize(5) xsize(6.5)
graph export "CS_DID_Trade_Destruction.pdf", replace
*********************************************************
**# de Chaisemartin & D'Haultfoeuille (2020, 2022)
* install did_multiplegt
egen clst = group(product year)
local dep = "value quantity company_num m_quantity"
foreach y in `dep'{
* Regression
did_multiplegt ln_`y' year_des_duty year treated, ///
robust_dynamic dynamic(4) placebo(2) jointtestplacebo ///
seed(1) breps(100) cluster(clst)
* Visualization
if "`y'"=="value"{
local panel = "A)"
local title = "ln(Value)"
}
if "`y'"=="quantity"{
local panel = "B)"
local title = "ln(Total Quantity)"
}
if "`y'"=="company_num"{
local panel = "C)"
local title = "ln(Number of Exporters)"
}
if "`y'"=="m_quantity"{
local panel = "D)"
local title = "ln(Mean Quantity)"
}
forvalue i=1/8 {
local m_`i' = e(estimates)[`i',1]
local v_`i' = e(variances)[`i',1]
}
matrix input matb_DIDl= (`m_1',`m_2',`m_3',`m_4',`m_5',0,`m_7',`m_8')
mat colnames matb_DIDl= lg0 lg1 lg2 lg3 lg4 ld1 ld2 ld3
matrix input mats_DIDl= (`v_1',`v_2',`v_3',`v_4',`v_5',0,`v_7',`v_8')
mat colnames mats_DIDl= lg0 lg1 lg2 lg3 lg4 ld1 ld2 ld3
event_plot matb_DIDl#mats_DIDl, ///
stub_lag(lg#) stub_lead(ld#) ///
ciplottype(rcap) plottype(scatter) ///
lag_opt(msymbol(D) mcolor(black) msize(small)) ///
lead_opt(msymbol(D) mcolor(black) msize(small)) ///
lag_ci_opt(lcolor(black) lwidth(medthin)) ///
lead_ci_opt(lcolor(black) lwidth(medthin)) ///
graph_opt( ///
title("`panel' `title'", size(medlarge) position(11)) ///
xtitle("Period", height(5)) xsize(5) ysize(4) ///
ytitle("Average Effect", height(5)) ///
xline(0, lpattern(dash) lcolor(gs12) lwidth(thin)) ///
yline(0, lpattern(solid) lcolor(gs12) lwidth(thin)) ///
xlabel(-3/4, nogrid labsize(small)) ///
ylabel(, labsize(small)) ///
legend(order(1 "Coefficient" 2 "95% CI") size(*0.8) position(6) rows(1) region(lc(black))) ///
name(DIDl_`y', replace) ///
graphregion(color(white)) ///
)
}
grc1leg DIDl_value DIDl_quantity DIDl_company_num DIDl_m_quantity, ///
legendfrom(DIDl_value) cols(2) ///
graphregion(fcolor(white) lcolor(white)) ///
name(DIDl_fig, replace)
gr draw DIDl_fig, ysize(5) xsize(6.5)
graph export "CD_DIDl_Trade_Destruction.pdf", replace
*****************************************************
**# Borusyak, Jaravel & Spiess (2022)
* install did_imputation
gen id = product
gen Ei = year_des_duty
local ylist = "value quantity company_num m_quantity"
foreach y in `ylist'{
quietly{
eststo imp_`y': did_imputation ln_`y' id year Ei, fe(product year) cluster(clst) horizons(0/4) pretrends(2) minn(0) autosample
}
}
estout imp*, ///
coll(none) cells(b(star fmt(3)) se(par fmt(3))) ///
starlevels(* .1 ** .05 *** .01) legend ///
stats(N r2_a, nostar labels("Observations" "Adjusted R-Square") fmt("%9.0fc" 3))
* Visualization
* install event_plot
local ylist = "value quantity company_num m_quantity"
foreach y in `ylist'{
if "`y'"=="value"{
local panel = "A)"
local title = "ln(Value)"
}
if "`y'"=="quantity"{
local panel = "B)"
local title = "ln(Total Quantity)"
}
if "`y'"=="company_num"{
local panel = "C)"
local title = "ln(Number of Exporters)"
}
if "`y'"=="m_quantity"{
local panel = "D)"
local title = "ln(Mean Quantity)"
}
event_plot imp_`y', default_look ///
graph_opt( ///
xtitle("Period") ytitle("Coefficient estimate") ///
title("`panel' `title'", size(medlarge) position(11)) ///
xlab(-2(1)3 4 "> 3", labsize(small)) ///
ylab(, angle(90) nogrid labsize(small)) ///
yline(0, lcolor(gs8) lpattern(dash)) ///
legend(size(*0.8)) ///
name(imp_`y', replace) ///
)
}
grc1leg imp_value imp_quantity imp_company_num imp_m_quantity, ///
legendfrom(imp_value) cols(2) ///
graphregion(fcolor(white) lcolor(white)) ///
name(imp_fig, replace)
gr draw imp_fig, ysize(5) xsize(6.5)
graph export "Imputation_DID_Trade_Destruction.pdf", replace

在Stata上就是這樣,,可以直接使用。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章