2016-05-25 18 views
3

ggplot2pRocパッケージのplot.roc機能からROC曲線を再現しようとしました。ggplot2:ROCプロットのscale_x_reverseの使用

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 (%)') 

plot.rocが生成: plot.roc

ggplot2が生成するが: ggplot2

scale_x_reverse()が問題であると思われる、X軸方向を逆転させるか、そのプロットを修正する他の方法があります?

答えて

3

あなたはgeom_stepの代わりにgeom_pathを使用することができます。

ggplot(data = df, aes(x = Specificity, y = Sensitivity))+ 
    geom_path(colour = 'red', size = 2)+ 
    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 (%)') 

enter image description here

+1

ありがとうビート、それだけで正常に動作します! – Mesmer

+1

いいですが、 'geom_step'の問題はおそらくそのgeomのバグです。 –

+0

@MikeWise、バグの場合は、 'geom_step'と' scale_x_reverse'の組み合わせでのみ表示されます。 'scale_x_reverse'なしで自分のコードを試すことができ、グラフィカルな問題はありません。 – Mesmer

関連する問題