waic {loo} | R Documentation |
The waic
methods can be used to compute WAIC from the pointwise
log-likelihood. However, we recommend LOO-CV using PSIS (as implemented by
the loo
function) because PSIS provides useful diagnostics and
effective sample size and Monte Carlo estimates.
waic(x, ...) ## S3 method for class 'array' waic(x, ...) ## S3 method for class 'matrix' waic(x, ...) ## S3 method for class 'function' waic(x, ..., data = NULL, draws = NULL) is.waic(x)
x |
A log-likelihood array, matrix, or function. See the Methods (by class) section below for a detailed description of how to specify the inputs for each method. |
draws, data, ... |
For the function method only. See the Methods (by class) section below for details on these arguments. |
A named list (of class c("waic", "loo")
) with components:
estimates
A matrix with two columns ("Estimate"
, "SE"
) and three
rows ("elpd_waic"
, "p_waic"
, "waic"
). This contains
point estimates and standard errors of the expected log pointwise predictive
density (elpd_waic
), the effective number of parameters
(p_waic
) and the LOO information criterion waic
(which is just
-2 * elpd_waic
, i.e., converted to deviance scale).
pointwise
A matrix with three columns (and number of rows equal to the number of
observations) containing the pointwise contributions of each of the above
measures (elpd_waic
, p_waic
, waic
).
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 data_i
and draws
and
returns a vector containing the log-likelihood for a single observation
i
evaluated at each posterior draw. The function should be written
such that, for each observation i
in 1:N
, evaluating
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 data_i
and draws
are
required.
If using the function method then the arguments data
and draws
must also be specified in the call to loo
:
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 i
, the i
th row of
data
will be passed to the data_i
argument of the
log-likelihood function.
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
entire object draws
will be passed to the draws
argument of
the log-likelihood function.
The ...
can be used to pass additional arguments to your
log-likelihood function. These arguments are used like the draws
argument in that they are recycled for each observation.
### Array and matrix methods LLarr <- example_loglik_array() dim(LLarr) LLmat <- example_loglik_matrix() dim(LLmat) waic_arr <- waic(LLarr) waic_mat <- waic(LLmat) identical(waic_arr, waic_mat) ## Not run: log_lik1 <- extract_log_lik(stanfit1) log_lik2 <- extract_log_lik(stanfit2) (waic1 <- waic(log_lik1)) (waic2 <- waic(log_lik2)) print(compare(waic1, waic2), digits = 2) ## End(Not run)