Efficient approximate leave-one-out cross-validation (LOO) for posterior approximations
loo_approximate_posterior(x, log_p, log_g, ...) # S3 method for array loo_approximate_posterior( x, log_p, log_g, ..., save_psis = FALSE, cores = getOption("mc.cores", 1) ) # S3 method for matrix loo_approximate_posterior( x, log_p, log_g, ..., save_psis = FALSE, cores = getOption("mc.cores", 1) ) # S3 method for `function` loo_approximate_posterior( x, ..., data = NULL, draws = NULL, log_p = NULL, log_g = NULL, save_psis = FALSE, cores = getOption("mc.cores", 1) )
A log-likelihood array, matrix, or function. The Methods (by class) section, below, has detailed descriptions of how to specify the inputs for each method.
The log-posterior (target) evaluated at S samples from the proposal distribution (g). A vector of length S.
The log-density (proposal) evaluated at S samples from the proposal distribution (g). A vector of length S.
The number of cores to use for parallelization. This defaults to
|data, draws, ...||
A list with two vectors,
log_g of the same length
containing the posterior density and the approximation density
for the individual draws.
loo_approximate_posterior() function is an S3 generic and
methods are provided for 3-D pointwise log-likelihood arrays, pointwise
log-likelihood matrices, and log-likelihood functions. The implementation
works for posterior approximations where it is possible to compute the log
density for the posterior approximation.
array: An \(I\) by \(C\) by \(N\) array, where \(I\)
is the number of MCMC iterations per chain, \(C\) is the number of
chains, and \(N\) is the number of data points.
matrix: An \(S\) by \(N\) matrix, where \(S\) is the size
of the posterior sample (with all chains merged) and \(N\) is the number
of data points.
function: A function
f() that takes arguments
draws and returns a
vector containing the log-likelihood for a single observation
at each posterior draw. The function should be written such that, for each
f(data_i = data[i,, drop=FALSE], draws = draws)
results in a vector of length
S (size of posterior sample). The
log-likelihood function can also have additional arguments but
draws are required.
If using the function method then the arguments
draws must also
be specified in the call to
data: A data frame or matrix containing the data (e.g.
observed outcome and predictors) needed to compute the pointwise
log-likelihood. For each observation
ith row of
data will be passed to the
data_i argument of the
draws: An object containing the posterior draws for any
parameters needed to compute the pointwise log-likelihood. Unlike
data, which is indexed by observation, for each observation the
draws will be passed to the
draws argument of
the log-likelihood function.
... can be used if your log-likelihood function takes additional
arguments. These arguments are used like the
draws argument in that they
are recycled for each observation.
Magnusson, M., Riis Andersen, M., Jonasson, J. and Vehtari, A. (2019). Leave-One-Out Cross-Validation for Large Data. In International Conference on Machine Learning
Magnusson, M., Riis Andersen, M., Jonasson, J. and Vehtari, A. (2019). Leave-One-Out Cross-Validation for Model Comparison in Large Data.