2011-10-20 7 views
13

Estoy trazando ROC y midiendo el AUC parcial como una medida de la calidad del modelo de nicho ecológico. Como estoy trabajando en R, estoy usando los paquetes ROCR y pROC. Me conformaré con uno para usar, pero por ahora, solo quería ver cómo funcionaban, y si uno satisfacía mejor mis necesidades.trazado de ROC en R con ROCR frente a pROC

Una cosa que me confunde es que, cuando se traza una ROC, los ejes son los siguientes:

ROCR

x axis: 'true positive rate' 0 -> 1 
y axis: 'false positive rate', 0 -> 1 

Proc

x axis: 'sensitivity' 0 -> 1 
y axis: 'specificity' 1 -> 0. 

Pero si traza el ROC usando ambos métodos, parecen idénticos. así que sólo quiero confirmar que:

true positive rate = sensitivity 

false positive rate = 1 - specificity. 

Aquí está un ejemplo reproducible:

obs<-rep(0:1, each=50) 
pred<-c(runif(50,min=0,max=0.8),runif(50,min=0.3,max=0.6)) 
plot(roc(obs,pred)) 

ROCRpred<-prediction(pred,obs) 
plot(performance(ROCRpred,'tpr','fpr')) 

Respuesta

9

Para confirmar, que está justo en que la verdadera tasa positiva = sensibilidad y la tasa de falsos positivos = 1 - especificidad . En su ejemplo, el orden en el que traza los componentes del objeto de rendimiento ROCR del paquete ROCR es la clave. En la última línea, la primera medida de rendimiento, tasa positiva verdadera, 'tpr' se representa en el eje y measure = 'tpr' y la segunda medida de rendimiento, tasa de falsos positivos, se traza en el eje x x.measure = 'fpr'

plot(performance(ROCRpred, measure = 'tpr', x.measure = 'fpr')) 
+0

¡Gracias por la información! – Pascal

4

por lo que sé:

TPR = sensitivity = TP/(TP/FN) -> y axis: [0, 1] 

FPR = 1 - specificity = 1 - (TN/(FP+TN)) -> x axis: [0, 1] 

Pero, cuando el gráfico muestra la especificidad (verdadera tasa negativa) en el eje x, entonces el rango es [1, 0].

En ambos casos, el gráfico es el mismo.

Puede consultarlo here en la página wikipedia.

8

sólo para decir, para el paquete pROC si se incluye lo siguiente en su código de parcela:

plot(roc(obs,pred), legacy.axes = TRUE) 

entonces termina con un eje x invertido.

Cuestiones relacionadas