Stata命令模板*断点回归分析设计
*========================================
* 高级计量经济学
*========================================
* 计量经济学服务中心
*-------------------------------------------------------------------------------
* 参考资料:
* 《初级计量经济学及Stata应用:Stata从入门到进阶》
* 《高级计量经济学及Stata应用:Stata回归分析与应用》
* 《高级计量经济学及Eviews应用》
* 《空间计量入门》
* 《零基础|轻松搞定空间计量:空间计量及GeoDa、Stata应用》
* 《空间计量第二部:空间计量及Matlab应用课程》
* 《空间计量第三部:空间计量及Stata应用课程》
* 《空间计量第四部:《空间计量及ArcGis应用课程》
* 《空间计量第五部:空间计量经济学》
* 《空间计量第六部:《空间计量及Python应用》
* 《空间计量第七部:《空间计量及R应用》
* 《空间计量第八部:《高级空间计量经济学》
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
*RD断点回归分析设计
*-------------------------------------------------------------------------------
adopath +E:\stata\plus2
adopath +E:\stata\plus
*1、数据查看
cd E:\stata\data
use rdrobust_senate.dta, clear
ed
desc
*2、断点图形分析
*2.1查看在断点处是否连续
* binscatter
binscatter vote margin,rd(0) n(50) linetype(lfit) ///
xtitle("Vote Share in Election at time t") ///
ytitle("Vote Share in Election at time t+2")
binscatter vote margin if margin>-50 & margin<50, ///
rd(0) n(50) linetype(lfit) ///
xtitle("Vote Share in Election at time t") ///
ytitle("Vote Share in Election at time t+2")
*2.2、cmogram
cmogram vote margin if margin>-50 & margin<50, ///
scatter cut(0) lineat(0) lfit ci(95) histopts(bin(25))
*2.3、twoway graph
tw (scatter vote margin if margin>-50 & margin<50) ///
(lfit vote margin if margin>-50 & margin<0) ///
(lfit vote margin if margin>=0 & margin<50, ///
xline(0,lc(red)) legend(off) ///
xtitle("Vote Share in Election at time t") ///
ytitle("Vote Share in Election at time t+2"))
*2.4、rdplot
rdplot vote margin, c(0) p(4) binselect(es) ci(95) ///
graph_options(title("RD Plot: U.S. Senate Election Data") ///
ytitle(Vote Share in Election at time t+2) ///
xtitle(Vote Share in Election at time t) ///
graphregion(color(white)))
rdplot vote margin if margin>-50 & margin<50, c(0) p(2) binselect(es) ci(95) ///
graph_options(title("RD Plot: U.S. Senate Election Data") ///
ytitle(Vote Share in Election at time t+2) ///
xtitle(Vote Share in Election at time t) ///
graphregion(color(white)))
*3.检验内生分组
DCdensity margin,breakpoint(0) generate(Xj Yj r0 fhat se_fhat)
*4、其他协变量连续检验
cmogram population margin if margin>-50 & margin<50, ///
scatter cut(0) lineat(0) qfit ci(95) histopts(bin(20))
*5、断点回归分析设计
g D = margin>0 // generate treatment status
g marginsq = margin*margin
g D_margin = D*margin
reg vote D margin
reg vote D margin marginsq
reg vote D margin D_margin
rdrobust vote margin
reg vote D margin if margin>-17 & margin<17
reg vote D margin D_margin if margin>-17 & margin<17
断点回归由Thistlewaite and Campbell(1960)首次使用,但直到1990年代末才引起经济学家的重视。
Thistlethwaite、Campbell于1960年首次提出使用断点回归设计研究处理效应, 在该文中他们的目的是研究奖学金对于未来学业的影响, 学生是否获得奖学金取决于考试的分数。由于奖学金由学习成绩决定,故成绩刚好达到获奖标准与差一点达到的学生具有可比性。如果考试分数大于获奖标准分数, 则进入处理组;如果考试分数小于获奖标准分数, 则进入控制组。因此处理变量在获奖标准分数处形成了一个断点, 该研究设计的主要思想是可以利用靠近这一断点附近的样本来有效估计处理效应。
Angrist and Lavy(1999)在研究班级规模对成绩的影响时,利用以色列教育系统的一项制度进行断点回归;该制度限定班级规模的上限为40名学生,一旦超过40名学生(比如41名学生),则该班级被一分为二。
此后30年, 该方法并未引起学术界的重视,直到1990年以后, 断点回归设计开始被应用于各种领域,并且近年来成为因果分析和政策评估领域最重要的研究方法。
Hahn et al(2001)提供了断点回归在计量经济学理论基础。目前,断点回归在教育经济学、劳动经济学、健康经济学、政治经济学以及区域经济学的应用仍方兴未艾。参见Imbens and Lemieux(2008),Van Der Klaauw(2008)以及Lee and Lemieux(2010)的文献综述。
断点回归设计是一种准自然实验, 其基本思想是存在一个连续变量, 该变量能决定个体在某一临界点两侧接受政策干预的概率, 由于X在该临界点两侧是连续的,因此个体针对X的取值落入该临界点任意一侧是随机发生的, 即不存在人为操控使得个体落入某一侧的概率更大, 则在临界值附近构成了一个准自然实验。一般将该连续变量X称为分组变量 (assignment variable)
第1步:导入数据
*-使用 David S.Lee (2007) 参议院选举的数据
use rdrobust_senate.dta
edit
desc
第2步:绘图查看是否存在断点
use "rdrobust_senate.dta", clear
rdplot vote margin
也可以使用如下命令
twoway (scatter vote margin) (qfit vote margin if margin>0)(qfit vote margin if margin<=0),xline(0)
binscatter vote margin,rd(0) n(50) linetype(lfit) ///
xtitle("Vote Share in Election at time t") ///
ytitle("Vote Share in Election at time t+2")
binscatter vote margin if margin>-50 & margin<50, ///
rd(0) n(50) linetype(lfit) ///
xtitle("Vote Share in Election at time t") ///
ytitle("Vote Share in Election at time t+2")
结果为:
*2.2、cmogram
cmogram vote margin if margin>-50 & margin<50, ///
scatter cut(0) lineat(0) lfit ci(95) histopts(bin(25))
第3步:进行回归分析
use "rdrobust_senate.dta", clear
rdrobust vote margin
rdrobust vote margin, h(15)
第4步:稳健性检验之检验结果对不同带宽、不同多项式次数的稳健性
rdrobust vote margin
rdrobust vote margin,all //汇报三种结
第5步:稳健性检验之带宽选择
rdbwselect vote margin,all //CCT IK CV
第6步:稳健性检验之内生分组检验
DCdensity margin,breakpoint(0) generate(Xj Yj r0 fhat se_fhat)
断点回归的基本命令是rd,另外,还有一些其他命令,例如rdrobust、rdlocrand、rddensity等等。本文主要介绍rdrobust。
1、rdrobust:
rdrobust有两个配套命令:rdbwselect用于带宽选择,rdplot用于RD绘图(详细信息请参见Calonico、Cattaneo和Titiunik [2015a])。
下载安装方法为:
net install rdrobust , from ( http : //www-personal.umich.edu/~cattaneo/rdrobust)
net install rdrobust,from(htp:// www-personal umich. edu/cattaneo/software/rdrobust/stata) replace
rdrobust depvar runvar [if] [in] [, c(cutoff) p(pvalue) q(qvalue) deriv(dvalue) fuzzy(fuzzyvar [sharpbw]) covs(covars) kernel(kernelfn) weights(weightsvar) h(hvalueL hvalueR)
b(bvalueL bvalueR) rho(rhovalue) scalepar(scaleparvalue) bwselect(bwmethod) scaleregul(scaleregulvalue) vce(vcemethod) level(level) all]
语法含义为:
depvar可以是结果变量、原因变量或其他协变量
runvar是参考变量
其他可选项。
c(cutoff) specifies the RD cutoff. The default is c(0).
c(cutoff)用于设定断点位置,默认为0。
p(pvalue) specifies the order of the local polynomial used to construct the point estimator. The default is p(1) (local linear regression). p(pvalue)设定多项式阶数,默认为1,局部线性回归。
q(qvalue) specifies the order of the local polynomial used to construct the bias correction. The default is q(2) (local quadratic regression).
covs(covars) 表示加上协变量
kernel(kernelfn) specifies the kernel function used to construct the local polynomial estimators. kernelfn may be triangular, epanechnikov, or uniform. The default is kernel(triangular).即表示
设定多项式拟合时的核函数,kernelfn可以有三种选择:三角核函数 triangular、Epanechnikov核函数、矩形核函数 uniform,默认为三角核。
level(level)设置置信水平,默认为level(95).
h(hvalueL hvalueR)指定主要带宽h,分别用在断点的左边和右边。如果只指定一个值,则对该值使用左右两边。如果没有指定,则由相应的命令rdbwselect计算带宽h。
b(bvalueL bvalueR)指定在断点左侧和右侧分别使用的偏差调整带宽b。如果只指定一个值,则对该值使用双方。如果没有指定,则由相应的命令rdbwselect计算带宽b。
一般带宽和偏差带宽不加上,系统由相应的命令rdbwselect计算带宽。
rho(rhovalue)指定的值,使得偏置带宽b等于b=h/rho。如果指定了h而没有指定b,那么默认值是(1)。
scalepar(scaleparvalue)指定感兴趣的RD参数的调整项。当感兴趣的总体参数涉及已知的乘法时,此选项非常有用子(例如,sharp kink RD)。默认是scalepar(1)(没有缩放)。
all表示程序rdrobust报告三个不同的程序:i)用传统方差估计进行常规RD估计;ii)使用传统方差估计器进行偏差校正的RD估计;和iii)带有稳健方差估计的偏差校正RD估计。
2、rdrobust操作应用
*-使用 David S.Lee (2007) 参议院选举的数据
use "https://gitee.com/arlionn/data/raw/master/data01/rdrobust_rdsenate.dta", clear
use "rdrobust_senate.dta", clear
edit
desc
**Robust RD estimation using MSE bandwidth selection procedure
rdrobust vote margin
rdrobust vote margin, h(15)
结果为:
rdplot depvar runvar [if] [in] [, c(cutoff) p(pvalue) kernel(kernelfn) weights(weightsvar) h(hvalueL hvalueR) nbins(nbinsvalueL nbinsvalueR) binselect(binmethod) scale(scalevalueL
scalevalueR) ci(cilevel) shade support(supportvalueL supportvalueR) genvars graph_options(gphopts) hide]
语法含义为:
c(cutoff) specifies the RD cutoff. The default is c(0).
c(cutoff)用于设定断点位置,默认为0。
p(pvalue) specifies the order of the local polynomial used to construct the point estimator. The default is p(1) (local linear regression). p(pvalue)设定多项式阶数,默认为1,局部线性回归。
kernel(kernelfn) specifies the kernel function used to construct the global polynomial estimators. kernelfn may be triangular, epanechnikov, or uniform. The default is kernel(uniform) (that is, equal or no weighting to all observations on the support of the kernel)..即表示设定多项式拟合时的核函数,kernelfn可以有三种选择:三角核函数 triangular、Epanechnikov核函数、矩形核函数 uniform,默认为矩形核。
h(hvalueL hvalueR)指定主要带宽h,分别用在断点的左边和右边。如果只指定一个值,则该值在两边都使用。如果指定了两个带宽,则第一个带宽用于断点左侧的带宽,第二个带宽用于断点右侧的数据。如果没有指定,则选择它来跨数据的全部支持。
nbins(##)设定划分的区间数,提供两个数值,则分别为左右的区间数;提供一个数值,则断点左右使用共同的区间数。
ci( bilevel)可以根据设定的ci-level画出每个区间拟合点的置信区间,选加 shade置信区间用阴影表示。
shade:指定可选的图形选项,以用阴影区域替换置信区间。
support(supportvalueL supportvalueR)指定一个可选的扩展变量支持,用于构建容器。默认是sample范围。
选项generate()可以将划分的区间以及拟合的数值保存在相应的变量中
rdplot_id为每个观察结果存储一个惟一的区间 ID。
rdplot_N将每个观察值对应的bin中存储的观察值数量。
rdplot_min_bin存储每个观察值的下端值。
rdplot_max_bin存储每个观察值的上端值。
rdplot_mean_bin存储每个观察对应的中点位置
rdplot_mean_x将运行变量的样本均值存储
rdplot_mean_y将结果变量的样本均值存储
rdplot_se_y将结果变量的平均值的标准差存储在每个观察值对应的bin中。
rdplot_ci_l将结果变量的样本均值的置信区间的下端值存储在每个观察对应的bin中。
rdplot_ci_r将结果变量的样本均值的置信区间的上端值存储在每个观察对应的bin中。
rdplot_hat_y存储全局多项式估计器给出的结果变量的预测值
graph_options(gphopts)绘制图形命令的图形选项。
hide省略了RD图形
2、rdplot操作应用
*-使用 David S.Lee (2007) 参议院选举的数据
use "https://gitee.com/arlionn/data/raw/master/data01/rdrobust_rdsenate.dta", clear
use "rdrobust_senate.dta", clear
edit
desc
Basic specification with title
rdplot vote margin, graph_options(title(RD plot))
Quadratic global polynomial with confidence bands
rdplot vote margin, p(2) ci(95) shade
rdbwselect depvar runvar [if] [in] [, c(cutoff) p(pvalue) q(qvalue) deriv(dvalue) fuzzy(fuzzyvar [sharpbw]) covs(covars) kernel(kernelfn) weights(weightsvar) bwselect(bwmethod)
scaleregul(scaleregulvalue) vce(vcemethod) all]
语法含义为:
c(cutoff)指定断点位置。默认值是c(0)。
p(pvalue)指定用来构造点估计器的局部多项式的格式。默认值是p(1)(局部线性回归)。
q(qvalue)指定用于构造偏差校正的局部多项式的阶数。默认值是q(2)(局部二次回归)。
deriv(dvalue)指定要估计的回归函数导数的顺序。默认值是deriv(0)(如果指定了fuzzy(),则为sharp RD或fuzzy RD)。默认为0,即断点回归,取1则为弯折回归设计
fuzzy(fuzzyvar [sharpbw])指定用于实现模糊RD估计的处理状态变量(如果指定了deriv(1),则为模糊断点。默认值是sharp RD 设计。如果设置了sharpbw选项,则使用sharp RD模型的带宽选择过程来执行模糊RD估计。
covs(covars)指定用于估计和推断的额外协变量。
kernel(kernelfn)指定用来构造局部多项式估计的内核函数。kernelfn可以是三角形、epanechnikov或均匀的。默认值是内核(三角形)。
weights(weightsvar)指定用于估计过程的可选加权的变量
bwselect(bwmethod)指定要使用的带宽选择过程。具体实施方法见Calonico, Cattaneo, and Titiunik (2014b); Calonico, Cattaneo, and Farrell (Forthcoming); and Calonico et al. (2016)以及相关的软件文章。bwmethod可以是下列方法之一:
mserd指定一个常见的均方误差(MSE)——用于RD处理效果估计的最优带宽选择器。这是默认设置。
msetwo为RD处理效果估计器指定了两个不同的mse最优带宽选择器(低于和高于截止)。
msesum为回归估计的和指定了一个通用的mse -最优带宽选择器(与之相对的是其差值)。
msecomb1指定min(mserd, msesum)。
msecomb2分别为断开的每一端指定中值median(msetwo、mserd、msesum)。
cerrd指定一个常见的覆盖率错误率(CER)——用于RD处理效果估计器的最优带宽选择器。
certwo为RD处理效果估计器指定了两个不同的ceri最优带宽选择器(低于和高于截止)。
cersum为回归估计值的和指定了一个通用的ceri -optimal带宽选择器(与之相对)。
cercomb1指定min(cerrd, cersum)。
cercomb2分别为边界的每一侧指定median(certwo、cerrd、cersum)。
scaleregul(scaleregulvalue)指定添加到带宽选择器分母上的正则化项的比例因子。设置scaleregul(0)将删除来自带宽选择器的正则化项。默认是scaleregul(1)。
vce(vcemethod)指定了用于计算方差-协方差矩阵估计器的过程,即标砖误差的类型。vce(vcemethod)默认是vce(nn 3).
all指定rdbwselect报告所有可用带宽选择过程。
2、rdbwselect操作应用
*-使用 David S.Lee (2007) 参议院选举的数据
use "https://gitee.com/arlionn/data/raw/master/data01/rdrobust_rdsenate.dta", clear
use "rdrobust_senate.dta", clear
edit
desc
MSE bandwidth selection procedure
rdbwselect vote margin
All bandwidth selection procedures
rdbwselect vote margin, all