Expasy logo


Due to maintenance work, this service will be unavailable on Monday between 06:00 until 06:30 CEST. Apologies for the inconvenience.

pROC: display and analyze ROC curves in R and S+

pROC is a set of tools to visualize, smooth and compare 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.
Screenshots montage
More screenshots and examples…

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: 10.1186/1471-2105-12-77.
Xavier Robin, Natacha Turck, Alexandre Hainard, Natalia Tiberti, Frédérique Lisacek, Jean-Charles Sanchez and Markus Müller
Xavier Robin
Find us on:
RSS Facebook Twitter Google+
LinkedIn GitHub

pROC comes in two flavours: a command line version for the R statistical software environment, and a graphical user interface (GUI) for S+.



This version is intended to be employed through the R command line.


There is no need to download the package. The installation can be done in one command directly from R:

The package must then be loaded with:

To get help, enter the following in the R prompt:


Any of the following commands will update pROC if possible:
update.packages() # will install updates to all your packages

This version is intended to be employed with the TIBCO Spotfire S+ program. It has a graphical user interface (GUI) for S+ 8.2 32bits for Windows, but the command line is also available.

Deprecation warning

The S+ version is not developed any longer (due to diverging code bases and apparent drop of support of S+ by TIBCO) but still contains the latest main features of pROC (especially power tests). The GUI is available only on the 32 bits version of S+ 8.2 for Windows (no Linux / Mac / 64 bits support).


In the S+ command prompt (in Windows, you can open it from S+ Window menu, Commands Window item), type:

Save the installation file (binary for Windows, source for Linux) in your working directory and then type:
install.packages("pROC_1.4.9_S_WIN386.zip") # Or for the source version:

After loading from the File menu, item Load Library…, a new ROC curves menu is available in the Statistics menu. You can also load it with the command

More details about installation…


Repeat the installation steps described above, except the install.pkgutils() command.

More details about update…


