xrobin / pROC

Display and analyze ROC curves in R and S+
https://cran.r-project.org/web/packages/pROC/
GNU General Public License v3.0
121 stars 31 forks source link

Refactor all-in-one plot calls #70

Open xrobin opened 4 years ago

xrobin commented 4 years ago

The all-in-one calls are difficult to maintain and to test. For instance all the *.formula methods are a mess. Functions such as ci or auc should not create ROC curves, and the ROC function shouldn't plot and calculate CI.

For instance, replace the following example in ?pROC:

roc(aSAH$outcome,
    aSAH$s100b, percent=TRUE,
    # arguments for auc
    partial.auc=c(100, 90), partial.auc.correct=TRUE,
    partial.auc.focus="sens",
    # arguments for ci
    ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE,
    # arguments for plot
    plot=TRUE, auc.polygon=TRUE, max.auc.polygon=TRUE, grid=TRUE,
    print.auc=TRUE, print.thres= "best")

By a more modular call such as:

roc.s100b <- roc(aSAH$outcome, aSAH$s100b, percent = TRUE)
auc.s100b <- auc(roc.s100b, partial.auc=c(100, 90), partial.auc.correct=TRUE, partial.auc.focus="sens")
ci.s100b <- ci(auc.s100b, boot.n=100, ci.alpha=0.9, stratified=FALSE)

plot(roc.s100b, grid=TRUE, show.thres = TRUE)
plot(auc.s100b, auc.polygon = TRUE, max.auc.polygon = TRUE, add = TRUE)
plot(ci.s100b, add = TRUE)

This will require some refactoring to add plot.auc and a plot.ci.auc; and probably several more for consistency.

In the long term, consider dropping the partial.auc arguments in ROC and have them only in auc.