Stata 连享会   主页 || 视频 || 推文温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

✌ 作者:黄俊凯 (中国人民大学)

E-Mail: kopanswer@126.com

Note: 助教招聘信息请进入「课程主页」查看。因果推断-内生性 专题 ⌚ 2020.11.12-15

主讲:王存同 (中央财经大学);司继春(上海对外经贸大学)

课程主页:https://gitee.com/arlionn/YG | 微信版空间计量 专题 ⌚ 2020.12.10-13

主讲:杨海生 (中山大学);范巧 (兰州大学)

课程主页:https://gitee.com/arlionn/SP | 微信版

目录

匹配是研究处理效应的常见工具,本文总结了常见的匹配方法,并在第三部分给出 Stata 模拟以比较不同的匹配方法的优劣。

1. 单变量匹配 uni-variate match

单变量匹配的方法有精确匹配、粗糙精确匹配,k-近邻匹配和半径 (卡尺) 匹配。

1.1 精确匹配 exact match

顾名思义,当且仅当两个观测值的匹配变量相等时匹配成功。

1.2 粗糙精确匹配 coarsened exact match

粗糙精确匹配用途广泛,通常要求匹配变量是分类变量。比如公司金融中同行业的公司,又比如教育经济学中在同一个班的同学。粗糙精确匹配可以轻松的推广到多变量匹配的情形,如同行业同年度的公司,同班同性别的同学。

1.3 k-近邻匹配 k-nearest neighbor match

k-近邻匹配要求匹配变量是距离,它选取距离最近的 k 个观测值作为对照组。

1.4 radius (caliper) match

k-近邻匹配要求匹配变量也是距离,它事先设定半径 (上下半径可以不同),找出设定范围内的全部观测值作为对照组。显然,随着半径的降低,匹配要求也更趋严格。

2. 多变量匹配 multi-variate match

多变量匹配的核心思路是降维 (dimension reduction),将多变量降维为距离或得分,然后再运用单变量匹配的方法。多变量匹配的方法有欧氏距离、百分等级、马氏距离和倾向得分匹配等。

为能直观的图示,下文全部示例仅考虑双变量 (平面) 的情形。

2.1 欧氏距离匹配 euclidean distance match

最简单的测度空间就是欧氏距离空间。你可以轻松的用尺子直接量出点到原点、或任意两点之间的距离。

平面上任意点

到原点的距离公式为:

平面上任意两点

之间的距离公式为:

在欧式距离空间中,坐标轴之间是相互垂直的,也就意味着随机变量之间的相关系数为零。这是一个非常强的假设,而实际研究中该假设往往不能成立。比如研究一个人的健康时,作为影响因素的身高和体重之间往往是正相关的。

在欧式距离空间中,坐标轴上的量纲也是默认相同的,也就意味着随机变量必须有相同的量纲。这同样是一个过于严苛的假设。同样是研究一个人的健康,身高的单位是厘米,体重的单位是公斤,无论如何长度单位和重量单位是不可比的。

2.2 马氏距离匹配 mahalanobis distance match

为了克服匹配时欧氏距离空间的上述两个缺陷,印度数学家 Mahalanobis 提出了著名的马氏距离空间。马氏距离对多匹配变量的联合分布的位置、形状做了标准化调整,也对多匹配变量之间的相关性做了正交化调整,从而将多匹配变量的联合分布转变为可以用欧氏距离计算的情形。

马氏距离实现上述功能的关键在于用协方差矩阵的逆矩阵做了调整。我们将在第三部分用 Stata 代码逐步展示它。任意点

到质心 (centroid)

的距离公式如下:

任意两点

之间的距离公式如下:

其中

为多维随机变量的样本协方差矩阵,

是质心或样本均值。若样本协方差矩阵是单位矩阵 (各维度之间独立同部分),马氏距离退化为欧氏距离。

马氏距离测量相对于质心的距离,质心是一个基准点或中心点,可以认为是多元数据的总体平均值。质心是多元空间中所有变量的均值相交的点。马氏距离越大,数据点离质心越远。

2.3 百分等级匹配 percentile rank match

在多随机变量的联合分布中,距离近的点在概率分布函数 (PDF) 上往往不一定靠近。我们以如下标准正态分布 (钟形曲线) 为例,说明距离相近并不必然等于概率分布上的靠近。

不妨设样本容量为

。处理组观测值点 A 位于距离原点

处。则

的点 B 和

处的点 C 与点 A 的距离相等,都等于

。但是点 A 与点 B 之间有

(

) 个观测值,而点 A 与点 C 之间仅有

(

) 个观测值。显然,尽管点 A 到点 B 和点 C 的距离是相等的,但从概率分布的角度来看在点 A 前后抽样更容易抽到点 C。

