用R实现倾向性评分匹配

几日前,一肿瘤医生回顾性收集了本院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更加合适?

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容