TCGA+biomarker——決策曲線分析法(DCA)

DCA曲線簡介

DCA是一種評估臨床預(yù)測模型、診斷試驗(yàn)和分子標(biāo)記物的簡單方法。傳統(tǒng)的診斷試驗(yàn)指標(biāo)如:敏感性,特異性和ROC曲線下面積僅測量預(yù)測模型的診斷準(zhǔn)確性,未能考慮特定模型的臨床效用,而 DCA的優(yōu)勢在于它將患者或決策者的偏好整合到分析中。這種理念的提出滿足了臨床決策的實(shí)際需要,在臨床分析中的應(yīng)用日益廣泛。

DCA曲線案例

不同風(fēng)險預(yù)測模型的DCA圖

image

DCA曲線的解釋

下圖中作者構(gòu)建了3個診斷模型:A:u-PCX單變量模型;B:除u-PCX以外的臨床參數(shù)模型(臨床模型);C:u-PCX和臨床參數(shù)的組合模型。分別在建模和驗(yàn)證人群中通過DCA曲線來比較三個模型的臨床診斷價值。

image

圖中有AB兩個圖形,A圖表示在訓(xùn)練人群中進(jìn)行DCA分析,而B圖則在驗(yàn)證人群中進(jìn)行DCA分析。我們主要以A圖為例進(jìn)行介紹:A圖的橫坐標(biāo)為閾概率:在風(fēng)險評價工具中,患者i診斷為膜性腎病的概率記為Pi;當(dāng)Pi達(dá)某個閾值(記為Pt),就界定為陽性,采取治療措施。此時會有病人治療的獲益(利),也會有非病人治療的傷害以及病人未治療的損失(弊)。而縱坐標(biāo)就是利減去弊之后的凈獲益(Net Benefit, NB)。A圖中的三條曲斜線分別代表三種不同的臨床診斷模型(見圖例標(biāo)識),除此之外,還有兩條線,它們代表兩種極端情況。橫的那條表示所有樣本都是陰性(Pi < Pt),所有人都不治療,凈獲益為0。斜的那條表示所有樣本都是陽性,所有人都接受了治療,凈獲益是個斜率為負(fù)值的反斜線。

從圖中可以看出,model-A曲線和兩條極端曲線很接近,也就是說它沒什么應(yīng)用價值。而在一個很大的Pt區(qū)間范圍內(nèi),model-B和model-C的獲益都比極端曲線高,所以它們可選的Pt范圍都比較大,相對安全。而model-C又比model-B更好一些。

接下來,我們來看一下如何對曲線上的點(diǎn)進(jìn)行解釋:假定我們選擇預(yù)測概率為60%診斷膜性腎病并進(jìn)行治療,那么每100人使用模型C的患者,有18人能從中獲益而不損傷任何其它人的利益; 每100人使用模型B的患者,有8人能從中獲益而不損傷任何其它人的利益, 每100人使用模型A的患者,沒有人能獲益。

圖片來源:Urinary Podocalyxin as a Biomarker to Diagnose Membranous Nephropath,文章主要講述了利用尿Podocalyxin標(biāo)志物診斷膜性腎病的故事。

DCA曲線的繪制

DCA的繪制方法,這里主要針對cox回歸模型進(jìn)行分析。以下具體代碼展示的是臨床研究與醫(yī)學(xué)統(tǒng)計公共號的生存資料的決策曲線分析 (Decision Curve Analysis )這篇教程中內(nèi)容,代碼流程很清楚,易于初學(xué)者理解。

#該數(shù)據(jù)下載鏈接:https://www.mskcc.org/sites/default/files/node/4509/documents/decisioncurveanalysis.zip
#該數(shù)據(jù)就是臨床信息數(shù)據(jù),若有自己的數(shù)據(jù),用自己的數(shù)據(jù)即可。
data.set <- read.table("dca.txt", header=TRUE, sep="\t")
attach(data.set)
str(data.set)
# 這是一個數(shù)據(jù)框結(jié)構(gòu)的生存數(shù)據(jù),750個觀測,10個變量: 
# patientid : 編號 。
# cancer : 是否發(fā)生癌癥,二分類,1表示罹患癌癥,0表示未患癌癥。因變量 。
# dead : 是否死亡,二分類,1表示死亡,0表示存活 。
# ttcancer : 從隨訪開始到發(fā)生癌癥的時間,連續(xù)變量。時間變量 。
# risk_group : 危險因素分組,因子變量,等級變量,3 = “high”, 2 = “intermediate”, 1 =“l(fā)ow” 
# casecontrol : 分組變量,二分類,1 = “case”,0 = “control” $ age : 年齡,連續(xù)變量 。
# famhistory : 家族史,0 = no, 1 = yes $ marker : 某標(biāo)志物水平,連續(xù)變量 。
# cancerpredmarker: 腫瘤標(biāo)志物水平,連續(xù)變量。

