2017-06-28 4 views
1

J'essaie de tracer une courbe ROC avec écart-type en utilisant le paquet ROCR.ROCR ne trace pas les erreurs-types

J'utilise le fichier quality.csv pour un exemple reproductible trouve ici - https://courses.edx.org/courses/course-v1:MITx+15.071x_3+1T2016/courseware/5893e4c5afb74898b8e7d9773e918208/030bf0a7275744f4a3f6f74b95169c04/

Mon code est le suivant:

data <- fread("quality.csv") 
glimpse(data) 
set.seed(88) 
split <- sample.split(data$PoorCare, SplitRatio = 0.75) 
data_train <- data[split, ] 
data_test <- data[!split, ] 

#-------------------------------------------------------------------------- 
# FITTING A MODEL 
#-------------------------------------------------------------------------- 
model <- glm(PoorCare ~ OfficeVisits + Narcotics , data_train, family = "binomial") 

#-------------------------------------------------------------------------- 
# MAKE PREDICTIONS ON THE TEST DATASET 
#-------------------------------------------------------------------------- 
predict_Test <- predict(model, type = "response", newdata = data_test) 

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
# THE ROCR PACKAGE 
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 

########################################################################### 
# CREATE A PERFORMANCE OBJECT 
########################################################################### 
prediction_obj <- prediction(predict_Test, data_test$PoorCare) 

#========================================================================== 
# CALCULATE AUC 
#========================================================================== 
auc = as.numeric(performance(prediction_obj , "auc")@y.values) 
# 0.7994792 

#========================================================================== 
# PLOT ROC CURVE WITH ERROR ESTIMATES 
#========================================================================== 
plot(perf, colorize=T, avg='threshold', spread.estimate='stddev', spread.scale = 2) 

Ce que je reçois est une courbe ROC, mais sans erreurs standard:

enter image description here

Pouvez-vous indiquer ce qui ne va pas avec mon code et comment le corriger?

Vos conseils seront appréciés.

Répondre

0

Les écarts-types et les IC de la courbe ROC peuvent être tracés si un certain nombre de prédictions répétées (validation croisée ou bootstrap) ont été effectuées.
Tenir compte par exemple 100 scissions répétées de données dans la formation et d'essais des ensembles avec glm estimation et de prédiction:

library(dplyr) 
library(data.table) 
library(caTools) 
library(ROCR) 
data <- fread("quality.csv") 
glimpse(data) 

set.seed(1) 
reps <- 100 
predTests <- vector(mode="list", reps) 
Labels <- vector(mode="list", reps) 
for (k in 1:reps) { 
     splitk <- sample.split(data$PoorCare, SplitRatio = 0.75) 
     data_traink <- data[splitk, ] 
     data_testk <- data[!splitk, ] 
     model <- glm(PoorCare ~ OfficeVisits + Narcotics , 
       data_traink, family = "binomial") 
     predTests[[k]] <- predict(model, type = "response", newdata = data_testk) 
     Labels[[k]] <- data_testk$PoorCare 
} 

calculer maintenant prediction et performance des objets en utilisant les listes predTests et Labels:

predObjs <- prediction(predTests, Labels) 
Perfs <- performance(predObjs , "tpr", "fpr") 

et terrain l'ensemble des courbes ROC avec valeurs moyennes et intervalles de confiance:

plot(Perfs, col="grey82", lty=3) 
plot(Perfs, lwd=3, avg="threshold", spread.estimate="stddev", add=TRUE, colorize=TRUE) 

enter image description here