?

Log in

No account? Create an account
R

Язык и среда R

Статистическое программное обеспечение

Previous Entry Поделиться Next Entry
ROC кривые
chupvl wrote in r_statistics
Перевод записи в моем английском блоге.

ROC - Receiver operating characteristic, это график, позволяющий оценить качество разделения двух классов. Кроме визуальной составляющей, есть численная характеристика ROC AUC - Area under ROC curve (AUROC, ROC AUC), площадь под ROC кривой, чем выше значение - тем лучше, 0.5 - плохая классификация, не отличающаяся от равновероятностной, больше 0.75 - считается хорошая классификация, и по моему мнения больше 0.8 - уже прекрасно и публикабельно, если значение 0.2 - то вам необходимо обратить лейблы. ROC curve является все навсего графиком двух значений: соотношения количества правильно и неправильно классифицированных признаков при каком-то выбранном значений (см.алгоритм построения ROC кривых здесь pdf - язык простой, но заморский).




История этого метода прозаичная - необходимо было определить качество распознавания сигналов радаров японцев среди всех остальных. В дальнейшем алгоритм был использован для всех исследований, где присутствует классификационные методы, т.к. является простым и емким методом визуализации. Были разработаны различные модификации, к примеру: CROC - A CROC Stronger than ROC: Measuring, Visualizing, and Optimizing Early Retrieval. Метод изначально создан для бинарных значений - т.е. два класса, но есть различные модификации для нескольких классов.

В R я обычно использую ROCR, хотя алгоритм реализован во многих других пакетах. Код, с комментированием каждой строки, приведен ниже, подствека сделана с помощью Online syntax highlighter. ROCR позволяет создавать самые различные графики для результатов классификации и является очень мощным инструментом визуализации.

# ROC curve(s) with ROCR
# chupvl@gmail.com
# loading ROCR library
library("ROCR")
# loading active compounds, or compounds with label1
active <- read.table("sample.active", sep=",", header=FALSE)
# loading inactive compounds, or compounds with label2
inactive <- read.table("sample.inactive", sep=",", header=FALSE)
# binding them and converting to matrix because ROCR works with matrix data
target_pred <- as.matrix(rbind(active,inactive))
# because number of the colums should be the same - making additional param
ncol <- ncol(inactive)
# generating classes (1 for active, 0 for inactive, but it can be 1 and -1 - there is no difference)
class.active <- matrix(sample(1, (ncol(active)*nrow(active)), replace=T), ncol=ncol)
class.inactive <- matrix(sample(0, (ncol(inactive)*nrow(inactive)), replace=T), ncol=ncol)
# binding the classes
target_class <- rbind(class.active,class.inactive)
#target_class1 <- target_class[,1]
# calculating the values for ROC curve
pred <- prediction(target_pred, target_class)
perf <- performance(pred,"tpr","fpr")
# changing params for the ROC plot - width, etc
par(mar=c(5,5,2,2),xaxs = "i",yaxs = "i",cex.axis=1.3,cex.lab=1.4)
# plotting the ROC curve
plot(perf,col="black",lty=3, lwd=3)
# calculating AUC
auc <- performance(pred,"auc")
# now converting S4 class to vector
auc <- unlist(slot(auc, "y.values"))
# adding min and max ROC AUC to the center of the plot
minauc<-min(round(auc, digits = 2))
maxauc<-max(round(auc, digits = 2))
minauct <- paste(c("min(AUC)  = "),minauc,sep="")
maxauct <- paste(c("max(AUC) = "),maxauc,sep="")
legend(0.3,0.6,c(minauct,maxauct,"\n"),border="white",cex=1.7,box.col = "white")
#


  • 1
Мне понравилась вот эта реализация

http://web.expasy.org/pROC/

вот пример на реальных данных из форума медстатистики http://forum.disser.ru/index.php?showtopic=2909&view=findpost&p=12550

Edited at 2012-01-15 09:26 (UTC)

спасибо, совсем забыл об этой реализации.

спасибо за интересную тему. ROC использовал в SPSS, в R пока не приходилось пробовать

реализация p2004r - тоже очень достойная!

имелось ввиду pROC - упомянутая p2004r

Ну, Сергей вообще аналитик Божьей милостью

  • 1