如果看过许老师的讲座视频“平行趋势和证伪分析”,那么,可能还记得关于平行趋势假设检验的一些内容。
当前的研究实践中,为平行趋势提供经验证据最流行的方式就是采用事件研究设计来估计处理前时期的系数(Cunningham,2020),例如,彭飞,许文立,吕鹏,吴华清(2020)、 Miller, Sarah, Sean Altekruse, Norman Johnson, and Laura R. Wherry(2021)。Roth(2022)统计了AEA的主要期刊上70多篇用事件研究的文章,最后用了12篇总结发现,实践中,处理前趋势检验最常用的标准:处理前单个系数的显著性,或者联合显著性,前者更常用。
Kahn-Lang and Lang(2020)指出,越来越多的研究者用统计不显著的处理前趋势检验来支撑“平行趋势假设”。处理前趋势检验对于平行趋势假设确实非常的重要。然而,无法拒绝处理前结果之间的平行趋势,不要与处理后的平行趋势反事实相混淆(这是赌徒逻辑)。而且,需要说明的是,不能拒绝原假设,并不等价于证实它。
例如,He and Wang(2017)研究了中国大学生村官对减贫的影响。采用事件研究的方式来为平行趋势提供证据:
他们得到如下结果:
他们在文章中写到:“处理前系数都不显著…可以认为处理组和控制组处理前的结果趋势相似…未处理的村庄可以作为很好的对照组。”
但是,处理前趋势检验对于DID的有效性来说,既不必要,也不充分(Kahn-Lang and Lang 2018)。Roth (2022, AER:insights) 指出了,处理前趋势检验的问题:
① 处理前趋势检验效力较低——AEA期刊上的文献,即使平行趋势假设不满足,可能也不会发现显著的处理前系数,效力一般在50%-80%;
② 处理前趋势检验偏误——DID效应依赖于处理前趋势检验,它本身存在问题,所以会更加恶化处理后的处理效应估计;
如果处理前趋势检验有问题,那还能做什么?至少还可以做以下几个方面的工作:(1)处理前趋势的效力检验;(2)处理前趋势的敏感性检验;(3)等价性检验;(4)证伪分析;(5)制度/经济/社会背景分析;等等
今天就给大家分享一下“处理前趋势的效力检验”,效力检验的理论解释请看原文或者许老师的讲座视频“平行趋势和证伪分析”。其它内容请关注许老师的工作论文《平行趋势的秘密》。
首先,我们运行事件研究,得到事件研究的结果,如上述He and Wang(2017)的结果。
然后,我们提取事件研究的结果,包括每一期的系数beta和对应的方差-协方差矩阵sigma:
* 加载事件研究的结果
mata {
st_matrix("beta", PreTrendsExampleBeta())
st_matrix("sigma", PreTrendsExampleSigma())
}
* 展示系数
matlist beta'
结果如下:
stata显示r1列,即事件研究的回归系数。
再然后,我们使用效力检验的stata包pretrends:
* 首先加载pretrends包
* (1)从github线上加载
local github https://raw.githubusercontent.com
net install pretrends, from(`github'/mcaceresb/stata-pretrends/main) replace
* (2)下载到本地文件夹,在手动加载
cap noi net uninstall pretrends
net install pretrends, from(`c(pwd)'/stata-pretrends-main)
接下来,可以使用pretrends了。
① 我们要声明系数向量、方差-协方差矩阵。pretrends默认使用e(b)和e(V)。
② 我们可以使用两个选项:
- power选项计算违反平行趋势的线性趋势斜率——处理前趋势检验可能会侦测出显著的处理前系数;
- 另一种,我们可以声明一个假设的违反平行趋势的情形,pretrends命令可以创建一张图来展示我们假设的趋势和原始事件研究结果的对比图,并展示效力检验的统计量。我们可以用slope()声明假设的线性处理前趋势,或者用delta()选项来提供任意的平行趋势违反程度。
pretrends power 0.5, numpre(3) b(beta) v(sigma)
return list
power后面声明的是检测显著处理前系数的概率,numpre是我们想要检测的处理前时期数。上述结果中,r(power)表示在我们假设的趋势下,诊断出显著处理前系数的概率,在我们上面的例子中,r(power)=0.5表示50%的可能检测去显著的处理前系数。r(slope)线性斜率,表示He and Wang(2017)的处理前趋势可能是0.052。
为了可视化上述结果,我们可以把假设的线性趋势和原始事件研究结果放在一张图里对比:
pretrends, numpre(3) b(beta) v(sigma) slope(`r(slope)')
上图中,黑色圆点是事件研究结果,红色直线是我们假设的0.052斜率的处理前趋势线,这个趋势会发展到处理后。
从上图来看,在我们假设的线性趋势下,50%的概率会出现显著的处理前系数。因为假设的趋势在处理后也为正,那么,即使没有大学生村官,可能减贫仍然会出现正向结果,这中趋势非常有可能在中国发生,因为中国在前几年大力推进脱贫攻坚工作。如果这个正的趋势延续到处理之后,那么,作者得到的大学生村官对减贫的正向作用可能就不再可信。
如果我们不想要图,我们可以使用效力检验统计量:
matlist r(results)
return list
r(results) 用来制作事件图的数据。请注意,同时绘制的meanAfterPretesting*,这一列显示了在假设的处理前趋势下通过处理前趋势检验时,系数的期望值。
**r(Power) **在假设的处理前趋势下,我们会发现一个显著的前趋势的概率。(在我们的例子中,根据构造,这是0.50)。
r(BF) (Bayes Factor) 在假设的趋势下 "通过 "处理前趋势检验的概率相对于在平行趋势下的概率的比率。上述结果显示,r(BF) =0.569,表示在我们假设的趋势下通过处理前趋势检验的概率只有在原平行趋势下概率的60%左右,所以我们假设的趋势可能会对处理前趋势检验证据造成很大的影响。
r(LR) (Likelihood Ratio) 在假设的趋势下观察到的系数相对于在平行趋势下观察到的系数的可能性的比率。在上例中,r(LR) =0.106意味着在我们假设的线性趋势下观测系数概率较低。
上面展示了假设的线性处理前趋势,我们也可以假设任意非线性趋势。例如,假设一个二次型趋势:
mata st_matrix("deltaquad", 0.024 * ((-4::3) :- (-1)):^2)
pretrends, numpre(3) b(beta) v(sigma) deltatrue(deltaquad) coefplot
详细的统计量展示可以用:
matlist r(results)
return list