2017-03-22 3 views
0

Ich habe die folgenden Vorhersagen nach dem Ausführen eines logistischen Regressionsmodells auf einer Reihe von Molekülen, die wir vermuten, die Tumoren gegenüber Normalen vorhersagen.AUC unerwarteter Wert

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

Ich habe eine Liste von Partituren, die von Prognosen < 0 (negative Zahlen) auf die Prognosen> 0 (positive Zahlen) reichen. Dann habe ich eine andere Spalte in meinem data.frame, die die Etiketten (1 == Tumoren und 0 == Normalen) wie vom Modell vorhergesagt angezeigt. Ich versuchte, das ROC mit den library(ROC) in der folgenden Art und Weise zu berechnen:

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

Verwendung:

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

Call:

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

Die AUC ist gleich 1 bin ich nicht sicher, dass ich alles korrekt ausführe oder wahrscheinlich etwas falsch mache bei der Interpretation meiner Ergebnisse, weil es sehr selten ist, dass die AUC gleich 1 ist.

Kann mir bitte jemand helfen?

Beste

+1

Was genau haben Sie diesen Funktionen zugeführt? Ein [reproduzierbares Beispiel] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproductible-example) wäre sehr hilfreich. – MrFlick

+0

Vielleicht brauchst du etwas wie 'auc (roc (pred, labels))' '? – Fernando

Antwort

1

In Ihrem x.measure ist ein Tippfehler enthalten, der einen Fehler verursacht haben sollte. Sie haben "für" und nicht "fpr". Probieren Sie den folgenden Code aus.

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

Sorry, ich habe einen Fehler beim Kopieren und Einfügen von meinem Code hier gemacht, aber das Original war fpr. – Bfu38

0

Ich benutze pROC AUC zu berechnen:

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 

Oder

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

Ich kann nicht erklären, warum die Ergebnisse unterschiedlich sind.

EDIT: Die obigen aucs summieren sich auf 1.0, so dass eine der Bibliotheken die Vorhersagen automatisch "invertiert".

+0

Sie sind gleich, aber man invertierte die Vorhersage. Reine Chance ergibt eine AUC von 0,5, also wird alles weniger als das Gegenteil genommen. – Jasper

+0

@Jasper Du hast recht, völlig vergessen! – Fernando

Verwandte Themen