百分等级是一个相对位置量数。它是指将距离按照从小到大的顺序排列,小于某观测值距离的观测值个数与样本数的百分比,即为该观测值的百分等级。

不同于百分数 (percentile),有相同距离的观测值总是有相同的百分等级 (percentile rank),以消除指定百分等级时的武断性 (arbitrariness)。因此,百分等级的公式如下:

其中,PR 是百分等级,L 是距离小于该观测值距离的观测值数,E 是距离等于该观测值距离的观测值数,N 是样本数。例如,样本有

个同学参加考试,你的物理得分是

分,其中有

个人分数低于你,

个人的分数和你相同,则你的百分等级数就等于:

百分等级匹配就是选择百分等级最接近的观测值作为反事实观测值,显然它是一种非参数方法。基于距离的百分等级不仅克服了距离不能体现随机变量分布函数的特点 (比如距离很远的点也可能有相似的百分等级),而且将匹配变量之间的差异限制在

区间。然而它仍有自己的局限,就是无法体现个体进入处理组的选择过程,或者说并没有利用到底哪些个体进入了处理组这个关键信息。

2.4 倾向得分匹配 propensity score match

倾向得分匹配不是基于距离而是基于得分。倾向得分 (propensity score) 是指个体 i 在给定可观测变量

的情况下进入处理组的条件概率。即

,或简记为

对倾向得分的估计可使用参数估计或非参数估计,最流行的方法是 logit。Rosenbaum and Rubin (1983) 证明,如果可忽略性假定成立,则在给定倾向得分的情况下,结果变量在事前和事后的取值独立于是否个体进入处理组。

使用倾向得分匹配需要满足两个假定:1.共同支撑假设;2.平衡性假定。

共同支撑集是指这样一个集合,不妨设备择组观测值的倾向得分的取值范围为

, 设处理组观测值得倾向得分取值范围为

,则共同支撑集内的任意观测值的倾向得分必需大于备择组和处理组的最小倾向得分中较大的那个,也必需小于最大倾向得分中较小的那个。即进入共同支撑集的观测值必需位于如下区间内:

其中

是对照组倾向得分的最小值,

是对照组倾向得分的最大值;

是处理组倾向得分的最小值,

是处理组倾向得分的最大值。

在匹配时,为提供匹配质量,可仅保留倾向得分重叠部分的个体。共同支撑假设要求共同支撑集的取值范围不能太小,则匹配成功的样本可能不具有代表性。

再说平衡性假定,如果倾向得分估计是准确的,那么协变量

在匹配后的处理组与控制组之间分布较均匀。例如,匹配后处理组的均值

与对照组的均值

应该较接近,也就是所谓的“数据平衡”。

多接近是接近?均值之间的差异与计量单位有关,你当然可以做组建军之差异或中位数差异检验,也可以使用标准化偏差 (standarized bias) 进行比较,公式如下:

经验法则告诉我们,标准化差距不得超过 10%。如果超过,则应重新估计倾向得分,或改变具体的匹配方法。

尽管倾向得分匹配体现了选择过程,但它仍有一些缺陷,比如它只能依可测变量选择,对共同支撑集有要求等。

3. 代码展示

我们用简单的二维模拟数据来展示不同多变量匹配方法之间的差异。

3.1 数据生成过程

clear

set obs 200

gen id = _n

set seed 10000

gen r0 = rnormal()

set seed 12345

gen r1 = rnormal()

set seed 65432

gen r2 = rnormal()

set seed 10101

gen re = rnormal()

*-选择变量

gen x1 = 2 * (r0 + r1)

gen x2 = 3 + (r0 + r2)

*-选择机制

gen group = 2 * x1 - 3 * x2 + 10 * re > 0

label def group 0 "非对照组" 1 "处理组"

label val group group

*-数据分布

keep id x1 x2 group

tab group

correlate x1 x2

twoway (scatter x1 x2 if group == 0, mcolor(black))///

(scatter x1 x2 if group == 1, mcolor(red)), ///

title("数据分布") xlabel(-10(5)10) ///

ylabel(-10(5)10, nogrid) ///

aspect(1) legend(off)

下图种,红色的点为处理组观测值,黑色的点为对照组观测值

3.2 欧氏距离匹配的结果

变量 ec 记录欧氏距离匹配得到的匹配值

gen ec = .

gen ed = .

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = sqrt((x1[`i'] - x1[`j'])^2 + (x2[`i'] - x2[`j'])^2)

if `d' < ed[`i'] {

qui replace ec = `j' in `i'

qui replace ed = `d' in `i'

}

}

}

}

}

tab group

misstable sum ec ed

欧氏距离匹配的结果:

3.3 马氏距离匹配的结果

