Skip to contents

Compute the points of one or more ROC curves from true labels and predicted probabilities, returning tidy (class, fpr, tpr, auc) rows. The rows serve any consumer of the curve data, such as a client that renders the curve.

Usage

roc_curve(true_labels, predicted_prob, max_points = NULL)

Arguments

true_labels

Factor: True outcome labels.

predicted_prob

Numeric vector or matrix [0, 1]: Predicted probabilities for the positive class (second level of true_labels), as a vector or a one-column matrix. For multiclass, a matrix with exactly one column per class, in factor-level order (rtemis's convention); the columns are labeled with the factor levels regardless of any names on the input.

max_points

Optional Integer [2, Inf): Cap on the number of vertices per curve. NULL keeps full resolution.

Value

data.frame with columns class, fpr, tpr, auc (the AUC is constant within a class group, repeated per vertex). Zero rows when no curve is defined.

Details

Binary problems yield a single curve for the positive class (the second level of true_labels, rtemis convention); multiclass problems yield one one-vs-rest curve per class. Points are ordered along the curve; pass max_points to down-sample very long curves (one vertex per distinct score) to a compact, smooth line.

Author

EDG

Examples

true_labels <- factor(c("A", "B", "A", "A", "B", "A", "B", "B", "A", "B"))
predicted_prob <- c(0.1, 0.4, 0.35, 0.8, 0.65, 0.2, 0.9, 0.55, 0.3, 0.7)
roc_curve(true_labels, predicted_prob)
#>    class fpr tpr  auc
#> 1      B 0.0 0.0 0.84
#> 2      B 0.0 0.2 0.84
#> 3      B 0.2 0.2 0.84
#> 4      B 0.2 0.4 0.84
#> 5      B 0.2 0.6 0.84
#> 6      B 0.2 0.8 0.84
#> 7      B 0.2 1.0 0.84
#> 8      B 0.4 1.0 0.84
#> 9      B 0.6 1.0 0.84
#> 10     B 0.8 1.0 0.84
#> 11     B 1.0 1.0 0.84