Come tracciare curva ROC in R con conosciuta solo informazioni SN / PPV / Cutoff

StackOverflow https://stackoverflow.com/questions/9308227

  •  25-10-2019
  •  | 
  •  

Domanda

Dato tali dati:

#Cutpoint         SN   (1-PPV)
5       0.56    0.01
7       0.78    0.19
9       0.91    0.58

Come posso tracciare curva ROC con R che producono risultato simile come il allegato image?

Lo so pacchetto ROCR, ma non ci vuole tale contributo.

È stato utile?

Soluzione

Se si desidera solo per creare la trama (senza quella stupida spline di interpolazione tra i punti) poi basta tracciare i dati si danno nel modo standard, anteponendo un punto (0,0) e aggiungendo una a (1,1) invia i punti finali della curva.

## your data with different labels
dat <- data.frame(cutpoint = c(5, 7, 9),
                  TPR = c(0.56, 0.78, 0.91),
                  FPR = c(0.01, 0.19, 0.58))

## plot version 1    
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)

Per spiegare il codice: I primi gruppi di chiamata plot() la regione tracciando, senza fare un tracciato a tutti. Si noti che ho forzare il complotto per coprire la gamma (0,1) in entrambi gli assi. La chiamata par() dice R agli assi trama che coprono l'intervallo dei dati -. Il difetto le estende da 4 per cento della gamma su ogni asse

La riga successiva, with(dat, lines(....)) disegna la curva ROC e qui anteporre e aggiungere i punti a (0,0) e (1,1) per dare la curva piena. Qui uso type = "o" dare entrambi i punti e le linee overplotted, i punti sono rappresentati da carattere 25 che permette di essere riempito con un colore, qui nero.

Poi aggiungo le etichette ai punti utilizzando text(....); l'argomento pos viene utilizzato per posizionare l'etichetta lontano dalle coordinate reali stampa. Prendo le etichette dall'oggetto cutpoint nel frame di dati.

La chiamata abline() richiama l'1:. Linea 1 (qui il 0 e 1 designano rispettivamente intercetta 0 e una pendenza di 1

La riga finale ripristina i parametri di complottare per i valori di default abbiamo salvato in op prima del tracciato (nella prima riga).

I risultanti aspetto trama come questo:

entrare descrizione dell'immagine qui

Non è un facsimile esatto e preferisco la trama usando l'impostazione predefinita per gli intervalli degli assi (aggiungendo il 4 per cento):

plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)

entrare descrizione dell'immagine qui

Anche in questo caso, non è un vero e proprio fac-simile ma quasi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top