#使用source()函數(shù)載入MSKCC網(wǎng)站上下載的源代碼,需提前下載該源代碼并保存至當(dāng)前工作路徑中
# 具體下載地址:https://www.mskcc.org/sites/default/files/node/4509/documents/downloadrcode.zip
source("stdca.R")
# 后續(xù)我們直接使用該函數(shù)定義的生存資料DCA分析的stdca()函數(shù)即可。
# 函數(shù)用法如下:
# stdca(data, outcome, predictors, timepoint, xstart=0.01, xstop=0.99, xby=0.01, ymin=-0.05, 
# probability=NULL, harm=NULL, graph=TRUE, 
# intervention=FALSE, interventionper=100, smooth=FALSE, loess.span=0.10, cmprsk=FALSE)


#--------------------------------多因素cox的DCA分析-----------------------------------------
library(survival)
#要定義一個生存函數(shù)對象,該對象包含研究的結(jié)局及發(fā)生結(jié)局的時間,即本例中即數(shù)據(jù)框的“cancer”和“ttcancer”兩個變量。
Srv = Surv(data.set$ttcancer, data.set$cancer)
#使用survival包中的coxph函數(shù)構(gòu)建Cox回歸模型
coxmod <- coxph(Srv ~ age + famhistory + marker, data=data.set)
#根據(jù)coxmod生存函數(shù)計算1.5年時點(diǎn)的癌癥發(fā)生率的補(bǔ)數(shù),即未患癌癥的發(fā)生率
data.set$pr_failure18 <- c(1 - (summary(survfit(coxmod,newdata=data.set), times=1.5)$surv))
#此步驟是必須的,根據(jù)前文所述及stdca()函數(shù)predictors參數(shù)項(xiàng)的規(guī)定,此處只能傳入一個變量,顯然使用模型的預(yù)測概率作為新的變量傳入反應(yīng)了整個模型的預(yù)測能力。
#此處如果只傳入一個預(yù)測因素,則僅代表某個因素的因素對于結(jié)局的預(yù)測能力,而非整個模型的預(yù)測能力。

#使用stdca()函數(shù)進(jìn)行DCA分析
stdca(data=data.set, outcome="cancer", ttoutcome="ttcancer", timepoint=1.5, predictors="pr_failure18", xstop=0.5, smooth=TRUE)
#data=data.set指定數(shù)據(jù)集, outcome=“cancer”定義二分類結(jié)局, 
#ttoutcome=“ttcancer”定義時間變量, timepoint=1.5定義時間點(diǎn)1.5年, 
#predictors=“pr_failure18”傳入根據(jù)Cox回歸模型計算的預(yù)測概率,此處需要指定這里傳入的是概率,probability=TRUE,這也是默認(rèn)設(shè)置。
# 如果用單個因素取值預(yù)測,則需設(shè)置為FALSE.

#接下來構(gòu)建兩個Cox回歸模型
coxmod1 <- coxph(Srv ~ age + famhistory + marker, data=data.set)
coxmod2 <- coxph(Srv ~ age + famhistory + marker + risk_group, data=data.set)

#根據(jù)生存函數(shù)分別計算2個模型的1.5年時點(diǎn)的癌癥發(fā)生率的補(bǔ)數(shù),即未患癌癥的發(fā)生率
data.set$pr_failure19 <- c(1 - (summary(survfit(coxmod1,newdata=data.set), times=1.5)$surv))
data.set$pr_failure20 <- c(1 - (summary(survfit(coxmod2,newdata=data.set), times=1.5)$surv))

#用stdca()函數(shù)對兩個模型進(jìn)行DCA分析
stdca(data=data.set, outcome="cancer", ttoutcome="ttcancer", timepoint=1.5,predictors=c("pr_failure19","pr_failure20"), xstop=0.5, smooth=TRUE)


#---------------------------------單因素Cox回歸DCA分析------------------------------------------
# 使用MASS包中自帶數(shù)據(jù)集Melanoma.
# 數(shù)據(jù)框結(jié)構(gòu),含7個變量,共205觀測: 
# time: 時間,連續(xù)變量。
# status: 結(jié)局變量,1表示死于黑色素瘤,2表示存活,3表示死去其他原因 。
# sex: 性別,1代表男,0代表女 。
# age: 連續(xù)變量 $ year: 手術(shù)年代,連續(xù)變量 。
# thickness: 腫瘤厚度,單位:mm 。
# ulcer: 腫瘤是否潰瘍,1代表有潰瘍,0代表無潰瘍。

source("stdca.R")
library(MASS)
data.set <- Melanoma
data.set$diedcancer = ifelse(data.set$status==1, 1, 0)
stdca(data=data.set, outcome="diedcancer", ttoutcome="time", 
      timepoint=545,predictors="thickness", probability=FALSE, xstop=.25)
# 注意此處我們是用單個變量去預(yù)測結(jié)局,故“probability=FALSE”,其他參數(shù)設(shè)置基本相同!

往期回顧
TCGA+biomarker——常見結(jié)果展示
TCGA+biomarker——Sample基線表
TCGA+biomarker——單因素Cox回歸
TCGA+biomarker——多因素Cox回歸
TCGA+biomarker——Cox回歸森林圖
TCGA+biomarker——Calibration curve
TCGA+biomarker——C-index

更多內(nèi)容可關(guān)注公共號“YJY技能修煉”~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容