Stata 17的新功能(四):使用重复截面数据估计DID
LAST CALL
Now or Never !
本系列的前三期推文:
Stata 17的新功能(一):双重差分法(DID)的官方命令
Stata 17的新功能(二):使用Wild Cluster Bootstrap估计DID的标准误
虽然双重差分法(Difference-in-Differences,简记DID)一般用于面板数据,但有时我们的数据尽管有时间维度,却只是“重复截面数据”(repeated cross-sectional data),即样本中每位(或大多数)个体仅出现一次。此时还能使用DID吗?答案:能!
我们从Stata 17用户手册的一个具体案例说起。假设一个医疗集团想研究一个“新的医院入住手续”(a new hospital admission procedure)对于“病人满意度”(satisfaction of patients)的影响。该集团收集了1-7月的病人数据,而新住院手续从4月开始在集团旗下46家医院中的18家医院实施。由于观测单位为病人,而许多病人在样本中仅出现一次(住院一次),故这是“重复截面数据”,而并非面板数据。
对于重复截面数据,由于每位个体通常只有一个观测值,故无法控制“个体控制效应”,但仍可以控制“分组固定效应”(比如,本例中的医院固定效应)与“时间固定效应”(比如,本例中的月度固定效应)。为此,考虑以下DID模型:
其中,
表示医院 g 中病人 i 在第t 个月的满意度,取值介于0至10,得分越高越满意。处理变量
表示医院 g 在第 t 个月是否实施了新住院手续,其系数
为我们感兴趣的处理效应。
为医院固定效应,
为月度固定效应,而
为随机扰动项。
以Stata 17所提供的模拟数据hospdd.dta为例,进行演示。首先,载入数据:
. use https://www.stata-press.com/data/r17/hospdd, clear
(Artificial hospital admission procedure data)
其次,考察数据的基本统计特征:
. sum
结果显示,样本中共有7,368个观测值。其中,变量satis为结果变量(被解释变量),procedure为处理变量(相当于通常的交互项
),hospital为医院的编号(从1到46),month表示月度(从1到7),而frequency表示病人曾经住院的次数(可作为协变量,或进行DDD估计,参见下期推文)。
更直观地,展示前5个观测值:
. list in 1/5, nolabel
其中,选择项“nolabel”表示,对于数值型变量,不显示其标签,而直接展示其具体数值。
DID的估计
针对此重复截面数据,下面使用Stata 17的官方didregress进行DID估计(未加入协变量):
. didregress (satis) (procedure), group(hospital) time(month)
其中,必选项“group(hospital)”表示以变量hospital作为聚类变量,以计算聚类稳健的标准误,而选择项“time(month)”表示以变量month作为时间变量。估计结果如下。
结果显示,DID的系数估计值为0.848,而聚类稳健标准误为0.032,p值为0.000,在1%水平上显著。下面,尝试用命令reg手工进行DID估计:
. reg satis procedure i.hospital i.month, vce(cluster hospital)
其中,“i.hospital”表示加入医院的虚拟变量, “i.month”表示加入月份的虚拟变量,而选择项“vce(cluster hospital)”表示计算以变量hospital为聚类的聚类稳健标准误。所得结果与官方命令didregress完全相同:
画平行趋势图
使用官方命令didregress的好处在于,可以很方便地画平行趋势图,并检验平行趋势假设。为此,重新运行命令didregress,并使用“估计后命令”(post-estimation command)estat trendplots画平行趋势图:
. quietly didregress (satis) (procedure), group(hospital) time(month)
. estat trendplots, omeans line1opts(lp(dash)) recast(connected) title(平行趋势图)
其中,选择项“omeans”表示只画每期的平均观测值(即observed means),而不画线性趋势图;选择项“line1opts(lp(dash))”表示以虚线(dash)来画控制组的时间趋势,“recast(connected)”将画图类型变为“connected”(即散点连线的形式),而“title(平行趋势图)”加上标题“平行趋势图”。
从上图可知,处理组与控制组在处理前的时间趋势基本平行。
平行趋势检验
更严格的平行趋势检验可通过估计后命令“estat ptrends”来进行:
. estat ptrends
Parallel-trends test (pretreatment time period)
H0: Linear trends are parallel
F(1, 45) = 0.55
Prob > F = 0.4615
需要注意,命令“estat ptrends”的原假设为“Linear trends are parallel”,即在控制组与处理组均有线性时间趋势的大前提下,进一步检验二者的线性趋势是否相同。由于p值为0.4615,故可接受原假设“H0: Linear trends are parallel”。
然而,处理组与控制组均可能存在非线性的时间趋势,故即使命令“estat ptrends”接受平行趋势假设,仍然不是最终结果。为此,Stata 17还提供了估计后命令“estat granger”,可进行进一步的检验。本质上,这相当于是进行了一系列的“安慰剂检验”(placebo tests)。
具体到本例,由于政策冲击实际上从第4期才开始,故安慰剂检验可分别假设政策冲击从第2期或第3期开始。由此,可定义相应的“反事实处理变量”(counterfactual treatment variables,在此例中共有2个),然后放入DID的回归方程,并检验这些反事实处理变量的回归系数的联合显著性。这些反事实处理变量相当于实际处理变量procedure的滞后项,在形式上类似于格兰杰因果检验(Granger causality test),故Stata 17将此检验的命令称为“estat granger”:
. estat granger
Granger causality test
H0: No effect in anticipation of treatment
F(2, 45) = 0.33
Prob > F = 0.7239
结果显示,F 统计量仅为0.33,而相应的p值高达0.7239,故可轻松地接受这两个反事实处理变量联合为0的原假设。这意味着,在实际政策冲击开始于第4期之前,对于政策冲击的预期并未开始产生作用,故可接受原假设“H0: No effect in anticipation of treatment”。换言之,由于“处理效应”在处理之前并不存在,故平行趋势假设成立。
在使用命令didregress进行重复截面数据的DID估计时,若担心聚类数目太小,也可以使用“野聚类自助法”(wild cluster bootstrap)或“数据加总法”(data aggregation)进行处理。由于本例的聚类数目并不小(达到46),没有必要如此处理,故不再赘述。
备注:本公众号不提供 Stata 17。如需正版 Stata 17,请咨询Stata软件官方授权经销商及合作伙伴:北京友万信息科技有限公司(www.uone-tech.cn),希望能为Stata中国用户提供更多服务与支持,联系人:徐经理,Tel/Wechat:18610597626。
参考文献
陈强,《高级计量经济学及Stata应用》,第2版,高等教育出版社,2014年(久负盛名的配套五天现场班,详情见下文海报)
陈强,《计量经济学及Stata应用》,高等教育出版社,2015年(好评如潮的配套教学视频,可在Peixun.net 或网易云课堂购买)
陈强,《机器学习及R应用》,高等教育出版社,2020年11月,472页,双色印刷(配套五天现场班,详情见下文海报,以及页底“阅读原文”)
陈强,《机器学习及Python应用》,高等教育出版社,2021年3月,632页,双色印刷(配套五天现场班,详情见下文海报)
(c) 2021, 陈强,山东大学经济学院
www.econometrics-stata.com
转载请注明作者与出处
Our mission is to make econometrics easy,
and facilitate convincing empirical works.