分享

PSM和马氏匹配已淘汰, '遗传匹配'成因果推断匹配之王

 计量经济圈 2020-05-26

箱:econometrics666@sina.cn

所有计量经济圈方法论丛的do文件, 微观数据库和各种软件都放在社群里.欢迎到因果推断研究小组交流访问.完整运行程序到社群提取使用.

对于因果推断研究中的匹配方法,各位圈友可以看看下面这10篇文章,里面既有经典文献又有操作程序和数据,还有各种解读和综述。 

1.广义PSM,连续政策变量因果识别的不二利器

2.PSM倾向匹配Stata操作详细步骤和代码

3.PSM, RDD, Heckman模型的操作程序

4.处理效应模型选择标准,NNM和PSM

5.因果推断中的匹配方法:最全回顾和前景展望

6.内生性和倾向得分匹配, 献给准自然试验的厚礼

7.倾向值匹配与因果推论,史上最全面精妙的锦囊

8.匹配还是不匹配?这真是个值得考虑的问题

9.匹配比OLS究竟好在哪里?这是一个问题

10.倾向匹配分析深度(Propsensity matching)

今天,“因果推断研究小组”将为圈友引荐一种致力于进行因果推断的新方法“genetic matching”(遗传匹配)。之所以起这样的名字,在于他使用了机器学习的“进化搜寻”功能去自动帮助我们寻找满足“匹配”条件(“协变量在处理组和控制组的分布平衡性”)的匹配变量。想象一下,在做PSM倾向匹配的时候,你第一步是需要使用政策发生前的变量(pretreatment covariates)去构建一个logit模型,然后使用这个倾向得分值在处理组和控制组进行一对一或多匹配、半径匹配和和核匹配,最后通过匹配后的处理组结果变量均值减去控制组结果变量均值就得到了ATE。但是使用PSM进行匹配的前提,是用来进行匹配的协变量需要在控制组和匹配组保持分布平衡。如果不满足这个covarites balance条件,那我们就需要替换或剔除某些协变量,从而让这个模型在匹配后满足平衡性假设。这样的手动操作不仅麻烦而且显得不够科学,因此导致很多学者批判PSM,认为里面有暗箱操作的可能。

其实,我们做了这么多匹配的研究,无非就是两种大类型匹配——以马氏距离为基础的多元变量匹配和把多维的数据转化为一维的倾向得分值匹配(还说有inverse variance匹配)。马氏距离匹配比较擅长把每个用来匹配的协变量距离降到最小,而倾向得分值匹配比较擅长把两组间的倾向得分的差异降到最小。在倾向得分值匹配出现之前,实际上使用最多的还是马氏距离匹配。但当匹配协变量中出现很多不同类型的变量时,马氏距离在这种多维度数据问题面前显得有些棘手。因为马氏距离匹配能能够达到优化的前提是,匹配的协变量需要满足椭球分布(ellipsoidal distributions),比如满足正态分布和t分布。正是因为马氏距离有匹配协变量分布问题和维度问题,因此后面才出现了倾向得分值匹配,不过正如前面所说,倾向得分值匹配也有自身的问题。所以,Rosenbaum和Rubin两位牛人在1985年就建议,把这两者干脆结合起来。

下面要引荐的遗传匹配实质上是两者的结合体,相对于之前的马氏距离匹配,遗传匹配多出了一个正定的权重矩阵W。而这个权重矩阵主要是用来给倾向得分匹配和马氏匹配分配一定的权重,若所有有效的信息都包括在倾向得分值里那这个模型中的其他匹配协变量的权重就为0,若该模型能够更好地通过马氏距离进行匹配那给予倾向得分值的权重就为0。遗传匹配最大的好处就是能够通过机器学习快速地找到一个合适的权重,让参与匹配的协变量尽快地达到在处理组和控制组间的分布平衡遗传匹配实际上是倾向得分和马氏距离匹配的一般化,属于非参数估计的匹配方法。那就是说,遗传匹配不需要提前去建一个模型预测倾向得分值,当然若把包含匹配信息的倾向得分值放进来,这会大大提高匹配的精准度。

下面,我们就从一个实际操作中比较一下,相对于倾向得分匹配,将要引荐的遗传匹配是如何提高匹配变量在处理组和控制组中的分布平衡性的(注: 下方操作是由R软件完成)完整的运行程序和软件包放在社群和因果推断研究小组。

倾向得分匹配

install.packages("Matching") ##安装matching软件包
library("Matching") ##使用matching软件包
data("lalonde") ##lalonde数据
attach(lalonde)


Y <- lalonde$re78 ##结果变量
Tr <- lalonde$treat ##政策处理变量
glm1 <- glm(Tr ~ age + educ + black + hisp + married + nodegr + re74 + re75, family = binomial, data = lalonde) ##使用logit模型预测倾向得分值
rr1 = Match(Y = Y, Tr = Tr, X = glm1$fitted, estimand = "ATT", M = 1, ties = TRUE, replace = TRUE) ##基于倾向得分值进行一对一匹配
summary(rr1) ##匹配结果描述


MatchBalance(Tr ~ age + I(age^2) + educ + I(educ^2) + black + hisp +
married + nodegr + re74 + I(re74^2) + re75 + I(re75^2) + u74 + u75 +
I(re74 * re75) + I(age * nodegr) + I(educ * re74) + I(educ * re75),
match.out = rr1, nboots = 1000, data = lalonde) ##检验是否各个协变量及其平方项和交叉项在处理组和控制组间的平衡性

MatchBalance(Tr ~ re74, match.out = rr1, nboots = 1000, data = lalonde) ##以re74为例进行平衡性检验

qqplot(lalonde$re74[rr1$index.control], lalonde$re74[rr1$index.treated]) ##画QQ图看是否符合正态分布
abline(coef = c(0, 1), col = 2)

我们得到的是ATT(average treatment on the treated)效应,从中可以得到的信息有,所有185个处理组的观测值都得到了匹配,而且ATT=2624.3在1%的水平下是显著的。

对于各个匹配协变量的分布均衡性,我们以re74为例进行说明。显示的结果中一共有四组指标,分别是①re74在处理组和控制组里的均值,②re74在标准化处理的QQ图中均值、中位数和最大值的差异,③re74在未经过标准化处理的原始数据的QQ图中均值、中位数和最大值的差异,④方差在处理组与控制组间的比例,re74在处理组和控制组均值差异的t检验,还提供ks检验来看re74是不是在处理组和控制组有显著的分布差异。

首先从第一组指标来看,匹配前re74在处理组和控制组之间的均值差距明显要比在匹配后的差距小,这说明就中间趋势而言匹配反而让re74状况变得不好了。然后,从第二、三组指标来看,re74在(未)经过标准化处理的(原始)数据的QQ图中的差异都在匹配后变大了,这更加表明re74在匹配后并没有变好反而是变差了。最后,从第四组指标来看,re74也没有在处理组和控制组里取得分布平衡性(KS naive p value在1%水平显著了)。

从上面的匹配后的QQ图来看,re74在倾向得分匹配中也没能满足平衡性假定,因此应当从logit模型中剔除进行重新估计(看看这些点是多么排斥45度线)。

上面的ATT效应虽然是非常显著的,但是匹配协变量的平衡性问题存在很大问题,所以我们不能说存在明显处理效应。下面,我们来看看遗传匹配到底是不是能够让re74取得较好的平衡性呢?

遗传匹配

X <- cbind(age, educ, black, hisp, married, nodegr, re74, re75, u74, u75) ##匹配的协变量
library("rgenoud") ##可能需要下载rgenoud软件包进行手动安装,链接:https://cran./web/packages/rgenoud/index.html


BalanceMatrix <- cbind(age, I(age^2), educ, I(educ^2), black, hisp,
+ married, nodegr, re74, I(re74^2), re75, I(re75^2), u74, u75,
+ I(re74 * re75), I(age * nodegr), I(educ * re74), I(educ * re75)) ##可以检验匹配变量的平方项和交叉项的平衡性,即不仅仅只看上面X向量的平衡性,这一步你可要可不要


gen1 <- GenMatch(Tr = Tr, X = X, BalanceMatrix = BalanceMatrix, pop.size = 1000) ##遗传匹配

mgen1 <- Match(Y = Y, Tr = Tr, X = X, Weight.matrix = gen1) 

summary(mgen1) ##匹配结果描述

从中可以得到的信息有,所有185个处理组的观测值都得到了匹配,而且ATT=1339.9竟然10%的水平下都不是显著的,因此可以想象前面的那个ATT效应是多么的不稳健。因为我们现在想看的是关于re74在处理组和控制组的平衡性是否得到改善了,所以这个不显著的ATT在这里并不要紧。

下面检验协变量的平衡性

mgen1 <- Match(Y = Y, Tr = Tr, X = X, Weight.matrix = gen1) summary(mgen1) ##匹配结果描述


MatchBalance(Tr ~ age + I(age^2) + educ + I(educ^2) + black + hisp +
married + nodegr + re74 + I(re74^2) + re75 + I(re75^2) + u74 + u75 +
I(re74 * re75) + I(age * nodegr) + I(educ * re74) + I(educ * re75),
data = lalonde, match.out = mgen1, nboots = 1000)


MatchBalance(Tr ~ nodegr + re74 + I(re74^2), match.out = mgen1,
 nboots = 1000, data = lalonde) ##看看re74在处理组和控制组是否平衡

从遗传匹配得到的re74的平衡性检验结果来看,re74在处理组和控制组里取得了较好的平衡性了(依照前面PSM的结果进行对比解读)。不然,咱们再看看通过遗传匹配后得到的QQ图,这些点差不多都在45度线上,表明re74在处理组和控制组的分布无显著差异。

遗传匹配运行时间相当的快,别看他需要寻找初始值,而且还通过“进化算法”寻找最优解,几千次simulations(模拟),但是在电脑里从运行到出来结果差不多就几十秒。想一想,如果你通过bootstrap进行几千次抽样计算PSM过程中的标准误,Stata需要1个小时,所以速度和匹配质量都是遗传匹配战胜倾向得分匹配和马氏距离匹配的法宝。

我们有一段重要的话引荐给圈友:“In general, one does not need to include all of the functions one wants to test balance on in the propensity score model. Indeed, doing so sometimes results in worse balance. Generally, one should request balance statistics on more higher-order terms and interactions than were included in the propensity score used to conduct the matching itself.” 在平时的匹配过程中可以借鉴一下。

推荐二篇文章:

1.Genetic Matching for Estimating Causal Effects: A General Multivariate Matching Method for Achieving Balance in Observational Studies(author:Alexis Diamond and Jasjeet S. Sekhon)

2.Multivariate and Propensity Score Matching Software with Automated Balance Optimization: The Matching Package for R(author: Jasjeet S. Sekhon)

3.Genetic Optimization Using Derivatives: The rgenoud Package for R(author: Walter R. Mebane, Jr.  Jasjeet S. Sekhon)

如果对完整运行程序和安装包感兴趣,可以到社群或因果推断研究小组提取使用。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多