tfdiff:多期DID的估计及图示

发布时间:2020-11-23 阅读 4266

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

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

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

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

作者: 笑花心 (连享会助教)
邮箱: RHs_knowledge@126.com

编者按: 本文摘自以下论文,特此致谢。

Source: Cerulli G. Extending the difference-in-differences (DID) to settings with many treated units and same intervention time: Model and Stata implementation[C]. 2019 Stata Conference. Stata Users Group, 2019 (26). -Link-


目录


1. DID 简介

双重差分法 (Differences-in-Differences)、断点回归 (Regression Discontinuity)、实验室实验 (Laboratory Experiment)、动态随机一般均衡 (Dynamic Stochastic General Equilibrium)、随机控制实验 (Randomized Control Trial) 以及机器学习或大数据 (Machine Learning or Big data) 一起成为近年来最受学者们青睐的几大研究方法。

来源:Cerulli (2019)
来源:Cerulli (2019)

来源:Cerulli (2019)

不同于其他研究,DID 方法具有自身的特点。区别于实验中人为控制得到的数据, 学者们采用 DID 方法进行研究时,往往依据经济活动中的观测数据。与机器学习或大数据相比,DID对数据量的要求较低且更注重因果关系的解释。DID、DSGE 和 RD 的方法都可以用来对政策的效应进行评估。DSGE模型需要设定经济主体所处宏观环境和决策行为,同时引入外生性随机冲击来研究政策影响;RD 方法则强调存在一个连续变量能够随机影响个体是否会接受政策干预;而DID的核心假设则在于共同趋势假设 (详见后文)。

本文重点介绍 tfdiff 命令,在分析多期 DID 时非常好用。它与目前常用的两个命令 (diff 以及 tvdiff) 的区别总结如下:

  • tfdiffdiff 的区别
    • 首先,diff命令只限于两期数据,即政策实施的前后两阶段,在分析多期数据的结果时可能会出问题;
    • 其次,相比之下, diff命令可以进行分位数 DID 等多种回归形式;
    • 最后,diff 命令得到的结果展示形式比较单一, 而 Cerulli 所编写的 tfdiff 命令则可以很便捷地进行输出,并对提供了较好的图形展示效果。
  • tfdifftvdiff 的区别
    • tfdiff 命令要求政策实施时点对于不同个体是固定的 (Time-Fixed),比如欧盟国家在 2001 年同时启用欧元作为共同货币;而 tvdiff 命令可以研究个体政策实施时点不同 (Time-Varing) 的情况 (渐进 DID ),比如不同地区在不同年份实施公共教育支出改革。关于渐进 DID 的介绍,详见「Stata: 多期倍分法 (DID) 详解及其图示」

关于 DID 模型,我们知道「处理组未经处理的结果」和「控制组经处理的结果」无法直接观测,但可以借助「共同趋势假设」来间接的评价政策实施效果。例如,Cerulli (2015) 在研究某一政策时,将 Rome 作为处理组,Milan 作为控制组,共同趋势假设则要求未经处理的 Rome 要和 Milan 的趋势保持一致。

由上图可知,若共同趋势假设成立,政策效果为 3, 反之,政策效果可能为其他值。此时,共同趋势假设成立与否就显得尤为重要。为此,本文将针对 DID 模型中的共同趋势假设检验原理和实现进行简要介绍。

2. 理论推导

基于如下背景:

  • 有一份面板数据,具有 t=0,1,2 时期,并且在 t=1 时期,实施了一项政策;

  • 设置时间虚拟变量 Di,其中 i=0,1,2

  • 设置虚拟变量 w 表示是否受到处理。其中,属于处理组 (w=1) 的个体 (id=1) 在 t=0t=1t=2 这三个时期对应的结果分别是 y1,01y1,11和 y1,21,属于控制组 (w=0) 的个体 (id=2) 在 t=0t=1t=2 这三个时期对应的结果分别是 y2,00y2,10和 y2,20。而对于结果 y1,t0 和 y2,t1,我们无法观测到。

根据上述情形,观测到的结果 yi,t 可以写成以下形式:

在给定 yi,tω 的情况下,我们将给定 t 的条件下平均处理效应定义为

2.1 DID 模型构建

假设可能结果以下面的形式出现 (其中 ω=0,1):

其中,μtω 是依据处理状态随时间变化的成分,θi 表示个体固定效应,λt 为时间固定效应,g(Xit) 依据个体 i 在时间 t 的特征而发生变动,ϵi,tω 表示满足有限方差和零均值的随机冲击。

依据上述表达式,我们可以得到:

因此得到在时点 t 的平均处理效应 (Average treatment effect):

对于处理和非处理状态的样本,我们也可以写成:

