Learn R Programming

pROC (version 1.6.0.1)

pROC-package: pROC

Description

Tools for visualizing, smoothing and comparing receiver operating characteristic (ROC curves). (Partial) area under the curve (AUC) can be compared with statistical tests based on U-statistics or bootstrap. Confidence intervals can be computed for (p)AUC or ROC curves. Sample size / power computation for one or two ROC curves are available.

In S+, the package comes with a graphical user interface.

Arguments

encoding

UTF-8

Citation

If you use pROC in published research, please cite the following paper:

Xavier Robin, Natacha Turck, Alexandre Hainard, Natalia Tiberti, Frédérique Lisacek, Jean-Charles Sanchez and Markus Müller (2011). ``pROC: an open-source package for R and S+ to analyze and compare ROC curves''. BMC Bioinformatics, 12, p. 77. DOI: http://dx.doi.org/10.1186/1471-2105-12-77{10.1186/1471-2105-12-77}

Type citation("pROC") for a BibTeX entry.

The authors would be glad to hear how pROC is employed. You are kindly encouraged to notify Xavier Robin about any work you publish.

Abbreviations

The following abbreviations are employed extensively in this package:
  • ROC: receiver operating characteristic
  • AUC: area under the ROC curve
  • pAUC: partial area under the ROC curve
  • CI: confidence interval
  • SP: specificity
  • SE: sensitivity

Functions

ll{ roc Build a ROC curve are.paired Dertermine if two ROC curves are paired auc Compute the area under the ROC curve ci Compute confidence intervals of a ROC curve ci.auc Compute the CI of the AUC ci.coords Compute the CI of arbitrary coordinates ci.se Compute the CI of sensitivities at given specificities ci.sp Compute the CI of specificities at given sensitivities ci.thresholds Compute the CI of specificity and sensitivity of thresholds coords Coordinates of the ROC curve cov Covariance between two AUCs has.partial.auc Determine if the ROC curve have a partial AUC lines.roc Add a ROC line to a ROC plot plot.ci Plot CIs plot Plot a ROC curve power.roc.test Sample size and power computation print Print a ROC curve object roc.test Compare the AUC of two ROC curves smooth Smooth a ROC curve var Variance of the AUC }

Dataset

This package comes with a dataset of 141 patients with aneurysmal subarachnoid hemorrhage: aSAH.

Installing and using

To install this package, make sure you are connected to the internet and issue the following command in the R prompt: install.packages("pROC") To load the package in R: library(pROC)

Handling large datasets

Since version 1.6, pROC is able to accomodate large datasets, with an overhead growing linearly as a function of the number of observations.

Bootstrap operations (in ci, cov, power.roc.test, roc.test and var functions), though slow, will also run as O(n). However all operations depending on DeLong's algorithm create a matrix of size number of controls x number of cases, which is memory-comsuming. If you plan to run one of these function on a ROC curve with more than 10000 observations per group, consider using method="bootstrap" rather than the default method="delong".

Bootstrap

All the bootstrap operations for significance testing and confidence interval computation are performed with non-parametric stratified or non-stratified resampling (according to the stratified argument) and with the percentile method, as described in Carpenter and Bithell (2000) sections 2.1 and 3.3.

Stratification of bootstrap can be controlled with boot.stratified. In stratified bootstrap (the default), each replicate contains the same number of cases and controls than the original sample. Stratification is especially useful if one group has only little observations, or if groups are not balanced.

The number of bootstrap replicates is controlled by boot.n. Higher numbers will give a more precise estimate of the significance tests and confidence intervals but take more time to compute. 2000 is recommanded by Carpenter and Bithell (2000) for confidence intervals. In our experience this is sufficient for a good estimation of the first significant digit only, so we recommend the use of 10000 bootstrap replicates to obtain a good estimate of the second significant digit whenever possible.

