coter ROC in R avec ROCR vs pROC

je trace un graphique des ROCs et je mesure l'AUC partielle comme métrique de la qualité du modèle de niche écologique. Comme je travaille en R, j'utilise les paquets ROCR et pROC. Je m'en contenterai, mais pour l'instant, je voulais voir comment ils fonctionnaient, et si l'un d'eux répondait mieux à mes besoins.

une chose qui me confond, c'est que, en traçant un ROC, les axes sont les suivants:

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. 

mais si je trace le ROC en utilisant les deux méthodes, ils semblent identiques. Donc, je veux juste confirmer que:

true positive rate = sensitivity

false positive rate = 1 - specificity.

Voici un exemple reproductible:

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'))
18
r roc
demandé sur Prradep 2011-10-20 04:13:52

3 réponses

pour confirmer, vous avez raison dans ce taux de vrai positif = sensibilité et taux de faux positif = 1-spécificité. Dans votre exemple, l'ordre dans lequel vous tracez les composants de L'objet de performance ROCR à partir de ROCR package est la clé. À la dernière ligne, la première mesure du rendement, le taux de véritable positif, " tpr " est tracée sur l'axe des y measure = 'tpr' et la deuxième mesure de performance, taux de faux positifs, est tracée sur l'axe des x x.measure = 'fpr'

plot(performance(ROCRpred, measure = 'tpr', x.measure = 'fpr'))
11
répondu Jim M. 2011-10-20 04:32:00

Juste pour dire, pour le pROC package si vous inclure les éléments suivants dans votre parcelle de terrain de code:

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

puis on finit avec un axe X inversé.

8
répondu PharmR 2016-12-07 13:38:21

autant Que je sache:

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

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

mais, lorsque le graphique montre la spécificité (taux négatif réel) dans l'axe des x, alors l'intervalle est de [1, 0].

Dans les deux cas, le graphique est la même.

Vous pouvez le vérifier ici dans la page de wikipedia.

4
répondu angelous 2016-12-07 13:50:29