• 你的位置:Bsport体育官网入口 > Bsport体育官网入口介绍 >

  • Cox构建预测模型(7):如何用R语言绘制DCA曲线?(附全套代码)
    发布日期:2024-11-04 10:40    点击次数:133
    临床预测模型作为临床研究的“高阶玩法”,不仅仅是改变临床实践的重要途径,更是发表高分SCI文章的热门选择。但不论零基础的小白,还是已经了解过临床预测模型的同学,刚开始都会一头雾水。简单概括,Cox回归预测模型的基础统计策略大致可以概括为“一表四图”,即均衡性表、列线图、校准图、ROC图、DCA图。之前的文章中我们已经为大家介绍过均衡性表、列线图、校准图、ROC曲线的绘制方法,今天完成seer数据库复现系列的最终章——DCA曲线,除了R语言复现,同样用风暴统计进行操作,对新手小白或希望更加便捷完成统计分析工作的读者十分友好!主要内容包括:一、文献解读二、利用R语言复现三、利用在线网站复现四、小结一、文献解读案例文献是沈阳医学院公共卫生学院学者基于SEER数据库的一项回顾性研究,旨在建立一个列线图来预测老年恶性骨肿瘤(MBT)患者的总生存期(OS)。

    图片

    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分期、肿瘤大小、是否化疗、是否放疗及手术方式。

    图片

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

    图片

    二、利用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曲线如下:

    图片

    三、利用在线网站复现如果没有代码基础,或者希望通过更便捷的方式完成统计分析,推荐使用这个智能在线统计分析平台——风暴统计。一键成三线表,便捷又快速。网址:www.medsta.cn(电脑端浏览器打开)或medsta.cn(medical statistics缩写)1.进入网站分析模块电脑端打开风暴统计平台——“风暴智能统计”模块,点击“临床预测模型(最新)”,进入“cox预测模型”页面。

    图片

    2.完成前期的准备工作利用风暴统计平台进行DCA的绘制之前,也需要完成数据导入、拆分数据集的工作哦!3.绘制ROC曲线完成前期准备工作之后,进入“Cox预测模型”模块,根据提示选入回归因变量与回归自变量。最最重要的是多因素回归设置,也就是你所期望的自变量筛选方式,可以是先单后多,也可以是逐步回归法,阈值也可以进行调节,十分灵活。

    图片

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

    图片

    四、小结通过对比网站与R语言绘制的列线图,可以发现两者的曲线相同,只是网站暂不具备绘制不同模型在同一时间点的DCA图形,从这一点来看,R语言是给更加灵活的。但是相比于R语言的几十行代码,网站显得十分便捷快速,如果仅在DCA曲线中展示一个模型,那风暴统计绝对值得一试! 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

上一篇:没有了

下一篇:利用Python 绘制彩色动态流星雨