广告制作公司网站建设模板,企业网站建设方案包含,做网站前台需要学什么 后台,搭建网站上传文件目前#xff0c;本人写的第二个R包pm3包的1.4版本已经正式在CRAN上线#xff0c;用于3组倾向评分匹配#xff0c;只能3组不能多也不能少。 可以使用以下代码安装
install.packages(pm3)什么是倾向性评分匹配#xff1f;倾向评分匹配#xff08;Propensity Sc…目前本人写的第二个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或者其他的数列都会报错。我们这里是racey是你要比较的结局变量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(databc,xrace,ylow,covsc(age,lwt,ptl),factorc(ui,low))在上一个版本中factor变量最少要取2个现在没有限制了取一个也可以生成数据。重要的事说两遍x就是你要比较匹配的变量你可以使用字符也可以使用数字但是你如果使用数字来表示的话必须是1,2,3使用0,1,2或者其他的数列都会报错。
g-pm3(databc,xrace,ylow,covsc(age,lwt,ptl),factorc(ui))我们把mbc提取出来
mbc-g[[mbc]]进行匹配这里就过一遍代码了详细的可以看上一篇
library(tableone)
allVars -c(age, lwt, ptl,ht)
fvars-c(ht)
tab2 - CreateTableOne(vars allVars, strata race ,
data bc, factorVarsfvars,addOverall TRUE )
print(tab2,smd TRUE)
tab1 - CreateTableOne(vars allVars, strata race ,
data mbc, factorVarsfvars,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的匹配功能。