美文网首页
学习笔记—RDD

学习笔记—RDD

作者: 天鹰_2019 | 来源:发表于2020-05-15 21:42 被阅读0次

天鹰 (中南财大 博士研究生)
E-mail:yanbinglh@163.com

目录

  • 背景
  • 断点回归模型介绍
  • 断点回归建模步骤
  • 断点回归模型【Stata具体操作】

1. 背景

2018年, 四川省二本文科分数线: 492分。

对于高考成绩为489, 490, 491, 492, 493, 494的考生, 可认为他们在各方面((不) 可观测因素) 都没有系统差异。甚至可以认为, 他们的成绩具有一定的随机性, 有的考生发挥好的, 492, 493, 494达到了录取分数线( 处理组);有的考生运气差点, 489, 490, 491未达到录取分数线( 控制组) 。 ( 即, 选( 猜) 错一道选择题, 可能出现完全不同的结果。 )


一般地, 对于较小的 θ >0, 高考成绩落在[492 - θ, 492 + θ]之
间的考生, 好像是被随机分组了一般。
① 对于水平差不多的考生, 若蒙对一道选择题, 可能就考上了大学; 相反, 若蒙错一题, 可能就上不了本科。 好像是上天对考分在此区间的考生能否考上大学,进行掷硬币。
② 然而, 对于600以上或300分以下的考生, 他们的成绩一般很难用运气好坏来解释。故, 不予考虑。

由于是随机分组, 因此, 可一致估计在分数线492附近的局部平均处理效应(Local average treatment effect, 记为 LATE)

LATE=E(Y_{1i}-Y_{0i}|X=492)
=E(Y_{1i}|X=492)-E(Y_{0i}|X=492)
=\lim_{X\to492^+}E(Y_{1i}|X)-\lim_{X\to492^-}E(Y_{0i}|X)


注意
① 样本分组是否具有随机性。 可通过检验协变量在断点两侧的分布是否存在显著性差异来实现。
② 断点回归, 是假设存在局部随机分组的。
③ 若分组变量为年龄(时间),地理区域,存在非随机断点设计。
④ 断点回归得到的结论, 一般不能推广至其他样本。

2. 断点回归模型介绍

断点回归分类
2.1 精确断点回归模型

Y_i=\alpha+\beta_1(X_i-c_0)+\beta_2(X_i-c_0)^2+\delta D_i
+\gamma_1(X_i-c_0)D_i+\gamma_2(X_i-c_0)^2D_i+\epsilon_i

其中, X的取值范围为X_i\in(c_0\theta,c_0+\theta),\hat\delta为LATE的估计量。

注意

① 对于模型(1),由于\theta未知,一般采用非参数的核回归的方法对参数进行估计。
② 在模型(1)中,可加入其它影响Yi 的影响因素Wi。
③ 若Wi 在X=c_0处,也存在跳跃,此时,不宜将\hat\delta全部归功于上大学的处理效应。
④ 断点回归的前提假设:W_i的条件密度在X=c_0处连续。
⑤ 内生分组: 个体事先知道分组规则, 并可通过自身操作完全控制分组变量, 可自行选择进入控制组或处理组( 实验组),导致断点附近的内生分组而非随机分组,最终导致断点回归失效。
⑥ McCrary(2008)提出通过检验分组变量X在断点两侧的密度函数是否连续, 来判断是否存在内生分组。

建议

① 分别汇报三角核与矩形核的局部线性回归结果
② 分别汇报使用不同带宽的结果
③ 分别汇报(不) 包括协变量的情形
④ 进行模型设定检验, 包括检验分组变量、 协变量的条件密度在断
点处, 是否连续。


2.2 模糊断点回归模型
与精确断点回归不同之处
  • 1.在模糊断点的情形下, 处理变量D 不完全由分组变量X 决定, 影响处理变量D 的其他因素也会影响Y,故, 对于模型(1)而言, OLS估计结果不一致。
  • 2.例如, 影响上大学, 除了高考分数外, 还有加分项等。

模糊断点附近的局部平均处理效应(Local average treatment effect,记为LATE)
假定,给定X_i,则(Y_{1i}-Y_{0i}) \bot D_i|X_i
LATE=E(Y_{1i}-Y_0|X=c_0)

=\frac{\lim_{X\to c_0^+} E(Y_i|X)- \lim_{X\to c_0^-} E(Y_i|X)} {\lim_{X\to c_0^+} E(D_i|X) -\lim_{X\to c_0^-} E(D_i|X)}


