目前,本人写的第二个R包pm3包的1.4版本已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少。
可以使用以下代码安装

install.packages("pm3")


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

1.4版本版本修正了上一个版本的一些错误,上次版本的教程写得不是很满意,这次我从新写一下我们先来看一下pm3函数

pm3 <-function(data,x,y,covs,factor,CALIP)

这里有6个参数,data就是你的数据,x就是你要比较匹配的变量,你可以使用字符也可以使用数字,但是你如果使用数字来表示的话必须是1,2,3,使用0,1,2或者其他的数列都会报错。我们这里是race,y是你要比较的结局变量,covs是协变量的意思,填入你模型模型中的协变量,也就是你要匹配的基线指标,包括连续的和分类的,factor填入变量后会把你数据中的分类变量转成因子,CALIP是卡钳的意思,不填的话默认是0.5.下面我继续以R包自带的早产数据来演示一下,先导入R包和数据

library(pm3)
bc<-prematurity


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

假设我们研究的是有不同种族(race)对生出低体重儿(low)的影响。需要对3个种族进行基线资料倾向评分匹配

现在我们不需要像既往一样进行一大堆复杂操作,直接一句话代码,就搞定了

g<-pm3(data=bc,x="race",y="low",covs=c("age","lwt","ptl"),factor=c("ui","low"))

在上一个版本中,factor变量最少要取2个,现在没有限制了,取一个也可以生成数据。重要的事说两遍,x就是你要比较匹配的变量,你可以使用字符也可以使用数字,但是你如果使用数字来表示的话必须是1,2,3,使用0,1,2或者其他的数列都会报错。

g<-pm3(data=bc,x="race",y="low",covs=c("age","lwt","ptl"),factor=c("ui"))


我们把mbc提取出来

mbc<-g[["mbc"]]

进行匹配,这里就过一遍代码了,详细的可以看上一篇

library(tableone)
allVars <-c("age", "lwt", "ptl","ht")
fvars<-c("ht")
tab2 <- CreateTableOne(vars = allVars, strata = "race" ,
data = bc, factorVars=fvars,addOverall = TRUE )
print(tab2,smd = TRUE)
tab1 <- CreateTableOne(vars = allVars, strata = "race" ,
data = mbc, factorVars=fvars,addOverall = TRUE )
print(tab1,smd = TRUE)


在上一个版本中,有粉丝遇到过错误
Error in if ((absDist12 + absDist13) < mindis) { : missing value where TRUE/FALSE needed
在本次R包也进行了修正,消除了错误,这是使用粉丝数据进行的匹配

我们可以看到,匹配后效果很好,大部分变量基本上都P大于0.05了。由于pm3包使用的是for循环进行匹配,速度还是有点慢,我试了一下,数据量在1万的数据大概需要1分钟左右,接下来想使用apply函数来改写它,让它速度更快点,再来就是看看优化一下代码,开发1:2:2的匹配功能。

pm3包1.4版本发布----一个用于3组倾向性评分的R包相关推荐

  1. pm3包1.8版本发布----一个用于3组倾向性评分的R包

    目前,本人写的第二个R包pm3包的1.8版本已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少. 可以使用以下代码安装 install.packages("pm3" ...

  2. 首发,pm3包,一个用于多组(3组)倾向评分匹配的R包

    目前,本人写的第二个R包pm3包已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少. 可以使用以下代码安装 install.packages("pm3") 什么是 ...

  3. 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D

    一个震撼的交互型3D可视化R包 - rayshader 虽然3D的plot见得比较多了,但是看见这样的R包,我的心还是砰了一下,这个简直不能再好看了! 关键是!!!敲黑板,这个R包超简单!!!对于刚学 ...

  4. 发布一个用于WinCE的矢量图控件

    发布一个在wince操作系统下,采用.net compact framework 1.0 ( c#)开发的矢量图控件,我于2007年3月份集中一个月的经历完成了它.当然,它的前身是2005年12月我写 ...

  5. linux抓包命令tcptrace,每天学习一个命令:tcpdump 命令行下抓包

    tcpdump 是一个运行在命令行下的抓包工具,如果想知道网络中有什么在流通,那么 tcpdump 就是一个很好的工具.它允许用户拦截和显示发送或收到过程中网络连接到该计算机的 TCP/IP 和其他数 ...

  6. 如何安装旧版本的 R 包

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 我们在安装 R 包的时候,经常会发现某个最新的包与当前 R 的版本不兼容. > inst ...

  7. r语言查找是否存在空值_关于R包安装你知道多少?

    在R语言的学习过程中离不了各种R包的安装与使用,要使用某个R包首先得学会如何安装该R包.对于R包的安装你知道的有多少?你知道如何指定安装路径吗?为何你每次重新打开R绘画都需要重新安装R包?今天小编带你 ...

  8. R语言 image.binarization: 包_想提高文章的引用率?写个R包吧!- 工具准备篇

    前言 R语言程序包是R语言的灵魂,是R语言的核心,每一个R语言用户都会使用到R包.2006年3月15日,第一个R包(coxrobust)加入CRAN,截止2020年5月17日,已经有超过15000个R ...

  9. R包开发每日中国天气

    R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可 ...

最新文章

  1. java常用的7大排序算法汇总
  2. maven package自己主动部署包
  3. QUIC 之类的可靠传输协议
  4. 无失真压缩法可以减少冗余_机考样题(选择题带标准答案).docx
  5. 桌面云计算: 提供灵活、可靠双保险
  6. Ajax叠加(Ajax返回数据用Ajax发出)
  7. 使用ffmpeg获取影片信息
  8. 计算机木马不会主动传播什么疾病,研究如何制作自动运行的木马病毒以及如何传播...
  9. js通过身份证计算年龄
  10. 显卡煲机测试软件,铁三角耳机煲机方法三分钟让您学会煲耳机
  11. 05JavaScript输出
  12. testlink批量执行用例
  13. 微信群发可以分组吗?群组标签分组设置
  14. 这么用 if-else,小鹿差点被辞退!
  15. ARCHPR基础破解压缩包密码-掩码爆破
  16. 爬取百度地图店家信息
  17. python 机器学习(引言-莺尾花分类)
  18. win10安装并配置node.js
  19. gnuplot软件学习笔记
  20. 上个厕所的功夫弄清楚了ES搜索服务器

热门文章

  1. hdu1873 看病要排队哦
  2. win10 xbox登录出现不能登录的解决方法
  3. 封校大学生在宿舍无聊玩起图像大找茬——一个关于游戏的练手小项目(一起领略Python脚本的风采吧)
  4. AI绘图:chatGpt,midjourney, discord
  5. 你以为 CSS 只是个简单的布局?
  6. 反向代理和正向代理详解
  7. python中nomodulenamed怎么解决_python:ModuleNotFoundError:Nomodulenamed解决方法
  8. 斐波那契数列的背景及解决方法
  9. 埃拉托色尼筛选法------筛选质数
  10. Android实现直播的博文和流程(全过程,超详细/附源码)