Stata-从匹配到回归:精确匹配、模糊匹配和PSM

发布时间:2020-07-24 阅读 18346

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者: 徐云娇 (厦门大学)
邮箱: jilyo@stu.xmu.edu.cn


目录


Angrist & Pischke (2014) 总结了计量经济学研究的 “盖世五侠” (Furious Five) ——随机实验、回归、工具变量、断点回归设计和双重差分。也许你会奇怪,难道匹配 (matching) 不配拥有姓名吗?其实,匹配已经包含在回归中,它的本质思想就是回归,只要搞懂了回归,众多高大上的匹配方法便也不在话下。

1. 从回归到匹配

在学习匹配之前,我们必须要对回归的基本思想进行回顾,并且需要弄明白我们在回归方程中加入控制变量的目的是什么,它们起到了怎样的作用。

1.1 控制变量

当讨论私立大学教育是否对个人未来收入有所影响时,可以建立的回归模型如下:

其中,Yi 是模型的因变量 (dependent variable),也就是学生 i 毕业后赚取的收入,也被称为结果变量 (outcome variable);Di 是模型的处理变量 (treatment variable),也就代表了学生是否进入私立大学的虚拟变量 (进入私立大学取 1,否则为 0)。

XiXi 是模型的控制变量 (control variable),譬如学生的高中成绩、父母的收入等。我们将这些变量纳入模型的目的是消除模型的混杂偏差 (confounding bias),举例来说,父母的收入往往同时影响孩子大学的选择和未来的收入,即父母收入是学校选择和个人收入的一个混杂因素 (confounder)。用因果图表示如下:

上图显示,X 是 D 和 Y 的共同原因 (common cause),所以 D 与 Y 之间有两条路径:一条为 DY,也称因果路径 (causal path);另一条为 DXY,也称后门路径 (backdoor path)。因而,D 到 Y 的相关性包含了两部分,一部分是真正的因果关系造成的相关性,另一部分是由于混杂因素 X 造成的相关性 (赵西亮,2017)。

为了得到真正的私立大学教育 (D) 对个人未来收入 (Y) 的影响,我们需要想办法将后门路径造成的相关性阻断。在回归模型中引入 X 作为控制变量,便可以阻断后门路径产生的相关性,使得回归系数 (β) 表现出的相关性只剩下因果路径的相关性。用因果图可以表示为:

总结以上,控制变量 X 的引入,消除了混杂偏差,使回归系数具有因果效应的解释。

1.2 匹配

匹配的思想是,对于干预组 (私立大学) 个体,在控制组 (公立大学) 中寻找特征相似的个体与其相匹配,从而用控制组个体的结果来估计干预组个体的反事实结果,进而分离出处理变量的因果效应。这其实非常类似于在简单回归模型中引入控制变量。

试想假如我们不做任何处理,仅仅比较不同类型学校的学生间收入差距,必然会得出私立大学的学生们收入奇高的结论。但稍加思考,我们就会发现收入上的差距可能是由于进入精英大学的学生本身能力就很强造成的,这并不能揭示哈佛大学学位所带来的收益。

那么我们就需要保证学生自身能力、家庭背景等这些因素不变,去比较各方面都十分相似的学生就读于不同大学所带来的收入差距,这才是真正反映出精英私立大学教育回报率。

明白了匹配的基本思想之后,接下来的问题就是如何进行匹配。不难发现除了高中成绩、家庭收入、性别等因素之外,还有许许多多因素影响着学生的未来收入,比如个人的勤奋程度、写作能力等等,将那么多广泛的因素进行控制是件十分困难的事情——此类可能性几乎无穷无尽,并且还存在不可观测的因素。但是,Dale & Krueger (2002) 给出了一种聪明且令人信服的匹配方法,文章后面会进行介绍。即使我们找不到这么 “开脑洞” 的方案,倾向得分匹配 (PSM) 方法也可以助我们一臂之力。

1.3 二者异同

