严格来说,即使发表的论文,协变量在匹配后也不一定更加平衡,往往是某些变量的平衡性得到提升,而另一部分变量的平衡性有所下降。因此,我们介绍一种无需检查协变量平衡性、模型依赖度更低的匹配方法 ——Coarsened Exact Matching (广义精确匹配 \ 粗粒度精确匹配)。

1. CEM原理介绍

常用的 PSM 方法往往无法确保在匹配后提升平衡性,而 Coarsened Exact Matching(CEM) 可以通过控制观测数据中混杂因素对政策结果影响使处理组与控制组的协变量的分布尽可能保持平衡,从而增强两组数据之间的可比性。在 CEM 中,处理组和控制组之间的最大不平衡可以由用户事先选择,而不是通过那些费力的事后检查和重复重新评估的过程来发现,并且调整一个变量上的不平衡不会影响任何其他变量的不平衡。

CEM 通过预先的用户选择,将变量根据用户的标准分组,在保留基本信息的同时,提升了匹配的效率,限制了模型依赖程度和平均处理效应估计误差。它能够将数据限制在共同支持范围内,符合一致性原则,对测量误差的敏感度较低,能够很好地用多重插补方法处理缺失值数据。此外,它可以完全自动化地进行这系列操作,即使对于非常大的数据集,计算处理速度也很快。

CEM 有一个非常重要的性质——单调不平衡边界。它通过变量事先分组的标准,确保匹配提升样本的平衡性,而且限制了模型依赖程度和平均处理效应估计误差,因此无需匹配后检查协变量的平衡性。

2. 操作步骤

首先根据用户事先的截断点,将协变量进行分层。其次运用精确匹配的算法根据样本的经验分布将每层中的研究对象进行精确匹配,保证每层中至少有一个处理组和一个对照组的研究对象,否则将该研究对象删除。最后保留匹配成功的研究对象,用匹配后的数据,研究政策变量对结果变量的影响。

匹配中有一个重要的变量L1,L1的取值范围是[0,1]。若L1=0,则说明两组数据完全平衡,若L1=1,则说明两组数据完全不平衡,越接近1则说明不平衡程度越大。一般来说,匹配后 L1 较匹配前的 L1 有所下降,CEM 的匹配效果较好。CEM 匹配后两组数据的样本量可能会不相等,因此 CEM 匹配过程中会产生权重变量(Weight),以此来平衡每层中参与组和控制组的人数。

3. stata操作

ssc install cem
cem varname1 [(cutpoints1)] [varname2 [(cutpoints2)]] ... [if] [in] [, options]

varname# 是一组协变量(匹配时关注的特征,比如,进行个人特征匹配时,可能是 高矮、胖瘦、年龄、性别等);

cutpoints 是事先 coarsening 分组的标准;

options 比较多,介绍一个好用的k2k ,保证匹配后的处理组和控制组有相等的观测值。

4. 实例

我们使用 Lalonde (1986) 的数据进行演示:这个数据是关于一个美国 12-18 月的就业培训项目,研究的目的是探究接受培训是否提升了 1978 年的工资。

use "https://users.nber.org/~rdehejia/data/nsw_dw.dta", clear
tab treattreat |      Freq.     Percent        Cum.
------------+-----------------------------------0 |        260       58.43       58.431 |        185       41.57      100.00
------------+-----------------------------------Total |        445      100.00

可以看到样本中有 185 个处理组观测值和 260 个控制组观测值。接着,我们可以通过一个简单线性回归来找到两组之间均值的差异,

reg re78 treatSource |       SS           df       MS      Number of obs   =       445
-------------+----------------------------------   F(1, 443)       =      8.04Model |   348013183         1   348013183   Prob > F        =    0.0048Residual |  1.9178e+10       443  43290369.3   R-squared       =    0.0178
-------------+----------------------------------   Adj R-squared   =    0.0156Total |  1.9526e+10       444  43976681.9   Root MSE        =    6579.5------------------------------------------------------------------------------re78 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------treat |   1794.342    632.853     2.84   0.005      550.574    3038.110_cons |   4554.801    408.046    11.16   0.000     3752.855    5356.747
------------------------------------------------------------------------------