3. 断点回归建模步骤

  • 输入数据
  • 描述性分析
  • 若是横截面数据, 请跳过此步。( 面板单位根检验( 一般T>=20,T较小,单位根检验方法功效低。) 若变量平稳,进行如下操作,)
  • 分析样本是否满足断点回归的条件。


    理论操作流程图

精确断点回归与模糊断点回归如何选择

- g newwin=(d>=0)
- tabulate newwin win
- 或者
- gen xw=newwin-win
- list xw
- 此处, 分组变量d的断点是0, 生成新虚拟变量newwin
- 因此, 若newwin与处理变量win完全相等(newwin-win全部为0) 则属于精确断点回归; 否则, 属于模糊断点回归。 见下图。
新变量匹配情况

精确断点回归的建议
① 分别汇报三角核与矩形核的局部线性回归结果
② 分别汇报使用不同带宽的结果
③ 分别汇报(不) 包括协变量的情形
④ 进行模型设定检验, 包括检验分组变量、 协变量的条件密度在断点处,是否连续。


4. 断点回归模型【Stata具体操作】

* ssc install rd, replace      /----安装rd命令包------/

------------------------------rd------------------------------------
 rd outcomevar [treatmentvar] assignmentvar [if] [in] [weight] [, options]

 outcomevar :结果变量。
 treatmentvar :处理变量。若忽略处理变量treatmentvar,则默认为【精确断点】回归,
             且根据分组变量assignmentvar来计算处理变量,
             若assignmentvar>=z0,则treatmentvar=1,反之等于0。
 assignmentvar :分组变量 Z。 
 
 ----选项----
 mbw(numlist) :指定最优窗宽的倍数,默认为mbw(100,50,200),即最优窗宽的1,0.5,2倍
                    进行局部线性回归。
 z0(real) :断点位置,默认为z0(0),即原点。
 strineq :当assignmentvar严格大于z0时,treatmentvar=1,反之等于0。
 covar(varlist) :指定加入局部线性回归的控制变量。 
 x(varlist) :检验这些控制变量在断点处是否存在跳跃。
 ddens :要求计算分组变量Z密度的断点。
 s(stubname) :要求估计结果保存为以stubname为开头的新变量。
 graph :根据所选的每一窗宽,画出对应的局部线性回归图。
 noscatter :不画散点图。
 cluster(varlist) :方差协方差稳健估计。
 scopt(string) :为散点图提供选项列表。
 lineopt(string) :为多个重叠的直线提供选项列表。
 n(real) :指定在计算局部线性回归的点的个数。
 bwidth(real) :局部线性回归的窗宽。默认使用Imbens and Kalyanaraman (2009)给出的最优窗宽估计。
 bdep :画断点回归估计量与窗宽的图形,分析断点回归估计量对窗宽的依赖程度。
 oxline :在bdep画出的图的最优窗宽上画一条直线,方便识别。
 bingraph :画箱图而非散点图。
 binvar(varname) :指定变量取计算箱(binned means)。
 kernel(rectangle) :使用矩形核(均匀核),默认使用三角核。
-----------------------------------------------------------------------------*/

McCrary(2008)检验分组变量的密度函数在断点处是否连续。
依此判断,是否为【内生分组】问题。

【注意】需要安装DCdensity命令包,
用sysdir找到系统位置,并复制到C:\ado\plus----

  • 下载地址:https://eml.berkeley.edu/~jmccrary/DCdensity/
    DCdensity d, breakpoint(0) generate(Xj Yj r0 fhat se_fhat) graphname(testrd.eps)
  • 若不拒绝原假设,说明无内生分组,可以考虑进行断点回归;
  • 否则,不可进行断点回归。
  • 此处,检验不存在内生分组,故【继续】下面的操作。
  • 4.1判断是【精确断点】回归还是【模糊断点】回归?
  g  newwin=(d>=0)
  
  tabulate newwin win 
  *或者,等价于
  gen xw=newwin-win
  l xw

           |     Dem Won Race 
    newwin |         0          1 |     Total
-----------+----------------------+----------
         0 |       131          0 |       131 
         1 |         0        218 |       218 
-----------+----------------------+----------
     Total |       131        218 |       349 

