大きいか小さいかを比較してROCする

  • ROCカーブのこと
  • Rならrocplusパッケージなどがあるらしい
  • ROCカーブとその評価のために凸包を用いることもあるそうだ(こちら)
  • 2群の量的データがあったときに、閾値をスライドさせてそれぞれの閾値において、何検体が閾値越えしたかを数え上げるのがROCの基本
  • その基本の部分だけ、書いてみよう
my.roc<-function(x,y,t=NULL){
	Nx <- length(x)
	Ny <- length(y)
	if(is.null(t))t<-seq(from=min(x,y),to=max(x,y),length=100)
	xa<-outer(x,t,FUN="<")
	ya<-outer(y,t,FUN="<")
	xb<-apply(sign(xa),2,sum)
	yb<-apply(sign(ya),2,sum)

	xy<-data.frame(X=Nx-xb,Y=Ny-yb)
	return(xy)
}
  • 使ってみる
x <- rnorm(100,mean=0,sd=5)
y <- rnorm(200,mean=3,sd=3)
roc.out <- my.roc(x,y,t=seq(from=-5,to=20,length=1000))
library(ggplot2)
my.df <- data.frame(x=c(x,y),z=c(rep(1,length(x)),rep(2,length(y))))
gp <- ggplot(data = my.df, aes(x,fill=factor(z)))
gp <- gp + geom_bar(position="dodge")
gp
plot(roc.out)