Progress bars{ A progressbar shows the progress of bootstrap operations. It is handled by the plyr package (Wickham, 2011), and is created by the progress_* family of functions. Sensible defaults are guessed during the package loading:

The default can be changed with the option pROCProgress. The option must be a list with a name item setting the type of progress bar (none, win, tk or text). Optional items of the list are width, char and style, corresponding to the arguments to the underlying progressbar functions. For example, to force a text progress bar: options(pROCProgress = list(name = "text", width = NA, char = "=", style = 3)

To inhibit the progress bars completely: options(pROCProgress = list(name = "none")) }

Details

The basic unit of the pROC package is the roc function. It will build a ROC curve, smooth it if requested (if smooth=TRUE), compute the AUC (if auc=TRUE), the confidence interval (CI) if requested (if ci=TRUE) and plot the curve if requested (if plot=TRUE).

The roc function will call smooth.roc, auc, ci and plot as necessary. See these individual functions for the arguments that can be passed to them through roc. These function can be called separately.

Two paired (that is roc objects with the same response) or unpaired (with different response) ROC curves can be compared with the roc.test function. Sample size and power computations can be performed with the power.roc.test function.

References

James Carpenter and John Bithell (2000) ``Bootstrap condence intervals: when, which, what? A practical guide for medical statisticians''. Statistics in Medicine 19, 1141--1164. DOI: http://dx.doi.org/10.1002/(SICI)1097-0258(20000515)19:9<1141::aid-sim479>3.0.CO;2-F{10.1002/(SICI)1097-0258(20000515)19:9<1141::aid-sim479>3.0.CO;2-F}.

Tom Fawcett (2006) ``An introduction to ROC analysis''. Pattern Recognition Letters 27, 861--874. DOI: http://dx.doi.org/10.1016/j.patrec.2005.10.010{10.1016/j.patrec.2005.10.010}. Xavier Robin, Natacha Turck, Alexandre Hainard, et al. (2011) ``pROC: an open-source package for R and S+ to analyze and compare ROC curves''. BMC Bioinformatics, 7, 77. DOI: http://dx.doi.org/10.1186/1471-2105-12-77{10.1186/1471-2105-12-77}. Hadley Wickham (2011) ``The Split-Apply-Combine Strategy for Data Analysis''. Journal of Statistical Software, 40, 1--29. URL: http://www.jstatsoft.org/v40/i01{www.jstatsoft.org/v40/i01}.

See Also

CRAN packages ROCR, verification or Bioconductor's roc for ROC curves.

CRAN packages plyr, MASS and logcondens employed in this package.

Examples

Run this code
data(aSAH)

# Build a ROC object and compute the AUC
roc(aSAH$outcome, aSAH$s100b)
roc(outcome ~ s100b, aSAH)

# Smooth ROC curve
roc(outcome ~ s100b, aSAH, smooth=TRUE)

# more options, CI and plotting
roc1 <- 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, show.thres=TRUE)

# Add to an existing plot. Beware of 'percent' specification!
roc2 <- roc(aSAH$outcome, aSAH$wfns,
            plot=TRUE, add=TRUE, percent=roc1$percent)

## Coordinates of the curve ##
coords(roc1, "best", ret=c("threshold", "specificity", "1-npv"))
coords(roc2, "local maximas", ret=c("threshold", "sens", "spec", "ppv", "npv"))

## Confidence intervals ##

# CI of the AUC
ci(roc2)

# CI of the curve
sens.ci <- ci.se(roc1, specificities=seq(0, 100, 5))
plot(sens.ci, type="shape", col="lightblue")
plot(sens.ci, type="bars")

# need to re-add roc2 over the shape
plot(roc2, add=TRUE)

# CI of thresholds
plot(ci.thresholds(roc2))


## Comparisons ##

# Test on the whole AUC
roc.test(roc1, roc2, reuse.auc=FALSE)

# Test on a portion of the whole AUC
roc.test(roc1, roc2, reuse.auc=FALSE, partial.auc=c(100, 90),
         partial.auc.focus="se", partial.auc.correct=TRUE)

# With modified bootstrap parameters
roc.test(roc1, roc2, reuse.auc=FALSE, partial.auc=c(100, 90),
         partial.auc.correct=TRUE, boot.n=1000, boot.stratified=FALSE)


## Sample size ##

# Two ROC curves
power.roc.test(roc1, roc2, reuse.auc=FALSE)
power.roc.test(roc1, roc2, power=0.9, reuse.auc=FALSE)

# One ROC curve
power.roc.test(auc=0.8, ncases=41, ncontrols=72)
power.roc.test(auc=0.8, power=0.9)
power.roc.test(auc=0.8, ncases=41, ncontrols=72, sig.level=0.01)
power.roc.test(ncases=41, ncontrols=72, power=0.9)

Run the code above in your browser using DataLab