# arviz.ess#

arviz.ess(data, *, var_names=None, method='bulk', relative=False, prob=None, dask_kwargs=None)[source]#

Calculate estimate of the effective sample size (ess).

Parameters
dataobj

Any object that can be converted to an arviz.InferenceData object. Refer to documentation of arviz.convert_to_dataset() for details. For ndarray: shape = (chain, draw). For n-dimensional ndarray transform first to dataset with arviz.convert_to_dataset().

var_namesstr or list of str

Names of variables to include in the return value Dataset.

methodstr, optional, default “bulk”

Select ess method. Valid methods are:

• “bulk”

• “tail” # prob, optional

• “quantile” # prob

• “mean” (old ess)

• “sd”

• “median”

• “mad” (mean absolute deviance)

• “z_scale”

• “folded”

• “identity”

• “local”

relativebool

Return relative ess ress = ess / n

probfloat, or tuple of two floats, optional

probability value for “tail”, “quantile” or “local” ess functions.

Dask related kwargs passed to wrap_xarray_ufunc().

Returns
xarray.Dataset

Return the effective sample size, $$\hat{N}_{eff}$$

arviz.rhat

Compute estimate of rank normalized splitR-hat for a set of traces.

arviz.mcse

Calculate Markov Chain Standard Error statistic.

plot_ess

Plot quantile, local or evolution of effective sample sizes (ESS).

arviz.summary

Create a data frame with summary statistics.

Notes

The basic ess ($$N_{\mathit{eff}}$$) diagnostic is computed by:

$\hat{N}_{\mathit{eff}} = \frac{MN}{\hat{\tau}}$
$\hat{\tau} = -1 + 2 \sum_{t'=0}^K \hat{P}_{t'}$

where $$M$$ is the number of chains, $$N$$ the number of draws, $$\hat{\rho}_t$$ is the estimated _autocorrelation at lag $$t$$, and $$K$$ is the last integer for which $$\hat{P}_{K} = \hat{\rho}_{2K} + \hat{\rho}_{2K+1}$$ is still positive.

The current implementation is similar to Stan, which uses Geyer’s initial monotone sequence criterion (Geyer, 1992; Geyer, 2011).

References

Examples

Calculate the effective_sample_size using the default arguments:

In : import arviz as az
...: data = az.load_arviz_data('non_centered_eight')
...: az.ess(data)
...:
Out:
<xarray.Dataset>
Dimensions:  (school: 8)
Coordinates:
* school   (school) object 'Choate' 'Deerfield' ... "St. Paul's" 'Mt. Hermon'
Data variables:
mu       float64 2.354e+03
theta_t  (school) float64 2.215e+03 3.159e+03 ... 2.678e+03 2.522e+03
tau      float64 1.268e+03
theta    (school) float64 2.298e+03 2.434e+03 ... 2.174e+03 2.278e+03


Calculate the ress of some of the variables

In : az.ess(data, relative=True, var_names=["mu", "theta_t"])
Out:
<xarray.Dataset>
Dimensions:  (school: 8)
Coordinates:
* school   (school) object 'Choate' 'Deerfield' ... "St. Paul's" 'Mt. Hermon'
Data variables:
mu       float64 1.177
theta_t  (school) float64 1.107 1.579 1.463 1.258 1.156 1.277 1.339 1.261


Calculate the ess using the “tail” method, leaving the prob argument at its default value.

In : az.ess(data, method="tail")
Out:
<xarray.Dataset>
Dimensions:  (school: 8)
Coordinates:
* school   (school) object 'Choate' 'Deerfield' ... "St. Paul's" 'Mt. Hermon'
Data variables:
mu       float64 1.401e+03
theta_t  (school) float64 1.45e+03 1.514e+03 ... 1.207e+03 1.589e+03
tau      float64 900.0
theta    (school) float64 1.445e+03 1.506e+03 ... 1.433e+03 1.418e+03