# it allows two different plots in the same frame par(mfrow = c(1,2)) # plot a ROC curve for a single prediction run # and color the curve according to cutoff. library(ROCR) data(ROCR.simple) pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels) perf <- performance(pred,"tpr", "fpr") plot(perf,colorize = TRUE) # plot a ROC curve for a single prediction run # with CI by bootstrapping and fitted curve library(verification) roc.plot(ROCR.simple$labels,ROCR.simple$predictions, xlab = "False positive rate", ylab = "True positive rate", main = NULL, CI = T, n.boot = 100, plot = "both", binormal = TRUE)
"A big computer, a complex algorithm and a long time does not equal science." -- Robert Gentleman
giovedì 2 agosto 2007
Receiver Operating Characteristic (ROC) Curve in ROCR and verification packages
The following VERY basic code shows how to plot a simple ROC Curve both by means of ROCR package and by verification package.
Iscriviti a:
Commenti sul post (Atom)
il valore dell'Area under curve dove viene visualizzato?
RispondiEliminaFor the above example you can get the Area Under the Curve (AUC) typing:
RispondiElimina(auc <- as.numeric(performance(pred, measure = "auc", x.measure = "cutoff")@y.values))
For further examples:
library(ROCR)
demo(ROCR)
grazie paolo...sei la mia salvezza.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RispondiEliminase ti conoscessi ti farei un bel regalo!!!!!!!
Troppo gentile! :-)
RispondiEliminaThank you!
RispondiEliminaYou're welcome!
RispondiEliminaE' possibile fare qualcosa di analogo per le curve di sopravvivenza?
RispondiEliminaTake a look at the survival package. The following links may be of some help:
RispondiEliminahttp://cran.r-project.org/web/views/Survival.html
http://www.ats.ucla.edu/stat/r/examples/asa/asa_ch2_r.htm
Ciao Paolo!
RispondiEliminaSono stata un bel po di tempo cercando di fare una ROC con R, usando ROCR e verification. Però per me non vanno (credo!). Io non ho bisogno di predire o creare i dati, ho già i dati pronti per graficare, solo avevo bisogno di creare la graffica. Ho provato un paio di volte, usando i miei dati con quelle library, ma non sono riuscita. Lo sai se si può fare?
Alla fine ho dovuto usare ggplot2 per creare una mia roc, però ho un problema con la leggenda...
Ciao Consu,
RispondiEliminaNon conoscendo i dati a tua disposizione mi è difficile suggerirti qualcosa di preciso...
Un consiglio generico può essere di generare una lista simile a quella dell'esempio (ROCR.simple) ossia
test <- list()
test$predictions <-prob.dati # le tue probabilità o simili
test$labels <-dati.labels # le etichette che ritieni rappresentino le vere predizioni/caratteristiche
e poi usare ROCR
library(ROCR)
pred <- prediction(test$predictions, test$labels)
perf <- performance(pred,"tpr", "fpr")
plot(perf,colorize = TRUE)
HTH
Grazie per le idee Paolo, sei molto gentile. Ti spiego un po cosa faccio. Sto utilizzando un programma per modellare species habitat (http://www.cs.princeton.edu/~schapire/maxent/) Questo programma ti crea un output, dove ti da anche la ROC. Però la graffica è a colori e io volevo farla in B&W. Quindi, ho ritrovato i valori dall'output, e ho cercato di farlo con R. Quindi, ho già i valori pronti per grafficare, non devo calcolare niente. Per questo che penso che questo pred <- prediction(test$predictions, test$labels) non mi va. Penso che in realtà, è una cosa più facile... per quello ho provato con ggplot (http://img42.imageshack.us/content_round.php?page=done&l=img42/2720/roc2.png&via=mupload) Quello strano, è che mi appare quel 1 sulla leggenda, che non so da dove viene.
RispondiEliminaI miei dati sono questi:
'data.frame': 863 obs. of 3 variables:
$ Fractional: num 1 1 0.999 0.997 0.996 ...
$ mode : Factor w/ 3 levels "random","test",..: 3 3 3 3 3 3 3 3 3 3 ...
$ training : num 1 1 1 1 1 1 1 1 1 1 ...
mmm... cosa pensi? grazie Paolo!!
Usando la base graphics di R, fornendo le coordinate per test and training che io ho chiamato rispettivamente (1-tn,tf) e (1-tn2, tf2) e plottando il caso random con abline dovresti riuscire ad ottenere il grafico:
RispondiEliminaplot(1-test$tn2,test$tp2,type="l",xlim=c(0,1), ylim=c(0,1), col="grey50", lwd=2, xlab="Specificity", ylab="Sensitivity")
lines(1-test$tn,test$tp,type="l", col="grey70", lwd=2)
abline(a=0,b=1,col="black", lwd=2)
legend("topleft",legend=c("test","training", "random"),col=c("gray50","gray70","black"),lwd=2)
Che grande che sei Paolo!! Tantissime grazie!!! :))
RispondiEliminaAvevo provato a fare qualcosa di simile prima, ma senza successo...
Dal tuo script ho soltanto cambiato l'abline per un altra retta di coordinate uguali all'abline, perchè non mi piace che l'abline incomincia dall'inizio del quadro della graffica, non dal 0,0 dei dati, mi spiego?
Comunque, fatta, grazie a te!!! :) a presto!
Piacere mio! :-)
RispondiEliminaciao, se con weka avressi un output di questo tipo
RispondiEliminainst# actual predicted error prediction
1 1:GA3 1:GA3 1
2 1:GA3 1:GA3 1
3 14:ABA+alt 14:ABA+alt 0.984
4 12:biostim 8:Eth + 1
5 7:no 7:no 1
6 5:citochin 5:citochin 1
7 7:no 7:no 0.938
8 8:Eth 1:GA3 + 0.9
9 5:citochin 5:citochin 1
come devo fare per ottenere una curva roc con rocr? ho cercato in giro e non hho avuto fortuna. grazie
Una soluzione consiste nell'installare il package RWeka ( install.packages(RWeka) ) ripetere la tua analisi in R e verificarne le performance con ROCR: ti basta fornire alla funzione prediction un vettore con le predizioni (le 'probabilità' associate alle singole predizioni) e un altro vettore con le labels originali (?predictions).
RispondiEliminaPiù semplicemente potresti preparare un file di testo con le predizioni in una colonna e le labels nell'altra, importarlo in R ( read.table() ) e quindi verificarne le performance con ROCR.
Non riesco a installare il package ROCR nella versione 2.15.0 di R.
RispondiEliminaMi esce il seguente warning: package ‘ROCR_1.0-2’ is not available (for R version 2.15.0).
Idee alternative?
Grazie!
Monica
L'ultima versione di ROCR è la 1.0-4 ed è quella che ti consiglio di installare con un semplice: install.packages("ROCR"); Se preferisci compilarlo da sorgente (ma devi avere tutti gli strumenti per compilare specifici per la tua piattaforma): install.packages("ROCR", type="source"). Se questa procedura non andasse a buon fine, prova a scaricare il pacchetto (scegli il binario specifico per il tuo sistema operativo) da http://cran.r-project.org/web/packages/ROCR/index.html e da linea di comando scrivi: R CMD INSTALL ROCR_1.0-4.tar.gz
RispondiEliminaThanks for the nice guidelines :-)
RispondiEliminaYou are welcome! :-)
RispondiElimina