其中,考虑 ω=0,1 的情况下

根据 Rubin 潜在结果识别,即

可以得到如下关系:

可以写成:

该式为包含固定效应的基本回归。由此得到因果效应的表达式为:

现在我们将结果拓展至 (T+1) 期:

当 T={0,1,2...,T1,T},且 t 为政策发生时间,可以得到:

其中跨期因果效应为:

2.2 共同趋势检验

依据之前的模型,对于共同趋势假设,我们可以进行一个较为简单的检验,即:

如果原假设没有被拒绝,那么就会接受 “处理组和非处理组个体间存在共同趋势”,尽管这个检验只在没有预期行为的前提下有效。

值得注意的是:

  • 共同趋势假定是 DID 识别方法的基础;

  • 这个假设一般是难以检验的;

  • 当能够得到足够长的时间序列,在没有预期效应的前提下,共同趋势是可以 “被评估的”。

3. tfdiff 命令

3.1 tfdiff 语法介绍

tfdiff 命令语法如下:

tfdiff outcome treatment [varlist] [if] [in] [weight],
       datatype(datatype) model(modeltype) tvar(time_variable) t(#)
       [pvar(panel_variable) test_pt graph ci(#) vce(vcetype)
       save_graph(graphname) save_results(filename)]

其中, outcome 为目标变量,treatment 为处理变量,varlist 为控制变量,其余选项将在下文中说明。

3.2 tfdiff 模拟实例

*-设置默认绘图模板
  clear all
  set scheme s1mono
	
*-生成数据
  set obs 100
  gen id = _n //产生100个个体

  expand 21
  by id, sort: gen year = 1999 + _n //生成2000-2020年份

  gen w = (id <= 21) //将前21个个体设置为处理组

  set seed 1234  //设定种子值,保证结果不变
  gen x=uniform() //x是[0,1]区间上均匀分布的随机变量
  gen y=rnormal(0, 0.5) // y是服从均值为0, 标准差为0.5的正态随机变量

*对于处理组,在政策实施后,y变为服从均值为2,标准差为1的正态随机变量
  replace y=rnormal(2,1) if (year >= 2010) & w==1 //
  keep id year y w x

*-定义个体和时间维度
  tsset id year
  tfdiff y w x, t(2010) pvar(id) tvar(year) datatype(panel)  ///
  model(ols) ci(10) graph vce(cluster id) save_results(RES_tfdiff)

tfdiff 其他选项:

  • t(2010) 指定处理的发生时间,即 2010 年;
  • pvar(id) 指定面板变量 id,且必须为数值型;
  • tvar(year) 指定时间变量 year,且必须为数值型;
  • datatype(datatype) 指定所使用的的数据格式: cross-section 为截面数据,panel 为面板数据;
  • model(modeltype) 指定估计模型:fe 为固定效应,ols 为普通最小二乘法;
  • ci(10) 确定 ATE(t) 的统计显著水平;
  • graph 将结果以图形方式展示;
  • vce(cluster id) 进行聚类标准误调整;
  • save_results(RES_tfdiff) 将 ATE(t) 值和置信区间以「RES_tfdiff.dta」存储于本地。

更多详细介绍,请参考 help tfdiff

3.3 tfdiff 结果展示

tfdiff 结果图示:

处理组和控制组在整个样本时期的变动趋势,如下图所示:

  bysort w year: egen y_mean = mean(y)
  bysort w year: keep if _n == _N
  keep y_mean w year
  reshape wide y_mean, i(year) j(w)

  twoway scatter y_mean1  year, c(1) xlabel(2000(5)2020)      ///
    || scatter  y_mean0 year, c(1) xlabel(2000(5)2020) ,      /// 
    ylabel(-1.0(1)3.0)  xlabel(2000(5)2020) 						      ///
    ytitle("E[y(t)]") xtitle("Time")                          ///
    yline(0 , lpattern(dash)) xline(2010, lw(thick) lp(dash)) ///
    note(Average Effect of the Policy = 2)                    ///
    legend(ring(0) cols(1) order(1 2) position(5)             ///
    label(1 "Treated") label(2 "Untreated"))                  ///
    graphregion(fcolor(white)) scheme(s1mono) 	

可以看出,在 2010 以后,处理组和控制组的结果出现了明显的差异。

参考文献

  • Cerulli, G. . (2015). Econometric evaluation of socio-economic programs. Advanced Studies in Theoretical and Applied Econometrics ReDIF-Book, 49. -Link-
  • Cerulli G, Ventura M. (2019). Estimation of pre-and posttreatment average treatment effects with binary time-varying treatment using Stata. The Stata Journal, 2019, 19(3): 551-565. -Link-

前期相关推文

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

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

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

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD