倍分法:交错DID与Stata操作

发布时间:2021-08-03 阅读 8154

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 胡文涛 (中国人民大学)
邮箱: hwtxwhr@163.com

编者按:本文主要摘译自下文,特此致谢!
Source:Gardner, John. 2021. A primer on staggered DD. Working Paper. -PDF-


目录


1. 背景介绍

本篇推文是对交错 (staggered) 情形下的 DID 和 Event Studies 做一个入门性介绍。交错指的是对于在一个 (准) 实验研究样本中的个体接受处理时间不一致,而这种情形的存在会对传统的 DID 系数估计和原本直观的处理 (政策) 效果的解释产生影响。已经有不少文献对此进行了讨论 (Borusyak and Jaravel, 2017; Athey and Imbens, 2018; Goodman-Bacon, 2018; de Chaisemartin and D’Haultfoeuille, 2020; Imai andKim, 2020; Sun and Abraham, 2020)。作为入门,在这篇文章里,我们对于一些关键结果提供了直觉和简化的推导,并提供了这种交错情形下 (即处理时间、处理个体存在异质性) 如何对平均处理效应 (ATT) 的一种简单估计方法。

2. 对经典 DID 模型一个回顾

首先,考虑一个最简单的 DID 模型,只有两期 (事前、事后)、两组 (处理组、对照组),并且满足平行趋势假设,我们可以用下列式子进行表示:

