2015-09-17 2 views
1

Je calcule d'abord l'AUROC (AUC pour la courbe ROC) en utilisant le package ROCR puis manuellement (en utilisant ma fonction get_au_curve()) comme ci-dessous.ROCR package La sortie AUROC est différente du calcul manuel

Malheureusement, les deux résultats ne sont pas d'accord. Je suppose que le résultat de ROCR est le bon. Est-ce le problème ici avec mon approximateur de fonction?

rm(list=ls()) 
if(!require("ROCR")) { install.packages("ROCR"); require("ROCR") } 

# Function to return area under the curve for ROC or PR curves 
get_au_curve <- function(x, y) { 

    pr_perf <- performance(pred, measure=y, x.measure=x) 
    x_list <- [email protected][[1]] 
    y_list <- [email protected][[1]] 

    if (y == "prec") { # if it is an Area under PR curve, impute precision[1], whcih is NaN, with 1 
    y_list[is.na(y_list)] <-1 } 

    f_appr <- approxfun(cbind(x_list, y_list)) # function approximator for prediction-recall or ROC curve 
    auc <- integrate(f_appr, 0, 1) 

    return(auc$value) 
} 

predictions <- c(0.61, 0.36, 0.43, 0.14, 0.38, 0.24, 0.97, 0.89, 0.78, 0.86) 
labels  <- c(1, 1, 1, 0, 0,  1, 1, 1, 0,  1) 

pred <- prediction(predictions, labels) 

# AUROC 
# 1 Using ROCR 
perf2 <- performance(pred, "auc") 
auroc<- [email protected] 

# 2. Using the function I wrote 
auroc_manual <- get_au_curve('fpr', 'tpr') 

Cela donne le résultat:

> auroc_manual 
[1] 0.6785714 
> auroc 
[[1]] 
[1] 0.7142857 

Répondre

1

Le approxfun ne convient pas de calculer une courbe ROC. Les valeurs liées dans x sont moyennées et une interpolation entre x est calculée. Comparez:

plot(x_list, y_list, type="l") 
curve(f_appr) 

Vous devez utiliser caTools::trapz ou une fonction similaire qui calcule l'AUC à la règle trapézoïdale.

+0

merci, oui c'est ce que j'ai d'abord essayé, mais 'caTools' ne fonctionne pas pour R ver> 3.1 apparemment. Je vais essayer de trouver une autre fonction numérique comme le trapèze ou simpsons. – Rhubarb

+0

Le paquet 'pracma' dans CRAN a une fonction trapz() et fonctionne comme prévu. Je reçois les mêmes résultats que la valeur AUROC de ROCR. – Rhubarb

+0

caTools fonctionne correctement avec les versions plus récentes de R. – Calimo