欢迎访问诺维之舟医学科研平台,我们的课程比丁香园更香!
Language:

学术动态

医学数据分析技能点03 倾向匹配评分PSM+基线表

时间:2024-09-05 21:13:08 阅读:72



诺维医学科研官网:https://www.newboat.top 更新换版中!

bilibili:文章对应的讲解视频在此。熊大学习社 https://space.bilibili.com/475774512

微信公众号:熊大学习社、诺维之舟

公益网站,https://nwzz.xyz/ ,内有医学离线数据库、数据提取、科研神器等高质量资料库

诺维之舟AI:https://gpt4.nwzz.xyz 可在线使用GPT4|GPT3.5|Midjourney

课程说明:

(1)倾向匹配评分PSM+基线表代码实例已全部公开。关注公众号熊大学习社,回复med003,获取资料信息。

(2)一对一论文指导学员免费获取学习资料,了解咨询扫客服二维码。

(3)关注熊大学习社。您的一键三连是我最大的动力。

一、效果

二、代码实例

#####公众号:熊大学习社#####

# 手动设置工作目录为代码和数据所在文件夹
# 步骤方法:点菜单栏“session”->"Set Work Directory"->"Choose Directory"
# 选择代码和数据所在文件夹即可

# 查看工作目录
getwd()


# 加载库
library(data.table)
library(tidyverse)   # 读取文件fread
library(magrittr)
library(rstatix)
library(readxl) # 数据文件读取与写入
library(dplyr) # 数据处理
library(mice)  # 缺失值插补
library(nortest)
library(MatchIt)  # 倾向匹配分析PSM
library(gtsummary) # 回归分析指标提取
library(tableone) # 基线表


# 代码目录,对应修改
code_path <- "D:Courses02) 倾向性评分实例"

setwd(code_path)
getwd()

# 读取数据
data_tidy <- read.csv('data.csv')


## 4.1 生成PSM样本---------
set.seed(2024)

# PSM
psm <- data_tidy %>%
 matchit(
   formula = group ~ admission_age + gender + weight + height_imputed + sofa_score + race_imputed +
     co_diabetes + co_hypertension + co_neoplasm + co_COPD + co_CA_surgery +
     duration_pres_heparin + inr + pt,
   distance = "glm",
   method = "nearest",
   ratio = 1,
   caliper = 0.05
 )
summary(psm)
# 匹配后样本数据
data_psm <- match.data(psm)%>%
 as_tibble() %>%
 mutate(
   group = as.factor(group)
 )
# 保存PSM后样本数据
write_csv(data_psm, file = "data_psm.csv")

# 绘制倾向评分的分布情况
plot(psm, type = "jitter", interactive = FALSE)

# 查看指定变量的分布
plot(psm, type = "qq", interactive = FALSE, which.xs = c("admission_age", "sofa_score"))

# qq分布
plot(psm, type = "hist")

# Standardized Mean Differences,标准化平均差
# 差异小于0.1,则表示匹配效果较好
plot(summary(psm))

## 4.2 基线分析:CreateTableOne-------
colnames(data_psm)
str(data_psm)

# 变量集合
myVars <- c("gender", "admission_age", "height_imputed", "weight", "sofa_score", "race_imputed",
           "co_diabetes", "co_hypertension", "co_neoplasm", "co_COPD", "co_CA_surgery", "co_GI",
           "co_ICH", "co_bleeding","co_VTE", "co_CI", "duration_pres_heparin", "inr", "pt", "los_icu",
           "los_hosp", "surv_30", "status_30","surv_90", "status_90")
# 分类变量
catVars <- c("gender", "race_imputed", "co_diabetes", "co_hypertension", "co_neoplasm", "co_COPD",
            "co_CA_surgery", "co_GI", "co_ICH", "co_bleeding", "co_VTE", "co_CI", "status_30",
            "status_90")
# 连续变量正态性检验
# p>0.05才符合正态分布
shapiro.test(data_psm$admission_age)

# 非正态分布变量集合,有的话写上
nonvar <- c("")  

# PSM前基线表
table1 <-  CreateTableOne(vars = myVars,             # 全部变量,自变量+协变量
                         strata = "group",  # 结局变量
                         data = data_tidy,         # 数据
                         factorVars = catVars,    # 分别变量
                         addOverall = TRUE)       # 显示总体样本情况
#将生成的table1存成csv格式
print(table1,
     showAllLevels = TRUE, # 显示所有变量
     nonnormal = nonvar,   # 不符合正态性分布,基线表汇报中位数+四分位数
     smd = F) |> write.csv(file = "Talbe1 baseline.csv")


# PSM后基线表
table2 <-  CreateTableOne(vars = myVars,             # 全部变量,自变量+协变量
                         strata = "group",  # 结局变量
                         data = data_psm,         # 数据
                         factorVars = catVars,    # 分别变量
                         addOverall = TRUE)       # 显示总体样本情况
#将生成的table1存成csv格式
print(table2,
     showAllLevels = TRUE, # 显示所有变量
     nonnormal = nonvar,   # 不符合正态性分布,基线表汇报中位数+四分位数
     smd = F) |> write.csv(file = "Talbe1 baseline_psm.csv")

三、小结

更多内容敬请关注熊大学习社,全网同名。

课程相关资料:

(1)倾向匹配评分PSM+基线表代码实例已全部公开。关注公众号熊大学习社,回复med003,获取资料信息。

(2)一对一论文指导学员免费获取学习资料,了解咨询扫客服二维码。

(3)关注熊大学习社。您的一键三连是我最大的动力。