oc_youden_kernel {cutpointr}R Documentation

Determine an optimal cutpoint maximizing the Youden-Index based on kernel smoothed densities


Instead of searching for an optimal cutpoint to maximize (sensitivity + specificity - 1) on the ROC curve, this function first smoothes the empirical distributions of x per class. The smoothing is done using a binned kernel density estimate. The bandwidth is automatically selected using the direct plug-in method.


oc_youden_kernel(data, x, class, pos_class, neg_class, direction, ...)



A data frame or tibble in which the columns that are given in x and class can be found.


(character) The variable name to be used for classification, e.g. predictions or test values.


(character) The variable name indicating class membership.


The value of class that indicates the positive class.


The value of class that indicates the negative class.


(character) Use ">=" or "<=" to select whether an x value >= or <= the cutoff predicts the positive class.


To capture further arguments that are always passed to the method function by cutpointr. The cutpointr function passes data, x, class, metric_func, direction, pos_class and neg_class to the method function.


The functions for calculating the kernel density estimate and the bandwidth are both from KernSmooth with default parameters, except for the bandwidth selection, which uses the standard deviation as scale estimate.

The cutpoint is estimated as the cutpoint that maximizes the Youden-Index given by J = max_c {F_N(c) - G_N(c) } where J and G are the smoothed distribution functions.


Fluss, R., Faraggi, D., & Reiser, B. (2005). Estimation of the Youden Index and its associated cutoff point. Biometrical Journal, 47(4), 458–472.

Matt Wand (2015). KernSmooth: Functions for Kernel Smoothing Supporting Wand & Jones (1995). R package version 2.23-15. https://CRAN.R-project.org/package=KernSmooth

See Also

Other method functions: maximize_boot_metric(), maximize_gam_metric(), maximize_loess_metric(), maximize_metric(), maximize_spline_metric(), oc_manual(), oc_mean(), oc_median(), oc_youden_normal()


if (require(KernSmooth)) {
  oc_youden_kernel(suicide, "dsi", "suicide", oc_metric = "Youden",
  pos_class = "yes", neg_class = "no", direction = ">=")
  ## Within cutpointr
  cutpointr(suicide, dsi, suicide, method = oc_youden_kernel)

[Package cutpointr version 1.1.1 Index]