准備用幾次推送與大家一起系統的學習下Nomogrm的繪制原理及其在R軟件和SAS軟件中的實現。首先聲明,文章只是自己文獻上的整理及自己的一點點理解,錯誤之處還請大家指出!
在wikipedia 里對Nomogram的介紹是,Nomogram—詞來源於希臘語,Nomos指“法律”而Gramma意思是“書寫”。Nomogram的理論是由法國工程師 Philbert Maurice d’Ocagne (1862-1938) 於1884年提出,最早用於工程學,它能夠將復雜的工程力學等計算公式以圖形的方式,快速、直觀、精確的展現出來。換句話說,繪制Nomogram旨在以繪圖的方法來闡述不同變量之間的關系。在醫學領域,Nomogram優勢在於可個性化的計算特定腫瘤患者生存率, 因此在臨床實踐中有很大的價值。
Nomogram 怎么用?
我們用個例子來說明Nomogram的用法,臨床上用四個指標A,B,C,D來預測某疾病的發病率,其中A和B是連續性變量,C和D為二分類變量;A的取值范圍在0-80之間,B的取值范圍在0-10之間,C取值為Low和High,和D取值為Neg和Pos,在統計軟件中建立回歸模型,並繪制Nomogram,具體繪制出的圖形如下:
圖1.Nomogram 示意圖
假設有一個病人,他的四個因素的值分別是:A=40, B=5,C=Low和D=Pos,Nomogrm的用法是在A變量的刻度尺上找到其值為40的刻度,然后垂直畫條豎線,對應到最上方的Points刻度尺上,找到Points對應的分值。我們看到圖中A為40時,其Points是50,同理B=5時其Points是40,C=Low時其Points值是0,D=Pos時其Points值是19.將這四個因素的Points值加起來總共是109分;下一步在圖下方的Total Points刻度尺上找到109,向下方的Probability of Clin.Outcome做垂線,109對應的值是39,則此病人該種疾病得發病風險預測概率值是39%。
Nomogram 繪制原理
一般的回歸模型都可以繪制其對應的Nomogram,本文以二分類的Logistic 回歸為例。例:為探討某些危險因素對某種疾病的發病影響,統計建模篩選出的結果顯示年齡(10-90),性別(男女)和血壓(低,正常,高)是三個影響因素,利用這三個因素與二分類的結局變量做Logistic回歸,回歸結果見下表:
1. 對每個自變量(因素)賦分
一般情況下,繪制Nomogram時要求每個因素的賦分范圍在0-100之間。Nomogram繪制實際上是對上述回歸結果的系數做轉化后以圖形的形式展現出來,即主要是對回歸模型擬合系數的轉化。
(1)系數轉換
對於連續性變量年齡,其范圍是10-90,結合表1中估計的各因素的系數,Nomogram的轉換公式是:
(2)根據轉換結果賦分
繪制Nomogram的最核心點是哪個變量對預測結果影響最大,然后以影響最大的指標為基礎(即Nomogram的第一條刻度線),第二影響大的指標以第一影響大的指標為基礎,按照一定的公式轉換成比例,第三影響大的指標同樣以第一大的指標為基礎,做一定的轉換。換句話說,Nomogram的每個指標的標尺,是以影響最大的指標為參考做出來的。
本例中,按照轉換的系數值大小排序及賦分結果見表2。
上面步驟即完成了最基本的每個因素的賦分過程,即每個因素刻度尺的確定及刻度尺所對應的Points的值。
(一)講Nomogram實現代碼時,先講下如何下載安裝R軟件?
1.用百度搜索R軟件,在首頁找到The R Project for Statistic Computing
英文網站,這是R的官網,點擊進入
2.在首頁第一部分Getting Started的第一段找到download R ,藍色字體突出顯示的,很容易看到點擊download R
3.這時你會看到很多國家名字和對應的地址,向下滾動頁面,找到China,網站提供了5個鏈接地址,任意點擊一個進入
4.這是網站詢問要下載的R對應的系統類型,大多數人都是WINDOWS點擊Dowload R for Windows如果你是Linux或者是OS X的話,只要點對應的選項就可以了
5.又要做選擇題了,選擇Base
6.點擊下面的地址類似小編圖中紅框標注的地方點擊“開始下載“在這里小編使用的是瀏覽器自帶的下載器,也可以使用其他下載工具,大小62.4MB,稍等片刻,就可以完成下載了。
7.下載下來以后,雙擊打開安裝文件,你首先看到語言的選擇,我們選擇簡體中文
8.下面就簡單了,點擊下一步
9.選擇你需要安裝的組件,通常四個都安裝最好,以后不會因為少裝了而去重新安裝。如果你電腦是32位,你就不要裝63位,如果電腦是64位,你隨便裝哪個,我裝了兩個,都會用到。
10.選擇no(接受默認選擇),點擊下一步
11.在開始菜單中設置一個文件夾存飯R的快捷方式,點擊下一步
12.到這里就基本上完成了安裝
13.安裝完成以后,界面是這樣的:
R在運行代碼前,先要安裝一個包(package),這個在R主頁上有,是大家恭喜出來的,諸如做Nomogram是rms包
在百度里搜索rms
點擊進去
你會發現這里面有rms包的詳細介紹,包括包的作者信息,用途,全名,包的指導手冊(Reference manual),包文件等等都可以下載。
一般新按照的包,大家要看下它的指導手冊,
包的PDF指導手冊可以下載,點開之后里面有包的詳細介紹,包括包中函數的用法,例子等等,非常詳細。
下一步,編寫程序,首先打開R里面任務欄里面的File選擇,New script
會出現編寫代碼的對話框:
我們要安裝rms包,代碼是:
install.packages("rms")
輸入代碼后,在代碼行點擊右鍵選擇Run或者ctrl+R就會運行代碼,
同樣它會提醒選擇鏡像
選擇中國就可以了,之后會自動安裝。
(二)、Nomgram的R語言實現代碼
上面簡要介紹了R軟件的下載、安裝及包的在線安裝。下面我們回歸正題,R語言中如何實現Nomogram?
首先什么是Nomogram?在本公眾號前期的一篇文章中詳細講過(文章名”Nomogram 繪制原理及R&SAS實現(一)“),簡單的說這是一種將Logistic回歸或Cox回歸圖形化呈現的方法,可以讓讀者從圖中很簡便地根據預測變量的值得到因變量的大致概率數值。其對於Logistic回歸或Cox回歸的意義,大概相當於散點圖對於簡單線性回歸的意義。
下面簡單說下Nomogram怎么看。如下圖。欲知年齡50歲的女性(sex=1)的患病風險,只需要將age=45歲向points軸投射,則points=50;同理sex=1時,points≈37。兩者相加則Total points=87;將此數值在Total points軸上向Risk概率軸投射,則可知風險大概在0.4和0.5之間。(參見圖中紅線)對於單個變量,只需要令Total points = points進行投射即可。
接下來講如何用R語言做出上面的這張圖。簡單起見,此帖僅討論Logistic回歸,Cox回歸的方法類似,但相對更復雜。本帖所用數據引用自上海交大出版《醫學統計學及SAS應用(修訂版)》的例11.4
require(rms) ##調用rms包
# 建立數據集
y = c(0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1,
1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,
1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0,
0, 0, 1, 0, 1, 0, 1, 0, 1)
age = c(28, 42, 46, 45, 34, 44, 48, 45, 38, 45, 49, 45, 41, 46, 49, 46, 44, 48,
52, 48, 45, 50, 53, 57, 46, 52, 54, 57, 47, 52, 55, 59, 50, 54, 57, 60,
51, 55, 46, 63, 51, 59, 48, 35, 53, 59, 57, 37, 55, 32, 60, 43, 59, 37,
30, 47, 60, 38, 34, 48, 32, 38, 36, 49, 33, 42, 38, 58, 35, 43, 39, 59,
39, 43, 42, 60, 40, 44)
sex = c(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
0, 1, 1, 1, 0, 1)
ECG = c(0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 0, 0, 2, 2, 0, 0, 2, 2,
0, 1, 2, 2, 0, 1, 0, 2, 0, 1, 0, 2, 1, 1, 0, 2, 1, 1, 0, 2, 1, 1, 0, 2,
1, 1, 0, 2, 1, 1)
# 設定nomogram的參數
ddist <- datadist(age, sex, ECG)
options(datadist='ddist')
# logistic回歸
f <- lrm(y ~ age + sex + ECG)
# nomogram
nom <- nomogram(f, fun=plogis,
fun.at=c(.001, .01, .05, seq(.1,.9, by=.1), .95, .99, .999),
lp=F, funlabel="Risk")
plot(nom)
有朋友問到Cox回歸的代碼怎么寫。Cox回歸模型會復雜一些,因為可能涉及到不同時間點(3年、5年)生存概率的計算。下面討論最簡單的概率軸為中位生存時間的情況。
require(rms)
require(Hmisc) ##需要下載安裝require(survival) ##R默認自帶的用於做生存分析的包
# 建立數據集(使用rms包example的代碼,未改動)
n <- 1000
set.seed(731)
age <- 50 + 12*rnorm(n)
label(age) <- "Age"
sex <- factor(sample(c('Male','Female'), n,
rep=TRUE, prob=c(.6, .4)))
cens <- 15*runif(n)
h <- .02*exp(.04*(age-50)+.8*(sex=='Female'))
dt <- -log(runif(n))/h
label(dt) <- 'Follow-up Time'
e <- ifelse(dt <= cens,1,0)
dt <- pmin(dt, cens)
units(dt) <- "Year"
# 設定nomogram的參數
ddist <- datadist(age, sex)
options(datadist='ddist')
# Cox回歸
S <- Surv(dt,e)
f <- cph(S ~ rcs(age,4) + sex, x=T, y=T)
med <- Quantile(f)
# nomogram
nom <- nomogram(f, fun=function(x) med(x),
fun.at=c(13,12,11,9,8,7,6,5),lp=F, funlabel="Median Survival Time")
plot(nom) ##繪制Nomgram圖
每周更新腫瘤數據最新文獻統計方法!歡迎關注公眾號:“survival-analysis” QQ:8243033
近萬人的腫瘤醫生粉絲平台!
本公眾號精彩歷史文章:
04:如何在R軟件中求一致性指數( Harrell'concordance index:C-index)?
05:Nomogram 繪制原理及R&SAS實現.
06 : Lasso方法簡要介紹及其在回歸分析中的應用
07 : 最優模型選擇中的交叉驗證(Cross validation)方法
08 : 用R語言進行分位數回歸(Quantile Regression)
09 : 樣本數據中異常值(Outliers)檢測方法及SPSS & R實現
10 : 原始數據中幾類缺失值(Missing Data)的SPSS及R處理方法
11 : [Survival analysis] Kaplan-Meier法之SPSS實現
12 : [Survival analysis] COX比例風險回歸模型在SPSS中的實現
13 : 用R繪制地圖:以疾病流行趨勢為例
14 : 數據挖掘方法:聚類分析簡要介紹 及SPSS&R實現
15 : 醫學研究中的Logistic回歸分析及R實現
16 : 常用的非參數檢驗(Nonparametric Tests)總結
17 : 高中生都能看懂的最小二乘法原理
18 : R語言中可實現的常用統計假設檢驗總結(側重時間序列)
19 : 如何根據樣本例數、均數、標准差進行T-Test和ANOVA
20 : 統計學中自由度的理解和應用
21 : ROC和AUC介紹以及如何計算AUC
22 : 支持向量機SVM介紹及R實現
23 : SPSS如何做主成分分析?
24 : Bootstrap再抽樣方法簡介
25 : 定量測量結果的一致性評價及 Bland-Altman 法的應用
26 : 使用R繪制熱圖及網絡圖
27 : 幾種常用的雙坐標軸圖形繪制
28 : 遺失的藝術—諾謨圖(Nomogram)
29 : Nomogram 繪制原理及R&SAS實現(二)
30 : WOE:信用評分卡模型中的變量離散化方法
32 : 重復測量的多因素方差分析SPSS實現操作過程
回復文章前代碼數字如“04”即可查看或直接查看歷史文章。
公眾號:survival-analysis QQ:8243033
郵箱:8243033 @ qq.com 歡迎關注!