3
Ich habe versucht, ROC-Kurve von der plot.roc
Funktion aus pRoc
Paket mit ggplot2
zu reproduzieren.ggplot2: Verwendung von scale_x_reverse auf ROC-Plot
library(mlbench)
library(caret)
data(Sonar)
set.seed(998)
fitControl <- trainControl(method = "repeatedcv",
number = 10,
repeats = 10,
## Estimate class probabilities
classProbs = TRUE,
## Evaluate performance using
## the following function
summaryFunction = twoClassSummary)
gbmGrid <- expand.grid(interaction.depth = c(1, 5, 9),
n.trees = (1:30)*50,
shrinkage = 0.1,
n.minobsinnode = 20)
inTraining <- createDataPartition(Sonar$Class, p = .75, list = FALSE)
training <- Sonar[ inTraining,]
testing <- Sonar[-inTraining,]
set.seed(825)
gbmFit <- train(Class ~ ., data = training,
method = "gbm",
trControl = fitControl,
verbose = FALSE,
tuneGrid = gbmGrid,
## Specify which metric to optimize
metric = "ROC")
gbmFit
probs = predict(gbmFit, newdata = testing, type = "prob")
roc = roc(predictor = probs$M,
response = testing$Class,
levels = c('M','R'),
percent = TRUE)
plot.roc(roc, print.auc = TRUE, col='red')
df = data.frame(Specificity=roc$specificities, Sensitivity=roc$sensitivities)
ggplot(data = df, aes(x = Specificity, y = Sensitivity))+
geom_step(color='red', size=2, direction = "hv")+
scale_x_reverse()+
geom_abline(intercept = 100, slope = 1, color='grey')+
annotate("text", x = 30, y = 20, label = paste0('AUC: ', round(roc$auc,1), '%'), size = 8)+
ylab('Sensitivity (%)')+
xlab('Specificity (%)')
Während die ggplot2
produziert:
scale_x_reverse()
scheint das Problem zu sein, gibt es eine andere Möglichkeit, die X-Achse umgekehrt oder dass Handlung zu korrigieren ?
Dank Rote Beete, es funktioniert gut! – Mesmer
Nice one, aber das 'geom_step' Problem ist wahrscheinlich ein Fehler mit diesem Geom. –
@MikeWise, wenn es ein Fehler ist, erscheint es nur mit der Kombination von 'geom_step' und' scale_x_reverse'. Sie können meinen Code ohne die "scale_x_reverse" versuchen und es gibt kein grafisches Problem. – Mesmer