R语言完美实现PSM算法,完成医学倾向性匹配需求,附完整代码

本文利用R语言的MatchIt库进行倾向性评分匹配(PSM),以解决医学研究中的混杂因素问题。通过分析不同药品使用(国产与进口)对患者出院方式的影响,展示从数据预处理、PS估计、匹配算法执行到治疗效果评估的完整流程,揭示匹配后的样本平衡性和疗效差异。

#PSM new
library(MatchIt)
setwd("C:/Users/jack/Desktop/mission/psm/1")
library(readxl)
plan1 <- as.data.frame(read_excel("plan1.xlsx",col_types = c("text","text","text","numeric","numeric","numeric","numeric","numeric","numeric",'text')))
plan1$ITEM_NAME[plan1$ITEM_NAME=='国产']<-1#国产是1,进口是0
plan1$ITEM_NAME[plan1$ITEM_NAME=='进口']<-0#国产是1,进口是0

#去重到人次
plan1<-plan1[!duplicated(plan1),]
library(MatchIt)
library(dplyr)
library(ggplot2)

#1 Pre-analysis using non-matched data
#1.1 Difference-in-means: outcome variable:出院方式
chisq.test(rbind(table(plan1$出院方式[plan1$ITEM_NAME==1]),table(plan1$出院方式[plan1$ITEM_NAME==0])))#p-value = 0.03613

#1.2 Difference-in-means: pre-treatment covariates
ecls_cov <- c('AGE', '生化-肾功能里的肌酐(用药前)', '生化-肝功能里的谷丙转氨酶(用药前)', '生化-肝功能里的谷草转氨酶(用药前)', '生化-肝功能里的总胆红素(用药前)' , '生化-肝功能里的直接胆红素(用药前)')
result0<-as.data.frame(
plan1 %>%
  group_by(ITEM_NAME) %>%
  select(one_of(ecls_cov)) %>%
  summarise_all(funs(mean(., na.rm = T)))
)#连续变量的均值比较

tableGrob(result0)

chisq.test(rbind(table(plan1$SEX[plan1$ITEM_NAME==1]),table(plan1$SEX[plan1$ITEM_NAME==0])))
#组间男女比例差异:p-value = 0.1731

lapply(ecls_cov, function(v) {
  t.test(plan1[, v] ~ plan1[, 'ITEM_NAME'])
})#连续变量的组间t检验,只有age显著差异

#before matching
library(pacman)
plan1$ITEM_NAME
pacman::p_load(tableone) 
table1 <- CreateTableOne(vars = ecls_cov, data = plan1, strata = 'ITEM_NAME') 
table1 <- print(table1, printToggle = FALSE, noSpaces = TRUE) 
knitr::kable(table1[,1:3], align = 'c', caption = 'Comparison of unmatched samples') 

#after matching
library(pacman)
plan1$ITEM_NAME
pacman::p_load(tableone) 
table1 &

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值