用R語言繪制ROC曲線的實例講解
1 roc曲線的意義
ROC曲線就是用來判斷診斷的正確性,最理想的就是曲線下的面積為1,比較理想的狀態就是曲線下的面積在0.8-0.9之間,0.5的話對實驗結果沒有什麼影響。
如圖:
2代碼部分
install.packages(“pROC”) install.packages(“ggplot2”) library(pROC) library(ggplot2) #建立曲線 data(aSAH) rocobj1<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHs100b) rocobj2<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHwfns) rocobj3<-roc(aSAHo u t c o m e , a S A H outcome,aSAHoutcome,aSAHndka) #計算full AUC auc(rocobj1) auc(rocobj2) auc(rocobj3) #繪制曲線 plot(rocobj1) #其他參數美化 plot(rocobj1,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),grid.col=c(“green”,“red”),max.auc.polygon=TRUE,auc.polygon.col=“skyblue”,print.thres=TRUE) #計算partial AUC選擇關註一定范圍數據 plot(rocobj1,print.auc=TRUE,auc.polygon=TRUE,partial.auc=c(0.8,0.4),partial.auc.focus=“sp”,grid=c(0.1,0.2),grid.col=c(“green”,“red”),max.auc.polygon=TRUE,auc.polygon.col=“skyblue”,print.thres=TRUE,reuse.auc=FALSE) #比較兩個曲線,pROC提供三種方法比較“delong”, “bootstrap”或“venkatraman” roc.test(rocobj1,rocobj2,method = “bootstrap”) #ggroc(功能仍在測試中)繪制Multiple curves g3<-ggroc(list(s100b=rocobj,wfns=rocobj2,ndka=rocobj3)) g3 install.packages(“pROC”) library(“pROC”)##roc data(aSAH) roc1<-roc(myDatal a b e l , m y D a t a label,myDatalabel,myDatascore) roc2<-roc(myData2l a b e l , m y D a t a 2 label,myData2label,myData2score) polt(roc1,col=“blue”) polt.roc(roc2,add=TRUE,col=“red”)
3 實驗結果
補充:R語言proc包繪制多重ROC曲線(信用評分應用,已有label和相應score)
數據:好壞標簽label、用四種model簡單計算出的每一個樣本的score,標記為pre1至pre4,約1w樣本
目的:使用proc包繪制ROC曲線,並生成AUC值
1.讀入數據
data<-read.csv(file=”D:/個人消費信用/第三次上機/工作簿2.csv”,header=T)
header=T 即在讀取中,將原有數據的第一行設置為變量名。
註意文件的分隔為 “ / ”,與默認不同。
2.畫出最基本的ROC曲線
library(pROC) #加載pROC包 roc1<-roc(data$label,data$pre1) plot(roc1,print.auc=TRUE,plot=TRUE, print.thres=TRUE)
包含AUC的值和最優臨界點,下面把它美化一下~
(問題:為啥橫坐標Specificity的范圍是1.5到-0.5,查瞭一下沒有找到原因,可能是因為原數據本身的問題,以前以違約概率而非score的時候沒有出現這個問題,擇日探究……TvT)
3.美化ROC曲線
plot(roc2,print.auc=TRUE,print.auc.x=0.4,print.auc.y=0.4,auc.polygon=TRUE,auc.polygon.col="gray", smooth=TRUE, grid=c(0.5, 0.2), grid.col=c("black", "black"), max.auc.polygon=TRUE, print.thres=TRUE,print.thres.cex=0.8, lty=1,main=" ROC曲線",mfrow=c(1,1))
解釋在括號裡面疊加命令的代碼:
print.auc.x=0.4,print.auc.y=0.4 #設置AUC值顯示出來的坐標 auc.polygon=TRUE,auc.polygon.col="gray" #設置ROC曲線下填充色,此處設定為灰色 smooth=TRUE #使ROC曲線變得光滑 max.auc.polygon=TRUE #整個圖像填充 print.thres.cex=0.8 #設置最優臨界點字體的大小 lty=1,main=" ROC曲線",mfrow=c(1,1) #設置標題啥的 mfrow貌似是圖形參數,待查……
4.合並ROC曲線
由於共有4個model,所以要想比較模型的優劣,可以將四個ROC曲線畫到一起。
roc1<- roc(data$label,data$pre1) roc2<- roc(data$label,data$pre2) roc3<- roc(data$label,data$pre3) roc4<- roc(data$label,data$pre4) plot(roc1, print.auc=TRUE,print.auc.x=0.4,print.auc.y=0.4, auc.polygon=TRUE,auc.polygon.col="gray", grid=c(0.5, 0.2),smooth=T,grid.col=c("black", "black"), max.auc.polygon=TRUE) plot.roc(roc2,add=T,col="red", print.auc=TRUE,print.auc.x=0.3,print.auc.y=0.3) plot.roc(roc3,add=T,col="blue",print.auc=TRUE,print.auc.x=0.5,print.auc.y=0.5) plot.roc(roc4,add=T,col="yellow",print.auc=TRUE,print.auc.x=0.6,print.auc.y=0.6)
由於此處要顯示AUC值,且不要重合~所以在後面加上瞭print.auc=TRUE,print.auc.x=0.6,print.auc.y=0.6的命令。
如果不重合的話,直接在roc1下面加上下列代碼即可:
plot.roc(roc2,add=T,col="red")
由於原有數據的問題,這裡的四條ROC曲線幾乎重合~但此處隻是介紹pROC包繪制ROC曲線的用法。就不要太在意遼!
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- None Found