2015-11-15 4 views
0

Я ищу для построения точки FPR и TPR на графике AUC для разных пороговых значений.Пользовательский AUC в R с разными порогами и двоичными предсказаниями

Например, если data$C2 - это мой кадр данных с столбцом истинного ответа (0 или 1), я хочу создать вектор с предсказанными значениями (0 или 1), когда data$C1 (другая колонка измерения) выше или ниже указанного порога. Вот функция, которую я попытался с пакетом ROCR.

fun <- function (data, col1, col2){ 

    perfc <- NULL #Create null vectors for prediction and performance 
    perfs <- NULL 
    temp <- NULL 

d <- seq(0.10,0.30,0.01) ##Various thresholds to be tested 

    for (i in length(d){ 

    temp <- ifelse(data[,col1] > d, 1 , 0) ##Create predicted responses 
    pred <- prediction(temp, data[,col2]) #Predict responses over true values 
    perf <- performance(pred, "tpr","fpr") #Store performance information 

    predc[i] <- pred #Do this i times for every d in the sequence 
    perfc[i] <- perf 

    preds <- prediction.class(predc, col2) #Combine to make prediction class 
    perfs <- performance.class(preds, "tpr","fpr") #Combine to make performance class 
} 

    plot(perfs) #Plot TPR against FPR 
} 

Является ли проблема, потому что temp вектор список и истинные метки из матрицы? Я неправильно применяю это для цикла?

Заранее благодарен!

Редактировать: Вот моя попытка сделать это вручную без пакета ROC.

for(t in seq(0.40,0.60,0.01)) #I want to do this for every t in the sequence 
{ 
    t <- t 
    TP <- 0 
    FP <- 0 
    p <- sum(data$C2==1, na.rm=TRUE) #Total number of true positives 
    n <- sum(data$C2==0, na.rm=TRUE) #Total number of true negatives 
    list <- data$C1 #Column to vector 
    test <- ifelse(list > t, 1, 0) #Make prediction vector 

for(i in 1:nrow(data)) 
    {if(test==1 & data$C2==1) 
     {TP <- TP + 1} #Count number of correct predictions 
    if(test==1 & data$C2==0) 
     {FP <- FP + 1} #Count number of false positives 
    } 
    plot(x=(FP/n),y=(TP/p)) #Plot every FP,TP pair 
} 

ответ

0

Надеюсь, что я правильно понимаю ваш вопрос, но я считаю, что по графику AUC вы имеете в виду кривую ROC. Кривая ROC уже учитывает разные пороговые значения для принятия этих классификационных решений. См. Это wikipedia page. Я нашел this picture особенно полезным.

Если выше верно, то все, что вам нужно сделать в вашем коде:

pred <- prediction(data[,col1], data[,col2]) 
perf <- performance(pred, "tpr","fpr") 
plot(perf) 

Если вы хотите, чтобы «добавить» другую кривую на этот сюжет, возможно, потому, что вы использовали другую классификацию техника (например, дерево решений вместо логистической регрессии. Затем с помощью plot(perf2,add=TRUE). Где perf2 создается в том же образом, как и perf. См documentation.

+0

есть в любом случае, чтобы ограничить или ввести определенные пороговые значения, которые я хочу, чтобы включить в кривой ROC Скажем t = 0,1 до t = 0,3 и увидеть полученную tpr, fpr, точность и т. Д. для каждого t? – user2324

+0

Как насчет графика в этой [галерее] (http://rocr.bioinf.mpi-sb.mpg.de/rocr_gallery.html)? –

 Смежные вопросы

  • Нет связанных вопросов^_^