用R完成倾向性得分匹配

Python017

用R完成倾向性得分匹配,第1张

倾向性得分匹配是一类基于反事实理论的数据预处理方法,在医学和政策研究中被广泛应用。R中有几个很优秀的包可用于开展倾向性得分匹配,而其中功能较强、知名较广、使用方便的当属Matchit,这个包与cobalt包联合使用,基本能完成PSM全流程分析。

下面我们用一个简单的例子,来演示一下如何用上述两个包完成一次倾向性得分匹配。我们用到的数据集是Matchit包自带的lalonde数据,此套数据用来评估某项就业政策对个人收入的影响。

我们首先尝试用最近邻方法对数据进行匹配(这是matchit函数采用的默认方法),随后用cobalt包的bal.tab方法来评估匹配的效果。

从结果来看匹配效果并不好,所有协变量的Diff.Adj都不够显著。下面再把倾向性得分的核密度图画出来观察。

可见匹配对于数据分布的改善并不多,最近邻匹配对于lalonde数据不是很有效。接下来我们用一些比较高级的方法来进行匹配。

情况确实有所改善,且匹配后的倾向性得分分布大体重合。

完成倾向性得分匹配后,如何提取匹配好的数据呢,还有如果我们对bal. plot 画的图不满意,或图像不符合杂志社的要求,我们该怎样利用匹配结果自己画图呢。这就需要我们深入解析matchit函数的返回值了,上述工作才能算是learn the hard way。这些都留待我们下回分解。

R语言中,match:匹配两个向量,返回x中元素在table中的索引或TRUE、FALSE。match函数使用格式有如下两种:第一种方便设置参数,返回x中元素在table中的位置,示例如下:match(x, table, nomatch = NA_integer_, incomparables = NULL)第二种简洁型,返回x中每个元素在table中是否存在x %in% tablex: 向量, 要匹配的值table: 向量, 被匹配的值nomatch: 没匹配上的返回值, 必须是整数incomparables: 指定不能用来匹配的值.match的匹配,限于相同类型,如果类型不同,要先进行强制类型转换,而后才能进行匹配。