R資料分析:臨床預測模型中校準曲線和DCA曲線的意義與做法

Codewar發表於2022-06-14

之前給大家寫過一個臨床預測模型:R資料分析:跟隨top期刊手把手教你做一個臨床預測模型,裡面其實都是比較基礎的模型判別能力discrimination的一些指標,那麼今天就再進一步,給大家分享一些和臨床決策實際相關的指標,主要是校準calibration和決策曲線Decision curve analysis。

校準曲線

做預測模型都應該報告校準曲線的:

Reporting on calibration performance is recommended by the TRIPOD (Transparent Reporting of a multivariable prediction model for Individual Prognosis Or Diagnosis) guidelines for prediction modeling studies

先給大家解釋,預測模型為什麼除了需要discrimination的一些指標外(比如tp,tn,fp,fn,roc,LR+,LR-等等)還需要做校準曲線:

Clinical predictive model performance is commonly published based on discrimination measures, but use of models for individualized predictions requires adequate model calibration

是因為:這些指標僅僅針對現有樣本,很容易在過擬合的情況下,表現得很好。那麼這種預測模型有沒有用,敢不敢用?得打個問號。

in contrast to discrimination, which refers to the ability of a model to rank patients according to risk, calibration refers to the agreement between the estimated and the “true” risk of an outcome

依然是給大家舉例子說明:一個區分度很好的預測模型,AUC很高,這個模型是以美國某個社群樣本做的預測痴呆的模型,現在有人用這個模型預測全體社群老年人,發現按照模型的預測結果,美國將會有40%的老年人得痴呆,但是普查結果告訴我們美國痴呆患病率只有10%。這個就是一個過擬合的模型高估結局風險的例子(但這並不妨礙其在訓練樣本中表現的很好),但是這個模型不能用。

When predictive models are built based on a population that differs from the population in which they will be used, blind application of these models could result in large “residuals” (ie, a large difference between a model’s estimate and the true outcome) because of factors that are difficult to account for.

如何表示模型的上面的情況(預測值與實際值偏離)的嚴重程度,或者說如何評價模型能不能用,能不能換個樣本也預測得準,就要評估模型的校準度,所以我們需要報告模型的校準曲線。

矯正曲線要做的就是對比模型預測概率和觀測概率的一致性。因為我們是憑模型的預測概率判斷具體病人陰陽性的,如果我的模型表現好,比如我依照0.5的預測概率劃分陰陽,如果模型表現好,是不是應該100個預測概率是0.5的人會有50陽性?再來一個例子,比如我依照0.3的預測概率劃分陰陽,如果模型表現好,是不是應該100個預測概率是0.3的人會有30陽性?

就是如果我的模型的校準度好,是不是就不會發生我剛剛據的痴呆預測的例子了,所以說:

Calibration plot is a visual tool to assess the agreement between predictions and observations in different percentiles (mostly deciles) of the predicted values.

校準曲線可以說明模型表現的另一個方面:Performance can further be quantified in terms of calibration (do close to x of 100 patients with a risk prediction of x% have the outcome?)

上面就是模型的矯正曲線來評估模型表現的理由,我們理想的情況就是我們的預測模型預測出來的Y和資料真實的Y之間的距離越小越好,如果我們的結局變數是連續變數,那麼距離就是預測的y值和實際y值的差,如果結局是二分類變數那麼距離就是陽性概率p和實際p的差:

The distance between the predicted outcome and actual outcome is central to quantify overall model performance from a statistical modeler’s perspective 32. The distance is Y −Ŷ for continuous outcomes. For binary outcomes, with Y defined 0 – 1, Ŷ is equal to the predicted probability p, and for survival outcomes it is the predicted event probability at a given time (or as a function of time)

在座標系中,如果我們將模型預測概率放在橫軸,實際概率放在縱軸,一個完美的預測模型的矯正曲線應該是一個45°向上過0的直線(Ideal),意味著模型預測概率和實際概率完全吻合。但是我們在論文中看到的矯正曲線一般是下圖樣子的:

R資料分析:臨床預測模型中校準曲線和DCA曲線的意義與做法

 

圖中的Ideal線剛剛已經解釋了(就是理想情況下模型預測和實際完全一致),圖中還會有Apparent線和Bais-corrected線,這兩個線就表示自己的模型的表現,Apparent線其中的意思是自己的訓練的表現而Bais-corrected線表示樣本經反覆自助抽樣後訓練出的模型表現,其矯正了過擬合情況(另外一種理解:Apparent線為內部矯正,Bais-corrected線為模型的外部矯正曲線,外部資料怎麼來的,自助抽樣得來的)。此處不用糾結,發表的論文的中對矯正曲線的描述通常也就是一句話:

R資料分析:臨床預測模型中校準曲線和DCA曲線的意義與做法

 

所以大家只要把握住,打眼一看,兩條線都在Ideal線的周圍沒有偏離的太離譜就可以。

以上就是模型校準的基礎知識,內容大部分參見文獻:

Yingxiang Huang, Wentao Li, Fima Macheret, Rodney A Gabriel, Lucila Ohno-Machado, A tutorial on calibration measurements and calibration models for clinical prediction models, Journal of the American Medical Informatics Association, Volume 27, Issue 4, April 2020, Pages 621–633, https://doi.org/10.1093/jamia/ocz228

DCA曲線原理介紹

評價一種診斷方法是否好用,一般是作ROC曲線,計算AUC。但是,ROC只是從該方法的特異性和敏感性考慮,追求的是準確。而臨床上我要用預測結果決定是不是需要採取干預,準確就足夠了嗎?準確度較高的情況下就一定要依照模型預測結果進行干預嗎?干預後患者就一定受益嗎?也得打個問號。

就是模型預測再準確,也不能百分百準確,始終有假陽性和假陰性存在,我們卻要根據模型的預測結果去幹預病人,這裡面就有一個干預劃不划得來的問題:說的再具體點,比如我通過某個生物標誌物預測患者是否患了某病,無論選取哪個值為臨界值,都會遇到假陽性的可能,假陽性的病人也會接受干預(但其實是虧損的),我們希望自己做出來的預測模型在臨床使用中,在任何時候依照模型結果進行干預淨受益都比預設的好(最常見的預設情況就是全乾預和全不干預)。

那麼決策曲線要乾的事情是啥?就是將依照模型干預的淨受益和預設方法(全乾預和不干預)干預的淨受益進行比較:

In brief, decision curve analysis calculates a clinical “net benefit” for one or more prediction models or diagnostic tests in comparison to default strategies of treating all or no patients.

有點抽象哈,什麼是淨受益?

用干預來舉例,在預測模型中,我們在全乾預的情況下(全部人群無差別干預),我們使用這種策略時真的受益應該是true positives和false negatives,我們的代價就是false positives和true negatives,此時受益減去代價就叫做淨受益:

In the case of diagnosis, the income is true positives (e.g., finding a cancer) and the expenditure is false positives (e.g., unnecessary biopsies), with the “exchange rate” being the number of false positives that are worth one true positive. The exchange rate will depend on the relative seriousness of the intervention and outcome. For instance, we will be willing to conduct more unnecessary biopsies to find one cancer if the biopsy procedure is safe vs. dangerous or the cancer is aggressive vs. more indolent. The exchange rate is calculated, as explained above, from the threshold probability. Another analogy is with net health benefit or net monetary benefit, which both depend on the willingness to pay threshold in their exchange of benefits in terms of health and costs

其實上面的描述還是不嚴謹,臨床決策考慮是不是施加干預,肯定還要考慮干預本身的危害性,比如如果幹預完全是對病人無害的,那麼想都不用想,管它三七二十一,就算病人只有0.1的概率患病,我也要把干預直接搞起來,因為干預沒損害的嘛。

但是干預存在副作用的時候,我們可以有這麼一個換算關係:多少個真陽性的干預獲益能抵得上一個假陽性的干預損失?

回到我們的實際情形:如果現在模型告訴我,病人患病的概率是100%,我一定會給病人施加干預,毫無疑問!如果模型告訴我病人患病的概率是98%,我估摸著也給個干預看看(儘管這個干預有一定危害),那麼如果模型告訴我病人患病的概率是90%,干預還是不干預呢?這個時候我就不知道了,有點懵。

有人說還是應該干預,那麼請繼續往下讀:

但是過往的經驗告訴我(或者我本身就知道):一個副作用很強的干預,對於陽性病人干預的獲益是對陰性病人干預損失的1/9(干預錯的損失是干預一個真陽性獲益的9倍),另一種理解就是我干預陽性病人9個人的獲益和干預了1個陰性病人的損失可以抵消。此時如果模型告訴你,某病人陽性的概率是90%,請問你對不對它進行干預?

回答我!

聰明的你估計又想了想,好像這個時候不干預也行,因為這種時候干預在理論上其實是沒有受益的(儘管模型告訴我它的病的概率達到90%,0.9*1/9=(1-0.9)*1)。

上面的‘陽性的概率是90%’中的90%就叫做閾概率(Threshold Probability),表示的是隻有病人的預測概率超過這個閾概率,干預才有受益,才值得幹預:

threshold probabilities, defined as the minimum probability of disease at which further intervention would be warranted, as net benefit = sensitivity × prevalence – (1 – specificity) × (1 – prevalence) × w where w is the odds at the threshold probability

這個閾概率本身我們是不知道的,但是我們關心的是是不是我們的訓練出來的模型在任何閾概率情況下都是有收益的,都是值得應用的,這就是DCA曲線要幫助我們回答的問題。

