Cómo trazar la curva ROC en R con solo información conocida de SN/PPV/CORTEOF

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

  •  25-10-2019
  •  | 
  •  

Pregunta

Dados dichos datos:

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

¿Cómo puedo trazar la curva ROC con R que produce resultados similares como el adjunto image?

Conozco el paquete ROCR pero no requiere tales aportes.

¿Fue útil?

Solución

Si solo desea crear la gráfica (sin esa tonta spline de interpolación entre los puntos), simplemente traiga los datos que da de la manera estándar, preparando un punto en (0,0) y agregando uno a (1,1) para dar el Puntos finales de la 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)

Para explicar el código: El primero plot() Llamar establece la región de trazado, sin hacer una trama en absoluto. Tenga en cuenta que obligo a la gráfica a cubrir el rango (0,1) en ambos ejes. los par() Llam le dice a R que traza los ejes que cubren el rango de los datos: el valor predeterminado los extiende en un 4 por ciento del rango en cada eje.

La siguiente línea, with(dat, lines(....)) Dibuja la curva ROC y aquí prependemos y agregamos los puntos a (0,0) y (1,1) para dar la curva completa. Aquí yo uso type = "o" Para dar a los puntos y líneas sobrepotrados, los puntos están representados por el carácter 25 que permite que se llene con un color, aquí negro.

Luego agrego etiquetas a los puntos usando text(....); la pos El argumento se usa para colocar la etiqueta lejos de las coordenadas de trazado reales. Tomo las etiquetas del cutpoint objeto en el marco de datos.

los abline() la llamada dibuja la línea 1: 1 (aquí el 0, y 1 significa una intersección de 0 y una pendiente de 1 respectivamente.

La línea final restablece los parámetros de trazado a los valores predeterminados que guardamos op Antes de trazar (en la primera línea).

La trama resultante se ve así:

enter image description here

No es un facsímil exacto y prefiero la gráfica usando el valor predeterminado para los rangos de eje (agregando 4 por ciento):

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)

enter image description here

Nuevamente, no es un verdadero facsímil sino cercano.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top