psis {loo} | R Documentation |
Pareto smoothed importance sampling (PSIS)
Description
Implementation of Pareto smoothed importance sampling (PSIS), a method for stabilizing importance ratios. The version of PSIS implemented here corresponds to the algorithm presented in Vehtari, Simpson, Gelman, Yao, and Gabry (2024). For PSIS diagnostics see the pareto-k-diagnostic page.
Usage
psis(log_ratios, ...)
## S3 method for class 'array'
psis(log_ratios, ..., r_eff = 1, cores = getOption("mc.cores", 1))
## S3 method for class 'matrix'
psis(log_ratios, ..., r_eff = 1, cores = getOption("mc.cores", 1))
## Default S3 method:
psis(log_ratios, ..., r_eff = 1)
is.psis(x)
is.sis(x)
is.tis(x)
Arguments
log_ratios |
An array, matrix, or vector of importance ratios on the log scale (for PSIS-LOO these are negative log-likelihood values). See the Methods (by class) section below for a detailed description of how to specify the inputs for each method. |
... |
Arguments passed on to the various methods. |
r_eff |
Vector of relative effective sample size estimates containing
one element per observation. The values provided should be the relative
effective sample sizes of |
cores |
The number of cores to use for parallelization. This defaults to
the option
|
x |
For |
Value
The psis()
methods return an object of class "psis"
,
which is a named list with the following components:
log_weights
-
Vector or matrix of smoothed (and truncated) but unnormalized log weights. To get normalized weights use the
weights()
method provided for objects of class"psis"
. diagnostics
-
A named list containing two vectors:
-
pareto_k
: Estimates of the shape parameterk
of the generalized Pareto distribution. See the pareto-k-diagnostic page for details. -
n_eff
: PSIS effective sample size estimates.
-
Objects of class "psis"
also have the following attributes:
norm_const_log
-
Vector of precomputed values of
colLogSumExps(log_weights)
that are used internally by theweights
method to normalize the log weights. tail_len
-
Vector of tail lengths used for fitting the generalized Pareto distribution.
r_eff
-
If specified, the user's
r_eff
argument. dims
-
Integer vector of length 2 containing
S
(posterior sample size) andN
(number of observations). method
-
Method used for importance sampling, here
psis
.
Methods (by class)
-
psis(array)
: AnI
byC
byN
array, whereI
is the number of MCMC iterations per chain,C
is the number of chains, andN
is the number of data points. -
psis(matrix)
: AnS
byN
matrix, whereS
is the size of the posterior sample (with all chains merged) andN
is the number of data points. -
psis(default)
: A vector of lengthS
(posterior sample size).
References
Vehtari, A., Gelman, A., and Gabry, J. (2017). Practical Bayesian model evaluation using leave-one-out cross-validation and WAIC. Statistics and Computing. 27(5), 1413–1432. doi:10.1007/s11222-016-9696-4 (journal version, preprint arXiv:1507.04544).
Vehtari, A., Simpson, D., Gelman, A., Yao, Y., and Gabry, J. (2024). Pareto smoothed importance sampling. Journal of Machine Learning Research, 25(72):1-58. PDF
See Also
-
loo()
for approximate LOO-CV using PSIS. -
pareto-k-diagnostic for PSIS diagnostics.
The loo package vignettes for demonstrations.
The FAQ page on the loo website for answers to frequently asked questions.
Examples
log_ratios <- -1 * example_loglik_array()
r_eff <- relative_eff(exp(-log_ratios))
psis_result <- psis(log_ratios, r_eff = r_eff)
str(psis_result)
plot(psis_result)
# extract smoothed weights
lw <- weights(psis_result) # default args are log=TRUE, normalize=TRUE
ulw <- weights(psis_result, normalize=FALSE) # unnormalized log-weights
w <- weights(psis_result, log=FALSE) # normalized weights (not log-weights)
uw <- weights(psis_result, log=FALSE, normalize = FALSE) # unnormalized weights