其中,i 表示的是个体,t 表示的时间 (一般指的是年,Yit 是观察到的结果变量,Y0it 表示未接受处理时的潜在结果,反之 Y1it 表示接受处理后的潜在结果。

系数 β 表示平均的处理效应,可以通过以下回归估计 β

更常见的情形是,将 Postit 与 Treatit 用时间和个体固定效应表示,具体如下:

此外,另一种常见的做法是将上式改为事件法表达式,具体来说就是将 Dit 变为 Dpit,如下:

与式 (1) 相比,式 (2) 可以用于计算具体每一期的政策效果,获得政策实施的动态效应。同时,这也可以用来检验事前的平行趋势是否满足。

3. 交错情形下的双重差分

一个研究样本中的处理组接受处理时间不一致,呈现出多个队列,用 c=1,...,C 表示,同时处理组与对照组满足平行趋势,我们可以用特定队列事件研究回归 (cohort-specific event-study regression) 来表示这种情况:

其中,Pc 指的是队列 c 最长持续时间;Dcpit 是一个指示变量,表示一个观察值是否属于队列 c 同时在 p 期接受处理;βcp 表示对于队列 c 来说 p 期的平均处理效应。

如果平均的处理效应不依赖于队列和队列接受处理的持续时间,那么我们可以将 c=1Cp=1PcβcpDcpit 替换为 βDit,这样就回到了传统的 DID。但是,这里面有一个担心就是,平均处理效应会受处理队列以及接受处理时间长度的影响。正如前文所提到,已经有一些列文章讨论了这个问题。

对于这个问题,一个简单理解方式的是把 c=1Cp=1PcβcpDcpit 视为传统双重差分回归中存在的遗漏变量。那么式 (1) 所估计出来的系数,既包括式 (3) 中真实的系数,也包含遗漏变量在既有回归变量 (处理状态、个体和时间指示变量) 上的总体线性投影。因为遗漏变量是个求和,βcpDcpit 也是对已有回归变量投影的求和。Dit 真实系数为 0 (被其他回归项吸收了),Dit 总体的回归系数真正识别的是 c=1Cp=1Pcwcpβcpwcp 是 Dcpit 对处理变量 Dit、个体、时间效应进行整体回归的系数。

简单来说,我们通过式 (1) 回归所得到的 β 本质上是多个 DID (子样本,βcp) 加权平均,其权重取决于子样本规模、处理组与控制组规模、以及子样本处理时点的函数。这些权重加起来为 1,但是更为重要的一点是,有些权重可以为负,这些负的权重的存在会使得 DID 系数很难得到解释。

wcp 是 Dcpit 对处理变量 Dit、个体、时间效应进行整体回归的系数,根据 FWL 定理,我们同样可以先把 Dit 对个体和时间效应进行回归得到残差,然后将 Dcpit 与所获得的残差进行回归来得到 wcp。基于双向内部转化 (aka double-demeaned),这个回归可以表达为以下式子:

对于早期的队列来说,P(Dit=1|i) 会很大,但后面时期 (随着更多的个体接受处理),P(Dit=1|t)P(Dit=1) 同样会很大。因此,DID 会赋予早期或者末期更少甚至负的权重。实际上,处于中期 (如两次政策实施时点之间) 的处理组会被赋予更高的权重。这在 Goodman-Bacon (2018) 和 de Chaisemartin and D’Haltfouille (2020) 有更加详尽的解释。

对于这样一种结果,至少有两种直觉上的解释,一是将前后接受处理的队列进行比较,事实上它们都是处理组而不是对照组,特别是当这种处理效应会随着时间和组别发生变化时,这样估计出来的系数就会对正实的效果产生误导。此外,因为 DID 假设不变的 ATT,它会把部分异质性效应归因于个体和时间处理效应。对于那些被处理期数更长以及在某个时期内处理个体数更多,就会吸收更多的处理效应。

4. 事件法研究

Sun and Abraham (2020) 的研究展示了这一现象同样可以应用于事件研究回归。类似地,我们用线性投影来理解这一问题。假设方程 (3) 是正确的,但是我们用方程 (2) 进行估计,Dpit 前的系数识别了遗漏的 βcpDcpit 在 Dpit、事件和个体固定效应上投影的和,可以用下式表示:

wcq|p 是 Dpit 前的系数,来自于 Dcpit 对所有的 Dqit,以及个体、时间效应进行回归。

因此,当持续时间-个体处理效应在不同队列里具有异质性时,原有事件法回归识别的是实际上是所有队列 × 时间-个体平均处理效应的一个加权平均。权重具有以下性质:

正如Sun and Abraham (2020) 所指出的那样,一个重要的后果就是即使满足平行趋势,treatment-adoption 前的系数也不为 0。

5. 处理方法与 Stata 实操

一个简单处理交错和异质性 ATTs 的方法就是去估计方程 (3),这样就可以分离每一个队列和处理持续时间。这也可以估计几个 cohort × duration 的平均处理效应。一个明显方法就是估计下式:

这是总体的平均处理效应 (涵盖所有观察到的处理队列和持续时间)。其他的一些加权平均处理效应同样也可以报告出来,这里不赘述。

用 Stata 处理这个十分方便,下面是具体的 Stata 操作:

*交错 DID 模型
xtreg y i.year ibn.dur#ibn.cohort#c.d, fe vce(cluster id)

上述命令可以估计本文提到的式 (3)。其中,

  • y:表示结果变量;
  • i.year:为时间固定效应;
  • dur:为处理持续时间长度的分类变量 (categorical variable)
  • cohort:为处理队列的分类变量,
  • d:表示处理状态 (随时间而变化 time-varying) 的虚拟变量,
  • ibn.dur#ibn.cohort#c.d:控制因处理时间长短、处理队列异质性而导致的趋势变化;
  • fe:控制个体固定效应;
  • vce(cluster id):表示标准误聚类到个体。

然后利用 margins 命令可以计算出 d 的平均边际效应,通过 subpop 选项可以选取子样本。关于 margins 详细介绍,见 help margins

margins, dydx(d) subpop(if d==1)

当然,相似的命令也可以被用于事件研究回归,下面将以 Jeffrey Wooldridge 模型为例介绍。

*文件地址1:https://www.jianguoyun.com/p/Dfp2soIQlNCuCRjh_vcD
*文件地址2:https://gitee.com/arlionn/data/tree/master/data01/staggered_did

clear all
set more off

// --------------------------------------------------------
// Estimating the ATT with margins
// --------------------------------------------------------

// data from wooldridge  
use staggered_6, clear   //调入数据

// cohort = final treatment duration
egen cohort = sum(w), by(id)  //生成队列变量

// current treatment duration duration 
bysort id: gen dur = sum(w)   //生成dur分类变量

xtset id year

// cohort*duration specification and ATT
*xtreg命令
xtreg logy i.year ibn.dur#ibn.cohort#c.w, fe
margins, dydx(w) subpop(if w==1)

*或者areg命令
areg logy i.year ibn.dur#ibn.cohort#c.w, absorb(id) //areg 命令
margins, dydx(w) subpop(if w==1) 

// duration-specific effects (event study)
margins, dydx(w) subpop(if dur==1)
margins, dydx(w) subpop(if dur==2)
margins, dydx(w) subpop(if dur==3)

*可以具体算每一个持续期的边际效应

// --------------------------------------------------------
// 通过手动加总来说明
// --------------------------------------------------------

// 生成权重
local sum=0
forvalues c=1/3 {
  forvalues p=1/3 {
			gen cp_`c'`p'=(cohort==`c' & dur==`p')
			gen dcp_`c'`p'=(cohort==`c' & dur==`p' & w)
			sum cp_`c'`p' if w
			local cp_`c'`p'=`r(mean)'
			local sum = `sum' + `r(mean)'
			di `terms'
	}
}
di `sum'

// 跑回归
areg logy i.year dcp_*, absorb(id)

// 加重效应
local terms
forvalues c=1/3 {
  forvalues p=1/3 {
			local terms `terms' + `cp_`c'`p''*_b[dcp_`c'`p']
			//di `terms'
	}
}

lincom `terms'

6. 参考文献

  • Baker A, Larcker D F, Wang C C Y. How Much Should We Trust Staggered Difference-In-Differences Estimates?[J]. Available at SSRN 3794018, 2021. -PDF-
  • De Chaisemartin C, d'Haultfoeuille X. Two-way fixed effects estimators with heterogeneous treatment effects[J]. American Economic Review, 2020, 110(9): 2964-96. -PDF-
  • Smith M J, Maringe C, Rachet B, et al. Tutorial: Introduction to computational causal inference using reproducible Stata, R and Python code[J]. arXiv preprint arXiv:2012.09920, 2020. -PDF-
  • Sun L, Abraham S. Estimating dynamic treatment effects in event studies with heterogeneous treatment effects[J]. Journal of Econometrics, 2020. -PDF-
  • Wooldridge. 2021. Two-way fixed effects, the two-way Mundlak regression,and event study estimators. Working Paper. -PDF-

7. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 多时点 多期 边际, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh