1.1 MatchingFrontier Package 简介
MatchingFrontier Package包由哈佛大学的Gary King和Christopher Lucas以及来自MIT的Richard Nielsen三位学者共同开发,该包于2015年首次发布在Github上,现在在CRAN上也可方便下载。
该包主要提供了一个用于因果推断的优化分组匹配效率的算法。作者认为好的匹配方法应该同时在匹配组与对照组的相似度上(消除偏误)和样本规模上(减少方差)同时实现最大化。而现在学界流行的PSM方法仅仅通过倾向得分本身进行匹配,在匹配组与对照组的相似度、模型依赖度、统计效率、偏误等评价指标上都表现欠佳。具体表现为:传统的PSM缺乏一种原则性的解决方案去处理偏误—方差之间如何权衡的问题,也即目前的匹配方法的是通过选择性地修剪观测数据来降低样本数据的不平衡,从而降低模型的依赖度。然而,修剪数据同时又会减少样本量,因而反过来又可能会增大最终估计值的方差。因此,研究者长面临着偏误—方差的权衡困境。
该包作者提出的MatchingFrontier算法实现了对不平衡(在处理组和控制组之间)和样本大小的同步联合优化与精简,优化了分组匹配效率(笔者注:本包最核心用途为生产最优的匹配样本,因此后续还需要进行相应的分析;而标准的PSM分析在计算出ATT值后其分析流程实质上就已全部结束)。本文仅对该包做简要介绍,以期通过对该包的初步介绍,使读者能够更有效地进行后续学习。(参考文献见该包的使用说明和该包作者发表的学术论文—-American Journal of Political Science, Vol. 61, No. 2, April,2017,Pp. 473–489)。
该包主要由4个函数模块构成:
构造匹配边界makeFrontier;
估计边界效应estimateEffects();
可视化分析Visualize the full frontier;
生成经优化后的匹配样本。
library(MatchingFrontier)
# 载入本文所需要的程序包data('lalonde')
# 读入本文所需要用到的数据集
lalonde <- as.data.frame(lalonde)
#转换为data.frame类型,提升运算速度
attach(lalonde)
该数据集为最传统的倾向值匹配分析所用到的数据集(该包对控制组的观测值进行了补充),re78为1978年实际收入(结果变量);treat是否参加就业培训(处理变量);age年龄,educ教育年限,black是否为黑人,hisp是否为拉丁族,married是否结婚,re74、re75为1974和75年的实际收入,u74,u75为1974和75年是否为失业状态;样本共1185个观测
计算匹配边界,本文仅对连续型度量为例说明也即本文所指平均马氏距离,离散型度量请参见相关文献。
# 创建需要匹配的变量
match.on <- colnames(lalonde)[!(colnames(lalonde) %in% c('re78', 'treat'))]
# 显示需要匹配的变量
match.on
# 计算马氏边界
my.frontier <- makeFrontier(dataset = lalonde,treatment = 'treat',outcome = 're78', match.on = match.on) my.frontier
返回结果显示,997个观测值被Drop,也即消除偏误和减少方差这两个维度同时达到最优化条件的观测值只剩余188个。
# 设置基本关系式
my.form <- as.formula(re78 ~ treat + age + black + education + hispanic + married + nodegree + re74 + re75)
# 估计马氏边界的效应
my.estimates <- estimateEffects(my.frontier, 're78 ~ treat', mod.dependence.formula = my.form, continuous.vars = c('age', 'education', 're74', 're75'), prop.estimated = .1, means.as.cutpoints = TRUE)
plotFrontier(my.frontier,cex.lab = 1.4,cex.axis = 1.4,type = 'l', panel.first =grid(NULL,NULL, lwd = 2))
笔者注:this figure displays the imbalance-n frontie
plotEstimates(my.estimates,ylim =c(-10000, 3000), cex.lab = 1.4,cex.axis = 1.4, panel.first = grid(NULL, NULL,lwd = 2,))
笔者注:this figure shows estimates of the causal effect across that same frontier. The shaded region is the Athey-Imbens model dependence interva
plotMeans(my.frontier)
笔者注:TThe figure displays the means of each covariate as observations are pruned and balance improves
n <- 180matched.data <- generateDataset(my.frontier, N = n)
可在优化后的样本中选取一部分观测或者全部观测,本文选择了180个观测。
OK,MatchingFrontier的介绍到此结束,可以去用该新生成的 matched.data去跑后续回归了。
文中所提文献可至下方链接下载:
链接:https://pan.baidu.com/s/1dGwvsbB 密码:sllf
往期精彩内容整理合集:
公众号后台回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门