2014-09-01 11 views
5

ich binde den AUC unter Verwendung auc(roc(predictions, labels)) zu berechnen, wobei labels ist ein numerischer Vektor von 1 (x15) und 0 (x500) und predictions ist ein numerischer Vektor mit Wahrscheinlichkeiten abgeleitet von a glm [binomial]. Es sollte sehr einfach sein, aber auc(roc(predictions, labels)) gibt einen Fehler, zu sagen "Nicht genug verschiedene Vorhersagen, um Fläche unter der ROC-Kurve zu berechnen". Ich muss etwas Dummes tun, aber ich kann nicht herausfinden, was. Können Sie?nicht genug, um unterschiedliche Prognosen Bereich zu berechnen unter roc

Der Code ist

library(AUC) 
#read the data, that come from a previous process of a species distribution modelling 
prob<-read.csv("prob.csv") 
labels<-read.csv("labels.csv") 
#prob is 
#labels is 

roc(prob,labels) 

#Gives the error (that I'm NOT interest in) 
Error in `[.data.frame`(predictions, pred.order) : undefined columns selected 
In addition: Warning messages: 
1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 
2: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL' 
3: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL' 

#I change the format to numeric vector 
prob<-as.numeric(prob[,2]) 
labels<-as.numeric(labels[,2]) 
#Verify it is a vector numeric 
class(prob) 
[1] "numeric" 
class(labels) 
[1] "numeric" 

#call the roc functoin 
roc(prob,labels) 

Error in roc(modbrapred, pbbra) : # THIS is the error I0m interested in 
    Not enough distinct predictions to compute area under the ROC curve. 
In addition: Warning messages: 
1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 
2: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL' 
3: In is.na(e2) : is.na() applied to non-(list or vector) of type 'NULL'  

Data is as follows 

labels.csv 
"","x" 
"1",1 
"2",1 
"3",1 
"4",1 
"5",1 
"6",1 
... 
"164",1 
"165",1 
"166",0 
"167",0 
"168",0 
"169",0 
"170",0 
"171",0 
"172",0 
... 
"665",0 

prob.csv 
"","x" 
"1",0.977465874525236 
"2",0.989692657762578 
"3",0.989692657762578 
"4",0.988038430564019 
"5",0.443188602491041 
"6",0.409732585195485 
... 
"164",0.988607910625475 
"165",0.986296936078692 
"166",7.13529696560611e-05 
"167",0.000419255989134081 
"168",0.00295825183558019 
"169",0.00182941235784709 
"170",4.85601026999172e-09 
"171",0.000953106471289961 
"172",1.70252014430306e-05 
... 
"665",8.13413358866349e-08 
+1

gewidmet Können Sie bitte ein reproduzierbares Beispiel hinzufügen? – dayne

+0

Bitte lesen Sie [wie man ein reproduzierbares Beispiel erstellt] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Sie sollten Ihre Frage so bearbeiten, dass sie in R kopiert werden kann, um denselben Fehler zu erhalten. Weil über die 'library()' Aufrufe erforderlich sind, um den Code zur Ausführung zu bringen. Du hast Recht, es sollte einfach sein, also wie genau du es schwierig gemacht hast, ist unklar. – MrFlick

+0

danke für die Kommentare. Ich habe jetzt einen Teil meiner realen Daten eingefügt – user2942623

Antwort

17

Das Problem war, dass meine "Labels" war ein numerischer Vektor, aber ich roc einen Faktor benötigt. So verwandelt ich

labels <- factor(labels) 

und die roc funktionierte, wie es sollte

Vielen Dank für die Zeit, die Sie

Verwandte Themen