недостаточно четких прогнозов для вычисления площади под roc

Я пытаюсь вычислить AUC, используя auc(roc(predictions, labels)), где labels — числовой вектор из 1 (x15) и 0 (x500), а predictions — числовой вектор с вероятностями, полученными из glm [бинома]. Это должно быть очень просто, но auc(roc(predictions, labels)) выдает сообщение об ошибке "Недостаточно различных прогнозов для вычисления площади под кривой ROC". Должно быть, я делаю что-то глупое, но не могу понять что. Не могли бы вы?

Код

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

person user2942623    schedule 01.09.2014    source источник
comment
Не могли бы вы добавить воспроизводимый пример?   -  person dayne    schedule 01.09.2014
comment
Прочтите как создать воспроизводимый пример. Вы должны отредактировать свой вопрос, указав, что мы можем скопировать/вставить в R, чтобы получить ту же ошибку. Потому что о library() вызовах, необходимых для запуска кода. Вы правы, это должно быть легко, поэтому непонятно, как именно вы усложнили.   -  person MrFlick    schedule 01.09.2014
comment
спасибо за комментарии. Я включил теперь часть моих реальных данных   -  person user2942623    schedule 02.09.2014
comment
Но не тот код, который генерирует ошибку, и вы так и не указали, какую библиотеку используете. В его нынешнем виде ответить на вопрос невозможно. Пожалуйста, перечитайте комментарий MrFlicks еще раз, пока полностью не поймете его.   -  person Calimo    schedule 02.09.2014
comment
спасибо за указание. Сейчас я загрузил код и данные   -  person user2942623    schedule 05.09.2014


Ответы (1)


Проблема заключалась в том, что мои «метки» были числовым вектором, а мне нужен был коэффициент. Так что я преобразовал

labels <- factor(labels)

и рух работал как надо

Спасибо за время, которое вы уделили

person user2942623    schedule 05.09.2014