R教程:教你繪製5種類型的諾莫圖(列線圖)

作者:墨點星溝;稽核:王九誼

在預測模型中,我們常能見到

諾莫圖 (Nomogram,也稱列線圖)

的身影,其作為預測模型視覺化的一個重要手段,使得預測模型更具可操作性和實用性。

目前,我們常用的諾莫圖有如下

5種類型

:線段式的靜態諾莫圖、彩色條帶式的靜態諾莫圖、基於regplot 的動態諾莫圖、基於DynNom 的動態諾莫圖和基於 shinyPredict 的動態諾莫圖。

本文以諾莫圖繪製的主要程式碼與過程演示為主

,而有關諾莫圖的簡介,大家可以回顧醫咖會的往期推文(教你用R 畫列線圖,形象展示預測模型的結果),這裡便不作過多介紹。接下來,本文將

以 logistic 預測模型為例

,對不同型別諾莫圖的 R 語言實現做一個彙總,給大家提供一套豐富多彩的諾莫圖解決方案。

資料介紹

本次演示所用的案例資料來源於 SEER 資料庫,研究目的是

構建預測宮頸癌患者淋巴結轉移的諾莫圖

,所涉及的變數有年齡 (Age)、組織學型別 (Hist_type)、組織學分級 (Hist_stage)、腫瘤數目 (Tumor_number)、腫瘤大小 (Tumor_size)、淋巴結轉移 (Status) 等。

經過納入排除,最終用於分析的觀測行有 8749 行。鑑於樣本量較大,我們採用了TRIPOD (Transparent reporting of a multivariable prediction model for individual prognosis or diagnosis,用於個體預後和診斷的多變數預測模型的透明報告)中給出的 Type 2a 方案進行預測模型的建立與驗證。先按照 7:3 的比例,將資料集隨機劃分為訓練集和驗證集。訓練集、驗證集的資料概況如下:

R教程:教你繪製5種類型的諾莫圖(列線圖)

建立預測模型

接著用訓練集構建模型(預測因子篩選、多因素logistic模型構建),具體過程不在這裡詳述了。經過模型驗證、評價及調整,最終得到的預測模型中包含了年齡、組織學型別、組織學分級、腫瘤數目這4 個變數。

由於構建線段式靜態諾莫圖的nomogram函式更易識別lrm函式構建的模型,因此這裡先以lrm函式構建模型(注:下文所用的glm與lrm構建的二元logistic模型結果是一致的)。所構建的最佳logistic預測模型的概況如下所示:

R教程:教你繪製5種類型的諾莫圖(列線圖)

繪製諾莫圖

在得到最佳的預測模型後,我們便可以開始繪製預測模型的諾莫圖。

1。 線段式靜態諾莫圖

線段式靜態諾莫圖是我們在文章中最常見到的,也是最常用的。因其用線段和對應的分值來形象地刻畫結局發生機率,所以我們更習慣稱之為列線圖。

R教程:教你繪製5種類型的諾莫圖(列線圖)

R教程:教你繪製5種類型的諾莫圖(列線圖)

Figure 1。 線段式靜態諾莫圖

這裡我們玩個小花樣,向下延長Points軸的刻度,使得每個變數有一個粗略的Points參考,程式碼和圖如下:

R教程:教你繪製5種類型的諾莫圖(列線圖)

Figure 2。 改良版線段式靜態諾莫

2。 彩色條帶式靜態諾莫圖

目前繪製該諾莫圖的程式包(VRPM)已經無法直接透過install。package函式安裝,但可以透過網站下載安裝包後手工安裝,

下載安裝步驟如下:

同時這裡給大家提供一個網盤連結:

