通常情況下,通過以下幾種指標(biāo)來對(duì)模型進(jìn)行評(píng)價(jià)。
1)區(qū)分度:采用指標(biāo)C-index和ROC曲線來評(píng)價(jià)區(qū)分度,一般文章都是二選一。
- C-index即一致性指數(shù)(index of concordance),通過評(píng)估模型預(yù)測(cè)結(jié)果與實(shí)際觀察結(jié)果的符合程度,以評(píng)價(jià)模型的預(yù)測(cè)準(zhǔn)確性。
- ROC曲線,展示特異性和敏感性,ROC曲線下的面積被稱為AUC,它介于0.5和1之間,作為數(shù)值可以直觀的評(píng)價(jià)分類器的好壞,值越大越好。
2)校準(zhǔn)度:通常采用校準(zhǔn)曲線(calibration curve)來進(jìn)行評(píng)價(jià)一致性/校準(zhǔn)度,即預(yù)測(cè)值和真實(shí)值之間的差異
3)DCA:決策曲線(DCA)用來幫助確定高風(fēng)險(xiǎn)的患者進(jìn)行干預(yù)、低風(fēng)險(xiǎn)的患者避免過度醫(yī)療。
image
這里先介紹Calibration curve...................
校準(zhǔn)曲線簡(jiǎn)介
Calibration curve,直譯過來就是校準(zhǔn)曲線或校準(zhǔn)圖。其實(shí),校準(zhǔn)曲線就是實(shí)際發(fā)生率和預(yù)測(cè)發(fā)生率的散點(diǎn)圖。實(shí)質(zhì)上,校準(zhǔn)圖曲線是把Hosmer-Lemeshow擬合優(yōu)度檢驗(yàn)的結(jié)果可視化。目前校準(zhǔn)曲線常用來評(píng)價(jià)logistic回歸和cox回歸模型。
校準(zhǔn)曲線案例
不同數(shù)據(jù)集的校準(zhǔn)曲線
不同時(shí)間的校準(zhǔn)曲線
不同模型的校準(zhǔn)曲線
校準(zhǔn)曲線解讀
解讀:橫坐標(biāo)為預(yù)測(cè)的事件發(fā)生率(Predicted Probablity),縱坐標(biāo)是觀察到的實(shí)際事件發(fā)生率(Actual Rate),范圍均為0到1,可以理解為事件發(fā)生率(百分比)。對(duì)角線的虛線是參考線,即預(yù)測(cè)值=實(shí)際值的情況。紅線是曲線擬合線,兩邊帶顏色部分是95%CI。
- 如果預(yù)測(cè)值=觀察值,則紅線與參考線完全重合
- 如果預(yù)測(cè)值>觀察值,即高估了風(fēng)險(xiǎn),則紅線在參考線下面
- 如果預(yù)測(cè)值<觀察值,即低估了風(fēng)險(xiǎn),則黑線在參考線上面
如何繪制校準(zhǔn)曲線?
經(jīng)過查閱多個(gè)教程,校準(zhǔn)曲線就是以預(yù)測(cè)值為X軸,真實(shí)值為Y軸繪制,Hosmer-Lemeshow擬合優(yōu)度檢驗(yàn)結(jié)果的可視化的圖。真實(shí)值即為status值,比如生存(0:生;1:死),0—1代表了真實(shí)的死亡風(fēng)險(xiǎn)。預(yù)測(cè)值是根據(jù)構(gòu)建好的模型預(yù)測(cè)出每個(gè)患者的死亡風(fēng)險(xiǎn),采用predict()函數(shù)返回風(fēng)險(xiǎn)評(píng)分值,并將該評(píng)分值加以轉(zhuǎn)化成更為直觀的風(fēng)險(xiǎn)值。在得到真實(shí)值和預(yù)測(cè)值的基礎(chǔ)上進(jìn)行校準(zhǔn)曲線的繪制和顯著性檢驗(yàn)。以下是兩種比較簡(jiǎn)單的矯正曲線方法,但成圖都比較單調(diào),不夠美觀。方法1采用的是rms包的calibrate函數(shù)(輸入構(gòu)建模型即可,簡(jiǎn)單)。方法2先計(jì)算出預(yù)測(cè)值和真實(shí)值,然后用plotCalibration函數(shù)繪圖。
#-------------------------------------校準(zhǔn)曲線(方法1)--------------------------------
rm(list = ls())
# install.packages("survival")
# install.packages("rms")
library(survival)
library(rms)
#載入并查看數(shù)據(jù)集
data("lung") #status中1代表活著,2代表死了. sex中male=1,female=2
head(lung)
str(lung)
#構(gòu)建回歸模型
## 參數(shù)說明:
## 1、繪制校正曲線前需要在模型函數(shù)中添加參數(shù)x=T, y=T,詳細(xì)參考幫助
## 2、u需要與之前模型中定義好的time.inc一致,即365或730;
## 3、m要根據(jù)樣本量來確定,由于標(biāo)準(zhǔn)曲線一般將所有樣本分為3組(在圖中顯示3個(gè)點(diǎn)),而m代表每組的樣本量數(shù),因此m*3應(yīng)該等于或近似等于樣本量;
## 4、b代表最大再抽樣的樣本量
res.cox1 <- cph(Surv(time, status) ~ age+sex+ph.ecog+ph.karno+pat.karno, data = lung,surv=T,x=TRUE, y=TRUE,time.inc=365)
## 構(gòu)建校正曲線
## calibrate函數(shù)適用于ols, lrm, cph or psm返回對(duì)象
cal <- calibrate(res.cox1, cmethod='KM', method="boot",u=365,m=38,B=228)
plot(cal,lwd=2,lty=1,
errbar.col=c(rgb(0,118,192,maxColorValue=255)),
xlab="Nomogram-Predicted Probability of 1-Year OS",
ylab="Actual 1-Year DFS (proportion)",
col=c(rgb(192,98,83,maxColorValue=255)))
#------------------------------------校準(zhǔn)曲線(方法2)--------------------------------------
rm(list = ls())
#install.packages("PredictABEL")
library(PredictABEL)
library(rms)
library(survival)
#載入并查看數(shù)據(jù)集
data("lung") #status中1代表活著,2代表死了
head(lung)
lung$status <- ifelse(lung$status==1,0,1)
#構(gòu)建模型并繪制校準(zhǔn)曲線
res.cox2 <- cph(Surv(time,status) ~., data = lung,surv=T,x=TRUE, y=TRUE)
newdata <- lung[101:200,] #用來校準(zhǔn)的數(shù)據(jù),這里從源數(shù)據(jù)中調(diào)取了部分
pred.lg<- predict(res.cox2,newdata) #每位患者的風(fēng)險(xiǎn)評(píng)分
newdata$prob <- 1/(1+exp(-pred.lg)) #將pred.lg做數(shù)據(jù)轉(zhuǎn)化,數(shù)值更直觀
prob <- newdata$prob
plotCalibration(newdata,3, prob, groups=10) #3為結(jié)局指標(biāo)所在列數(shù)
總結(jié): 校準(zhǔn)曲線是一種評(píng)價(jià)模型的方法,在實(shí)際項(xiàng)目中應(yīng)該是構(gòu)建好模型,然后評(píng)價(jià)模型,改善模型,確定最終模型(C-index/ROC/DCA結(jié)果表明模型合格),最后對(duì)模型進(jìn)行可視化展示(如森林圖、列線圖,生存點(diǎn)圖等)。
往期回顧
TCGA+biomarker——常見結(jié)果展示
TCGA+biomarker——Sample基線表
TCGA+biomarker——單因素Cox回歸
TCGA+biomarker——多因素Cox回歸
TCGA+biomarker——Cox回歸森林圖
TCGA+biomarker——Nomogram列線圖
更多內(nèi)容可關(guān)注公共號(hào)“YJY技能修煉”~~~