R: Receiver operator curve

roc_curve {yardstick} | R Documentation

## Receiver operator curve

### Description

`roc_curve()` constructs the full ROC curve and returns a tibble. See `roc_auc()` for the area under the ROC curve.

### Usage

    roc_curve(data, ...)

    ## S3 method for class 'data.frame'
    roc_curve(
      data,
      truth,
      ...,
      options = list(),
      na_rm = TRUE,
      event_level = yardstick_event_level()
    )

    autoplot.roc_df(object, ...)

### Arguments

`data` | A `data.frame` containing the `truth` and `estimate` columns.
`...` | A set of unquoted column names or one or more `dplyr` selector functions to choose which variables contain the class probabilities. If `truth` is binary, only 1 column should be selected. Otherwise, there should be as many columns as factor levels of `truth`.
`truth` | The column identifier for the true class results (that is a `factor`). This should be an unquoted column name although this argument is passed by expression and supports quasiquotation (you can unquote column names). For `_vec()` functions, a `factor` vector.
`options` | A `list` of named options to pass to `pROC::roc()` such as `smooth`. These options should not include `response`, `predictor`, `levels`, `quiet`, or `direction`.
`na_rm` | A `logical` value indicating whether `NA` values should be stripped before the computation proceeds.
`event_level` | A single string. Either `"first"` or `"second"` to specify which level of `truth` to consider as the "event". This argument is only applicable when `estimator = "binary"`. The default uses an internal helper that generally defaults to `"first"`, however, if the deprecated global option `yardstick.event_first` is set, that will be used instead with a warning.
`object` | The `roc_df` data frame returned from `roc_curve()`.

### Details

`roc_curve()` computes the sensitivity at every unique value of the probability column (in addition to infinity and minus infinity). If a smooth ROC curve was produced, the unique observed values of the specificity are used to create the curve points. In either case, this may not be efficient for large data sets.

There is a `ggplot2::autoplot()` method for quickly visualizing the curve. This works for binary and multiclass output, and also works with grouped data (i.e. from resamples). See the examples.

### Value

A tibble with class `roc_df` or `roc_grouped_df` having columns `specificity` and `sensitivity`.

If an ordinary (i.e. non-smoothed) curve is used, there is also a column for `.threshold`.

### Multiclass

If a multiclass `truth` column is provided, a one-vs-all approach will be taken to calculate multiple curves, one per level. In this case, there will be an additional column, `.level`, identifying the "one" column in the one-vs-all calculation.

### Relevant Level

There is no common convention on which factor level should automatically be considered the "event" or "positive" result when computing binary classification metrics. In `yardstick`, the default is to use the first level. To alter this, change the argument `event_level` to `"second"` to consider the last level of the factor the level of interest. For multiclass extensions involving one-vs-all comparisons (such as macro averaging), this option is ignored and the "one" level is always the relevant result.

### Author(s)

Max Kuhn

### See Also

Compute the area under the ROC curve with `roc_auc()`.

Other curve metrics: `gain_curve()`, `lift_curve()`, `pr_curve()`

### Examples

    # ---------------------------------------------------------------------------
    # Two class example

    # `truth` is a 2 level factor. The first level is `"Class1"`, which is the
    # "event of interest" by default in yardstick. See the Relevant Level
    # section above.
    data(two_class_example)

    # Binary metrics using class probabilities take a factor `truth` column,
    # and a single class probability column containing the probabilities of
    # the event of interest. Here, since `"Class1"` is the first level of
    # `"truth"`, it is the event of interest and we pass in probabilities for it.
    roc_curve(two_class_example, truth, Class1)

    # ---------------------------------------------------------------------------
    # `autoplot()`

    # Visualize the curve using ggplot2 manually
    library(ggplot2)
    library(dplyr)
    roc_curve(two_class_example, truth, Class1) %>%
      ggplot(aes(x = 1 - specificity, y = sensitivity)) +
      geom_path() +
      geom_abline(lty = 3) +
      coord_equal() +
      theme_bw()

    # Or use autoplot
    autoplot(roc_curve(two_class_example, truth, Class1))

    ## Not run:

    # Multiclass one-vs-all approach
    # One curve per level
    hpc_cv %>%
      filter(Resample == "Fold01") %>%
      roc_curve(obs, VF:L) %>%
      autoplot()

    # Same as above, but will all of the resamples
    hpc_cv %>%
      group_by(Resample) %>%
      roc_curve(obs, VF:L) %>%
      autoplot()

    ## End(Not run)

[Package yardstick version 0.0.8 Index]