根据回归结果,我们得到样本的平均处理效应是 1794.342。显然,这个结果是有偏的,受到两组之间很多潜在因素的影响,因此我们考虑协变量年龄 age,受教育年限 education,种族 black,无高中文凭 nodegree,1975 年的工资 re75。我们用 L1 统计量来判断两组之间协变量的不平衡程度:

. imb age education black nodegree re74, treatment(treat)Multivariate L1 distance: .48284823Univariate imbalance:L1     mean      min      25%      50%      75%      maxage   .10915   .76237        0        1        1        1       -7
education   .16933   .25748        1        0        1        1        2black   .01632   .01632        0        0        0        0        0nodegree   .12651  -.12651        0       -1        0        0        0re74   .05894  -11.453        0        0        0   1291.5  -4530.6

从表中可以看出,两组协变量的 L1 统计量是 0.4828,这为我们的匹配提供了一个基准组,匹配后的不平衡程度可以与该值进行比对。下面的表从第二列开始分别报告了两组在最小值、25 分位数、50 分位数、75 分位数和最大值上的差异。数据显示,1975 年工资的不平衡性最高,年龄的不平衡性最低但不体现在分位数上。所以,均值上的差异并不能完整地反映不平衡性。这从侧面体现出,L1 统计量从整体度量不平衡性的重要性。然后,我们依据协变量进行 CEM 匹配。

. cem age education black nodegree re75, tr(treat)
(using the scott break method for imbalance)Matching Summary:
-----------------
Number of strata: 121
Number of matched strata: 380    1All  260  185Matched  204  133
Unmatched   56   52Multivariate L1 distance: .41924802Univariate imbalance:L1      mean       min       25%       50%       75%       maxage    .06116     -.066         0         1         0        -1        -1
education     .0662   -.01983        -1        -1         0         0         0black   1.7e-16   2.2e-16         0         0         0         0         0nodegree   5.6e-17  -1.1e-16         0         0         0         0         0re75    .07594    112.24         0         0         0    225.39   -505.18

我们可以看到,控制组中的 185 个观测值中有 133 个得到匹配 ,处理组中对应的数字则是 260:204。L1 统计量下降为 0.419,其它分位数上的不平衡性也得到改善,这说明我们的匹配是成功的。但是如前面所说,CEM 可以通过变量事先分组,确保匹配提升样本的平衡性,限制模型依赖程度和平均处理效应估计误差,因此无需费力地进行协变量平衡性检验。在美国的教育体系中,有这样的一个年限的划分:

Grade school     0-6
Middle school       7-8
High school         9-12
College             13-16
Graduate school     >16

我们把这个作为 coarsening 的依据,给受教育年限这个协变量进行分组,然后进行改进的 CEM 的匹配

. cem age education (0 6 8 12 16) black nodegree re75, tr(treat)Matching Summary:
-----------------
Number of strata: 99
Number of matched strata: 390    1All  260  185Matched  223  150
Unmatched   37   35Multivariate L1 distance: .49501281Univariate imbalance:L1     mean      min      25%      50%      75%      maxage   .06147  -.07964        0        0        0       -1       -1
education   .07539  -.05256       -1       -1        0        0        1black  7.8e-16  1.2e-15        0        0        0        0        0nodegree  1.1e-15  1.6e-15        0        0        0        0        0re75   .09364   71.046        0        0        0   355.65  -505.18

新的 L1 统计量为 0.495,似乎变得更加糟糕了。对比单个变量的匹配情况,不平衡性反而加大了。为此,我们仍然选用此前的设定方法进行匹配,进而使用其返回的权重矩阵来执行估计,以便得到样本平均处理效应的估计值。

. qui cem age education black nodegree re75, tr(treat)
. reg re78 treat [iweight=cem_weights]Source |       SS           df       MS      Number of obs   =       337
-------------+----------------------------------   F(1, 335)       =      5.26Model |   239267421         1   239267421   Prob > F        =    0.0225Residual |  1.5249e+10       335    45519065   R-squared       =    0.0154
-------------+----------------------------------   Adj R-squared   =    0.0125Total |  1.5488e+10       336  46095697.1   Root MSE        =    6746.8------------------------------------------------------------------------------re78 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------treat |   1723.915    751.918     2.29   0.022      244.838    3202.992_cons |   4469.369    472.369     9.46   0.000     3540.185    5398.552
------------------------------------------------------------------------------

