当前位置:首页|资讯|GPT-4|Midjourney

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

作者:熊大学习社发布时间:2024-06-10

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

诺维医学科研官网: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\\51 倾向性评分实例"
 
 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)关注熊大学习社。您的一键三连是我最大的动力。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1