此处,分组变量d的断点是0,生成新虚拟变量newwin
因此,若newwin与处理变量win完全相等(即newwin-win全部等于0),则属于精确断点回归;否则,属于模糊断点回归。
此处,是【精确断点】回归,故【继续】下面的操作。

  • 4.2选择最优窗宽:设置不同窗宽,通过图形选择
  • 注意:选择最优窗宽时,可以考虑加协变量进行选择。大家自己尝试。从默认的3种窗宽mbw(100,50,200)中,选一个最优的。
    rd lne d, gr bdep oxline
    1倍带宽
    0.5倍带宽
    2倍带宽

最优带宽

  • 4.3检验协变量是否在断点处,存在跳跃
  rd lne d, mbw(105) x(i votpop black blucllr ///
             farmer fedwrkr forborn manuf unemplyd union ///
             urban veterans)  
Two variables specified; treatment is 
assumed to jump from zero to one at Z=0. 

 Assignment variable Z is d
 Treatment variable X_T unspecified
 Outcome variable y is lne

Estimating for bandwidth .29287775925349
Estimating for bandwidth .3075216472161645
------------------------------------------------------------------------------
         lne |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
           i |  -.0044941   .1208008    -0.04   0.970    -.2412592    .2322711
      votpop |  -.0082128   .0062347    -1.32   0.188    -.0204326    .0040071
       black |  -.0036113    .020048    -0.18   0.857    -.0429046    .0356821
     blucllr |   .0026193   .0057316     0.46   0.648    -.0086144     .013853
      farmer |  -.0078737   .0037566    -2.10   0.036    -.0152366   -.0005109
     fedwrkr |   .0001617   .0037584     0.04   0.966    -.0072046    .0075281
     forborn |   -.015235   .0120682    -1.26   0.207    -.0388882    .0084183
       manuf |   .0147223   .0100352     1.47   0.142    -.0049463    .0343908
    unemplyd |  -.0007393   .0019069    -0.39   0.698    -.0044769    .0029982
       union |  -2.25e-06   3.66e-06    -0.61   0.540    -9.43e-06    4.94e-06
       urban |   .0370978   .0559882     0.66   0.508     -.072637    .1468326
    veterans |   .0015796   .0036205     0.44   0.663    -.0055164    .0086756
       lwald |  -.0773955   .1056062    -0.73   0.464      -.28438    .1295889
        i105 |   .0005436   .1182977     0.00   0.996    -.2313157    .2324029
   votpop105 |  -.0085126   .0061902    -1.38   0.169    -.0206451    .0036198
    black105 |  -.0062817   .0198615    -0.32   0.752    -.0452096    .0326461
  blucllr105 |   .0028461   .0056454     0.50   0.614    -.0082187    .0139109
   farmer105 |   -.007813   .0036862    -2.12   0.034    -.0150379   -.0005881
  fedwrkr105 |   .0002194   .0036927     0.06   0.953    -.0070181     .007457
  forborn105 |  -.0158846   .0120652    -1.32   0.188     -.039532    .0077628
    manuf105 |   .0152231   .0098664     1.54   0.123    -.0041146    .0345609
 unemplyd105 |  -.0007823   .0018752    -0.42   0.677    -.0044577    .0028931
    union105 |  -2.27e-06   3.62e-06    -0.63   0.529    -9.36e-06    4.81e-06
    urban105 |   .0363479   .0549041     0.66   0.508    -.0712622     .143958
 veterans105 |   .0017615   .0035538     0.50   0.620    -.0052038    .0087268
    lwald105 |  -.0764121   .1035813    -0.74   0.461    -.2794277    .1266035
------------------------------------------------------------------------------

  • 检验结果表明,变量farmer的P值小于0.05,说明变量farmer在断点处存在跳跃,故剔除(注意内生性问题)。故,【继续】下面的操作。
  rd lne d, mbw(25(5)300) cov(i votpop black blucllr ///
             fedwrkr forborn manuf unemplyd union ///
             urban veterans)  bdep ox   
加入协变量后最优带宽

此处,最优窗宽是105,选100也可以的。

  • 4.4【含协变量】的断点回归
  rd lne d, gr mbw(100) covar(i votpop black blucllr ///
             fedwrkr forborn manuf unemplyd union ///
             urban veterans)
Two variables specified; treatment is 
assumed to jump from zero to one at Z=0. 

 Assignment variable Z is d
 Treatment variable X_T unspecified
 Outcome variable y is lne

