arviz.loo_pit#

arviz.loo_pit(idata=None, *, y=None, y_hat=None, log_weights=None)[source]#

Compute leave one out (PSIS-LOO) probability integral transform (PIT) values.

Parameters
idata: InferenceData

arviz.InferenceData object.

y: array, DataArray or str

Observed data. If str, idata must be present and contain the observed data group

y_hat: array, DataArray or str

Posterior predictive samples for y. It must have the same shape as y plus an extra dimension at the end of size n_samples (chains and draws stacked). If str or None, idata must contain the posterior predictive group. If None, y_hat is taken equal to y, thus, y must be str too.

log_weights: array or DataArray

Smoothed log_weights. It must have the same shape as y_hat

dask_kwargsdict, optional

Dask related kwargs passed to wrap_xarray_ufunc().

Returns
loo_pit: array or DataArray

Value of the LOO-PIT at each observed data point.

See also

plot_loo_pit

Plot Leave-One-Out probability integral transformation (PIT) predictive checks.

loo

Compute Pareto-smoothed importance sampling leave-one-out cross-validation (PSIS-LOO-CV).

plot_elpd

Plot pointwise elpd differences between two or more models.

plot_khat

Plot Pareto tail indices for diagnosing convergence.

Examples

Calculate LOO-PIT values using as test quantity the observed values themselves.

In [1]: import arviz as az
   ...: data = az.load_arviz_data("centered_eight")
   ...: az.loo_pit(idata=data, y="obs")
   ...: 
Out[1]: 
array([0.93709089, 0.64299662, 0.35337357, 0.60399173, 0.30613239,
       0.38855003, 0.91081225, 0.65456656])

Calculate LOO-PIT values using as test quantity the square of the difference between each observation and mu. Both y and y_hat inputs will be array-like, but idata will still be passed in order to calculate the log_weights from there.

In [2]: T = data.observed_data.obs - data.posterior.mu.median(dim=("chain", "draw"))
   ...: T_hat = data.posterior_predictive.obs - data.posterior.mu
   ...: T_hat = T_hat.stack(__sample__=("chain", "draw"))
   ...: az.loo_pit(idata=data, y=T**2, y_hat=T_hat**2)
   ...: 
Out[2]: 
<xarray.DataArray (school: 8)>
array([0.87402093, 0.30510478, 0.29976597, 0.21659434, 0.37189578,
       0.20309587, 0.82479374, 0.33979512])
Coordinates:
  * school   (school) object 'Choate' 'Deerfield' ... "St. Paul's" 'Mt. Hermon'