RDD: 断点回归的非参数估计及Stata实现_arlionn的博客-程序员秘密_stata跑rd回归

技术标签: 内生性专题  因果推断  

作者: 崔颖(中央财经大学)

Source: Non-Parametric Regression Discontinuity (Francis, 2013)

连享会计量方法专题……

本篇推文介绍Stata方便实现断点回归 (Regression Discontinuity, RD) 的实用命令rdrobust, 此命令是由哥伦比亚大学 Sebastian Calonico教授、普林斯顿大学 Matias D. Cattaneo教授及众合作者共同开发。Google的网页RD software package提供了丰富的学习资料,包括许多相关论文的原始数据及复制结果代码。

1. 命令安装与方法介绍

net install rdrobust, from(http://www-personal.umich.edu/~cattaneo/rdrobust) 

RD可以用来识别自然实验或结构性政策变化附近的局部处理效应。

例如,如果你关心政府奖金对大学入学情况有怎样的影响,你可能会想要将那些获得政府奖金的学生和未获得政府奖金的学生进行比较。但这种方法是存在问题的,因为获得政府奖金的低收入家庭学生与未获得政府奖金的学生可能在多方面均存在差异。

应用RD方法的前提条件是个人不能通过合理低报收入水平而获得政府奖金,那些在断点附近的人自报收入分布情况应该和非断点附近的人基本上保持一致。

如果政府奖金资格确定的收入线是未知的,那么,此前提条件可能是合理的。即使学生会系统性地低报他们的收入,但因他们并不知道实际确认资格的收入分界线,可以认为那些收入在断点上下的学生随机抽取自相同的池子,仅是否收到政府奖金这一项差异。

缺乏实验数据的计量经济学识别方法往往需要建立在外生性假定基础之上。也就是说,xy 的影响与误差项 u 不相关。在外生变量直接导致被解释变量变化的情况下,回归识别因果效应才是充分有效的。

在上述例子中,显然,不能简单地将 y (GPA、出勤率、毕业率等)的变化归结为政府奖金的功劳,因为那些收到奖金和未收到奖金的学生存在多方面差异。然而,由于确认资格的收入分界线是未知的,在断点两侧小邻域内的个体可以被视为是相同的。因此,我们有理由认为未知的收入线外生随机地将断点附近的个体分成了两组,一组收到了政府奖金,一组未收到。

2. 模拟生成非线性相关数据

这里,我们假设被解释变量与收入的关系是非线性的 (线性相关性的举例和分析可以参见 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"

连享会计量方法专题……

3. 进行非参数估计

首先,让我们尝试使用传统的普通最小二乘回归。

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。选取政府奖学金影响学生学业表现的案例,通过数值模拟随机生成观测数据,分别运用 rdrobustrd命令对模拟数据进行回归分析并比较回归结果。

参考资料

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连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
  • 联系邮件: [email protected]

往期精彩推文

Stata连享会推文列表


欢迎加入Stata连享会(公众号: StataChina)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/arlionn/article/details/95540583

智能推荐

USB hub驱动分析(1)--硬件篇_gl850 windows 驱动程序_hehe1226的博客-程序员秘密

USB hub驱动分析(1)--硬件篇       最近在调试usb 功能设备驱动程序,包括hid类设备和audio等。发现很多问题都卡在了HUB的分离处理传输上,不知道是主机控制器兼容性的问题还是配置不对,在周期传输中hub总会出现各种各样的问题。趁着周末好好把hub这块基本的流程看一下。       硬件上主要就是hub芯片了,host接口直接引到上行端口,然后分4

OpenGL GLUT及其函数的用法整理_glut opengl_hipeboy的博客-程序员秘密

GLUT - The OpenGL Utility Toolkitglut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。回调函数回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指

android 模拟器 xposd,一种在Android模拟器下安装Xposed的方法_weixin_39948277的博客-程序员秘密

据统计90%查看本帖的人,都已经注册本站了哦您需要 登录 才可以下载或查看,没有帐号?立即注册x一种在Android模拟器下安装Xposed的方法一种在Android模拟器下安装Xposed的方法本人菜鸟一个,研究androd没多久,最近想在模拟器(4.4版本,ARM)上面安装Xposed,本以为模拟器上面安装和真机一样,想不到遇到了一堆问题:1、模拟器可以root(我用的是kingroot,显示...

RNA-seq分析_爱笑的小牙的博客-程序员秘密

最近发现这个网站的博客不合适放很多文件的项目,所以需要结合github一起来记录。第一次做RNA-seq,是完全按照这篇文章(PMID:27560171)进行跑流程的,虽然刚开始做的时候不是很懂,但是做完了整个流程(Hisat2+Stringtie+Ballgown)后,就明白了。下载:Hisat2+Stringtie+BallgownGFF 工具这是17年就做好的分析,所以可能...

DelayQueue 延时阻塞队列_要争气的博客-程序员秘密

DelayQueue 是一种阻塞队列,它里面的元素需要实现Delayed接口。它会可以对元素按过期时间排序,取出的元素是最先过期的元素,如果当前没有过期的元素,调用take时候将会阻塞,队列为空时候,调用take也会阻塞。元素:package cn.t2;import java.util.concurrent.Delayed;import java.util.concurrent.TimeU...

ARM 交叉编译环境搭建_arm交叉编译环境搭建_YJM_____的博客-程序员秘密

apt-get install gcc-arm-linux-gnueabi一句话能搞定的事,没必要手动编译

随便推点

OC类的本质及分类_weixin_30748995的博客-程序员秘密

(一)类的本质类对象(class object)与实例对象(instance object)类本身也是一个对象,是class类型的对象,简称“类对象”。在/usr/include/objc/objc.h 和 runtime.h 中找到对 class 与 object 的定义:Class 是一个 objc_class 结构类型的指针;而 ...

Android实战简易教程-第三十八枪(模仿腾讯QQ的网络状态提示和设置功能实现)_yayun0516的博客-程序员秘密

项目里要用到一个网络状态判断的功能,想到了QQ的网络状态判断和设置功能,决定模仿一下。实现起来也很是容易,界面较丑,还望原谅。1.MainActivity.java:package com.example.networktest;import android.app.Activity;import android.content.ComponentName;import android.c

php utf8编码和gbk编码相互转换_php utf8转gbk_编程爱好者之家的博客-程序员秘密

1.utf8转换为gbkheader(&quot;Content-type:text/html;charset=UTF-8&quot;);echo $str= 'utf8转gbk!';echo '&amp;lt;br /&amp;gt;';echo iconv(&quot;UTF-8&quot;,&quot;gbk//TRANSLIT&quot;,$str); //将字符串的编码从UTF-8转到GB23122.gbk转utf8header(&quot;Cont...

服务器虚拟化的毕业设计,虚拟化技术毕业论文题目精选_erachang的博客-程序员秘密

本文是一篇论文题目,同一篇论文的英文题名与中文题名内容上应一致,但不等于说词语要一一对应。在许多情况下,个别非实质性的词可以省略或变动。(以上内容来自百度百科)今天为大家推荐一篇论文题目,供大家参考。虚拟化技术毕业论文题目一:[1]马汝辉。基于多核的虚拟化技术研究[D].上海交通大学,2011.[2]杨洪波。高性能网络虚拟化技术研究[D].上海交通大学,2012.[3]朱二周。基于CPU/GPU平...

serializeArray()和serialize()方法的用法和区别。_hellwrol的博客-程序员秘密

serializeArray()序列化表单1、serialize()方法描述:序列化表单内容为字符串,用于Ajax请求。 格式:var data = $(form).serialize();2.serializeArray()方法描述:序列化表单元素(类似’.serialize()’方法)返回JSON数据结构数据。注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第...

远程关闭Windows 2008服务器_杨江的博客-程序员秘密

其中af007是我的Windows 2008服务器主机名命令分两部分,第一步是登录远程Windows 2008服务器(否则第二步会报错access denied),第二步关机。net use \\af007\IPC$ mypassword /USER:Administratorshutdown /s -m \\af007参考:官方参考:http://technet.microsoft.com/en

推荐文章

热门文章

相关标签