手把手的教程!一文小果教你学会临床决策曲线(DCA)!!






手把手的教程!一文小果教你学会临床决策曲线(DCA)!!

小果  生信果  2023-11-18 19:00:18

做肿瘤分析的小伙伴看过来啦,小伙伴平时做临床分析的时候,肯定都少不了对模型的构建,比如一些单因素的Cox回归分析,或者多因素的Cox回归分析,lasso等等,既然做了模型我们肯定少不了对模型的验证,验证的方式也有很多用比如对模型ROC曲线验证,再比如,临床特征比较多的情况下,小伙伴有的就会构建Nomogram模型,那么就会使用校准曲线去验证模型,以上我们介绍的都是对模型的本身去验证,小果在这里教大家一个新的曲线,可以去验证小伙伴构建的模型在临床上的适用性!就是决策曲线,小果这里先简单给大家介绍一下:

决策曲线分析法(decision curve analysis,DCA)是一种评估临床预测模型、诊断试验和分子标记物的简单方法。 我们在传统的诊断试验指标如:敏感性,特异性和ROC曲线下面积仅测量预测模型的诊断准确性,未能考虑特定模型的临床效用,而DCA的优势在于它将患者或决策者的偏好整合到分析中。这种理念的提出满足了临床决策的实际需要,在临床分析中的应用日益广泛。所以呢,小果这里较小伙伴绘制,用在你的文章中,大大的增长文章的丰富度!

公众号后台回复“111”领取代码,代码编号:231010

小果这里使用的是R包rmda包去绘制DCA,其实还有很多包比如ggDCA等,

我们先导入数据:


dcaData <- read.table("test2.txt",sep = "t",row.names = 1,check.names = F,stringsAsFactors = F,header = T)

小果这里使用的是小果平时整理的,小伙伴可以按照自己数据形式去设置,小果提醒一下,数据形式要设置成数字的形式,这里小果的临床特征在图中,也加入了一些基因放入模型中

library(rmda)#加载包#data("dcaData")

#构架基础DCA模型


model <- decision_curve(event~stage + age + Mstage + Nstage + Grade+PCNA+MCM2+GINS2+time ,family=binomial(link='logit'),data = dcaData,thresholds = seq(0, .4, by = .005),bootstraps = 10)

在上述decision_curve()函数中, family=binomial(link=‘logit)是使用Logistic回归来拟合模型,默认值。threshold设置横坐标阈概率的范围,一般是0~1。但如果有某种具体情况,大家一致认为阈概率达到某个值以上,比如50%,则必须采取干预措施,那么0.5以上的研究就没什么意义了,可以设为0-0.5。by是指每隔多少距离计算一个数据点。bootsrap 重抽样次数

小果这里是按照自己的临床特征还有基因,小伙伴要按照自己情况来

#event~stage + age + Mstage + Nstage + Grade+PCNA+MCM2+GINS2+time

下面就是绘制DCA的基本图形了我们使用默认的参数

plot_decision_curve(model,curve.names = "Clinical and genetic models",col = c("#DC0000B2"),confidence.intervals=F #不显示置信区间)

颜色名称都可以自己调整

但是有的小伙伴想对比两个模型,总不能绘制两个图吧,小果下面就教大家绘制两个模型的DCA曲线

model.Clinic <- decision_curve(event~stage + age + Mstage + Nstage + Grade,data = dcaData,thresholds = seq(0, .4,by = .005),bootstraps = 10)# stage + age + Mstage + Nstage + Grade变量建立模型

我们先在构建一个模型,这我们随便使用几个变量进行展示,小伙伴要按照自己的变量去设置

#绘制两个模型DCA曲线


plot_decision_curve(list(model, model.Clinic),curve.names = c("Hub Gene model", "Clinic model"),col = c("#3C5488B2", "#DC0000B2"),#设置线的颜色lty = c(1,2),  #  设置线形lwd = c(3,3, 2, 2),   #设置线宽,分别为baseling.model、full.model、All和Noneconfidence.intervals = F,legend.position = "topright")

DCA曲线不止可以构建模型的验证,还可以绘制临床的影响曲线:

这里我们使用plot_clinical_impact()函数绘制baseline.model模型的临床影响曲线(clinical impact curve)。模型预测1 000人的风险分层,显示“损失:受益”坐标轴,显示置信区间。

plot_clinical_impact(model,xlim = c(0, .4),col = c("#3C5488B2", "#DC0000B2"))

如果小伙伴觉得两个模型的计算方式一样,我们可以使用交叉的验证去绘制DCA曲线

#交叉验证


full.model <- cv_decision_curve(event~stage + age +  GINS2 + MCM2 + PCNA,data = dcaData,folds = 5,thresholds = seq(0, .4, by = .01))full.model_Hub <- decision_curve(event~stage + age +  GINS2 + MCM2 + PCNA,data = dcaData,thresholds = seq(0, .4,by = .01),confidence.intervals = 'none')

同样的我们先绘制两个模型,计算方式有改变,一个是cv_decision_curve,一个是decision_curve

plot_decision_curve(list(full.model_Hub, full.model),curve.names = c('Apparent curve','Cross-validated curve'),col = c("#3C5488B2", "#DC0000B2"),lty = c(2,1),lwd = c(3,2, 2, 1),legend.position = ("topright"))

同样的代码绘制两个曲线

结果不一样,好了上述代码我们手把手教会大家如何绘制DCA图,还不快去试试?小伙伴要多多理解代码的意义,也要理解绘制图的含义,这样才能将绘制的图放入自己的文章中!

往期推荐

1.搭建生信分析流水线,如工厂一样24小时运转Snakemake——进阶命令
2.比blast还优秀的序列比对工具?HMMER来了
3.对单细胞分析毫无头绪?让popsicleR领你入门
4.小果带你绘制ROC曲线评估生存预测能力
5.软件包安装、打怪快又好,1024G存储的生信服务器;还有比这更省钱的嘛!!!