最近,我们“宏观经济研学会(CIMERS)”微信群里经常讨论一个问题:我们在做政策/处理效应评估时,要是地区之间存在效应溢出,怎么办?
这个问题源自于处理效应识别中的一个经典假设:SUTVA——针对个体A实施的政策或者处理仅仅只影响A的结果。这意味着,来自于处理组对控制组的“外部性”、“溢出效应”都被排除掉了。
正如上述群讨论的内容,Butts有多篇文章专门讨论了空间溢出效应存在时的处理效应识别,大家可以去好好看看,更为重要的是他有一篇文章还可以同时应对异质性处理效应。
当前也有一些大家熟知的stata命令可以在某些方面应对空间溢出效应的政策评估问题,例如,Clarke(2017)就提出过一种方法,并给出了stata包cdifdif,有兴趣可以去看看。
今天,我们给大家推荐另一种方法:Giovanni Cerulli(2017)提出的一种方法可以应对相邻个体/地区之间相互影响时的处理效应识别方法。
现有的相关研究主要假设:
- (1)个体潜在结果依赖于自身处理和其它个体的处理;
- (2)处理配置是随机的,或者条件独立;
- (3)处理是多值型的;
- (4)潜在结果具有非参数形式。
而Giovanni Cerulli(2017)的识别方法假设:
- (1)个体潜在结果依赖于自身处理和其它个体的潜在结果;
- (2)处理配置是均值条件独立;
- (3)处理事二值型的;
- (4)潜在结果具有参数形式。
一、stata命令
安装stata包ntreatreg:
ssc install ntreatreg,replace
安装完成后,大家可以help一下该命令,看看命令及其选项的含义和用法。该命令的格式:
ntreatreg outcome treatment [varlist] [if] [in] [weight],
spill(matrix)
[hetero(varlist_h) conf(#) graphic save_graph(filename) vce(robust)
const(noconstant) head(noheader) beta]
二、例子:住房位置对犯罪的影响
我们使用Anselin, L.(1988)的数据——研究1980年美国俄亥俄州49个相邻街区的房屋对犯罪的影响。其中,指标cp是处理变量——如果邻居位于城市的中心地段,cp=1,否则为0,犯罪变量crime是每欠人入室盗窃和汽车盗窃案数量。还有其他一些协变量:家庭收入inc,房屋价值hoval。
* 加载数据
use "/Users/xuwenli/Downloads/spatial_columbus.dta"
global y "crime"
global w "cp"
global xvars "inc hoval"
global hvars "inc hoval"
global dvars "x y"
* 处理缺失数据
* 消除共同的缺失值
quietly regress $y $w $xvars $hvars $dvars
* 保留没有缺失值的样本
keep if e(sample)
* 处理归类
gsort - $w
global N = r(N)
count if $w==1
global N1 = r(N)
global N0 = $N-$N1
在使用ntreatreg之前,要先生成权重矩阵omega:
* 用mkomega命令来生成权重矩阵
mkomega $w $dvars, sim_measure(L2) out($y)
matrix omega=r(M)
使用ntreatreg来估计处理效应,并进行推断:
ntreatreg $y $w $xvars, hetero($hvars) spill(omega) graphic
* 储存估计结果,将ATE转换成标量,重命名变量
estimates store REG_peer
scalar ate_neigh = _b[$w]
rename ATE_x _ATE_x_spill
rename ATET_x _ATET_x_spill
rename ATENT_x _ATENT_x_spill
display ate_neigh
检验邻居溢出效应的系数是否联合为0:
* 如果接受原假设Ho: gamma*beta0=0, 邻居效应忽略不计
test _z_inc = _z_hoval = 0
上述结果显示,我们不能拒绝原假设,也就是说,存在邻居溢出效应。那么,为了得到没有邻居溢出效应的ATE,我们可以使用Giovanni Cerulli提出的另一个ivtreatreg命令来实现:
ivtreatreg $y $w $xvars, hetero($hvars) model(cf-ols)
* 储存结果
estimates store REG_no_peer
scalar ate_no_neigh = _b[$w]
最后,可以计算邻居相互影响的偏误程度:
* Bias in level
scalar bias= ate_no_neigh - ate_neigh
* Bias in percentage
scalar bias_perc=(bias/ate_no_neigh)*100
display bias_perc
注:(1)相关讲稿、Slides和stata do文件在许文立老师的github及其主页上公布。
(2)平行趋势的相关stata应用,请《量化社会科学讲习班》的学员注意后续线上讲座通知。
(3)更多计量和stata内容,请参见经验分析方法及Stata命令汇总
71、【应用计量系列71】断点回归(1):概述
72、【应用计量系列72】断点回归(2):丝滑世界里找“跳跃”
73、【应用计量系列73】交叠DID估计量 :stata包csdid升级版
74、【应用计量系列74】控制组群固定效应还是个体固定效应?
75、【应用计量系列75】合成控制法的新推断框架和stata应用
76、【应用计量系列76】平行趋势的秘密(一):平行趋势假设的类型
77、【应用计量系列77】平行趋势的秘密(二):明知不可为而为之
78、【应用计量系列78】断点回归(3):分离不分家
79、【应用计量系列79】平行趋势的秘密(三):如何给平行趋势假设提供经验证据?
80、【香樟推文2663】破产改革的经济后果
81、【应用计量系列81】平行趋势的秘密(四):如何给平行趋势假设提供经验证据?
82、【应用计量系列82】因果推断中的纠偏机器学习方法(DDML)
83、【应用计量系列83】还在取log(Y)?
84、【应用计量系列84】断点回归(4):最新进展
85、【应用计量系列85】DID最新文献:共同相关效应DID(CCE-DID)
86、【应用计量系列86】新DID的Stata包升级版csdid2
87、【应用计量系列87】断点回归的实践指南:扩展(2023年版)