isseiの解析日記

アイアナ代表・isseiの解析日記。統計学、Rを使ったデータ分析やAIなど

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)