非常简单,只需要把匹配的权重代入我们的简单回归就可以了,任何支持权重 (aweight or iweight) 的回归命令都可以和 CEM 匹配兼容。我们的例子中,新的样本平均处理效应是 1723.915,未进行匹配的 OLS 估计结果 (1794.342) 高估了就业培训对工资的作用。

广义精确匹配-Coarsened Exact Matching (CEM)相关推荐

  1. 图匹配(Graph Matching)入门学习笔记——以《Factorized Graph Matching》为例(一)

    这篇文章本身是图匹配经典论文<Factorized Graph Matching>的阅读笔记,后来发现该文介绍并串联了许多图匹配相关的知识,甚至可以看作一个小小的综述性文章,因此就作为图匹 ...

  2. 压缩感知重构算法之广义正交匹配追踪(gOMP)

    压缩感知重构算法之广义正交匹配追踪(gOMP) 转载自彬彬有礼的专栏 题目:压缩感知重构算法之广义正交匹配追踪(gOMP) 广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为 ...

  3. 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

    浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP) 主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.g ...

  4. 【elasticsearch】elasticsearch 精确匹配 与 全文搜索

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...

  5. python精确匹配字符串_Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法...

    1. 使用find()方法 >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> text.find( ...

  6. [转]广义正交匹配追踪(gOMP)

    广义正交匹配追踪(Generalized OMP, gOMP)算法可以看作为OMP算法的一种推广,由文献[1]提出,第1作者本硕为哈工大毕业,发表此论文时在Korea University攻读博士学位 ...

  7. OpenCV中的特征匹配(Feature Matching)

    OpenCV中的特征匹配(Feature Matching) 1. 效果图 2. 原理 3. 源码 3.1 SIFT关键点检测+Knn近邻匹配 3.2 ORB关键点检测+蛮力特征匹配 3.3 SIFT ...

  8. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  9. EXCEL中VLOOKUP做精确匹配匹配后日期显示为00-Jan-00,教你如何解决

    前言 博文分为两个部分来解决VLOOKUP做精确匹配匹配后日期为空显示为1/0/1900的问题 VLOOKUP匹配问题 VLOOKUP函数使用方法 VLOOKUP函数可以用来核对数据,多个表格之间快速 ...

最新文章

  1. 摩天轮社区_看房日记:难得!宜宾,又来一楼盘!一线江景+公园+学校,还有小户型、摩天轮...
  2. extjs Combobox级联
  3. 【正一专栏】曼城攻击力惊人露出冠军相
  4. 如何用Netty实现一个轻量级的HTTP代理服务器
  5. 【超级鼠标键盘锁】之实现思路(非驱动实现)
  6. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析
  7. java国际化程序_Java 国际化标准程序实现
  8. Java实现简单的日历小程序之Java图形界面开发小日历
  9. WebJars简介 —— 前端资源的jar包形式
  10. 西电硕士论文 Latex 模板:填坑!
  11. OLTP+OLAP->HTAP
  12. javascript百炼成仙 第一章 掌握JavaScript基础1.5基础考核
  13. python有什么好玩的库_python有什么好玩的库
  14. USB3.0/3.1信号完整性分析仿真
  15. 【需求】Python利用selenium抓取京东的地址数据
  16. 转自:蓝色污点的专栏
  17. VIM 打造 Java IDE 2
  18. 2013年小米校园招聘笔试题
  19. QQ号码免费申请的骗术
  20. 采集腾讯QQ国内+国际版的国家及地区库

热门文章

  1. Maya的Deform功能简写
  2. YII2.0 接口开发步骤
  3. java 调用js脚本_Java中使用JavaScript脚本的方法步骤
  4. 某农商行用户画像项目——用户画像分析部分
  5. Android实现自定义锁屏控制
  6. 智慧物流解决方案 PPT
  7. unity的异步加载
  8. 分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发“.NET研究”
  9. 【数据结构】八大排序(超详解+附动图+源码)
  10. 使用ova镜像进行edx平台的部署、配置过程