本內(nèi)容為【科研私家菜】R語言機器學習與臨床預(yù)測模型系列課程
R小鹽準備介紹R語言機器學習與預(yù)測模型的學習筆記
你想要的R語言學習資料都在這里积担, 快來收藏關(guān)注【科研私家菜】
01 什么是綜合判別改善指數(shù)暑劝?
綜合判別改善指數(shù)(Integrated Discrimination Improvement, IDI)。這個指標也用于判斷預(yù)測模型改善情況透典,與上一講的凈重新分類指數(shù)(NRI)有類似也有不同。
IDI是由Pencina等人于2008年提出的一個非常新的判別指標。由于它考慮了不同切點的情況板辽,可以用來反映模型的整體改善狀況巷挥,在一定程度上補齊了NRI的短板桩卵。同時,雖然AUC也考慮到了不同切點倍宾,但是AUC的改善情況在臨床中不易解釋雏节,IDI也因此彌補了AUC的缺陷,可以形象地展示研究對象被準確重新判別的比例高职。
因此钩乍,當我們在進行2個疾病模型比較,或者2個指標診斷效能比較時怔锌,除了傳統(tǒng)的ROC曲線及其AUC寥粹,也可以同時給出NRI和IDI变过,更加全面多層次的展示模型的改善情況。
02 IDI計算公式
IDI的計算其實也比較簡單涝涤,它反映的是兩個模型預(yù)測概率差距上的變化媚狰,因此是基于疾病模型對每個個體的預(yù)測概率計算所得。它的計算方法為:
其中Pnew,events阔拳、Pold,events表示在患者組中崭孤,新模型和舊模型對于每個個體預(yù)測疾病發(fā)生概率的平均值,兩者相減表示預(yù)測概率提高的變化量衫生,對于患者來說裳瘪,預(yù)測患病的概率越高,模型越準確罪针,因此差值越大則提示新模型越好彭羹。
在模型比較時,將兩部分相減即可得到IDI泪酱,總體來說IDI越大派殷,則提示新模型預(yù)測能力越好。與NRI類似墓阀,若IDI>0毡惜,則為正改善,說明新模型比舊模型的預(yù)測能力有所改善斯撮,若IDI<0经伙,則為負改善,新模型預(yù)測能力下降勿锅,若IDI=0帕膜,則認為新模型沒有改善。
我們可以通過計算Z統(tǒng)計量溢十,來判斷IDI與0相比是否具有統(tǒng)計學顯著性垮刹,統(tǒng)計量Z近似服從正態(tài)分布,公式如下:
02 二分類變量R語言實現(xiàn)
示例數(shù)據(jù)來自于survival包里自帶的一份梅奧診所的數(shù)據(jù)张弛,記錄了418位患者的臨床指標與原發(fā)性膽汁性肝硬化(PBC)的關(guān)系荒典。其中前312個患者來自于RCT研究,其他患者來自于隊列研究吞鸭。我們用前312例患者的數(shù)據(jù)來預(yù)測2000天時間點上是否發(fā)生死亡寺董。此處需要說明的是原始數(shù)據(jù)是一個生存數(shù)據(jù),我們重新定義一個二分類的結(jié)局瞒大,死亡or 存活螃征,不考慮時間因素。先載入這份數(shù)據(jù)透敌,如圖4.所示盯滚。這個表中的結(jié)局變量是status踢械,0 = 截尾(刪失),1 = 接受肝移植魄藕,2 = 死亡内列。膽我們的研究目的“死亡與否”是個二分類變量,所以要做變量變換背率。再看time一欄话瞧,有的不夠2000天,這些樣本要么是沒到2000天就死亡了寝姿,要么是刪失了交排。我們要刪掉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)
##計算NRI,同時報告了IDI,IDI計算與cutoff點設(shè)置無關(guān)埃篓。
##cOutcome指定結(jié)局變量的列序號
##predrisk1,predrisk2為新舊logistic回歸模型
reclassification(data=dat_new,cOutcome=21,
predrisk1=pstd,predrisk2=pnew,
cutoff=c(0,0.2,0.4,1))
# 計算的IDI為0.44%,說明新模型較舊模型預(yù)測能力僅改善0.44%根资。
03 生存資料模型
生存資料的NRI與分類結(jié)局的NRI差別在于前者需要構(gòu)建Cox回歸模型架专,所以我們首先構(gòu)建新舊Cox回歸模型,計算這兩個模型的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)
##定義時間點
t0=365*5
##基礎(chǔ)回歸模型
indata0=as.matrix(subset(dat,select=c(time,status,age,bili,albumin)))
##增加1個預(yù)測變量新模型
indata1=as.matrix(subset(dat,select=c(time,status,age,bili,albumin,protime)))
##舊模型中預(yù)測變量矩陣
covs0<-as.matrix(indata0[,c(-1,-2)])
關(guān)注R小鹽玄帕,關(guān)注科研私家菜(VX_GZH: SciPrivate)部脚,有問題請聯(lián)系R小鹽。讓我們一起來學習 R語言機器學習與臨床預(yù)測模型