Learn R Programming

cutpointr (version 1.1.2)

metric_constrain: Metrics that are constrained by another metric

Description

For example, calculate sensitivity where a lower bound (minimal desired value) for specificty can be defined. All returned metric values for cutpoints that lead to values of the constraining metric below the specified minimum will be zero. The inputs must be vectors of equal length.

Usage

metric_constrain(
  tp,
  fp,
  tn,
  fn,
  main_metric = sensitivity,
  constrain_metric = specificity,
  min_constrain = 0.5,
  suffix = "_constrain",
  ...
)

sens_constrain( tp, fp, tn, fn, constrain_metric = specificity, min_constrain = 0.5, ... )

spec_constrain( tp, fp, tn, fn, constrain_metric = sensitivity, min_constrain = 0.5, ... )

acc_constrain( tp, fp, tn, fn, constrain_metric = sensitivity, min_constrain = 0.5, ... )

Arguments

tp

(numeric) number of true positives.

fp

(numeric) number of false positives.

tn

(numeric) number of true negatives.

fn

(numeric) number of false negatives.

main_metric

Metric to be optimized.

constrain_metric

Metric for constraint.

min_constrain

Minimum desired value of constrain_metric.

suffix

Character string to be added to the name of main_metric.

...

for capturing additional arguments passed by method.

See Also

Other metric functions: F1_score(), Jaccard(), abs_d_ppv_npv(), abs_d_sens_spec(), accuracy(), cohens_kappa(), cutpoint(), false_omission_rate(), misclassification_cost(), npv(), odds_ratio(), p_chisquared(), plr(), ppv(), precision(), prod_ppv_npv(), prod_sens_spec(), recall(), risk_ratio(), roc01(), sensitivity(), specificity(), sum_ppv_npv(), sum_sens_spec(), total_utility(), tpr(), tp(), youden()

Examples

Run this code
# NOT RUN {
## Maximum sensitivity when Positive Predictive Value (PPV) is at least 75%
library(dplyr)
library(purrr)
library(cutpointr)
cp <- cutpointr(data = suicide, x = dsi, class = suicide,
method = maximize_metric,
metric = sens_constrain,
constrain_metric = ppv,
min_constrain = 0.75)
## All metric values (m) where PPV < 0.75 are zero
plot_metric(cp)
cp$roc_curve
## We can confirm that PPV is indeed >= 0.75
cp %>%
    add_metric(list(ppv))
## We can also do so for the complete ROC curve(s)
cp %>%
    pull(roc_curve) %>%
    map(~ add_metric(., list(sensitivity, ppv)))

## Use the metric_constrain function for a combination of any two metrics
## Estimate optimal cutpoint for precision given a recall of at least 70%
cp <- cutpointr(data = suicide, x = dsi, class = suicide,
                subgroup = gender,
                method = maximize_metric,
                metric = metric_constrain,
                main_metric = precision,
                suffix = "_constrained",
                constrain_metric = recall,
                min_constrain = 0.70)
## All metric values (m) where recall < 0.7 are zero
plot_metric(cp)
## We can confirm that recall is indeed >= 0.70 and that precision_constrain
## is identical to precision for the estimated cutpoint
cp %>%
    add_metric(list(recall, precision))
## We can also do so for the complete ROC curve(s)
cp %>%
    pull(roc_curve) %>%
    map(~ add_metric(., list(recall, precision)))
# }

Run the code above in your browser using DataLab