R ROCカーブの知識整理
こちらのページでもROCカーブを用いてきたが、改めて知識を整理しておく。ROCカーブはReceiver Operating Characteristicのことであり、モデルの善し悪しを表現する1つの手段と認識している。
以下は、あるメールがspamか否かをDecision Treeで予測した際のROCカーブとその関連用語の説明である。
1-False Positive RateはSpecificityとも呼ばれる。また、SensitivityはTrue Positive Rateとも呼ばれる。
8つの症例において、実際の疾患の有無と、検査結果(陽性/陰性)を検査値の閾値を変えて予測した場合のROCカーブを描いてみる。
Patient_ID <- c(1:8) Disease <- c(0,0,1,0,1,0,1,1) Test_Value <- c(2.5,4.5,5.5,6.5,8.5,9.5,13.5,15.5) Predict <- rep(0,nrow(dat)) dat <- cbind(Patient_ID,Disease,Test_Value,Predict) dat <- data.frame(dat) sh <- c(2:16) Specificity <- rep(0,length(sh)) Sensitivity <- rep(0,length(sh)) k <- 1 for (i in sh) { for (j in 1:nrow(dat)) { if (dat[j,"Test_Value"]>i) { dat[j,"Predict"] = 1 } else { dat[j,"Predict"] = 0 } } A <- nrow(subset(dat,dat[,"Disease"]==0 & dat[,"Predict"]==1)) B <- nrow(subset(dat,dat[,"Disease"]==0 & dat[,"Predict"]==0)) C <- nrow(subset(dat,dat[,"Disease"]==1 & dat[,"Predict"]==1)) D <- nrow(subset(dat,dat[,"Disease"]==1 & dat[,"Predict"]==0)) Specificity[k] <- B/(A+B) Sensitivity[k] <- C/(C+D) k <- k + 1 } plot(1-Specificity,Sensitivity,type="l")
結果はこちら。
前回はROCRなるパッケージを用いて描いた。上記の説明にあるようにROCRパッケージはcut-off pointをいろいろな断面にとり、予測モデルの予測値と実績値に対するROCカーブを描いてくれる(という理解である)。今回のコードでは、検査値の閾値を変えてROCカーブを描いている。どちらが真実なのであろうか?それとも、両者は同じ意味であるのだろうか?