倾向评分匹配(Propensity Score Matching,简称PSM)是一种统计学方法,用于处理观察研究(Observational Study)的数据,在SCI文章中应用非常广泛。在观察研究中,由于种种原因,数据偏差(bias)和混杂变量(confounding variable)较多,倾向评分匹配的方法正是为了减少这些偏差和混杂变量的影响,以便对实验组和对照组进行更合理的比较。
为什么需要做倾向评分匹配?
我们知道RCT的证据力度高,是因为对患者进行了严格的筛选。我们的回顾性研究都是过去的数据,很难像RCT一样进行严格的筛选出两组患者基线相近的基础资料,但我们可以通过倾向评分匹配把回归性的数据进行筛选,把基线资料相近的患者进行匹配,得到近似RCT的效果。
应用场景
 1.基线资料不平
 2.开展病例对照研究病阳性例数较少,如罕见病研究
 3.将众多混杂因素变为一个变量:倾向值
以下为一个实例,没进行匹配前两组患者基线资料相差很大,进行倾向评分匹配后,基线资料近似一致了

既往我们已经介绍了《利用SPSS进行PSM倾向性评分配对》,今日继续介绍R语言进行PSM倾向性评分配对,可以进行PSM的R包很多,我们今天来介绍Matching包,继续使用我们的早产数据,我们先导入R包和数据

library(Matching)
library(tableone)
bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)


这是一个关于早产低体重儿的数据(公众号回复:早产数据,可以获得该数据),低于2500g被认为是低体重儿。数据解释如下:low 是否是小于2500g早产低体重儿,age 母亲的年龄,lwt 末次月经体重,race 种族,smoke 孕期抽烟,ptl 早产史(计数),ht 有高血压病史,ui 子宫过敏,ftv 早孕时看医生的次数,bwt 新生儿体重数值。
我们先把分类变量转成因子

bc$race<-ifelse(bc$race=="black",1,ifelse(bc$race=="white",2,3))
bc$smoke<-ifelse(bc$smoke=="nonsmoker",0,1)
bc$low<-factor(bc$low)
bc$race<-factor(bc$race)
bc$ht<-factor(bc$ht)
bc$ui<-factor(bc$ui)

假设我们研究的是有无高血压(ht)对生出低体重儿(low)的影响,我们先绘制一个患者基线表

dput(names(bc))##输出变量名
allVars <-c("age", "lwt", "race", "smoke", "ptl", "ui", "ftv")###所有变量名
fvars<-c("race", "smoke","ui")#分类变量定义为fvars
tab2 <- CreateTableOne(vars = allVars, strata = "ht" , data = bc, factorVars=fvars,addOverall = TRUE )###绘制基线表
print(tab2)#输出表格


我们可以看到基线资料中有高血压组和没有高血压组除了末次月经的体重不一样,其他资料基本都是配平的。
我们需要进行倾向评分匹配,所以要先生成倾向评分,先建立方程

fit1<- glm(ht ~age + lwt + race + smoke + ptl + ui + ftv, data=bc,family=binomial(link = "logit"))

倾向评分就是fit1$fitted,你用predict生成也是一样的,先生成Match的3个参数

X <- fit1$fitted
Y <- bc$low
Tr<- (bc$ht == 1)

其实Y这个参数,生成不生成都是一样的,M=1代表默认1:1匹配

rr  <- Match(Y=Y, Tr=Tr, X=X, M=1)

生成了一个rr的列表(下图),匹配的数据在index.treated和index.control里面

我们把这两个数据提取出来

bcMatched <- bc[unlist(rr [c("index.treated","index.control")]), ]

我们来看看提取出来的数据(下图),一共提取出30个数据,但是我们看到id为98的数据重复匹配了

我们进一步设置一下,设置卡钳和replace,但这样进一步要求会继续损失数据

rr1  <- Match(Tr=Tr, X=X, M=1,caliper=0.2,replace  = FALSE)#Y不设置也可以
bcMatched2<- bc[unlist(rr1 [c("index.treated","index.control")]), ]

最终只有22例数据匹配成功

绘制匹配好的数据的基线表

tab3 <- CreateTableOne(vars = allVars, strata = "ht" , data = bcMatched2, factorVars=fvars,addOverall = TRUE )###绘制基线表
print(tab3)#输出表格


我们可以看到,lwt已经被配平了,之前在没配平前时是小于0.05的,这样患者的基线的年龄和体重就被配平了。我们在这个基础上还可以进行逆概率加权,还可以绘制差异SMD,我这里就不弄了,感兴趣的可以参看我的其他文章。