Command used for graph: lpoly; Kernel used: triangle (default)
Bandwidth: .29287776; loc Wald Estimate: -.07739553
Estimating for bandwidth .29287775925349
------------------------------------------------------------------------------
         lne |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       lwald |   .0253914   .0957051     0.27   0.791    -.1621871    .2129699
------------------------------------------------------------------------------

estimates store RD1

* 将窗宽mbw(100,105)对应的情形都估计一遍。默认三角核
  rd lne d, mbw(105) covar(i votpop black blucllr ///
             fedwrkr forborn manuf unemplyd union ///
             urban veterans)  
  estimates store RD2  
Two variables specified; treatment is 
assumed to jump from zero to one at Z=0. 

 Assignment variable Z is d
 Treatment variable X_T unspecified
 Outcome variable y is lne

Estimating for bandwidth .29287775925349
Estimating for bandwidth .3075216472161645
------------------------------------------------------------------------------
         lne |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       lwald |   .0253914   .0957051     0.27   0.791    -.1621871    .2129699
    lwald105 |   .0286942   .0941935     0.30   0.761    -.1559216    .2133101
------------------------------------------------------------------------------

* 将窗宽mbw(100,105)对应的情形都估计一遍。矩形核
  rd lne d, mbw(105) covar(i votpop black blucllr ///
             fedwrkr forborn manuf unemplyd union ///
             urban veterans)  kernel(rectangle)
  estimates store RD3  
Two variables specified; treatment is 
assumed to jump from zero to one at Z=0. 

 Assignment variable Z is d
 Treatment variable X_T unspecified
 Outcome variable y is lne

Estimating for bandwidth .2300421672681958
Estimating for bandwidth .2415442756316056
------------------------------------------------------------------------------
         lne |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       lwald |   .0807209   .0965759     0.84   0.403    -.1085644    .2700063
    lwald105 |   .0801577    .094423     0.85   0.396    -.1049079    .2652233
------------------------------------------------------------------------------


三种情形回归结果汇总

esttab RD1 RD2 RD3 using testrd1.doc, ar2(%8.4f) se(%8.4f) nogap brackets aic bic mtitles replace

------------------------------------------------------------
                      (1)             (2)             (3)   
                      RD1             RD2             RD3   
------------------------------------------------------------
lwald              0.0254          0.0254          0.0807   
                 [0.0957]        [0.0957]        [0.0966]   
lwald105                           0.0287          0.0802   
                                 [0.0942]        [0.0944]   
------------------------------------------------------------
N                     349             349             349   
adj. R-sq                                                   
AIC                     .               .               .   
BIC                     .               .               .   
------------------------------------------------------------
Standard errors in brackets
* p<0.05, ** p<0.01, *** p<0.001

相关文章

  • 学习笔记—RDD

    天鹰 (中南财大 博士研究生)E-mail:yanbinglh@163.com 目录 背景 断点回归模型介绍 断...

  • Spark RDD学习笔记

    一、学习Spark RDD RDD是Spark中的核心数据模型,一个RDD代表着一个被分区(partition)的...

  • 【Spark学习笔记】RDD篇

    每个Spark应用都由一个驱动器程序(driver program)(例如Spark Shell本身)来发起集群上...

  • 【Spark学习笔记】详解RDD

    1.Driver program 包含程序的main()方法,RDDs的定义和操作。它管理很多节点,我们称为exe...

  • Spark学习笔记(1)RDD

    RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最...

  • Spark Architecture

    OReilly.Learning.Spark 学习笔记 Spark里所有操作都是对RDD来的。分为两种 1. Tr...

  • Spark RDD 笔记

    本文内容是 是学习 范东来《Spark 课程》 笔记 RDD 不可变, 只读,经过变化会生成新的对象 弹性 表...

  • Spark RDD的学习(JAVA)

    注:本文是跟着《Spark快速大数据分析》一书学习的笔记式总结,不喜勿喷。 RDD(Resilient Distr...

  • Spark API - RDD

    转摘地址: Spark笔记:RDD基本操作(上) RDD本质就是一个数组,因此构造数据时候使用的是List(链表)...

  • Spark 学习笔记(一)-RDD编程

    创建RDD 把程序中一个已有的集合传给 SparkContext 的 parallelize() 方法(主要用于测...

网友评论

      本文标题:学习笔记—RDD

      本文链接:https://www.haomeiwen.com/subject/ohocohtx.html