python倾向匹配得分_在SPSS软件中实现1:1倾向性评分匹配(PSM)分析

谈起临床研究,如何设立一个靠谱的对照,有时候成为整个研究成败的关键。对照设立的一个非常重要的原则就是可比性,简单说就是对照组除了研究因素外,其他的因素应该尽可能和试验组保持一致,随机是最理想的策略!通过随机化,让两组间具有更好的可比性。然而,并不是所有这场合都能实现随机,尤其是回顾性研究,事实已经发生了,就很难再进行随机处理了。因此,很多观察性研究,分组间不均衡是最常见的现象。

面对分组不均衡,基线不整齐,两组可比性差。经典的方法采用多因素回归分析处理。但是, 回归仍然有一定的缺陷。因此,目前一般采用一些新的策略进行,最常见的是倾向评分策略。 倾向评分策略又包括几种类型,如逆概率加权方法(IPTW),倾向性评分匹配(PSM)等。

如果分组间的样本量比超过1:4范围,此时,回归分析的结果会受到很大影响。这时候,一般建议采用倾向性评分匹配(propensity score matching, PSM)方法进行处理,其一,可以使两组样本数在可比范围(一般是1:1,1:2等),同时能有效降低混杂偏倚。与常规匹配相比,倾向性评分匹配能考虑更多匹配因素,提高研究效率和可信度。

这么“高大上”的倾向性评分匹配,是不是超难学?其实不然,SPSS这种傻瓜软件就OK。当然,如果您安装的是SPSS 22版本之前的老版本的话,你就得反复折腾,安装“高级”的R插件来处理了(R软件、SPSS R插件、PS matching插件等)。如果您安装的是22或23版本(当然,未来会更高了),就不用担心了,傻瓜式解决这个问题。

不过,目前SPSS自带的插件,只能做1:1匹配,算法方面主要是Fuzzy模型,你不能自由选择其它的模型哦,如5-->1贪婪最优匹配。

不过,小编在此提醒各位,SPSS容易抽风,往往第一次打开运行时,提示内置的Fuzzy文件没有安装(其实早就安装过了)。此时,往往一脸蒙了。不用急,教大家一个小招,可以先运行一下其它功能,需要先调用Python command的功能,预热一下,然后再使用PSM 功能就OK了。例如,可以使用data菜单的PSM下面的case control matching, 胡乱填一下,然后运行一下。再回来做PSM就成功了。当然,做PSM分组变量(group indicator缺失值全部都去掉)里面不可以有缺失值,所有新变量和数据集都要用英文起名,不然会跑不出结果! 因为如果都不知道分在哪一组的话,软件就会傻了,不知道你在干啥,匹配什么东东了。

言归正传,开始使用SPSS 22或SPSS 23演示1:1倾向性评分匹配。

一、示例数据

某研究者想搞明白吸烟和高血压之间的关系,准备利用某项调查的资料进一步随访研究吸烟和高血压的关联,该项研究包括233名吸烟者,949 名不吸烟者。如果全部随访,研究小白感觉鸭梨山大,所以打算从中选取部分可比的个体进行随访。

这两组人群一些主要特征的分布存在显著差异(见表1),现准备采用PS最邻近匹配法选取可比的个体作为随访对象。

表1. 两组基线情况比较(匹配前)

小编提示:类似象这样基线不齐,在观察性研究中是正常现象哦。如果观察性研究,基线清一色p>0.05的话,那太令人可疑了,往往存在挑选样本的可能了。

二、SPSS分析方法

1. 数据录入

(1) 变量视图

(2) 数据视图

2. 倾向性评分匹配

选择Data→Propensity Score Matching,就进入倾向性评分匹配的主对话框。

将分组变量Smoke放入Group Indicator中(一般处理组赋值为“1”,对照组赋值为“0”);将需要匹配的变量放入Predictors中;Name for Propensity Variable为倾向性评分设定一个变量名PS;

注:分组变量,根据你自己的需要即可。一般只有两组,多组处理会更复杂了。而匹配变量,即多个不同变量的综合评分(回归得分值),SPSS会为大家自动计算,可以自主命名为PS,或其它的名字均可。

Match Tolerance用来设置倾向性评分匹配标准(学名“卡钳值”,英文叫caliper),这里设定为0.02,即吸烟组和不吸烟组按照倾向性评分±0.02进行1:1匹配(当然,卡钳值设置的越小,吸烟组和不吸烟组匹配后可比性越好,但是凡事有个度,太小的卡钳值也意味着匹配难度会加大,成功匹配的对子数会减少,需要综合考虑);说来很难懂,其实可以理解为两组匹配时,得分(即上述的PS)得分相差不能太多,如果相差太多,就不能作为匹配对象了。所谓不能相差太多,指的意思是两组评分值相差在一定范围内(caliper),如±0.02左右。例如第一组中一个样本得分为0.561分,另外一组中选择一个0.562分,十分接近,两者仅相差0.001分,当然不错。如果一组得分为0.561分,另外一组中找不到相近的,与之最近的得分在0.583分。此时与0.561相差超过了0.02,即使是“最接近”的样本,也无法匹配(因为它们相差得太多了)。这时只能去除这个样本(找不到合适的匹配对象样本)。

