R語言機(jī)器學(xué)習(xí)與臨床預(yù)測(cè)模型26--綜合判別改善指數(shù)

本內(nèi)容為【科研私家菜】R語言機(jī)器學(xué)習(xí)與臨床預(yù)測(cè)模型系列課程

R小鹽準(zhǔn)備介紹R語言機(jī)器學(xué)習(xí)與預(yù)測(cè)模型的學(xué)習(xí)筆記

你想要的R語言學(xué)習(xí)資料都在這里, 快來收藏關(guān)注【科研私家菜】


01 什么是綜合判別改善指數(shù)?

綜合判別改善指數(shù)(Integrated Discrimination Improvement, IDI)。這個(gè)指標(biāo)也用于判斷預(yù)測(cè)模型改善情況,與上一講的凈重新分類指數(shù)(NRI)有類似也有不同。
IDI是由Pencina等人于2008年提出的一個(gè)非常新的判別指標(biāo)。由于它考慮了不同切點(diǎn)的情況,可以用來反映模型的整體改善狀況,在一定程度上補(bǔ)齊了NRI的短板。同時(shí),雖然AUC也考慮到了不同切點(diǎn),但是AUC的改善情況在臨床中不易解釋,IDI也因此彌補(bǔ)了AUC的缺陷,可以形象地展示研究對(duì)象被準(zhǔn)確重新判別的比例。
因此,當(dāng)我們?cè)谶M(jìn)行2個(gè)疾病模型比較,或者2個(gè)指標(biāo)診斷效能比較時(shí),除了傳統(tǒng)的ROC曲線及其AUC,也可以同時(shí)給出NRI和IDI,更加全面多層次的展示模型的改善情況。

02 IDI計(jì)算公式

IDI的計(jì)算其實(shí)也比較簡單,它反映的是兩個(gè)模型預(yù)測(cè)概率差距上的變化,因此是基于疾病模型對(duì)每個(gè)個(gè)體的預(yù)測(cè)概率計(jì)算所得。它的計(jì)算方法為:



其中Pnew,events、Pold,events表示在患者組中,新模型和舊模型對(duì)于每個(gè)個(gè)體預(yù)測(cè)疾病發(fā)生概率的平均值,兩者相減表示預(yù)測(cè)概率提高的變化量,對(duì)于患者來說,預(yù)測(cè)患病的概率越高,模型越準(zhǔn)確,因此差值越大則提示新模型越好。

在模型比較時(shí),將兩部分相減即可得到IDI,總體來說IDI越大,則提示新模型預(yù)測(cè)能力越好。與NRI類似,若IDI>0,則為正改善,說明新模型比舊模型的預(yù)測(cè)能力有所改善,若IDI<0,則為負(fù)改善,新模型預(yù)測(cè)能力下降,若IDI=0,則認(rèn)為新模型沒有改善。

我們可以通過計(jì)算Z統(tǒng)計(jì)量,來判斷IDI與0相比是否具有統(tǒng)計(jì)學(xué)顯著性,統(tǒng)計(jì)量Z近似服從正態(tài)分布,公式如下:


02 二分類變量R語言實(shí)現(xiàn)

示例數(shù)據(jù)來自于survival包里自帶的一份梅奧診所的數(shù)據(jù),記錄了418位患者的臨床指標(biāo)與原發(fā)性膽汁性肝硬化(PBC)的關(guān)系。其中前312個(gè)患者來自于RCT研究,其他患者來自于隊(duì)列研究。我們用前312例患者的數(shù)據(jù)來預(yù)測(cè)2000天時(shí)間點(diǎn)上是否發(fā)生死亡。此處需要說明的是原始數(shù)據(jù)是一個(gè)生存數(shù)據(jù),我們重新定義一個(gè)二分類的結(jié)局,死亡or 存活,不考慮時(shí)間因素。先載入這份數(shù)據(jù),如圖4.所示。這個(gè)表中的結(jié)局變量是status,0 = 截尾(刪失),1 = 接受肝移植,2 = 死亡。膽我們的研究目的“死亡與否”是個(gè)二分類變量,所以要做變量變換。再看time一欄,有的不夠2000天,這些樣本要么是沒到2000天就死亡了,要么是刪失了。我們要?jiǎng)h掉2000天內(nèi)刪失的數(shù)據(jù)。

##hereconsider pbc dataset in survival package as an example

library(survival)

dat=pbc[1:312,]

dat$sex=ifelse(dat$sex==''f'',1,0)

##subjectscensored before 2000 days are excluded

dat=dat[dat$time>2000|(dat$time<2000&dat$status==2),]

##predcitingthe event of ''death'' before 2000 days

event=ifelse(dat$time<2000&dat$status==2,1,0)

##standardprediction model: age, bilirubin, and albumin

z.std=as.matrix(subset(dat,select=c(age,bili,albumin)))

##newprediction model: age, bilirubin, albumin, and protime

z.new=as.matrix(subset(dat,select=c(age,bili,albumin,protime)))

##glmfit (logistic model)

mstd=glm(event~.,binomial(logit),data.frame(event,z.std),x=TRUE)

mnew=glm(event~.,binomial(logit),data.frame(event,z.new),x=TRUE)

##UsingPredictABEL package

library(PredictABEL)

pstd<-mstd$fitted.values

pnew<-mnew$fitted.values

##用cbind函數(shù)把前面定義的event變量加入數(shù)據(jù)集,并定義為dat_new

dat_new=cbind(dat,event)

##計(jì)算NRI,同時(shí)報(bào)告了IDI,IDI計(jì)算與cutoff點(diǎn)設(shè)置無關(guān)。

##cOutcome指定結(jié)局變量的列序號(hào)

##predrisk1,predrisk2為新舊logistic回歸模型

reclassification(data=dat_new,cOutcome=21,

                 predrisk1=pstd,predrisk2=pnew,

                 cutoff=c(0,0.2,0.4,1))
# 計(jì)算的IDI為0.44%,說明新模型較舊模型預(yù)測(cè)能力僅改善0.44%。

03 生存資料模型

生存資料的NRI與分類結(jié)局的NRI差別在于前者需要構(gòu)建Cox回歸模型,所以我們首先構(gòu)建新舊Cox回歸模型,計(jì)算這兩個(gè)模型的NRI.

##here consider pbc dataset in survival package as an example

library(survival)

dat=pbc[1:312,]

dat$time=as.numeric(dat$time)

##定義生存結(jié)局

dat$status=ifelse(dat$status==2,1, 0)

##定義時(shí)間點(diǎn)

t0=365*5

##基礎(chǔ)回歸模型

indata0=as.matrix(subset(dat,select=c(time,status,age,bili,albumin)))

##增加1個(gè)預(yù)測(cè)變量新模型

indata1=as.matrix(subset(dat,select=c(time,status,age,bili,albumin,protime)))

##舊模型中預(yù)測(cè)變量矩陣

covs0<-as.matrix(indata0[,c(-1,-2)])

關(guān)注R小鹽,關(guān)注科研私家菜(VX_GZH: SciPrivate),有問題請(qǐng)聯(lián)系R小鹽。讓我們一起來學(xué)習(xí) R語言機(jī)器學(xué)習(xí)與臨床預(yù)測(cè)模型

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

相關(guān)閱讀更多精彩內(nèi)容

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