(連結:https://pan。baidu。com/s/1W0V7Rp-byBXY6cE6Ssh2Og , 提取碼:p6yw)

與線段式靜態諾莫圖不同的是,該彩色諾莫圖繪製成功後,會直接儲存在工作路徑資料夾中,不在Rstudio中顯示。圖中各條帶的顏色為漸變色,有 5 種顏色方案備選。另外,對於不同的諾莫圖繪製函式,其所識別的建模函式會有所差別,大家可以根據其幫助文件具體選擇lrm或glm,這裡建模使用的是glm函式。彩色諾莫圖見Figure 3,程式碼及過程如下:

R教程:教你繪製5種類型的諾莫圖(列線圖)

R教程:教你繪製5種類型的諾莫圖(列線圖)

Figure 3。 彩色條帶式靜態諾莫圖

簡單地介紹一下彩色諾莫圖的使用,和列線圖的用法基本一致,右側的Color Legend對應的是每個變數的各亞組/不同數值對應的score,四個變數的score相加對應最下面的Score,也就是total score,同時最下面的total score有相對應的Probability。

(注:Color legend對應的是每個變數不同亞組對應的score,比如年齡90歲對應3分,Histology stage的4對應3分。這裡顏色為漸變色,取值比較粗糙;相比線段式的列線圖,或許只是花哨一點,計算起來,可操作性可能要差一些。下面的機率座標軸有自己的漸變色,不參考color legend)

3. 線段式動態諾莫圖

該諾莫圖也可以稱為互動式列線圖,當在 regplot 函式中將 clickable 設定為 TRUE(clickable = T ) 後,我們就可以在圖上點選選擇每個變數的不同亞組或不同數值,來看不同特徵患者對應的淋巴結轉移風險,實現互動功能。另外,還可以選擇不同的顯示風格(見Figure 4)。程式碼及過程如下:

R教程:教你繪製5種類型的諾莫圖(列線圖)

R教程:教你繪製5種類型的諾莫圖(列線圖)

Figure 4。 線段式動態諾莫圖

在Rstudio中,我們可以點選不同特徵,以檢視不同特徵患者發生結局事件的機率;但以靜態圖片匯出後,顯示的是某一患者的特徵及對應的結局發生機率,不便宜檢視其他特徵的患者。而後面要講到的動態諾莫圖與此不同,既可以脫離Rstudio,也可以點選不同特徵,實用性和可操作性極強。

4。 基於DynNom的動態諾莫圖

這款諾莫圖與靜態諾莫圖(列線圖)不同,已基本不具有列線圖的樣式(線段);加之是基於shiny開發的網頁,因此將其稱之為“預測機率網頁計算器”或許更加合適。

如果說以上介紹的三種諾莫圖是紙筆時代的產物,那麼下面將要介紹的兩種諾莫圖應是網路時代的選擇。

R教程:教你繪製5種類型的諾莫圖(列線圖)

此時,可以透過點選 Publish 上傳上述檔案,也可以執行如下語句:rsconnect::deployApp(appName = “Dynamic_nomogram”); 接下來的就是等待……部署完成後會彈出一個網頁。本次演示所生成的網頁動態諾莫圖見連結 (https://ww-msdatastudio。shinyapps。io/Dynamic_nomogram/),截圖見Figure 6。

這種諾莫圖的使用比較簡單,完成網頁部署後,透過網址進入後,只需要在相應的變數選項裡進行選擇,然後點選Predict即會給出相應特徵患者的結局發生機率及其95%置信區間。

基於shiny的動態諾莫圖,其高階之處也是其最難實現之處:部署到網頁上,大家可以按照上述步驟,耐下心來慢慢梳理一遍。另外,這裡有兩點要特別提醒大家:建模資料集的名字不能為 data, 否則會報錯;每次使用完後,要記得點選左下方的Quit,否則下次再開啟時可能會報錯。

Figure 6。 網頁版動態諾莫圖

(注:這裡需要提醒大家:DynNom生成的線上計算器,有個bug,如果前一個使用者結束使用,不點quit,下一個使用者會報錯)

5。 基於shinyPredict的動態諾莫圖

和基於 DynNom 的諾莫圖一樣,均需要部署到 shinyapp 中,但 shinyPredict 的功能要比 DynNom 強大一些,不僅可以顯示多個模型的諾莫圖,還可以更改諾莫圖的主題。這裡新建立了一個模型 LR3,讓 LR3 與 LR2 一起顯示在該動態諾莫圖中。

R教程:教你繪製5種類型的諾莫圖(列線圖)

R教程:教你繪製5種類型的諾莫圖(列線圖)

Figure 7。 基於shinyPredict的動態諾莫圖

(注:基於shinyPredict的諾莫圖,由於不適當的使用了選擇框,導致使用者可以在一個預測變數裡選擇兩個數值,甚至不選,導致變數值的輸入不具唯一性,需要模型使用者額外注意。作為模型開發者,最好可以在shinyPredict提供的諾莫圖的基礎上,自己進行進一步的最佳化。)

結束語

以上便是 5 種諾莫圖的繪製過程與主要程式碼,希望能給各位提供些許幫助,其中的更多細節還需要大家在實踐中具體學習和摸索。下期將

以Cox比例風險模型為例繪製諾莫圖

最後,在這裡談一點個人的認識,對於一個完整的諾莫圖繪製或預測模型開發過程,應是先透過訓練集建立、驗證集驗證/評價以及後續的模型調整(增減變數、替換變數、改變已納入變數型別等)等步驟構建出一個最優的預測模型,然後再將預測模型轉化為諾莫圖。

從上述步驟我們不難看出,我們所做的驗證、評價、調整均是針對預測模型的,而不是針對諾莫圖的,諾莫圖只是預測模型的一種展現形式;因此在很多文章或推文中提到的對諾莫圖的驗證、評價等說法,個人認為是值得商榷的。

TAG: 諾莫圖模型預測線段Figure