Widely applicable information criterion (WAIC)

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 array waic(x, ...)

# S3 method for matrix waic(x, ...)

# S3 method for function waic(x, ..., data = NULL, draws = NULL)


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:


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).


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).

Methods (by class)

  • 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 ith 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.

See Also

  • loo for approximate LOO-CV.

  • compare for comparing models on LOOIC or WAIC.

  • waic
  • waic.array
  • waic.matrix
  • waic.function
### Array and matrix methods
LLarr <- example_loglik_array()

LLmat <- example_loglik_matrix()

waic_arr <- waic(LLarr)
waic_mat <- waic(LLmat)
identical(waic_arr, waic_mat)

# }
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)
# }
# }
Documentation reproduced from package loo, version 2.0.0, License: GPL (>= 3)

Community examples

Looks like there are no examples yet.