R/tss.R

Defines functions tss.data.frame tss

Documented in tss tss.data.frame

#' TSS - True Skill Statistics
#'
#' The True Skills Statistic, which is defined as
#'
#' *sensitivity*+*specificity* +1
#'
#' This function is a wrapper around [yardstick::j_index()], another name for
#' the same quantity. Note that this function takes the classes as predicted by
#' the model without any calibration (i.e. making a split at 0.5 probability).
#' This is usually not the metric used for Species Distribution Models, where
#' the threshold is recalibrated to maximise TSS; for that purpose, use
#' [tss_max()].
#'
#' @param data Either a data.frame containing the columns specified by the truth
#'   and estimate arguments, or a table/matrix where the true class results
#'   should be in the columns of the table.
#' @param ... Not currently used.
#' @param 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.
#' @param estimate The column identifier for the predicted class results (that
#'   is also factor). As with truth this can be specified different ways but the
#'   primary method is to use an unquoted variable name. For _vec() functions, a
#'   factor vector.
#' @param estimator One of: "binary", "macro", "macro_weighted", or "micro" to
#'   specify the type of averaging to be done. "binary" is only relevant for the
#'   two class case. The other three are general methods for calculating
#'   multiclass metrics. The default will automatically choose "binary" or
#'   "macro" based on estimate.
#' @param na_rm A logical value indicating whether NA values should be stripped
#'   before the computation proceeds.
#' @param case_weights The optional column identifier for case weights. This
#'   should be an unquoted column name that evaluates to a numeric column in
#'   data. For _vec() functions, a numeric vector.
#' @param 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 is "first".
#' @returns A tibble with columns .metric, .estimator, and .estimate and 1 row
#'   of values. For grouped data frames, the number of rows returned will be the
#'   same as the number of groups.
#' @examples
#' # Two class
#' data("two_class_example")
#' tss(two_class_example, truth, predicted)
#' # Multiclass
#' library(dplyr)
#' data(hpc_cv)
#' # Groups are respected
#' hpc_cv %>%
#'   group_by(Resample) %>%
#'   tss(obs, pred)
#' @export
tss <- function(data, ...) {
  UseMethod("tss")
}
tss <- yardstick::new_class_metric(
  tss,
  direction = "maximize"
)

#' @rdname tss
#' @export
tss.data.frame <- function(data,
                           truth,
                           estimate,
                           estimator = NULL,
                           na_rm = TRUE,
                           case_weights = NULL,
                           event_level = "first",
                           ...) {
  class_metric_summarizer(
    name = "tss",
    fn = yardstick::j_index_vec,
    data = data,
    truth = !!rlang::enquo(truth),
    estimate = !!rlang::enquo(estimate),
    estimator = estimator,
    na_rm = na_rm,
    case_weights = !!rlang::enquo(case_weights),
    event_level = event_level
  )
}

Try the tidysdm package in your browser

Any scripts or data that you put into this service are public.

tidysdm documentation built on April 3, 2025, 9:56 p.m.