美文网首页R语言
用R实现倾向性评分匹配

用R实现倾向性评分匹配

作者: 薄荷Lemon | 来源:发表于2018-12-20 15:45 被阅读0次

    几日前,一肿瘤医生回顾性收集了本院2008-2018年某主任主治的某癌所有病例资料,欲验证A方法和B方法对该种肿瘤病人生存时间的差异。尝试匹配无果,遂来咨询。今天就和大家一同分享临床研究的另一利器——倾向性评分匹配。

    在常规的观察性研究和回顾性研究中,对于研究的结果变量Y,往往期望除暴露因素(X)外,病例组和对照组其它因素完全一致,以减少混杂因素或交互作用(Z,也称协变量)造成的偏倚。熟知的随机对照试验(Randomized Controlled Trial, RCT)是绝佳的研究方式。然而,受物力、财力、伦理道德等约束,实际研究中尤其是在回顾性研究中,很难做到完全随机对照,这时就需要消除混杂因素Z的影响,常用方法有:

    1)分层匹配;

    2)多元回归模型;

    3)倾向性评分匹配。

    当混杂因素X较少或已明确时,可采用分层匹配。利用多元回归模型需不断调整混杂因素以评价X对Y的独立作用大小。而当混杂因素较多较复杂时,倾向性评分匹配则呈现出特有的优势。

    倾向性评分匹配(Propensity Score Matching, PSM)于1983年由Paul Rosembaum和Donald Rubin首次提出,依据“反事实”(counterfactual)推断法则,基于条件概率(z=i|X,贝叶斯概率),对实验组和对照组个体进行打分(score)筛选,其分值大小代表被选入某组的概率大小,匹配概率相等或相近的个体,组成新的实验组和对照组,使组间混杂因素达到均衡。即组间不均衡的多个变量,通过一个综合指标“倾向评分”达到“降维”的效果。

    PSM步骤包括:1. Preliminary analysis; 2. Estimation of Propensity Score; 3. Propensity Score Matching; 4. Outcome analysis; 5. Sensitivity analysis。PSM的具体原理、相关公式及每一步骤比较复杂,如果大家感兴趣,我们可以下次再述。今天主要讲述第3步Propensity Score Matching的操作步骤。

    你可能会问:为什么不用临床医生熟用SPSS呢?

    当然可以,但是你得1.将SPSS升级到18.0以上版本;2.下载与你电脑上SPSS版本相匹配的R;3.安装SPSS Statistics Essentials for R插件;4.下载并安装SPSS PS Matching拓展功能。如果能顺利并成功安装的小伙伴们,就可以开心去尝试PSM了。然而,实际情况是,安装过程并非那么easy,很多人很可能中途就放弃了。

    至于SAS,你得先在你的电脑上成功安装好SAS并能运行吧......

    那么追求简便不愿麻烦的我尝试了R,如同从繁文缛节的古代穿越到了现代。下面我们就一同看一看这么简单好用的R如何实现PSM。所有代码如下:

    mydata <- read.csv ("C:/tumor/R-data.csv")

    attach (mydata)

    mydata [1:20,]

    m.out = matchit (radio ~ sex + age + margin + lymph + differentiated + disease + Tu + M + site + neck + targeted, method ="nearest", ratio =1)

    summary (m.out)

    plot (m.out, type = "jitter")

    plot (m.out, type = "hist")

    m.data1 <- match.data (m.out)

    write.csv (m.data1, file = "C:/tumor/match_nearest.csv)

    准备工作:

    数据清洗:将按照一定纳入标准和排除标准的病例进行编号,变量命名(英文)、赋值,切记去掉含有缺失值的病例,否则R运行会出错。

    整理好后,将文件存为.csv格式

    安装R:直接在官网下载。

    安装并加载MatchIt包:

    打开R,点击“程序包”-“安装程序包”,任选一CRAN mirror“确定”-选择“”MatchIt”-确定。点击“程序包”-“加载程序包”-选择“MatchIt”-确定。

    注意:MatchIt包安装一次就可以了,但在每次使用时需再次加载。

    代码详解:

    mydata <- read.csv ("C:/tumor/R-data.csv")

    attach (mydata)

    mydata [1:20,]

    第一行读取整理好的数据资料,准确指向其存储位置,即存在C盘tumor文件夹里格式为.csv的文件,文件名为R-data。

    第二行确保这些数据在当前R中可以使用。

    第三行在R里显示前20行的数据,以再次检查确认(可以省去此步操作)。

    m.out = matchit (radio ~ sex + age + margin + lymph + differentiated + disease + Tu + M + site + neck + targeted, method ="nearest", ratio =1)

    使用matchit进行匹配,分组变量radio,混杂因素变量sex,age等,与原始数据集命名的变量一致,可根据个人喜好、研究因素等等进行命名。匹配方法采用nearest,1:1匹配。也可以根据样本量进行1:2,1:3匹配等,一般不超过5,直接更改ratio=后面的数字即可。

    匹配方法除了nearest以外,还可以采用

    Exact Matching:病例组和对照组在每一变量上精确匹配,参数值完全相同。当协变量较多或者协变量取值范围较大时不宜采用。(method = "exact")

    Subclassification:将数据集分成子集,子集内协变量的分布相同。(method = "subclass")

    Optimal Matching:所有匹配病例之间的平均绝对距离最小,需要安装optmatch包。(method = "optimal")

    Genetic Matching:利用遗传学计算算法匹配,需安装Matching包。(method = "genetic")

    Coarsened Exact Matching:在确保其他协变量平衡下匹配某一协变量。(method = "cem")

    当然,你可以尝试每种匹配方法,选择最佳匹配。

    summary (m.out)

    plot (m.out, type = "jitter")

    plot (m.out, type = "hist")

    以数字、振动图、直方图的形式客观和直观展现匹配前后的情况以评估匹配效果。

    m.data1 <- match.data (m.out)

    write.csv (m.data1, file = "C:/tumor/match_nearest.csv)

    将匹配的结果输出到match_nearest.csv文件,存储在C盘tumor文件夹里。

    至此,短短9行命令,轻松实现PSM。是不是跃跃欲试?

    在这简单的几行命令里也存在不少坑,R也都有相应提示,如果你还是无法解决的话,欢迎留言或后台交流。

    选择R也是因为R是一种开源软件,任何人任何地方都可以使用,无需翻墙,也无需付费。这并不意味着一切分析都使用R,每一种统计分析软件都有各自的优势。掌握一定的流行病学、统计学知识,合理选择统计方法和统计软件,方可达到事半功倍的效果。

    插播一条小知识:

    我在命名“性别”这一变量时,突然想到gender和sex有什么区别?请教一爱丁堡大学英语专业硕士,其性别学专业的同学告知:简单来说,sex是指生理意义上的男女(XY,XX),而gender指心理意义上的男女。这才恍然大悟,这么说来,在许多临床试验或研究分析中是不是用sex更加合适?

    更多内容请关注微信公众号:折耳根说

    相关文章

      网友评论

        本文标题:用R实现倾向性评分匹配

        本文链接:https://www.haomeiwen.com/subject/quwykqtx.html