相同点

  • 匹配方法和回归方法要识别因果效应都要求非混杂性条件成立,即在以控制变量为条件后,潜在结果独立于干预分配。

  • 总体回归系数 (τols ) 与匹配估计测度 (τATT) 均是用特征为 XiXi 的子样本作简单回归得到的回归系数 (τx) 的加权。

不同点

  • 总体回归系数与匹配估计测度给 τx 赋予的权重是不同的,回归系数会对那些层内两组个体数目相同的层赋予更大的权重,而匹配估计测度会对那些层内干预组个体更多,即倾向得分更大的层赋予更大的权重。具体来说 (赵西亮,2017):
  • 回归系数回归时会丢弃那些仅有一组个体的层,而研究者往往不知道丢弃了哪些层;匹配测度的好处在于匹配时很清楚哪些样本进入了匹配,哪些样本被丢弃了。

2. 精确匹配

2.1 性别、年龄等精确匹配

Stata 中有诸多方法可以帮助我们实现性别、年龄等「离散变量」之间的精确匹配,这里主要介绍 ccmatchvmatch 命令,使用之前均需要通过 ssc install 命令进行安装。

2.1.1 ccmatch

命令语法

ccmatch 是进行简单精确匹配的最佳选择,优点是其语法结构易于理解,上手极快;缺点是自由度不高,适用的场景比较单一。

ccmatch 的语法结构是:

ccmatch variable_list, cc() id()

  • variable_list 为进行精确匹配的变量,比如性别、年龄等;
  • cc(var) 为区别干预组与控制组;
  • id(var) 为给每个观测值赋予身份识别。

Stata 实例

下面用 Stata 自带的美国妇女 1988 年工资数据进行演示:

sysuse nlsw88, clear
drop if union == .
rsort, seed(135) id(idcode)
keep in 1/200
gen id123 = _n
local mx "age race collgrad married industry"
local treat "union"
keep id123 `mx' `treat' hours wage
ccmatch `mx', cc(`treat') id(id123)  //按照年龄、种族、是否上大学、婚姻状况以及所属行业进行精确匹配	
keep if match!=.                     //保留有匹配的观测值
gsort match -union                   //按照配对数升序、工会与否降序排列    
list, sepby(match)

运行结果表明,在 200 个观测数据中,完成了 17 对 1:1 的精确匹配,也就是 17 位工会妇女找到了与之情况十分相似的非工会妇女作为匹配对象,最后共有 34 个观测数据被保留。


     +-------------------------------------------------------+
  1. |  age   |   race   |  married   |           collgrad   |
     |   34   |  white   |   single   |   not college grad   |
     |-------------------------------------------------------|
     |                industry |    union |     wage | id123 |
     |  Transport/Comm/Utility |    union | 14.51691 |   119 |
     |-------------------------+-----------------------------|
     |          match          |          match_id           |
     |              1          |               108           |
     +-------------------------------------------------------+

     +-------------------------------------------------------+
  2. |  age   |   race   |  married   |           collgrad   |
     |   34   |  white   |   single   |   not college grad   |
     |-------------------------------------------------------|
     |                industry |    union |     wage | id123 |
     |  Transport/Comm/Utility | nonunion | 15.48309 |   108 |
     |-------------------------+-----------------------------|
     |          match          |          match_id           |
     |              1          |               119           |
     +-------------------------------------------------------+

     *……省略中间15对

     +-------------------------------------------------------+
 33. |  age   |   race   |  married   |           collgrad   |
     |   45   |  white   |   single   |       college grad   |
     |-------------------------------------------------------|
     |                industry |    union |     wage | id123 |
     |   Professional Services |    union | 17.02898 |   149 |
     |-------------------------+-----------------------------|
     |          match          |          match_id           |
     |             17          |               138           |
     +-------------------------------------------------------+

     +-------------------------------------------------------+
 34. |  age   |   race   |  married   |           collgrad   |
     |   45   |  white   |   single   |       college grad   |
     |-------------------------------------------------------|
     |                industry |    union |     wage | id123 |
     |   Professional Services | nonunion | 8.518515 |   138 |
     |-------------------------+-----------------------------|
     |          match          |          match_id           |
     |             17          |               149           |
     +-------------------------------------------------------+