变量 mc 记录马氏距离匹配得到的匹配值

corr x1 x2, cov

mat cov = r(C)

mat cov = inv(cov)

mat list cov

scalar a_11 = cov[1, 1]

scalar a_22 = cov[2, 2]

scalar a_21 = cov[2, 1]

gen mc = .

gen md = .

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = sqrt(a_11*(x1[`i'] - x1[`j'])^2 + a_22*(x2[`i'] - x2[`j'])^2 + 2 * a_21 * (x1[`i'] - x1[`j']))

if `d' < md[`i'] {

qui replace mc = `j' in `i'

qui replace md = `d' in `i'

}

}

}

}

}

马氏距离匹配的结果:

3.4 倾向得分匹配的结果

变量 pc 记录倾向得分匹配得到的匹配值

gen pc = .

gen pd = .

probit group x1 x2

predict score, xb

replace score = normal(score)

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = abs(score[`i'] - score[`j'])

if `d' < pd[`i'] {

qui replace pc = `j' in `i'

qui replace pd = `d' in `i'

}

}

}

}

}

倾向得分匹配的结果:

4. 参考文献和资料Mahalanobis Distance: Simple Definition, Examples link

Mahalanobis, P. C. (1936). On the generalized distance in statistics. National Institute of Science of India. pdf

Percentiles, Percentile Rank & Percentile Range: Definition & Examples link

Rosenbaum, P. R., & Rubin, D. B. (1983). The central role of the propensity score in observational studies for causal effects. Biometrika, 70(1), 41-55. pdf

附:文中使用的 dofiles

*-3.1 数据生成过程

clear

set obs 200

gen id = _n

set seed 10000

gen r0 = rnormal()

set seed 12345

gen r1 = rnormal()

set seed 65432

gen r2 = rnormal()

set seed 10101

gen re = rnormal()

*-选择变量

gen x1 = 2 * (r0 + r1)

gen x2 = 3 + (r0 + r2)

*-选择机制

gen group = 2 * x1 - 3 * x2 + 10 * re > 0

label def group 0 "非对照组" 1 "处理组"

label val group group

*-数据分布

keep id x1 x2 group

tab group

correlate x1 x2

twoway (scatter x1 x2 if group == 0, mcolor(black))///

(scatter x1 x2 if group == 1, mcolor(red)), ///

title("数据分布") xlabel(-10(5)10) ///

ylabel(-10(5)10, nogrid) ///

aspect(1) legend(off)

*-3.2 欧氏距离匹配的结果

gen ec = .

gen ed = .

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = sqrt((x1[`i'] - x1[`j'])^2 + (x2[`i'] - x2[`j'])^2)

if `d' < ed[`i'] {

qui replace ec = `j' in `i'

qui replace ed = `d' in `i'

}

}

}

}

}

tab group

misstable sum ec ed

*-3.3 马氏距离匹配的结果

corr x1 x2, cov

mat cov = r(C)

mat cov = inv(cov)

mat list cov

scalar a_11 = cov[1, 1]

scalar a_22 = cov[2, 2]

scalar a_21 = cov[2, 1]

gen mc = .

gen md = .

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = sqrt(a_11*(x1[`i'] - x1[`j'])^2 + a_22*(x2[`i'] - x2[`j'])^2 + 2 * a_21 * (x1[`i'] - x1[`j']))

if `d' < md[`i'] {

qui replace mc = `j' in `i'

qui replace md = `d' in `i'

}

}

}

}

}

*-3.4 倾向得分匹配的结果

gen pc = .

gen pd = .

probit group x1 x2

predict score, xb

replace score = normal(score)

forvalues i = 1(1)200 {

if group[`i'] == 1 {

forvalues j = 1(1)200 {

if group[`j'] == 0 {

local d = abs(score[`i'] - score[`j'])

if `d' < pd[`i'] {

qui replace pc = `j' in `i'

qui replace pd = `d' in `i'

}

}

}

}

}

相关课程直击面板数据模型 - 连玉君,时长:1小时40分钟

Stata 33 讲 - 连玉君, 每讲 15 分钟.

部分直播课 课程资料下载 (PPT,dofiles等)

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

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。关于我们Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。

连享会-主页 和 知乎专栏,300+ 推文,实证分析不再抓狂。

公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。

公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法 等连享会小程序:扫一扫,看推文,看视频……扫码加入连享会微信群,提问交流更方便