Case ID确定观测对象的ID;Match ID Variable Name设定一个变量,用来明确对照组中匹配成功的Match_ID;Output Dataset Name这里把匹配的观测对象单独输出一个数据集Match。

3. Options设置

Variable for Number of Eligible Cases设定一个变量,用来明确病例组中某一个观测对象,在对照组中有多少个观测对象满足与其匹配的条件,比如说病例组有一个观测对象PS=0.611,对照组可能有一个0.610,一个0.612。

Sampling默认为不放回抽样。

Give priority to exact matches 优先考虑精确匹配,也就说病例组有一个观测对象PS=0.611,对照组也应该找到一个0.611。

Maximize execution performance 执行最优化操作,即系统会综合考虑精确匹配和模糊匹配(基于设定的卡钳值范围内匹配),系统默认勾选。

Randomize case order when drawing matches整个匹配过程中,如果对照组有多个满足匹配条件的观测对象,那么SPSS会默认随机将其与病例组观测对象匹配。但是因为SPSS默认每次操作给对照组的随机数字不同,所以如果不特殊设定,每次实际匹配成功的对子是不一样的,也就说这一次对照组A匹配给病例组B,下一次就可能匹配给病例组C。所以需要自行设置,并且在Random Number Seed设定一个随机数种子,确保匹配过程可以重复。

三、结果解读

1. 匹配结果

表2以吸烟(1=吸烟;0=不吸烟)为因变量,以需要调整的变量为自变量构建logistic回归模型(表2),求出每个研究对象的PS值。

表2. logistic回归模型

表3显示,精确匹配45对,模糊匹配114对,共计匹配成功159对。

表3. 匹配结果

表4主要是匹配过程。首先是精确匹配(即PS完全一致),匹配33663次,大约1%匹配成功;其次在精确匹配成功的前提下,进行PS的模糊匹配(PS±0.02,即最开始设定的卡钳值为0.02),匹配33618次,大约3.3%匹配成功。

表4. 匹配容许误差

2. 匹配后数据库

输出的数据集Match中出现之前设定的几个新变量:E_case表示对照组中有几个符合匹配条件的观测对象(如图,吸烟组ID=2,有2个对照组观测对象符合匹配条件);PS是基于logistic回归模型计算出的倾向性评分;match_id表示匹配成功的ID。

3. 数据库整理

A. 筛选匹配成功的对子:选择Data→Select Cases→If condition is satisfied:设定match_id≥1,筛选出匹配成功的对子→Output中输出新的数据集Analysis。

B. 确定匹配成功标识:match_id为吸烟组和不吸烟组相互匹配成功的ID,这里将不吸烟组match_id变量转换为ID变量,这时候相同的match_id即为匹配成功的对子。具体操作:将Analysis数据集中,不吸烟组match_id替换成ID编号:Transform→Compute Variable→if smoke=0, match_id=ID→OK

C. 选择Data→Sort cases→按照匹配标识match_id排序(相同的match_id即为匹配成功的对子)→OK→Save(你的鼠标手一定要点保存!!!)

倾向性评分匹配就搞定了,再来看看匹配情况。表5显示,原吸烟组233例,最后共有159例匹配成功(这次我们限定PS≤0.02,但可根据实际情况选择合适的限定,增加匹配成功数!),各匹配因素在两组间都均衡可比。

表5. 两组基线情况比较(匹配后)

四、总结和拓展

PSM一般分为几种类型:

1、PS最邻近匹配:是PSM最基本的方法,即直接从对照中寻找一个或多个与处理组个体PS值相同或相近的个体作为配比对象。一般配合caliper进行限制,防止把不太相近的样本匹配进来。但是,如果样本量足够大,这种方法比较常用,也很简单有效。如果样本量较小时,要慎用。

2、分层PSM:PS最邻近匹配尽管可以使协变量总体趋于平衡,但不能保证每个协变量分布完全一致。可以根据某个重要变量(如性别)分层后,分别对每层人群进行PS最邻近匹配,然后再将配比人群合并,这样就可以保证该重要变量在组间分布完全一致。

3、最优化匹配。采用策略包括马氏距离,贪婪匹配等。一般来说,也会与caliper结合使用,以与达到最佳的匹配效果。不过,对于1:m PS匹配和与马氏距离配比结合的PSM,目前SPSS 22及以上版本自带的PSM并不能实现。需要安装专门的R插件进行。

你可能感兴趣的:(python倾向匹配得分)