所以請大家記住:決策曲線要描述的物件是整個預測模型或者是某個測驗,就是要看按照模型結果進行干預的淨受益。

我們還是再看一眼DCA曲線:

R資料分析:臨床預測模型中校準曲線和DCA曲線的意義與做法

 

DCA曲線的橫軸是閾概率,縱軸是淨獲益,可以看到閾概率在DCA曲線上展示的都是比較小的,剛剛給大家舉的例子著實有點極端了。再回顧一下淨獲益,剛剛寫了獲益的意思是正確識別陽性,但是模型其實還有損失的嘛(就是錯誤的識別了陽性),因為對於陽性我們就得進行干預,但是干預有沒有益處,得比較兩個東西------就是真陽性的獲益和假陽性的損失,兩個做差就叫做淨獲益。

這樣DCA曲線就可以描述隨著閾概率變化,按照模型預測值進行干預的情況下淨獲益的變化。

注意曲線中有一條叫做“intervention for all”,就是極端情況,所有人都進行干預,這個時候只有真陽性才獲益,如果閾概率從小到大變化(就是干預錯的損失/干預的獲益的值從小到大變化,比如看圖中橫軸的1:19到1:9)那麼所有人都進行干預整體淨獲益肯定會從大到小變,就是隨著閾概率的增大(干預的損失增大/干預獲益的比值的增大)那麼對所有人都進行干預的淨獲益也會逐漸減小(這就是為什麼intervention for all的斜率是負的)。

注意曲線中有一條叫做“intervention for none”,就是極端情況,所有人都不進行干預,這個時候無論閾概率如何變化淨獲益肯定為0,很好理解,因為你都不干預嘛,哪裡有干預獲益的道理?。所以這條線一直是平的。

“intervention for all”這條線和“intervention for none”這條線還有一個交點,就是說在某個閾概率水平下,對於陽性病人採取全乾預和全不干預的淨獲益都是一樣的,就像剛剛給大家寫的例子反過來:如果幹預一個真陽性病人的獲益是9,干預一個假陽性病人的損失是1,此時閾概率應該為1/(9+1)=0.1,就是說在這種情況下閾概率為0.1的時候兩條線就會相交。

在換個思維再給大家舉個例子,現在假設我知道我預測的人群的某病患病率為0.2,某干預方法的干預真陽性的受益是8,干預假陽性的損失是2,那麼此時對應的閾概率為2/(2+8)=0.2,此時採用全乾預策略的淨獲益為0.2*8-2*0.8=0,此時兩條線相交。

通過上面兩個例子,應該大家就可以理解了:在閾概率等於研究人群患病率的這個點,兩條線會相交,也就是全乾預策略的淨受益為0。

上面的部分行文思路來源於文獻,感興趣的同學建議還是去閱讀原文哦:

Vickers, A.J., van Calster, B. & Steyerberg, E.W. A simple, step-by-step guide to interpreting decision curve analysis. Diagn Progn Res 3, 18 (2019). https://doi.org/10.1186/s41512-019-0064-7

如何讀DCA曲線

再回到下圖就是一個DCA曲線的常見樣子,不過這個曲線將預測模型和另外一個檢測技術test,畫在了一個圖上,那麼怎麼讀圖呢?

首先圖中兩條實線是兩個最極端的情況,一個叫做“intervention for all”,另一個叫做"intervention for none",剛剛解釋過它們的意思了。

R資料分析:臨床預測模型中校準曲線和DCA曲線的意義與做法

 

可以從圖中看出,隨著閾概率的增加,模型的淨受益會下降(更精確的說法是根據模型結果進行干預的淨受益會下降),但是對於我們訓練的Model來講,按照Model的預測結果進行干預的話,除了閾概率很小的情況下,在其餘的閾概率情形下模型的表現都是比較好的,並且模型表現始終比test好。

做好預測模型之後,我們們把這個圖給亮出來,就相當於給編輯說明了我做的這個預測模型確實好,確實比現有的檢測技術管用,趕緊發表出來吧,這個就是DCA曲線。

Hence, we can conclude that, except for a small range of low preferences, intervening on (i.e., biopsying) patients on the basis of the prediction model leads to higher benefit than the alternative strategies of biopsying all patients, biopsying no patients, or only biopsy those patients who are positive on the diagnostic test. For the prostate biopsy study, the conclusion is that using the model to determine whether patients should have a biopsy would lead to improved clinical outcome.

小結

今天給大家介紹了臨床預測模型中矯正曲線和決策曲線的意義(僅以2分類結局為例),本來想的是將做法一起寫的,無奈寫的太羅嗦,字元限制了,那就分為2期吧,下期就出實操,希望對大家有啟發。

相關文章