R语言基于Matching包进行倾向评分匹配(PSM)相关推荐

  1. R语言基于DALEX包进行特征筛选(feature selection)

    R语言基于DALEX包进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...

  2. R语言基于mediation包行中介效应分析

    中介变量(mediator) 是一个重要的统计概念,如果自变量 X 通过某一变量 M 对因变量 Y 产生一定影响,则称 M 为 X 和 Y 的中介变量.我们既往已经介绍了SPSS行中介效应分析,今天继 ...

  3. R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

    R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型 目录 R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

  4. R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置、置信区间、坐标轴(刻度、标签、范围)、无效线去除、水平线、辅助线、box形状、色彩等

    R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置.置信区间.坐标轴(刻度.标签.范围).无效线去除.水平线.辅助线.box形状.色彩等 目录

  5. R语言基于mediation包行中介效应分析(2)

    中介变量(mediator) 是一个重要的统计概念,如果自变量 X 通过某一变量 M 对因变量 Y 产生一定影响,则称 M 为 X 和 Y 的中介变量.我们既往已经介绍了<R语言基于mediat ...

  6. python倾向匹配得分_手把手教你做倾向评分匹配 -PSM

    原标题:手把手教你做倾向评分匹配 -PSM 本文首发于"百味科研芝士"微信公众号,转载请注明:百味科研芝士,Focus科研人的百味需求. 各位科研芝士的朋友大家好,今天和大家分享一 ...

  7. R语言 1:2 1:n 倾向性评分匹配法PSM 一个病例多个对照 MatchIt包

    1:2 /1:N 倾向性评分匹配法PSM, 条件Logistic回归 MatchIt包进行倾向性评分匹配法(Propensity Score Matching, PSM)主要是1:N匹配.一个病例对应 ...

  8. R语言基于ems包标准化死亡率 (SMR)计算(1)

    分析队列人群有无死亡人数超额,通常应用标准人群死亡率来校正,即刻观察到中的实际死亡数(D)与定一个标准的死亡人数(E),D与E之比称为死亡比(standarized Mortality ratio,S ...

  9. R语言基于dcurves包绘制COX回归临床决策曲线

    因为R的rmda包做不了COX回归临床决策曲线,很多朋友都是通过ggdca包来绘制COX回归临床决策曲线,最近很多粉丝使用ggdca包来绘制COX回归临床决策曲线出现问题过来问我,我绘制的时候没发现什 ...

最新文章

  1. web渗透漏洞实例讲解视频课程
  2. PHP处理跨域:header(AccessControlAllowOrigin:星)允许所有来源访问;后端Curl请求转发
  3. Docker入坑指南之RUN
  4. HDU 4020 Ads Proposal
  5. mysql删除记录后id不连续_Mysql数据库中使用DELETE语句时,一般删除一条记录后ID会不连续,才能让序号继续按顺序排列?...
  6. 【今日CS 视觉论文速览】1 Jan 2019
  7. python撩妹代码_Python十行代码让你秒变撩妹达人!想学?
  8. 关于jsp页面下,重置选择框的数据的操作!
  9. oracle 时间戳生成语句(秒级+毫秒级)
  10. python推荐系统算法朴素贝叶斯_Java实现的朴素贝叶斯算法示例
  11. Java自学知识点_良心_精心整理
  12. JavaCV的摄像头实战之一:基础
  13. html暴风粒子代码,魔兽世界课物品代码及gm指令大全(全部整理自网上).doc
  14. Google员工的工作环境
  15. 上传ipa到appstore最简洁的方法
  16. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-030(red_green)
  17. 无法下载钉钉群内回放视频?
  18. 【转】Web实现前后端分离,前后端解耦
  19. 家庭光纤宽带连接示意图
  20. CMMI2.0之我见-过程管理PCM过程资产开发PAD

热门文章

  1. 适合酒店的IPTV系统,这种的你爱了吗?
  2. linux使用rdesktop-vrdp进行远程连接
  3. 项目管理手记 28 ERP项目的高层支持要知行合一
  4. FFmpeg解封装、解码音频和视频(分别使用OpenGL和OpenAL播放)
  5. 解决win10系统无法打开截图工具
  6. FusionCharts flash透明度设置
  7. 含金量超高的证书:PMP项目管理证书
  8. 我的读书笔记——不上班也有钱
  9. 【白娘子传奇】大话版VM一键端+GM后台+视频教程
  10. JS 网页快捷键设置