Learn R Programming

weird (version 1.0.2)

density_scores: Density scores

Description

Compute density scores or leave-one-out density scores from a model or a kernel density estimate of a data set. The density scores are defined as minus the log of the conditional density, or kernel density estimate, at each observation. The leave-one-out density scores (or LOO density scores) are obtained by estimating the conditional density or kernel density estimate using all other observations.

Usage

density_scores(object, loo = FALSE, ...)

# S3 method for default density_scores( object, loo = FALSE, h = kde_bandwidth(object, method = "double"), H = kde_bandwidth(object, method = "double"), ... )

# S3 method for kde density_scores(object, loo = FALSE, ...)

# S3 method for lm density_scores(object, loo = FALSE, ...)

# S3 method for gam density_scores(object, loo = FALSE, ...)

Value

A numerical vector containing either the density scores, or the LOO density scores.

Arguments

object

A model object or a numerical data set.

loo

Should leave-one-out density scores be computed?

...

Other arguments are ignored.

h

Bandwidth for univariate kernel density estimate. Default is kde_bandwidth.

H

Bandwidth for multivariate kernel density estimate. Default is kde_bandwidth.

Author

Rob J Hyndman

Details

If the first argument is a numerical vector or matrix, then a kernel density estimate is computed, using a Gaussian kernel, with default bandwidth given by a robust normal reference rule. Otherwise the model is used to compute the conditional density function at each observation, from which the density scores (or possibly the LOO density scores) are obtained.

See Also

kde_bandwidth kde

Examples

Run this code
# Density scores computed from bivariate data set
of <- oldfaithful |>
  filter(duration < 7000, waiting < 7000) |>
  mutate(
    fscores = density_scores(cbind(duration, waiting)),
    loo_fscores = density_scores(cbind(duration, waiting), loo = TRUE),
    lookout_prob = lookout(density_scores = fscores, loo_scores = loo_fscores)
  )
of |>
  ggplot(aes(x = duration, y = waiting, color = lookout_prob < 0.01)) +
  geom_point()
# Density scores computed from bivariate KDE
f_kde <- kde(of[, 2:3], H = kde_bandwidth(of[, 2:3]))
of |>
  mutate(
    fscores = density_scores(f_kde),
    loo_fscores = density_scores(f_kde, loo = TRUE)
  )
# Density scores computed from linear model
of <- oldfaithful |>
  filter(duration < 7200, waiting < 7200)
lm_of <- lm(waiting ~ duration, data = of)
of |>
  mutate(
    fscore = density_scores(lm_of),
    loo_fscore = density_scores(lm_of, loo = TRUE),
    lookout_prob = lookout(density_scores = fscore, loo_scores = loo_fscore)
  ) |>
  ggplot(aes(x = duration, y = waiting, color = lookout_prob < 0.02)) +
  geom_point()
# Density scores computed from GAM
of <- oldfaithful |>
  filter(duration > 1, duration < 7200, waiting < 7200)
gam_of <- mgcv::gam(waiting ~ s(duration), data = of)
of |>
  mutate(
    fscore = density_scores(gam_of),
    lookout_prob = lookout(density_scores = fscore)
  ) |>
  filter(lookout_prob < 0.02)

Run the code above in your browser using DataLab