Cox构建预测模型(7):如何用R语言绘制DCA曲线?(附全套代码)

本文介绍了如何使用R语言和风暴统计在线平台复现基于SEER数据库的恶性骨肿瘤临床预测模型,通过Cox回归和DCA曲线评估预测模型的准确性。R语言提供了更多灵活性,而在线平台则强调便捷性,适合新手用户。
摘要由CSDN通过智能技术生成

临床预测模型作为临床研究的“高阶玩法”,不仅仅是改变临床实践的重要途径,更是发表高分SCI文章的热门选择。

但不论零基础的小白,还是已经了解过临床预测模型的同学,刚开始都会一头雾水。简单概括,Cox回归预测模型的基础统计策略大致可以概括为“一表四图”,即均衡性表、列线图、校准图、ROC图、DCA图。

之前的文章中我们已经为大家介绍过均衡性表、列线图、校准图、ROC曲线的绘制方法,今天完成seer数据库复现系列的最终章——DCA曲线,除了R语言复现,同样用风暴统计进行操作,对新手小白或希望更加便捷完成统计分析工作的读者十分友好!

主要内容包括:

一、文献解读

二、利用R语言复现

三、利用在线网站复现

  四、小结 

一、文献解读

案例文献是沈阳医学院公共卫生学院学者基于SEER数据库的一项回顾性研究,旨在建立一个列线图来预测老年恶性骨肿瘤(MBT)患者的总生存期(OS)。

35a6d5e63615c2488be158cb41b03a74.png

1. 摘要

背景:恶性骨肿瘤(MBT)是老年患者死亡的原因之一。我们研究的目的是建立一个列线图来预测老年MBT患者的总生存期(OS)。

方法:从SEER数据库下载了2004年至2018年所有老年MBT患者的临床病理数据。他们被随机分配到训练集(70%)和验证集(30%)。采用单因素和多因素Cox回归分析确定老年MBT患者的独立危险因素。基于这些危险因素构建列线图,以预测老年MBT患者的1年,3年和5年OS。然后,利用一致性指数(C指数)、校准曲线和受试者工作曲线下面积(AUC)来评价预测模型的准确性和判别力。决策曲线分析(DCA)用于评估列线图的临床潜在应用价值。根据列线图上的分数,将患者分为高风险组和低风险组。Kaplan-Meier(K-M)曲线用于测试两名患者之间的生存差异。

结果:从SEER数据库下载了2004年至2018年所有老年MBT患者的临床病理数据。他们被随机分配到训练集(70%)和验证集(30%)。采用单因素和多因素Cox回归分析确定老年MBT患者的独立危险因素。基于这些危险因素构建列线图,以预测老年MBT患者的1年,3年和5年OS。然后,利用一致性指数(C指数)、校准曲线和受试者工作曲线下面积(AUC)来评价预测模型的准确性和判别力。决策曲线分析(DCA)用于评估列线图的临床潜在应用价值。根据列线图上的分数,将患者分为高风险组和低风险组。Kaplan-Meier(K-M)曲线用于测试两名患者之间的生存差异。

结论:我们建立了一个新的列线图来预测老年MBT患者的1年,3年,5年的OS。该预测模型可以帮助医生和患者制定治疗计划和后续策略。、

2. 数据介绍

文献共纳入1641名2004-2018诊断的老年MBT患者的临床病理数据。暴露因素包括年龄、种族、性别、诊断年份、组织学类型、分级、分期、原发位置、TNM分期、肿瘤大小、是否化疗、是否放疗及手术方式。

e093c224b600d99fac207e093a15e590.png

3.研究结果

这篇文献通过绘制两个模型的DCA曲线来评估模型的临床决策实际需求,一个是列线图模型,包括纳入列线图的全部变量,一个是TNM模型,只纳入TNM分期3个变量。A图是训练集1年、3年、5年患者的总生存期的DCA曲线;B图是训练集1年、3年、5年患者的总生存期的DCA曲线,红色线条代表列线图模型(包括构建模型的10个变量),黄色线条代表TNM模型(仅纳入TNM分期3个变量),两个模型对比,线条越靠上说明在实际临床中的应用价值越大,可参考性越强

e74969753cc6d00afcdf7d17a6513c91.png

二、利用R语言复现

下面我们利用从SEERStat中提取的相关数据进行复现。根据文献中的纳入排除标准,提取涉及的相关数据,最终共纳入1,574名患者(原文献1,641)。介于SEERStat数据库会有更新,因此提取的样本量与原文会有所出入,这里请大家多关注统计方法的运用!本次用到的是R版本是4.3.1。