处理效应模型stata实例_Stata手动:各类匹配方法大全 A——理论篇相关推荐

  1. 处理效应模型stata实例_stata︱政策处理效应模型sata基本命令汇总

    本文来源经管之家论坛,由坛友cuifengbao归纳 Use ,文件名.dta,clear Ssc installpamatch2,replace 一.首先做一元回归 reg 结果变量 处理变量,r ...

  2. 处理效应模型stata实例_Stata现场班(高级班)讲义

    人大经济论坛( www.pinggu.org ) 010-******** 邓老师 1 < Stata 暑期高级班> 课程大纲  培训时间: 2011 年 7 月 26 日 --28 日 ...

  3. 处理效应模型stata实例_【更新通知】手把手教你Stata软件操作与案例分析更新,速来!...

    继3大政策效应评价方法.面板微观计量模型.空间计量模型.应用面板数据模型四大主题套餐后,手把手教你Stata系列课程推出多期DID.平行趋势检验系列专题. 该专题包含多期DID及平行趋势检验:双重差分 ...

  4. Garch模型Stata实例

    一.理论知识 1.金融时间序列经常表现出波动性集群(或称聚类现象),从而导致股票收益率的分布出现尖峰厚尾的特征,而不是有效市场假说所形容的正态分布.条件异方差就是用来分析这种波动集群性现象的. 图一: ...

  5. ardl模型stata命令_Stata新命令快讯:有向无环图、模糊倍分法等

    Stata 连享会   主页 || 视频 || 推文 温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验. 编者按: 定期递送 SSC 网站上发布的最新命令,对于我们认为重要的命令进行标注. 对于 ...

  6. ardl模型stata命令_Stata新命令快讯: 有向无环图、模糊倍分法等

    编者按: 自今日起,Stata 连享会 (公众号 StataChina) 将开设「Stata新命令快讯」专栏,定期推送 SSC 网站上发布的最新命令,对于我们认为重要的命令进行标注. 对于您感兴趣的命 ...

  7. unity性能优化 模型、贴图、shader优化方法大全

    优化,老生常谈.游戏的优化和网站.软件优化没有任何不同,除了编码质量和使用技巧以外,都是那些空间<>时间.效果<>性能的老套路. 带*号的,都是极其重要的优化手段,就算没用上你 ...

  8. 深度学习卷积神经网络CNN之 VGGNet模型主vgg16和vgg19网络模型详解说明(理论篇)

    1.VGG背景 2. VGGNet模型结构 3. 特点(创新.优缺点及新知识点) 一.VGG背景    VGGNet是2014年ILSVRC(ImageNet Large Scale Visual R ...

  9. ip协议采用何种路由策略实现路由选择_网络工程师重要考点收藏!网络技术各类协议总结大全看这篇...

    CCIE HCIE考试全部重要考点协议总结 值得收藏 互联网络发展到如今,已经变得无比的庞大.在早期网络发展当中所使用的路由交换协议已经不再满足现今的网络规模和发展速度,我们今天就来看看"从 ...

最新文章

  1. NIOS2 DMA 传输模式
  2. 【安全牛学习笔记】其他途径
  3. 【译】用Fragment创建动态的界面布局(附Android示例代码)
  4. LeetCode First Missing Positive
  5. python爬虫 正则表达式 re.finditer 元字符 贪婪匹配 惰性匹配
  6. web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
  7. C语言实现--背包问题 算法(Knapsack Problem)
  8. 原创:艰难的PCS7安装过程
  9. 千树万树梨花开:二叉树的实现以及存储结构
  10. python指数函数的计算,Python exp() 指数函数
  11. QML 图形渲染 - Displace
  12. android系统添加内置APP(自带.so)
  13. 常用短链接生成工具推荐
  14. OpenShift 4 - 在单机版 OpenShift Local 中运行 OpenShift Virtualization(视频)
  15. 蓝桥杯 ALGO-1004 无聊的逗 01背包+回溯 python
  16. 【笔记】ARM架构和ARM芯片(一)
  17. C#:今日上机问题描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
  18. AK消防 注册消防工程师 要点汇总 建筑消防性能化防火设计
  19. Debian选择并安装软件需要下载很久的解决办法
  20. 股票自选股基本函数大全-9

热门文章

  1. 专业心理性格测试软件,专业心理性格测试题目
  2. 【beta】nice!-------约吧NABCD
  3. Java实现印刷体转手写体—妈妈再也不用担心我被罚抄作业了
  4. 波卡黑客松第三届(秋季)开发者大赛落幕
  5. 【安卓学习之常见问题】 Google Play问题-Android 4.4.4平板电脑不能安装 -- (Your device isn‘t compatible with this version)
  6. 前端机器学习——线性回归
  7. 10min快速了解k8s基础
  8. html点击圆点箭头分页,点击自动轮播图片下面的小圆点实现图片切换功能,并不是左右箭头那种切换...
  9. 父亲与收音机的不解情缘
  10. 认识VF--Visual FoxPro 漫谈(轉)