在醫學統計中,ROC分析經常用於(1)比較預測模型的好壞(比較AUC(Area under the Curve of ROC)的面積大小)、(2)找單一模型的最佳切點,可用於臨床上的使用(例如:找到Biomarker的切點,用於診斷疾病)。
AUC的特性:
1.AUC的範圍必在0~1之間
2.假設閾值(切點)以上是陽性(有病),以下是陰性(沒病)
3.若隨機抽取一個陽性(有病)樣本和一個陰性(沒病)樣本,分類器正確判斷陽性(有病)樣本的值高於陰性(沒病)樣本之機率=AUC
4.AUC值越大的分類器,正確率越高
AUC判斷分類器(預測模型)好壞的標準:
• AUC=1,是完美分類器,代表隨機抽取樣本,100%都是陽性的樣本
• 0.5<AUC<1,優於隨機猜測(0.5)。這個分類器(模型)設定好的閾值後,能有預測價值。
• AUC=0.5,跟隨機猜測一樣(例如:丟一枚銅板),模型沒有任何預測價值。
• AUC<0.5,比隨機猜測還差;但只要是用於反預測(用來預測陰性或沒病),就優於隨機猜測
壹、資料說明
貳、會用到的package:
• haven:用於讀入資料
• pROC:用於畫ROC curve
參、讀入數據:
透過R studio已內建的”haven” package匯入資料,”haven”可用於匯入SPSS、Stata、SAS檔案。
肆、產生ROC物件:
透過pROC內建的roc函數可以去得到Auc的面積、每一個切點、不同切點下的敏感度(sensitivity)、不同切點下的特異度(specificity)等等,筆者針對資料當中的四個連續變項(HOMA_ln、BMI、WC、HDL),以代謝症候群為outcome,去做ROC的分析。指令說明:roc(outcome:二元變項,自變項:連續變項)
伍、ROC結果呈現:
以HOMA_ln為例,AUC的面積為0.8471,在實務上,AUC超過0.7以上的結果算是相當的不錯,可以很好的用於臨床的診斷。
此外,筆者也透過R的summary(),可以去看ROC的物件中有哪一些內容,如下圖所示。
陸、繪製基本的ROC curve
筆者直接使用plot函數去繪製沒有任何加工的ROC curve,如下圖所示,雖然看的出來是一張ROC curve,但還是有一些問題存在,首先,X軸的標題是特異度,但一般常見的ROC curve X軸通常是1-特異度,此外圖形的字體大小、線條粗細等可以再做一些調整,以符合投稿的需求。
柒、美化ROC curve:
根據上述語法執行後,美化後的圖形如下,比起一開始較為陽春的圖形,修正後的圖形變得相當正式,雖然還是有一些調整的空間以符合使用者的需求,有興趣的讀者可以去(https://www.rdocumentation.org/packages/pROC/versions/1.17.0.1/topics/plot.roc)上面了解詳細語法的使用。
捌、多組ROC curve比較:
在繪製了一張ROC curve後,筆者想把多條ROC curve畫在一起,以比較不同預測模型的區辨能力,首先,因為原本的ROC曲線繪圖範圍是長方形,因此圖形輸出後,會留下許多不必要的空白,因此可以在繪圖的一開始,先限制繪圖的範圍,這邊會用到par(pty=”s”),這邊的”s”指的是square(正方形),下了這個指令後,之後的圖形才會跟上面示範的一樣,不會有不必要的空白。
畫圖的語法就根據前面介紹的一樣做操作,第一張圖形有加上標題,這邊使用main=”標題”,第二張圖形開始會調整線條的顏色,以區別不同ROC曲線,col=”顏色”,可以去調整線條的顏色,預設為黑色;第二張圖形要加上add=TRUE,這個指令是用於將圖形疊到前一張圖形,這樣才可以得到圖形疊加的結果。
最後圖形的成品如下
留言列表