查看原文
其他

csdid:多时期DID的异质性稳健估计量

数量经济学 数量经济学 2023-10-24
csdid2:多时期DID的异质性稳健估计量
理解DID出了什么问题?双向固定效应模型TWFE与异质性处理效应drdid和csdid

did 设计

正如已经广泛解释的那样,如果治疗效果是异质的,并且治疗的时间因单位而异,则TWFE模型不是识别ATT的合适方法。

现在有很多论文详细解释了为什么会这样。

据我了解,第一个差异(随时间变化),它仍然是一个很好的第一种方法。事实上,Sant'Anna 和 Zhao (2020) 在使用面板数据时,双重稳健估计的运作方式是先估计单位内的差异,然后再使用重新权重方法来估计 ATT。

现在,第二个区别是有问题的。首先,应该了解正在比较哪些组:

  1. 处理单位与从未处理过单位:这些是很好的比较
  2. 已处理的单位与尚未处理的单位:除非您认为存在预期问题,否则这些也很好。
  3. 较晚处理的单位与较早处理的单位:这些是坏的。因为您正在使用已处理的观测值作为控制。

为什么第三种比较是糟糕的平均值?

也许说“坏”是苛刻的。一个更好的词是“潜在的不恰当的比较”。那么什么时候是坏的,什么时候不是?

还不错

如果您认为治疗效果是同质的,并且对结果有一次性冲击(换句话说,潜在结果的一次性向上移动),那么标准TWFE是合适的。即使比较 3 也没有问题,早期处理的单位是良好的“对照”。

绝对糟糕

如果您认为治疗效果是异质的,并且随着时间的推移而变化更多,那么第三种比较是不合适的。为什么?因为我们不知道早期处理的单位是如何受到影响的。

为什么这很重要?

假设您有 2 个观测值,并且平行趋势假设在治疗适用于所有观测值。如果一个单位更早接受治疗,并且效果随时间变化,那么在治疗后,其新的“结果趋势”将不会与第二个单位平行。因此,当第二个单元被处理时,您无法将其与第一个单元(后处理)进行比较,因为平行假设不再成立!

负权重呢?!

关于TWFE问题的另一种讨论方式是负权重的生成。有一段时间,这并没有让我觉得是一个直观的概念,但这个问题与坏群体比较密切相关。让我试着解释一下,放松一点严谨的数学。

当您估计 ATT 时,归根结底,您只是在比较处理的单位与未处理的单位:

在这个简单的情况下,所有处理的单位都得到一个正的权重,所有未处理的单位都有一个有效的“负”权重,因为它们需要减去。

现在,如果您比较较早处理的单位和较晚处理的单位,则具有以下结果:

由于“较早”处理的单元用作对照,因此它正在输入从较晚处理的单元中减去的方程式。然而,在时间t,它已经被处理过,所以它正在接受“负”权重!,当它应该是积极的。这就是问题的根源。TWFE会对一些处理过的单位施加“负”权重,因为它将它们用作“对照”。

那么解决方案是什么?

正如您可能怀疑的那样,解决方案是简单地避免不良比较。而且,是的,这就是Callaway and Sant'Anna (2021)所做的。它估计所有可能的“良好”比较以估计ATT,然后简单地汇总它们以提供结果摘要。但这只是工作的一半。

工作的另一半是以最佳方式实际估计治疗效果,尽可能多地考虑合理的信息。正如Pedro所说,这是他在Sant'Anna and Zhao (2020)中早期作品中提出的构建块。

操作应用

需要下载安装新的CSDIDDRDID

首先,为了使用,您将需要五组文件:CSDID

  • drdid.ado.这是估计的主力。为任何可能的已处理和未处理组对实现 2x2 DID 估计,这实现了Sant'Anna and Zhao (2020).。
  • csdid.ado,这是实施Callaway and Sant'Anna (2021). 的主要程序。它会调用 ,并把所有的东西都放到一张漂亮的桌子上。它完成了所做的工作。它确实带来了一些新的惊喜。drdid.ado``attgt's``att_gt
  • csdid_estat.ado.此文件将用作后估算程序。
  • csdid_stats.ado.这是一个新文件
  • csdid_table.ado.该程序无论何时调用都可以工作。它只是发布 Wildbootstrap 置信区间。
  • csdid_table.ado.该程序无论何时调用都可以工作。它只是发布 Wildbootstrap 置信区间。
  • csdid_plot.ado.这是专用的绘图命令。

与 DID 相比,我的命令使用 drimp 作为默认估计方法。但是,将允许 drdid 中的所有其他估计器(和 除外)。他们的关键是使用**method().选项方法来声明。有趣的是,DID** 用作默认值。因此,我将在以下复制中使用它。

简单的帮助文件

csdid该命令的一般语法如下:

csdid depvar indepvar [if] [in] [iw], ivar(varname) time(year) gvar(group_var) ///
        method(drdid estimator) [notyet] [saverif(file) replace cluster(varname) ///
        wboot agg(aggregation method) reps(#) rseed(#) wbtype(wbtype)] 

以下是所有选项的解释:

  • depvar :是您感兴趣的因变量或结果
  • Indepvar:是你的自变量,你在这里可能有也可能没有变量。这些变量将包含在结果回归规范和/或倾向评分估计中。理想情况下,这是时间常数变量。但是允许随时间变化的变量。在这些情况下,ATT是使用处理前值估计的。
  • **ivar**:是标识面板 ID 的变量。如果删除它,该命令将使用重复的 截面估计器。如果包括,它将估计面板分析。如果使用“ivar”,则需要进行适当的面板数据设置,每个周期每个 ID 只有一个观测值。
  • **time:标识时间**变量(例如年份)。周期是否连续并不重要。此变量应与“gvar”中所有可能的周期重叠。
  • GVAR:是标识首次处理观测值的变量。它应该在“时间”括号内。gvar==0 的观测值被视为从未处理过的单位。
  • **method(estimator)**用于指示要使用的估计方法,可用列表下方:
    • drimp估计 DR 改进的估计。
    • dripw使用 DRIPW 方法
    • reg估计reg回归估计。
    • stdipw估计标准 IPW 估计。
    • IPW估计方法类似于 Abadies (2005)

因此,让我们看看这是如何工作的。首先,加载数据并估计模型。为了复制简单的输出,我将使用 .DID``method(dripw)

use https://friosavila.github.io/playingwithstata/drdid/mpdta.dta, clear 

csdid  lemp lpop , ivar(countyreal) time(year) gvar(first_treat) method(dripw)

结果为:




   des

Contains data from mpdta.dta
  obs:         2,500                          Written by R.              
 vars:             6                          17 May 2021 11:45
-----------------------------------------------------------------------------------------------------------------------------
              storage   display    value
variable name   type    format     label      variable label
-----------------------------------------------------------------------------------------------------------------------------
year            int     %9.0g                 year
countyreal      long    %9.0g                 countyreal
lpop            double  %9.0g                 lpop
lemp            double  %9.0g                 lemp
first_treat     int     %9.0g                 first.treat
treat           byte    %9.0g                 treat
-----------------------------------------------------------------------------------------------------------------------------
Sorted by: 

.   edit


end of do-file

. csdid  lemp lpop , ivar(countyreal) time(year) gvar(first_treat) method(dripw)
............
Difference-in-difference with Multiple Time Periods

                                                Number of obs     =      2,500
Outcome model  : least squares
Treatment model: inverse probability
------------------------------------------------------------------------------
             |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
g2004        |
 t_2003_2004 |  -.0145297   .0221292    -0.66   0.511     -.057902    .0288427
 t_2003_2005 |  -.0764219   .0286713    -2.67   0.008    -.1326166   -.0202271
 t_2003_2006 |  -.1404483   .0353782    -3.97   0.000    -.2097882   -.0711084
 t_2003_2007 |  -.1069039   .0328865    -3.25   0.001    -.1713602   -.0424476
-------------+----------------------------------------------------------------
g2006        |
 t_2003_2004 |  -.0004721   .0222234    -0.02   0.983    -.0440293     .043085
 t_2004_2005 |  -.0062025   .0184957    -0.34   0.737    -.0424534    .0300484
 t_2005_2006 |   .0009606   .0194002     0.05   0.961    -.0370631    .0389843
 t_2005_2007 |  -.0412939   .0197211    -2.09   0.036    -.0799466   -.0026411
-------------+----------------------------------------------------------------
g2007        |
 t_2003_2004 |   .0267278   .0140657     1.90   0.057    -.0008404     .054296
 t_2004_2005 |  -.0045766   .0157178    -0.29   0.771    -.0353828    .0262297
 t_2005_2006 |  -.0284475   .0181809    -1.56   0.118    -.0640814    .0071864
 t_2006_2007 |  -.0287814    .016239    -1.77   0.076    -.0606091    .0030464
------------------------------------------------------------------------------
Control: Never Treated

See Callaway and Sant'Anna (2021) for details




我发现这个输出比 R 中的基线输出更容易理解。每个代表单位治疗。每个代表用于估计 ATT 的两年(前和后)。

下面进行平行假设的趋势前测试。输出可能会发生变化。


 estat pretrend
 
 .  estat pretrend
Pretrend Test. H0 All Pre-treatment are equal to 0
chi2(5) =     6.8418
p-value  =     0.2327

我们还可以重现简单的日历和组聚合:

. estat simple 
Average Treatment Effect on Treated
------------------------------------------------------------------------------
             | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
         ATT |  -.0417518   .0115028    -3.63   0.000    -.0642969   -.0192066
------------------------------------------------------------------------------

. estat calendar
ATT by Calendar Period
------------------------------------------------------------------------------
             | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       T2004 |  -.0145297   .0221292    -0.66   0.511     -.057902    .0288427
       T2005 |  -.0764219   .0286713    -2.67   0.008    -.1326166   -.0202271
       T2006 |  -.0461757   .0212107    -2.18   0.029     -.087748   -.0046035
       T2007 |  -.0395822   .0129299    -3.06   0.002    -.0649242   -.0142401
------------------------------------------------------------------------------

. estat group
ATT by group
------------------------------------------------------------------------------
             | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       G2004 |  -.0845759   .0245649    -3.44   0.001    -.1327222   -.0364297
       G2006 |  -.0201666   .0174696    -1.15   0.248    -.0544065    .0140732
       G2007 |  -.0287814    .016239    -1.77   0.076    -.0606091    .0030464
------------------------------------------------------------------------------




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存