MatchingFrontier包简介及R实现

2018 年 1 月 14 日 R语言中文社区 赵毅
作者:赵毅 
来源:个人微信公众号:数据分析1480

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;

  • 生成经优化后的匹配样本。

2.1 载入需要的程辑包和数据集

library(MatchingFrontier)  
# 载入本文所需要的程序包data('lalonde')  
# 读入本文所需要用到的数据集
lalonde <- as.data.frame(lalonde)  
#转换为data.frame类型,提升运算速度  
attach(lalonde)

2.2 数据集(lalonde)简介

      该数据集为最传统的倾向值匹配分析所用到的数据集(该包对控制组的观测值进行了补充),re78为1978年实际收入(结果变量);treat是否参加就业培训(处理变量);age年龄,educ教育年限,black是否为黑人,hisp是否为拉丁族,married是否结婚,re74、re75为1974和75年的实际收入,u74,u75为1974和75年是否为失业状态;样本共1185个观测

3.1.Computing the Frontier

      计算匹配边界,本文仅对连续型度量为例说明也即本文所指平均马氏距离,离散型度量请参见相关文献。

# 创建需要匹配的变量
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个。

3.2 Estimating Effects(估计效应)

# 设置基本关系式
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)

4.1可视化分析

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

5.1生成经优化后的匹配样本

n <- 180matched.data <- generateDataset(my.frontier, N = n)

      可在优化后的样本中选取一部分观测或者全部观测,本文选择了180个观测。

      OK,MatchingFrontier的介绍到此结束,可以去用该新生成的 matched.data去跑后续回归了。

文中所提文献可至下方链接下载

链接:https://pan.baidu.com/s/1dGwvsbB 密码:sllf


往期精彩内容整理合集:

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)


公众号后台回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

登录查看更多
1

相关内容

[ICML-Google]先宽后窄:对深度薄网络的有效训练
专知会员服务
34+阅读 · 2020年7月5日
专知会员服务
139+阅读 · 2020年5月19日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
107+阅读 · 2020年5月3日
机器学习入门的经验与建议
专知会员服务
92+阅读 · 2019年10月10日
立体匹配技术简介
计算机视觉life
27+阅读 · 2019年4月22日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
机器学习顶级论文及实现(附地址及简介)
七月在线实验室
6+阅读 · 2017年12月22日
推荐算法:Match与Rank模型的交织配合
从0到1
15+阅读 · 2017年12月18日
深度文本匹配开源工具(MatchZoo)
机器学习研究会
10+阅读 · 2017年12月5日
十分钟读懂python的“数据库”语言
Python技术博文
3+阅读 · 2017年11月9日
Arxiv
18+阅读 · 2019年1月16日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
6+阅读 · 2018年7月12日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
8+阅读 · 2018年1月25日
Arxiv
5+阅读 · 2017年7月23日
VIP会员
相关VIP内容
相关资讯
立体匹配技术简介
计算机视觉life
27+阅读 · 2019年4月22日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
机器学习顶级论文及实现(附地址及简介)
七月在线实验室
6+阅读 · 2017年12月22日
推荐算法:Match与Rank模型的交织配合
从0到1
15+阅读 · 2017年12月18日
深度文本匹配开源工具(MatchZoo)
机器学习研究会
10+阅读 · 2017年12月5日
十分钟读懂python的“数据库”语言
Python技术博文
3+阅读 · 2017年11月9日
相关论文
Arxiv
18+阅读 · 2019年1月16日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
6+阅读 · 2018年7月12日
The Matrix Calculus You Need For Deep Learning
Arxiv
12+阅读 · 2018年7月2日
Arxiv
8+阅读 · 2018年1月25日
Arxiv
5+阅读 · 2017年7月23日
Top
微信扫码咨询专知VIP会员