倾向性匹配分析是个啥?R语言代码来实现

最近但凡做观察性的分析,都会听到一个名词“倾向性评分”或者“倾向性匹配”。

究竟什么是倾向性评分?

定义:倾向性评分是指在一定协变量条件下,一个观察对象接受某种暴露/处理因素的可能性,它是一个从0到1的范围内连续分布的概率值。即按照某些因素或特征,将病例组(或暴露组)和对照组的研究对象进行匹配,以保证两组研究对象具有可比性,从而排除匹配因素的干扰。

基本原理是将多个混杂因素的影响用一个综合的倾向性评分来表示,从而降低了协变量的纬度,减少了自变量的个数,有效的克服了分层分析和多因素调整分析中要求自变量个数不能太多的短板。倾向性评分匹配是倾向性分析中应用最为广泛的一种方法。

究竟倾向性匹配分析怎么做呢?

基本思路:首先计算出每一个研究对象的倾向性评分,然后从小到大进行排序,对于每一个暴露/处理组的研究对象,从对照组中选取与其倾向性评分最为接近的所有个体,并从中随机抽取一个或N个研究对象作为匹配对象,直至所有的研究对象均匹配完毕,未匹配上的研究对象则进行舍去。

至于能有多少研究对象可以匹配成功,常与选择的匹配方法与匹配的比例有关。最常见的比例就是1:1匹配,具体选择比例需要根据两组人群的样本量来决定合适的比例,但建议不要超过1:4的匹配比例。

如果匹配的方法要求高,那么能够成功匹配的研究对象数量就少,甚至会出现很多研究对象匹配不上的情况,造成研究对象的浪费;如果匹配的方法要求比较宽泛,那么匹配消除混杂因素的效果就不能体现,匹配后仍然可能出现混杂因素分布不均衡的情况。

让我们看个案例:

与健康相关的生活质量(HRQOL)被认为是癌症治疗的重要结果之一。对癌症患者而言,最常用的HRQOL测度是通过欧洲癌症研究与治疗中心的调查问卷计算得出的。EORTC QLD-C30是一个由30个项目组成,包括5个功能量表,9个症状量表和一个全球生活质量量表的的问卷。所有量表都会给出一个0-100之间的得分。症状量表得分越高代表被调查人生活压力越大,其余两个量表得分越高代表生活质量越高。

然而,如果没有任何参照,直接对数据进行解释是很困难的。幸运的是,EORTC QLQ-C30问卷也在一些一般人群调查中使用,我们可以对比患者的得分和一般人群的得分差异,从而判断患者的负担症状和一些功能障碍是否能归因于癌症治疗。PSM在这里可以以年龄和性别等特征,将相似的患者和一般人群进行匹配。

网络上的教程大多都是基于SPSS来实现的,下面我们用R语言来实现倾向性匹配。

1.构造数据

数据构造将使用Wakefield package包,需要事先安装好。

2. 生成两个随机数据框

由于我不希望在本文使用真实数据,我需要生成一些仿真数据。使用Wakefield包可以很容易地实现这个功能。

第一步,我们创建一个名为df.patients的数据框,我希望它包含250个病人的年龄和性别数据,所有病人的年龄都要在30-78岁之间,并且70%的病人被设定为男性。

summary函数会返回创建的数据框的基本信息,如你所见,患者平均年龄为53.7岁,并且大约70%为男性。

 

接下来,我们需要创建另一个名为df.population的数据框。我希望这个数据集的数据和患者的有些不同,因此正常人群的年龄区间被设定为18-80岁,并且男女各占一半。

下方表格显示样本平均年龄为49.5岁,男女比例也大致相等。

 

合并数据框

在匹配样本之前,我们需要把两个数据框合并。先生成一个新变量Group来代表观测来自哪个全体(逻辑型变量),再添加另一个变量Distress来反应个体的痛苦程度。Distress变量是利用Wakefield包中的age函数创建的,可以发现,女性承受的痛苦级别更高。

当我们比较两类样本的年龄和性别分布时,我们可以发现明显的区别:

更进一步,我们还发现一般人群的痛苦程度显著较高。
样本匹配

现在,我们已经完成了全部的准备工作,可以开始使用MatchIT包中的matchit函数来匹配两类样本了。函数中method=‘nearest’的设定指明了使用近邻法进行匹配。其他方法包括,次分类,优化匹配等。ratio=1意味着这是一一配对。同时也请注意Group变量需要是逻辑型变量。

为了后续工作的便利,我们将summary函数的输出赋值给名为a的变量。
在匹配万样本后,一般人群样本量所见到了和患者样本一致(250个观测)。

根据输出结果,匹配后的年龄和性别分布基本一致了。

倾向得分的分布可以使用MatchIt包中的plot函数进行绘制。

保存匹配样本
最后,让我们把匹配好的样本保存在df.match数据框里。

现在pacman::p_load(tableone)

由于p值为0.222,学生t检验的结果不再显著。因此,PSM帮助我们避免犯下第一类错误。

参考文献

1. “A Step-by-Step Guide to Propensity Score Matching in R

2. https://datascienceplus.com/how-to-use-r-for-matching-samples-propensity-score/

3. https://www.tuicool.com/articles/niyumqv

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注