roc<- function(pred ,y, cp=seq(0,1,.05), plots=1){ if(any(sort(unique(y))!= c(0,1))) stop("y must be 0/1") auc <- function(x,y)(mean(rank(x)[y == 1]) - (sum(y) + 1)/2)/(length(x) - sum(y)) l<-length(cp) sens<-vector(length=l) espe<-vector(length=l) for (i in 1:l){ sens[i]<-sum(y==1 & pred>cp[i])/sum(y==1) espe[i]<-sum(y==0 & pred<=cp[i])/sum(y==0) } if(plots==1) par(mfrow=c(1,2)) plot(cp,sens,type='l',lty=1) lines(cp,espe,lty=2) legend(.35,.15,c("sens","espe"),lty=c(1,2)) if (plots==2) windows() plot(1-espe,sens,type='l',lty=1) text(.5,.3,paste("AUC=", round(auc(pred,y)[1],3))) cbind(cp,sens,espe) }