1. 安装加载R包

这里主要用到以下两个包,"dcurves"包负责构建,"ggplot2"包负责绘图。除了"dcurves"包外,还有"ggDCA"包可以完成DCA曲线的绘制,更为便捷,但对R版本有点要求,这里不作展示。

if(!require("dcurves")) install.packages("dcurves")
if(!require("ggplot2")) install.packages("ggplot2")


library("dcurves")
library("ggplot2")

2.完成前期准备工作

在绘制DCA曲线之前,必须要完成数据的导入、拆分数据集的工作、预测因子的筛选,校准图的绘制是分别在训练集与验证集独立进行的。

以上这些内容可参见:

Cox构建预测模型(2):如何用R语言拆分数据集并作均衡性检验

Cox构建预测模型(3):如何用R语言做cox先单后多回归分析!(附全套代码)

Cox构建预测模型(4):如何用R语言绘制cox预测模型列线图?(附全套代码)

Cox构建预测模型(5):如何用R语言绘制校准曲线(附全套代码)

Cox构建预测模型(6):如何用R语言绘制ROC曲线?(附全套代码)

3. 绘制DCA曲线

原文中的DCA曲线是列线图模型与TNM分期模型进行的对比,因此我们首先需要构建两个模型,模型1纳入列线图中的9个变量,模型2仅纳入TNM分期3个变量。

train_model1 <- cph(Surv(months,status)~age + Race + Sex + Histologic.type
                    + Grade + Stage + Primary.Site + m_stage +Tumor_size + Surgery,
                    data = train,surv = T,x=T,y=T)
train_model2 <- cph(Surv(months,status)~t_stage + n_stage + m_stage,
                    data = train,surv = T,x=T,y=T)

受篇幅限制,下面仅展示1年的DCA曲线绘制代码,3年、5年的代码只需在此基础上稍作修改。如修改计算生存概率中的时间为times=12*3以及绘制曲线代码中的时间time=12*3,变量名dca1。(因此这里只是1/6的代码量哦!)

#计算生存概率
train$prob1 <- c(1-(summary(survfit(train_model1, newdata=train), times=12)$surv))
train$prob2 <- c(1-(summary(survfit(train_model2, newdata=train), times=12)$surv))


#绘制DCA曲线
dca1 <- dcurves::dca(Surv(months,status) ~ prob1 + prob2,
                     data = train,
                     time = 12,
                     label = list(prob1 = "Namogram",
                                  prob2 = "TNM"))  %>%
  dcurves::as_tibble()


ggplot(dca1,aes(x=threshold, y=net_benefit,color=variable))+
  stat_smooth(method = "loess", se = FALSE, formula = "y ~ x", span = 0.2) +
  coord_cartesian(ylim = c(0, 0.2)) +
  scale_x_continuous(labels = scales::label_percent(accuracy = 1)) +
  labs(x = "Risk Threshold", y = "Net Benefit", color = "") +
  theme_bw()

代码解读:“method=loess”指使用平滑函数,“formula = "y ~ x"”是用于平滑函数的公式,“span”是控制线条平滑度的平滑量,数字越大,线条越平滑,“ylim”设置y轴的范围。

R语言复现得到DCA曲线如下:

5994ba8a332c27b45bccf8986f0373e9.png

三、利用在线网站复现

如果没有代码基础,或者希望通过更便捷的方式完成统计分析,推荐使用这个智能在线统计分析平台——风暴统计。一键成三线表,便捷又快速。

网址:www.medsta.cn(电脑端浏览器打开)

或medsta.cn(medical statistics缩写) 

1.进入网站分析模块

电脑端打开风暴统计平台——“风暴智能统计”模块,点击“临床预测模型(最新)”,进入“cox预测模型”页面。

outside_default.png

2.完成前期的准备工作

利用风暴统计平台进行DCA的绘制之前,也需要完成数据导入拆分数据集的工作哦!

3.绘制ROC曲线

完成前期准备工作之后,进入“Cox预测模型”模块,根据提示选入回归因变量与回归自变量。最最重要的是多因素回归设置,也就是你所期望的自变量筛选方式,可以是先单后多,也可以是逐步回归法,阈值也可以进行调节,十分灵活。

outside_default.png

选中之后,下方就直接给出DCA曲线结果,同样包括训练集与验证集在3个不同时间点的6张DCA曲线图。在左侧可以调整线条的粗细、虚实以及X轴的最大刻度值,可以下载图片的PDF或PNG,对新手小白十分友好!

outside_default.png

四、小结