2.1.2 vmatch

命令语法

vmatch 相比 ccmatch 可选项多了许多,可以实现的功能也丰富很多,所以其语法结构相对比较复杂:

vmatch casevar  [if exp] , generate(newvar)
    show(idvar) save(filename) first fuzz(real 1e-6) 
    [r]devia(varlist1 dLo1[/dHi1] [varlist2 dLo2[/dHi2]] ...)
    [r]eucli(varlist1 dist1 [varlist2 dist2] ...)
        outof(varlist1 #1 [varlist2 #2]...)
        strng(varlist)
        power(#) 
  • casevar 用来区别干预组与控制组;
  • generate(newvar) 产生一个新变量表示观测值被匹配的数量;
  • show(idvar) 给每个观测值赋予身份识别;
  • save(filename) 很重要!只有另存为一个新文件,才能看到最后匹配对象的具体编号;
  • [r]devia 设定匹配规则,不一定是精确匹配;
  • strng 设定字符型变量的匹配规则,一定是精确匹配。

Stata 实例

同样,我们也拿 Stata 自带的美国妇女 1988 年工资数据进行演示,然后与 ccmatch 产生的结果进行对比:

sysuse nlsw88, clear
drop if union==.
rsort, seed(135) id(idcode)
keep in 1/200
gen id123 = _n
local exactX "race collgrad married industry"
local treat "union"
tostring `exactX', replace force
keep id123 `exactX' `treat' age wage 
vmatch `treat', gen(nmatch)    ///
      show(id123)              ///
      save(nlsw_vmatch) first  ///
      devia(age 0)             ///按照年龄进行精确匹配
      strng(`exactX')          ///按照种族、是否大学毕业、婚姻状况以及所属行业进行精确匹配
	   
drop if nmatch == 0 | nmatch == .
list
*- nmatch == 0:  Treat  组中没有找到匹配对象的观察值;
*- nmatch == .:  Control 组中没有被使用的观察值;

*- 展示最终的匹配结果
use "nlsw_vmatch.dta", clear

运行结果显示,最后会有 40 个观测值被保留下来,相比于 ccmatch 的 34 个观测值多了 6 个。原因是 vmatch 命令允许 n:n 匹配,比如第 59、69、70 和 196 个控制组观测值均被视为第 14 个处理组观测值的匹配项,实现了 1:4 匹配;而 ccmatch 命令执行之后,只有第 196 个观测值被保留了下来,即 1:1 匹配。

     +-----------------------------------------------------------------------------------+
     | age   race   married   collgrad   industry      union       wage   id123   nmatch |
     |-----------------------------------------------------------------------------------|
  1. |  38      2         1          1         12   nonunion   16.73912       7      121 |
  2. |  39      1         1          1         11      union    6.70692      14        4 |
  3. |  36      1         1          1         11      union    4.62963      18        1 |
  4. |  35      1         1          0         11      union   4.025765      23        1 |
  5. |  37      2         0          1         11      union   5.225441      32        1 |
     |-----------------------------------------------------------------------------------|

  *……省略中间 30 个观测值

     |-----------------------------------------------------------------------------------|
 36. |  35      1         1          1         11   nonunion    4.64573     187       71 |
 37. |  37      2         0          1         11   nonunion   3.719806     188       32 |
 38. |  42      1         1          1         11   nonunion   7.809981     193      183 |
 39. |  37      1         1          0         12   nonunion   7.850241     194       33 |
 40. |  39      1         1          1         11   nonunion   9.339773     196       14 |
     +-----------------------------------------------------------------------------------+

2.2 近邻匹配+离散变量精确匹配

近邻匹配是一种常见的容易实施的匹配方法,它允许个体在指定的某些变量之间存在一定的距离,只要为处理组个体在控制组中寻找距离最近的控制组个体进行匹配即可。相对于精确匹配来说,这放宽了匹配的要求,便于我们保留下更多的观测值。

2.2.1 vmatch

vmatch 在实现部分变量精确匹配的同时,也可以对部分变量实现近邻匹配。以美国妇女 1988 年工资数据进行演示,我们放宽对年龄的匹配要求,允许其有一个 3 的距离。

Stata 实例

代码如下:

sysuse nlsw88, clear
drop if union==.
rsort, seed(135) id(idcode)
keep in 1/200
gen id123 = _n
local exactX "race collgrad married industry"
local treat "union"
tostring `exactX', replace force
keep id123 `exactX' `treat' age wage 
vmatch `treat', gen(nmatch)    ///
      show(id123)              ///
      save(nlsw_vmatch) first  ///
      devia(age 3)             ///按照年龄进行近邻匹配,允许3的差距
      strng(`exactX')          ///按照种族、是否大学毕业、婚姻状况以及所属行业进行精确匹配
	   
drop if nmatch==0|nmatch==.
list
*- nmatch==0:  Treat  组中没有找到匹配对象的观察值;
*- nmatch==.: Control 组中没有被使用的观察值;

*- 展示最终的匹配结果
use "nlsw_vmatch.dta", clear

结果显示有 123 个观测值被保留下来,相比于精确匹配情况下的 40 个观测值,样本容量大大扩大了。所以,当原始数据的样本容量十分有限时,可以选取 “近邻匹配+离散变量精确匹配” 的策略进行匹配,以保留更多样本让估计量更具可信度。

     +-------------------------------------------------------+
  1. | age | race | married | collgrad | industry |    union |
     |  40 |    1 |       0 |        0 |       12 | nonunion |
     |-------------------------------------------------------|
     |         wage      |     id123      |      nmatch      |
     |     5.732688      |         4      |          64      |
     +-------------------------------------------------------+

     +-------------------------------------------------------+
  2. | age | race | married | collgrad | industry |    union |
     |  38 |    2 |       1 |        1 |       12 | nonunion |
     |-------------------------------------------------------|
     |         wage      |     id123      |      nmatch      |
     |     16.73912      |         7      |         121      |
     +-------------------------------------------------------+

  *……省略中间 120 个观测值

     +-------------------------------------------------------+
123. | age | race | married | collgrad | industry |    union |
     |  36 |    1 |       1 |        0 |        6 | nonunion |
     |-------------------------------------------------------|
     |         wage      |     id123      |      nmatch      |
     |      6.32045      |       198      |         154      |
     +-------------------------------------------------------+

2.2.2 teffects nnmatch

teffects 是 Stata 13.0 版本开始提供的官方匹配命令,它主要包括七个子命令,分别是 ipwaipwipwrannmatchpsmatchraoverlap,其中前三个子命令对应于逆概加权方法,nnmatch 是近邻匹配命令,psmatch 是倾向得分匹配命令,ra 是回归调整命令,overlap 用于画干预组和控制组的倾向得分分布图。

命令语法

这里主要介绍 teffects nnmatch 命令,用其实现 “近邻匹配+离散变量精确匹配” 的匹配策略。其基本命令语法和主要选项如下:

teffects nnmatch (ovar omvarlist) (tvar) [if] [in] [weight] [, stat options]

  • ovar 为结果变量;
  • omvarlist 为协变量;
  • tvar 为干预变量。

Stata 实例

下面用 Cattaneo (2010) 文章作为实例进行演示:

help teffects nnmatch 		
  
*-Setup
*-Cattaneo (2010)
*Efficient semiparametric estimation of multi-valued treatment effects under ignorability. Journal of Econometrics 155: 138–154.
*A study of the effect of a mother’s smoking status during pregnancy (mbsmoke) on infant birthweight (bweight)

*数据地址:https://gitee.com/arlionn/data/blob/master/data01/cattaneo2.dta
use "https://gitee.com/arlionn/data/raw/master/data01/cattaneo2.dta", clear
des2
  
teffects nnmatch (bweight mage fage) (mbsmoke),  ///
         ematch (prenatal1 mmarried fbaby)       ///
         biasadj(mage fage)
 
*-Estimate the average treatment effect of mbsmoke on bweight
*-Match on two continuous variables, mage and fage
*-Require exact matches on the binary variables
*-Use the bias-adjusted estimator   

结果显示,总体的平均因果效应系数为 -223.8,即母亲抽烟会使婴儿出生时的重量平均减少 223.8 克。

Treatment-effects estimation                   Number of obs      =      4,642
Estimator      : nearest-neighbor matching     Matches: requested =          1
Outcome model  : matching                                     min =          1
Distance metric: Mahalanobis                                  max =         25
----------------------------------------------------------------------------------------
                       |              AI Robust
               bweight |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-----------------------+----------------------------------------------------------------
ATE                    |
               mbsmoke |
(smoker vs nonsmoker)  |  -223.8389   26.19973    -8.54   0.000    -275.1894   -172.4883
----------------------------------------------------------------------------------------

3. 模糊匹配

将影响结果变量的诸多广泛因素均进行精确匹配是件十分困难的事情——此类可能性几乎无穷无尽,并且还存在不可观测的因素。所以在实证研究中被学者们广泛使用的匹配方法实际上是模糊匹配。

Dale & Krueger (2002) 给出了一种聪明且令人信服的匹配方法,3.1 节中我们对此进行介绍。如果我们找不到这么 “开脑洞” 的方案,那么 3.2 节中倾向得分匹配 (PSM) 方法也可以助我们一臂之力。

3.1 Dale & Krueger (2002)

回到私立大学教育回报率的例子,我们已经知道了影响大学选择和未来收入的因素千千万万,所以假如进行一一识别的话是非常困难的事情。于是,Dale & Krueger (2002) 使用了一个关键性指标:学生提交申请和获得录取的学校分别具有的特征。下面对这种匹配策略进行介绍:

Source: Mastering'metrics: The path from cause to effect. Table 2.2.

我们将上表称为 “大学匹配矩阵”,按照申请和录取的学校不同,9 名学生被归入 ABCD 四组内。A 组学生同时向两所私立学校和一所公立大学提出了入学申请,并且录取结果完全相同,这就表明了三名学生各方面条件都十分相似 (实现了模糊匹配)。

不同于 1、2 号学生最终进入了私立大学,3 号学生选择进入公立大学,这就给了我们识别因果效应的绝佳机会,即只要比较组 A 学生之间的收入差异,就可以识别出私立大学教育产生的收益。当然,在组 A 中进行的比较,只是众多匹配比较中的一个,我们需要更多的样本与信息来估计私立大学的收入优势。建立如下回归模型:

其中,GROUPji 代表利用 Dale & Krueger (2002) 所分析的 C & B 数据库,将 5583 名学生归入了 151 个具有类似选拔性的组别,所以模型对这 151 个组进行了控制。当学生 i 处于 j 组时,虚拟变量 GROUPji 等于 1,否则等于 0。

回归结果如下:

Source: Mastering'metrics: The path from cause to effect. Table 2.2.

上表中,(1) - (3) 列结果是未加入选拔性组别虚拟变量时的回归结果,我们可以发现私立大学的教育溢价均是统计显著的。在加入诸如本人 SAT 成绩、父母收入以及种族性别相关的控制变量之后溢价有所下降,但效应仍然相当大。

(4) - (6) 列是加入了 GROUPji 虚拟变量之后的回归结果,我们可以看到此时私立大学教育的溢价几乎接近于 0,并且在加入表示能力和家庭背景的控制变量之后,回归系数也几乎不再发生改变,说明此时模型是稳健的。

3.2 PSM

当我们找不到一个新颖的识别策略时,倾向得分匹配 (PSM) 可以助我们一臂之力。有关于 PSM 的理论部分可参见「Stata:PSM-倾向得分匹配分析的误区」,这里我们参考 Imbens (2015) 对 PSM 在 Stata 中的实现进行介绍。

使用美国国家支持工作示范项目 (National Supported Work, NSW) 的数据集,处理组个体是 185 个随机选取的参与培训项目的男性,控制组个体则是 260 个随机选取的作为对照的男性,我们利用这个数据库来研究培训对个人收入的影响。

第一步:检验协变量是否平衡

*数据地址:https://gitee.com/arlionn/data/blob/master/data01/nsw_dw.dta
use "https://gitee.com/arlionn/data/raw/master/data01/nsw_dw.dta", clear  //打开数据集

*(1) Do balance test
btest age-re75,by(treat)
*输出结果为:
-------------------------------------------------------------------------------------------------------
                      |      Treated group       Control group       Std.
        Variable      |      Mean      Sd.       Mean      Sd.       Bias      t         p>|t| ln(sd1/sd0)
----------------------+----------------------------------------------------------------------------------
    age               |     25.82      7.16     25.05      7.06     0.107      1.11      0.27     0.014
    education         |     10.35      2.01     10.09      1.61     0.141      1.44      0.15     0.220
    black             |      0.84      0.36      0.83      0.38     0.044      0.46      0.65    -0.039
    hispanic          |      0.06      0.24      0.11      0.31    -0.175     -1.86      0.06    -0.270
    married           |      0.19      0.39      0.15      0.36     0.094      0.97      0.33     0.083
    nodegree          |      0.71      0.46      0.83      0.37    -0.304     -3.11      0.00     0.203
    re74              |   2095.57   4886.62   2107.03   5687.91    -0.002     -0.02      0.98    -0.152
    re75              |   1532.06   3219.25   1266.91   3102.98     0.084      0.87      0.38     0.037
---------------------------------------------------------------------------------------------------------

从输出结果来看,处理组与控制组之间的差异十分小,最大的偏差来源于 nodegree 变量,t 值达到 -3.11,在统计上是显著的,所以此时仍可以对样本进行倾向得分匹配,让两组之间的差距进一步缩小。

第二步:估计倾向得分

*(2) Estimate the propensity score
*- pscore 命令的语法结构如下:
/* pscore treatment varlist [weight] [if exp] [in range] , 
            pscore(newvar) [blockid(newvar) detail logit comsup 
            level(#) numblo(#) ]*/

*以treat 作为处理变量,以年龄、教育、是否为黑人等作为协变量计算倾向得分
cap drop id_nsw ps_nsw
pscore treat age-re75, pscore(ps_nsw) blockid(id_nsw) logit comsup

输出结果中显示: The balancing property is satisfied ,说明以上倾向得分模型是充分的,满足平衡指数特征,可以作为倾向得分匹配的依据了。

另外,还可利用 histogram 命令画出两组的倾向得分分布图,以比较两组协变量的差异。

histogram ps_nsw,by(treat, col(1))

直方图如下:

第三步:进行倾向得分匹配

在估计出倾向得分之后,我们便可以采用相应的匹配命令进行倾向得分匹配了。

首先介绍分层匹配命令 atts

 *- atts 命令的语法结构如下:
 /* atts outcome treatment [if exp] [in range] , pscore(scorevar)
         blockid(blockvar) [comsup detail bootstrap bs_options]*/

*(3)Matching and estimating treatment effects
atts re78 treat, pscore(ps_nsw) blockid(id_nsw) comsup

输出结果如下:

ATT estimation with the Stratification method
Analytical standard errors
---------------------------------------------------------
n. treat.   n. contr.    ATT       Std. Err.        t
---------------------------------------------------------

   185       249       1830.437     681.845       2.685

---------------------------------------------------------

结果显示,处理组个体有 185 个,控制组 249 个,处理组的平均因果效应为 1830,也就是说,接受培训带来的收入提升有 1830 美元。

接下去介绍另一个广泛使用的命令 psmatch2,它除了能够实现近邻匹配、半径匹配、核匹配之外,还增加了局部线性回归匹配、样条匹配等方法。其语法结构如下:

    psmatch2 depvar [indepvars] [if exp] [in range] [, outcome(varlist)
                     pscore(varname) neighbor(integer) radius caliper(real)
                     mahalanobis(varlist) ai(integer) population altvariance
                     kernel llr kerneltype(type) bwidth(real) spline
                     nknots(integer) common trim(real) noreplacement descending
                     odds index logit ties quietly w(matrix) ate]
  • depvar:处理变量;
  • [indepvars]:进入倾向得分模型的协变量;
  • outcome(varlist):结果变量;
  • pscore(varname):已经估计好倾向得分时,可以直接告诉 Stata 使用 varname 变量提供的倾向得分;
  • neighbor(integer):近邻匹配,括号内的数字代表 1:k 匹配;
  • radius:半径匹配;
  • caliper(real):设定卡尺范围;
  • ai(integer):用 Abadie & Imbens (2006) 提出的标准误计算方法;
  • kernel:核匹配;
  • llr:局部线性回归匹配;
  • spline:样条匹配;
  • common:设定共同区间;
  • trim(real):通过截尾方式设定共同区间;
  • noreplacement:在 1:1 近邻匹配中使用,该选项不允许样本进行重复匹配;
  • descending:在 1:1 近邻匹配中使用,匹配以降序进行;
  • odds:按照倾向得分的比值进行匹配;
  • logit:利用 logit 模型估计倾向得分;
  • ties:允许在最近邻匹配中,多个相同倾向得分的控制组个体与处理组个体匹配;
  • ate:除提供 ATT (处理组平均因果效应) 估计量外,还提供 ATE (总体的平均因果效应) 和 ATC (控制组平均因果效应) 的匹配估计量。

下面利用 psmatch2 命令,使用不放回的降序最近邻匹配方法估计培训对收入的影响:

*(3)Matching and estimating treatment effects
psmatch2 treat, outcome(re78) p(ps_nsw) n(1) norepl descending odds
*估计结果为:
----------------------------------------------------------------------------------------
        Variable     Sample |    Treated     Controls   Difference      S.E.      T-stat
----------------------------+-----------------------------------------------------------
            re78  Unmatched |  6349.1435   4554.80112   1794.34238   632.853392     2.84
                        ATT |  6349.1435   4362.23331   1986.91019   680.432923     2.92
----------------------------+-----------------------------------------------------------

结果显示,处理组的平均因果效应为 1987,也就是说,接受培训带来的收入提升有 1987 美元。

第四步:检验非混杂性条件

参考 Imbens (2015) 的做法,我们利用伪结果方法 (pseudo outcome) 进行对非混杂性条件 (unconfoundedness) 进行检验。

伪结果方法利用一个事实上没有受到干预影响的变量作为伪结果,检验控制了协变量后,相应的伪结果平均因果效应是否为零。其中的逻辑是:假如影响潜在结果的所有混杂因素均被控制,那么,未观测因素将不会对两组结果产生系统性影响,那么对于伪结果,相应的平均因果效应将为零 (赵西亮,2017)。

*(4)Test CIA
psmatch2 treat, outcome(re75) p(ps_nsw) n(1) norepl descending odds 
*估计结果为:
----------------------------------------------------------------------------------------
        Variable     Sample |    Treated     Controls   Difference         S.E.   T-stat
----------------------------+-----------------------------------------------------------
            re75  Unmatched | 1532.05531   1266.90901   265.146299   303.155497     0.87
                        ATT | 1532.05531     1372.196   159.859308   341.365166     0.47
----------------------------+-----------------------------------------------------------

结果显示,培训对 75 年收入没有显著影响,即没有发现非混杂性条件不成立的证据。需要指出的是,这并不意味着非混杂性条件一定成立,只能在一定程度上证明没有发现非混杂性条件不成立,从而估计结果有一定的可信性。

4. 参考文献

  • [1] Angrist J D, Pischke J S. Mastering'metrics: The path from cause to effect[M]. Princeton University Press, 2014: pp.1-82.
  • [2] 赵西亮. 基本有用的计量经济学[M]. 北京大学出版社, 2017: pp.147-162.
  • [3] Dale S B, Krueger A B. Estimating the payoff to attending a more selective college: An application of selection on observables and unobservables[J]. The Quarterly Journal of Economics, 2002, 117(4): 1491-1527. -Link-
  • [4] Imbens G W. Matching methods in practice: Three examples[J]. Journal of Human Resources, 2015, 50(2): 373-419. -Link-
  • [5] Stata:PSM-倾向得分匹配分析的误区 -Link-

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD