Compute a LOO-adjusted R-squared for regression models

# S3 method for class 'brmsfit'
loo_R2(
  object,
  resp = NULL,
  summary = TRUE,
  robust = FALSE,
  probs = c(0.025, 0.975),
  seed = NULL,
  args_epred = list(),
  args_loglik = list(),
  ...
)

Arguments

object

An object of class brmsfit.

resp

Optional names of response variables. If specified, predictions are performed only for the specified response variables.

summary

Should summary statistics be returned instead of the raw values? Default is TRUE.

robust

If FALSE (the default) the mean is used as the measure of central tendency and the standard deviation as the measure of variability. If TRUE, the median and the median absolute deviation (MAD) are applied instead. Only used if summary is TRUE.

probs

The percentiles to be computed by the quantile function. Only used if summary is TRUE.

seed

Optional integer used to initialize the random number generator.

args_epred

A named list of further arguments passed only to posterior_epred.

args_loglik

A named list of further arguments passed only to log_lik.

...

Further arguments passed to both posterior_epred and log_lik.

Value

If summary = TRUE, an M x C matrix is returned (M = number of response variables and c = length(probs) + 2) containing Bayesian bootstrap based summary statistics of the LOO-adjusted R-squared values. If summary = FALSE, the Bayesian bootstrap draws of the LOO-adjusted R-squared values are returned in an S x M matrix (S is the number of draws).

@details LOO-R2 uses LOO residuals and is defined as \(1-Var_{loo-res} / Var_y\), with $$ Var_y = V_{n=1}^N y_n, and Var_{loo-res} = V_{n=1}^N \hat{e}_{loo,n}, $$ where \(\hat{e}_{loo,n}=y_n-\hat{y}_{loo,n}\). Bayesian bootstrap is used to draw from the approximated uncertainty distribution as described by Vehtari and Lampinen (2002).

References

Vehtari and Lampinen (2002). Bayesian model assessment and comparison using cross-validation predictive densities. Neural Computation, 14(10):2439-2468.

Examples

if (FALSE) { # \dontrun{
fit <- brm(mpg ~ wt + cyl, data = mtcars)
summary(fit)
loo_R2(fit)

# compute R2 with new data
nd <- data.frame(mpg = c(10, 20, 30), wt = c(4, 3, 2), cyl = c(8, 6, 4))
loo_R2(fit, newdata = nd)
} # }