通过对比网站与R语言绘制的列线图,可以发现两者的曲线相同,只是网站暂不具备绘制不同模型在同一时间点的DCA图形,从这一点来看,R语言是给更加灵活的。但是相比于R语言的几十行代码,网站显得十分便捷快速,如果仅在DCA曲线中展示一个模型,那风暴统计绝对值得一试!

outside_default.png

### 回答1: 抱歉,我作为语言模型没有具体的编程能力。但是我可以提供一些思路和建议: 1. 确定数据:首先需要有临床决策曲线所需的数据,包括各个因素的取值以及对应的结局分类,可以考虑使用已有的临床数据或者进行临床研究获得。 2. 安装相关包:需要安装和加载 ggplot2、survival 和 prodlim 等相关包。 3. 清洗和整理数据:按照数据格式要求准备好数据,并进行适当的清洗和整理,例如去掉缺失值,将分类数据转换为虚拟变量等。 4. 建立生存模型:使用 survival 包中的相关函数建立生存模型,例如 Cox 比例风险模型。这一步的目的是考虑不同因素对结局的影响,并可计算出不同因素对应的风险比值。 5. 绘图:使用 ggplot2 包中提供的函数进行绘图,可以根据需要绘制结局为无序四分类的临床决策曲线。 参考代码: ```R library(ggplot2) library(survival) library(prodlim) # 准备数据 data <- read.csv("clinical_data.csv") # 进行数据清洗和整理 # 建立生存模型 model <- coxph(Surv(time, status) ~ var1 + var2 + var3 + var4, data = data) # 获取风险比值 # 绘制临床决策曲线 Curve <- prodlim(factorize(Surv(time, status)), data$pred1, data$pred2, data$pred3, data$pred4, t = seq(0, 60, by = 1)) plot(Curve, fun = "event", ylab = "Probability of event-free survival", main = "Clinical decision curve", xlim = c(0, 60), ylim = c(0, 1)) ``` ### 回答2: 在R语言中,我们可以使用多种方式绘制临床决策曲线。下面是一种常见的方法,使用R包"ggplot2"和"survival": 首先,确保安装了相关的包,如果没有,可以使用以下代码安装它们: install.packages("ggplot2") install.packages("survival") 接下来,加载所需的包: library(ggplot2) library(survival) 假设我们已经有了一个数据集,其中包含了需要绘制临床决策曲线的相关变量(例如响应变量和预测变量)。 下面的代码展示了如何使用ggplot2绘制四分类的临床决策曲线: # 加载数据 data <- read.csv("your_data.csv") # 创建生存对象 surv_obj <- with(data, Surv(time, status)) # 计算预测变量对生存曲线的影响 fit <- survfit(surv_obj ~ response_var, data=data) # 绘制决策曲线 g <- ggsurvplot(fit, data=data, pval = TRUE, palette = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3"), legend.labs = c("Class 1", "Class 2", "Class 3", "Class 4"), title = "Clinical Decision Curve", xlab = "Time (months)", ylab = "Survival Probability") # 输出决策曲线 print(g) 上述代码中的"your_data.csv"应替换为实际的数据集文件名。"response_var"应替换为实际的响应变量名称。 这段代码绘制一个临床决策曲线,其中x轴代表时间(以月为单位),y轴代表生存概率。曲线颜色和图例标签根据数据集中的分类变量来区分四个分类。 ### 回答3: 要使用R语言绘制结局为无序四分类的临床决策曲线,我们可以使用R中的ggplot2包来实现。以下是一个简单的代码示例: ```R # 导入ggplot2包 library(ggplot2) # 创建一个包含结局分类和决策曲线得分的数据框 data <- data.frame(outcome = c("A", "B", "C", "D"), decision_score = c(0.2, 0.4, 0.7, 0.9)) # 创建决策曲线图 plot <- ggplot(data, aes(x = decision_score, y = outcome)) + geom_step() + xlab("决策曲线得分") + ylab("结局分类") + ggtitle("临床决策曲线") + theme_minimal() # 输出决策曲线图 print(plot) ``` 在这个例子中,我们创建了一个包含结局分类(A、B、C和D)以及对应的决策曲线得分的数据框。然后,使用ggplot2的`ggplot`函数创建一个绘图对象,并使用`geom_step`函数绘制决策曲线。`xlab`和`ylab`函数用于设置x轴和y轴的标签,`ggtitle`函数用于设置图表的标题,`theme_minimal`函数用于设置图表的风格。最后,使用`print`函数输出图表。 请注意,这个例子只是一个简单的示例,你可能需要根据你的实际数据和需求进行相应的调整和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值