2017-03-22 1 views
0

J'ai les prédictions suivantes après avoir exécuté un modèle de régression logistique sur un ensemble de molécules que nous supposons qui sont prédictives de tumeurs par rapport aux normales.AUC valeur inattendue

    Predicted class  
         T  N   
       T 29  5 
    Actual class 
       N 993  912   

J'ai une liste des notes qui vont de prédictions < 0 (chiffres négatifs) aux prédictions> 0 (nombres positifs). Ensuite, j'ai une autre colonne dans mon data.frame qui a indiqué les étiquettes (1 == tumeurs et 0 == normales) comme prévu à partir du modèle. J'ai essayé de calculer le ROC en utilisant le library(ROC) de la manière suivante:

pred = prediction(prediction, labels)  
roc = performance(pred, "tpr", "fpr") 
plot(roc, lwd=2, colorize=TRUE) 

utilisant:

 roc_full_data <- roc(labels, prediction) 
     rounded_scores <- round(prediction, digits=1) 
     roc_rounded <- roc(labels, prediction) 

Appel:

 roc.default(response = labels, predictor = prediction) 
     Data: prediction in 917 controls (category 0) < 1022 cases (category1). 
     Area under the curve: 1 

L'AUC est égal à 1. Je ne suis pas bien sûr que je cours tout correctement ou probablement que je fais quelque chose de mal dans l'interprétation de mes résultats car il est assez rare que l'AUC soit égale à 1.

Quelqu'un peut-il m'aider s'il vous plaît?

Meilleur

+1

Qu'avez-vous exactement alimenté par ces fonctions? Un [exemple reproductible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) serait très utile. – MrFlick

+0

Peut-être que vous avez besoin de faire quelque chose comme 'auc (roc (pred, labels))'? – Fernando

Répondre

1

Il y a une faute de frappe dans votre x.measure qui aurait dû provoquer une erreur. Vous avez "pour" et non "fpr". Essayez le code suivant.

performance(pred, measure = "tpr", x.measure = "fpr") 
plot(perf) 

# add a reference line to the graph 
abline(a = 0, b = 1, lwd = 2, lty = 2) 

# calculate AUC 
perf.auc <- performance(pred, measure = "auc") 
str(perf.auc) 
as.numeric([email protected]) 
+0

Désolé, j'ai fait une erreur pendant la copie et le collage de mon code ici mais l'original était fpr. – Bfu38

0

J'utilise pROC pour calculer l'ASC:

require(pROC) 
set.seed(1) 
pred = runif(100) 
y = factor(sample(0:1, 100, TRUE)) 
auc = as.numeric(roc(response = y, predictor = pred)$auc) 
print(auc) # 0.5430757 

Ou

require(AUC) 
auc = AUC::auc(AUC::roc(pred, y)) 
print(auc) # 0.4569243 

Je ne peux pas expliquer pourquoi les résultats sont différents.

EDIT: La somme ci-dessus somme à 1.0, donc l'une des bibliothèques a automatiquement 'inversé' les prédictions.

+0

Ils sont identiques, mais on a inversé la prédiction. Le hasard pur donnera une AUC de 0.5, donc tout moins est mieux pris le contraire. – Jasper

+0

@Jasper Vous avez raison, complètement oublié à ce sujet! – Fernando