[R program]Rで描くROC曲線
Rの場合SASと違って一連の解析がひとまとめになっていないため、いろんなパッケージを探してやりたい事を見つけなければいけない。
例えばロジスティック回帰を当てはめたときのROC曲線を確認したい時は、Epiライブライブラリなどを使う。
ROCの曲線下面積、AUCの信頼区間はDiagnosisMedライブラリで出来る。
ただ正解、不正解を示すベクトルを作る必要があるみたい。
SASだとVer9.2からAUCの検定が出来るようになったよう(proc logisticのcontrastステートメントだったと思う)。
ちなみにロジスティック回帰は以下のように行う。
glm(y~x + z, family="binomial")
またggplot2を使えばロジスティック曲線の当てはめもできる。
コードはこちら↓
library(Epi) #ロジスティックモデルでROCを描く library(DiagnosisMed) #AUCの信頼区間(単変量) #---------ROCを描く #------ロジスティックモデルのROCを記述 x <- rnorm( 100 ) z <- rnorm( 100 ) w <- rnorm( 100 ) tigol <- function( x ) 1 - ( 1 + exp( x ) )^(-1) y <- rbinom( 100, 1, tigol( 0.3 + 3*x + 5*z + 7*w ) ) y2 <- rbinom( 100, 1, tigol( 0.3 + 9*x + 9*z + 7*w ) ) #---一つのROC曲線 Epi::ROC( form = y ~ x + z, plot="ROC") #---色分けして重ね書き par(col=2) Epi::ROC( form = y ~ x + z, plot="ROC", PV=F, MX=F, MI=F, AUC=F ) par(new=T,col=1) Epi::ROC( form = y2 ~ x + z, plot="ROC", PV=F, MX=F, MI=F, AUC=F ) glm(y~x + z, family="binomial") glm(y2~x + z, family="binomial") #------ロジスティック曲線の当てはめ library(ggplot2) Data <- data.frame(x, y, y2, z) ggplot(Data, aes(z, y2)) + geom_point() + stat_smooth(method="glm", family="binomial") #------検査値と正解、不正解ベクトルからROCを記述 s = c(16,15,14,13,12,11,10, 9, 8, 8, 8, 8, 7, 6, 5) t = c( T, T, F, T, T, T, F, T, T, T, T, F, F, T, F) Epi::ROC(test=s, stat=t) #---------AUCの信頼区間 s2 = c(16,15,14,13,12,11,10, 9, 8, 8, 8, 8, 7, 6, 5) t2 = c( 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0) testROC <- DiagnosisMed::ROC(t2, s2) testROC$AUC.summary DiagnosisMed::TGROC(t2, s2)