诺维医学科研官网: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)关注熊大学习社。您的一键三连是我最大的动力。