作者: 崔颖(中央财经大学)
Source: Non-Parametric Regression Discontinuity (Francis, 2013)
连享会计量方法专题……
本篇推文介绍Stata方便实现断点回归 (Regression Discontinuity, RD) 的实用命令rdrobust
, 此命令是由哥伦比亚大学 Sebastian Calonico教授、普林斯顿大学 Matias D. Cattaneo教授及众合作者共同开发。Google的网页RD software package提供了丰富的学习资料,包括许多相关论文的原始数据及复制结果代码。
net install rdrobust, from(http://www-personal.umich.edu/~cattaneo/rdrobust)
RD可以用来识别自然实验或结构性政策变化附近的局部处理效应。
例如,如果你关心政府奖金对大学入学情况有怎样的影响,你可能会想要将那些获得政府奖金的学生和未获得政府奖金的学生进行比较。但这种方法是存在问题的,因为获得政府奖金的低收入家庭学生与未获得政府奖金的学生可能在多方面均存在差异。
应用RD方法的前提条件是个人不能通过合理低报收入水平而获得政府奖金,那些在断点附近的人自报收入分布情况应该和非断点附近的人基本上保持一致。
如果政府奖金资格确定的收入线是未知的,那么,此前提条件可能是合理的。即使学生会系统性地低报他们的收入,但因他们并不知道实际确认资格的收入分界线,可以认为那些收入在断点上下的学生随机抽取自相同的池子,仅是否收到政府奖金这一项差异。
缺乏实验数据的计量经济学识别方法往往需要建立在外生性假定基础之上。也就是说,x 对 y 的影响与误差项 u 不相关。在外生变量直接导致被解释变量变化的情况下,回归识别因果效应才是充分有效的。
在上述例子中,显然,不能简单地将 y (GPA、出勤率、毕业率等)的变化归结为政府奖金的功劳,因为那些收到奖金和未收到奖金的学生存在多方面差异。然而,由于确认资格的收入分界线是未知的,在断点两侧小邻域内的个体可以被视为是相同的。因此,我们有理由认为未知的收入线外生随机地将断点附近的个体分成了两组,一组收到了政府奖金,一组未收到。
这里,我们假设被解释变量与收入的关系是非线性的 (线性相关性的举例和分析可以参见 Sharp Regression Discontinuity Example and Limitations)。Stata 随机生成一些非线性相关的自变量收入 income 和因变量学习表现 perfo 并绘制二者散点关系图。
clear
set obs 10000
gen income=3^((runiform()-0.75)*4)
label var income "Reported Income"
sum income
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
income | 10,000 .6789349 .7606786 .0370671 2.999232
gen perfo=ln(income)+sin((income-r(min))/r(max)*4*_pi)/3+3
label var perfo "Performance Index - Base"
scatter perfo income
下图展示了自变量与因变量的非线性关系:
现在,让我们加入一些随机扰动。
gen perf1=perfo+rnormal()*0.5
label var perf1 "Performance Index - with noise"
scatter perf1 income
接着,使用命令rcspline
,可以将局部平均的学习表现视作收入的三次样条 (Cubic Spline) 函数。
ssc install rcspline
rcspline perf1 income, nknots(7) showknots title(Cubic Spline)
此时,样条曲线是平滑的。接下来,让我们在0.5处设置一个断点。
gen grant=income<0.5
sum grant
Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
grant | 10,000 .5921 .491469 0 1
*样本中大约有59%低收入学生是具备获得政府奖金资格的
*现在加入政府奖金对学生表现的正向效应
*首先生成以政府奖金资格确认收入线为中心的收入变量
gen income_center=income-0.5
gen perf2=perf1+0.5*grant-0.1*income_center*grant
*这样政府奖金对低收入学生将更加有效
label var perf2 "Observed Performance"
连享会计量方法专题……
首先,让我们尝试使用传统的普通最小二乘回归。
reg perf2 income grant
Source | SS df MS Number of obs = 10,000
-------------+---------------------------------- F(2, 9997) = 5734.77
Model | 7041.8845 2 3520.94225 Prob > F = 0.0000
Residual | 6137.80314 9,997 .613964504 R-squared = 0.5343
-------------+---------------------------------- Adj R-squared = 0.5342
Total | 13179.6876 9,999 1.31810057 Root MSE = .78356
------------------------------------------------------------------------------
perf2 | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
income | .9003367 .0168801 53.34 0.000 .8672482 .9334251
grant | -.3767682 .0261265 -14.42 0.000 -.4279814 -.325555
_cons | 1.924569 .0267009 72.08 0.000 1.87223 1.976909
------------------------------------------------------------------------------
显然,估计结果是错误的。政府奖金 grant 的估计系数为负,表明政府奖金会阻碍学习表现,这显然与常理相违背。
接下来,我们尝试使用RD命令rdrobust
。
*默认断点在0点处,因此我们使用中心化后的变量 income_centered
rdrobust perf2 income_center
Sharp RD estimates using local polynomial regression.
Cutoff c = 0 | Left of c Right of c Number of obs = 10000
-------------------+---------------------- BW type = mserd
Number of obs | 5921 4079 Kernel = Triangular
Eff. Number of obs | 683 530 VCE method = NN
Order est. (p) | 1 1
Order bias (q) | 2 2
BW est. (h) | 0.129 0.129
BW bias (b) | 0.197 0.197
rho (h/b) | 0.652 0.652
Outcome: perf2. Running variable: income_center.
--------------------------------------------------------------------------------
Method | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------------+------------------------------------------------------------
Conventional | -.48486 .06467 -7.4971 0.000 -.611614 -.358102
Robust | - - -6.1641 0.000 -.633493 -.327828
--------------------------------------------------------------------------------
回归结果中估计系数为负,原因是RD方法通常默认断点处处置变量由0变为1,与本案例中“收入高于收入线,获得政府奖金的资格取消”正好相反。因此,我们需要改变RD估计量的符号方向。这可以通过将收入取相反数来实现。
gen nincome_center=income_center*(-1)
rdrobust perf2 nincome_center
Sharp RD estimates using local polynomial regression.
Cutoff c = 0 | Left of c Right of c Number of obs = 10000
-------------------+---------------------- BW type = mserd
Number of obs | 4079 5921 Kernel = Triangular
Eff. Number of obs | 530 683 VCE method = NN
Order est. (p) | 1 1
Order bias (q) | 2 2
BW est. (h) | 0.129 0.129
BW bias (b) | 0.197 0.197
rho (h/b) | 0.652 0.652
Outcome: perf2. Running variable: nincome_center.
--------------------------------------------------------------------------------
Method | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------------+------------------------------------------------------------
Conventional | .48486 .06467 7.4971 0.000 .358102 .611614
Robust | - - 6.1641 0.000 .327828 .633493
--------------------------------------------------------------------------------
同时,我们可以将rdrobust
新命令的回归结果与 Stata 传统RD回归命令rd
的结果相比较。
rd perf2 nincome_center
Two variables specified; treatment is
assumed to jump from zero to one at Z=0.
Assignment variable Z is nincome_center
Treatment variable X_T unspecified
Outcome variable y is perf2
Estimating for bandwidth .1832282339354582
Estimating for bandwidth .0916141169677291
Estimating for bandwidth .3664564678709164
------------------------------------------------------------------------------
perf2 | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
lwald | .4860547 .0539727 9.01 0.000 .3802703 .5918392
lwald50 | .4929885 .0744274 6.62 0.000 .3471136 .6388635
lwald200 | .5737225 .0377565 15.20 0.000 .4997212 .6477238
------------------------------------------------------------------------------
rd
命令的好处在于它可以同时汇报出不同带宽下的估计结果,默认的带宽 (100 50 200) 分别代表最小化 MSE(mean squared error) 的带宽及其一半与两倍的带宽。
我们可以将不同带宽的估计结果绘制在一张图上。
gen effect_est = .
label var effect_est "Estimated Effect"
gen band_scale = .
label var band_scale "Bandwidth as a Scale Factor of Bandwidth that Minimizes MSE"
forv i = 1/16 {
rd perf2 nincome_center, mbw(100 `=`i'*25')
if `i' ~= 4 replace effect_est = _b[lwald`=`i'*25'] if _n==`i'
if `i' == 4 replace effect_est = _b[lwald] if _n==`i'
replace band_scale = `=`i'*25' if _n==`i'
}
gen true_effect = .5
label var true_effect "True effect"
two (scatter effect_est band_scale) (line true_effect band_scale)
从图上可以看出,最小化 MSE (即100%) 带宽估计出的结果最为准确,且估计系数在其附近区间内也相对稳定。
本文介绍了 Stata 实现断点回归的最新命令 rdrobust
。选取政府奖学金影响学生学业表现的案例,通过数值模拟随机生成观测数据,分别运用 rdrobust
和rd
命令对模拟数据进行回归分析并比较回归结果。
1. RD Software Packages (https://sites.google.com/site/rdpackages/).
2. Calonico S, Cattaneo M D, Farrell M H, et al. rdrobust: Software for regression-discontinuity designs[J]. The Stata Journal, 2017, 17(2): 372-404.PDF
连享会计量方法专题……
关于我们
Stata
或Stata连享会
后关注我们。联系我们
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。往期精彩推文
USB hub驱动分析(1)--硬件篇 最近在调试usb 功能设备驱动程序,包括hid类设备和audio等。发现很多问题都卡在了HUB的分离处理传输上,不知道是主机控制器兼容性的问题还是配置不对,在周期传输中hub总会出现各种各样的问题。趁着周末好好把hub这块基本的流程看一下。 硬件上主要就是hub芯片了,host接口直接引到上行端口,然后分4
GLUT - The OpenGL Utility Toolkitglut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指
据统计90%查看本帖的人,都已经注册本站了哦您需要 登录 才可以下载或查看,没有帐号?立即注册x一种在Android模拟器下安装Xposed的方法一种在Android模拟器下安装Xposed的方法本人菜鸟一个,研究androd没多久,最近想在模拟器(4.4版本,ARM)上面安装Xposed,本以为模拟器上面安装和真机一样,想不到遇到了一堆问题:1、模拟器可以root(我用的是kingroot,显示...
最近发现这个网站的博客不合适放很多文件的项目,所以需要结合github一起来记录。第一次做RNA-seq,是完全按照这篇文章(PMID:27560171)进行跑流程的,虽然刚开始做的时候不是很懂,但是做完了整个流程(Hisat2+Stringtie+Ballgown)后,就明白了。下载:Hisat2+Stringtie+BallgownGFF 工具这是17年就做好的分析,所以可能...
DelayQueue 是一种阻塞队列,它里面的元素需要实现Delayed接口。它会可以对元素按过期时间排序,取出的元素是最先过期的元素,如果当前没有过期的元素,调用take时候将会阻塞,队列为空时候,调用take也会阻塞。元素:package cn.t2;import java.util.concurrent.Delayed;import java.util.concurrent.TimeU...
apt-get install gcc-arm-linux-gnueabi一句话能搞定的事,没必要手动编译
(一)类的本质类对象(class object)与实例对象(instance object)类本身也是一个对象,是class类型的对象,简称“类对象”。在/usr/include/objc/objc.h 和 runtime.h 中找到对 class 与 object 的定义:Class 是一个 objc_class 结构类型的指针;而 ...
项目里要用到一个网络状态判断的功能,想到了QQ的网络状态判断和设置功能,决定模仿一下。实现起来也很是容易,界面较丑,还望原谅。1.MainActivity.java:package com.example.networktest;import android.app.Activity;import android.content.ComponentName;import android.c
1.utf8转换为gbkheader("Content-type:text/html;charset=UTF-8");echo $str= 'utf8转gbk!';echo '&lt;br /&gt;';echo iconv("UTF-8","gbk//TRANSLIT",$str); //将字符串的编码从UTF-8转到GB23122.gbk转utf8header("Cont...
本文是一篇论文题目,同一篇论文的英文题名与中文题名内容上应一致,但不等于说词语要一一对应。在许多情况下,个别非实质性的词可以省略或变动。(以上内容来自百度百科)今天为大家推荐一篇论文题目,供大家参考。虚拟化技术毕业论文题目一:[1]马汝辉。基于多核的虚拟化技术研究[D].上海交通大学,2011.[2]杨洪波。高性能网络虚拟化技术研究[D].上海交通大学,2012.[3]朱二周。基于CPU/GPU平...
serializeArray()序列化表单1、serialize()方法描述:序列化表单内容为字符串,用于Ajax请求。 格式:var data = $(form).serialize();2.serializeArray()方法描述:序列化表单元素(类似’.serialize()’方法)返回JSON数据结构数据。注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第...
其中af007是我的Windows 2008服务器主机名命令分两部分,第一步是登录远程Windows 2008服务器(否则第二步会报错access denied),第二步关机。net use \\af007\IPC$ mypassword /USER:Administratorshutdown /s -m \\af007参考:官方参考:http://technet.microsoft.com/en