1.7.2 (2014-04-05) (R, release notes)
Fixed bug where ci.coords with x="best" would fail if one or more resampled ROC curve had multiple "best" thresholds (thanks Berend Terluin for the report)
Fixed bug in ci.coords: passing more than one value in x now works
Fixed typo in documentation of direction argument to roc (thanks Le Kang for the report)
Add a warning when computing statistics of ROC curve with AUC = 1
Require latest version of Rcpp to avoid weird errors (thanks Tom Liptrot for the report)
1.7.1 (2014-02-20) (R, release notes)
Close SOCK cluster on Windows with parallel=TRUE
Fixed really use algorithm 1 when microbenchmark fails
1.7 (2014-02-19) (R, release notes)
Faster algorithm for DeLong roc.test, power.roc.test, ci.auc, var and cov function (no large matrix allocation)
Handling Math and Operations correctly on auc and ci objects (see ?groupGeneric.pROC)
The formula for roc.formula can now provide several predictors and a list of ROC curves will be returned
Fixed documentation of ci.coords with examples
Fixed binormal AUC computed with triangulation despite the claim in the documentation
Fixed unstated requirement on Rcpp >= 0.10.5 (2013-12-28) (R, release notes)
Removed erroneous error message displayed when predictors and responses were not vectors.
1.6 (2013-12-26) (R, release notes)
New power.roc.test function for sample size and power computations.
New cov and var functions supports new "obuchowski" method.
New ci.coords function to compute CI of arbitrary coords.
coords accepts new ret value "1-accuracy".
Introducing various algorithms to compute sensitivities and specificites, with a more vectorized code or Rcpp. See 'algorithm' in ?roc for more details on the trade-offs of the different methods.
Faster algorithm for DeLong roc.test, ci, var and cov function (thanks Kazuki Yoshida).
are.paired now also checks for identical levels.
Fixed a warning generated in the examples.
Fixed several bugs related with smooth.roc curves.
Additional input data sanity checks.
Now requires R ≥ 2.13 (in fact, since 1.5.1, thanks Emmanuel Curis for the report).
Progress bars now defaults to text on Macs where tcltk seems broken (thanks Gerard Smits for the report).
1.5.4 (2012-08-31) (R)
Running less smooth.roc examples with logcondens because they take too much time (requested by Uwe Ligges).
1.5.3 (2011-08-31) (R, release notes)
AUC specification was lost when roc.test, cov or var was passed an auc' object.
Correct computation of "accuracy" in coords (thanks to Kosuke Yoshihara for the report).
1.5.1 (2011-03-09) (R, release notes)
Faster loading of the package (thanks to Prof Brian Ripley and Glenn Lawyer for the report).
1.5 (2011-12-12) (R, release notes)
New cov and var functions.
coords accepts new ret values: "accuracy", "tn", "tp", "fn", "fp", "npv", "ppv", "1-specificity", "1-sensitivity", "1-npv", "1-ppv", "npe" and "ppe".
New legacy.axes argument to plot 1-specificity rather than specificity.
New axes argument to turn off the plotting of the axis.
New logcondens and logcondens.smooth (Univariate Log-Concave Density Estimation) smoothing methods.
New function has.partial.auc to determine if an AUC is full or partial.
New argument drop for coords.
auc and multiclass.auc objects now also have secondary class numeric.
Updated load call.
Delong's CI reversed in ROC curves with direction=">".
Delong's CI AUC returned values > 1 or < 0 in some rare cases.
Minor improvements in documentation.
1.4.9 (2014-01-04) (S+ only, release notes)
This is the last version of pROC for S+. It introduces some features of pROC 1.5 (covariance and variance functions, some bugfixes) and 1.6 (power tests) for R into S+, and will not be maintained any more.
Fixed custom output report.
New power.roc.test function for sample size and power computations.
New cov and var functions.
auc objects now also have secondary class numeric.
Delong's CI reversed in ROC curves with direction=">"
Delong's CI AUC returned values > 1 or < 0 in some rare cases
Delong's CI AUC returned NA values when AUC was 1. Now reporting 1-1 interval.
Minor improvements in documentation.
1.4.4 (2011-08-10) (R, S+, release notes)
Fixed alternative for one-tailed tests.
Removed COPYING file to fix a warning in r-devel.
1.4.3 (2011-03-18) (R, S+, release notes)
Updated citation.
1.4.2 (2011-03-03) (R, S+, release notes)
Fixed bootstrap roc.test generating NAs when smooth.rocs were used with reuse.auc=FALSE (thanks to Buddy for the report).
Documented a warning that was missing in roc.test.
Updated citation.
1.4.1 (2011-01-27) (R, S+, release notes)
Venkatraman's test for unpaired ROC curves.
1.4 (2011-01-21) (R, S+, release notes)
'smooth' does not apply on ordered factors anymore.
Multi-class AUC support (R only).
Can choose how best thresold is determined (best.method and best.weights in coords and print.thres.best.method and print.thres.best.weights in plot.roc).
Minor fixes in documentation (R and S+) and citation (S+ only).
print now prints the response instead of response and more informative data in htests.
Bootstrap with ci.auc consumes much less memory.
Unpaired bootstrap and DeLong's test.
Specificity and sensitivity tests (in roc.test).
1.3.2 (2010-08-24) (R, S+, release notes)
print.auc printed incorrect CI in plot.roc (thanks to Alexander B. Leichtle for the report).
Failed to detect local maximas in coords when 2 or less points were selected.
Don't consider ROC extremities (+-Inf at 1.0/0.0 SE<->SP) as local maximas.
1.3.1 (2010-08-18) (R, release notes)
Sensitivity and specificity were inverted in coords when results were reported as list.
Faster checks with \dontrun{} in roc.test.
1.3 (2010-08-13) (R, S+, release notes)
CI is not re-computed by default in smooth.roc. You can still turn it on with reuse.ci=TRUE.
New function are.paired.
Local maximas could be incorrectly detected in coords (and plot.roc) with predictors containing more than 2 levels.
New method venkatraman for roc.test.
MASS and tcltk packages are now only suggested instead of required (R only).
... not passed correctly in plot.ci.se with type="bars" resulting in an error (R only).
1.2.1 (2010-05-11) (R, S+, release notes)
Handle method arguments for smooth.roc and ci.auc separately in roc.default (R-only).
Added auc.polygon.* and max.auc.polygon.* arguments for polygon in plot.roc.
1.2 (2010-05-09) (R, release notes)
Added DeLong method in ci.auc (with a GUI, S+ only).
Return value of ci.auc does not contain an "aucs" item anymore.
Put most examples with bootstrap within \dontrun{} blocks for faster (but less useful) checks execution.
1.1 (2010-05-05) (R, S+, release notes)
Added lines.roc functions for ROC.
Added type argument for both lines.roc and plot.roc.
Added print.auc.col argument to plot.roc.
Fixed a warning in roc.test.default when the class of predictor1 had several elements.
Fixed an encoding failure during the checks on MacOS X (R only).
1.0.1 (2010-04-28) (R, release notes)
Reduced examples execution time. Added low boot.n in the slowest examples and reuse.auc and reuse.ci arguments in smooth.roc.roc.
1.0 (2010-04-27) (R, S+, release notes)
First public release.

Known bugs

Please report any bug you may encounter to Xavier Robin.