diagnostics

autocorrelation_plot(posteriors: dict[str, ndarray], max_lags: int = 30) None

It plots the auto-correlation for each Markov chain for each regression variable.

The plot shows the auto-correlation trend from lag 0 (when auto-correlation is always 1) up to max_lags. The plot layout has number of rows equal to the number of regression variables and a number of columns equal to the number of chains.

Parameters

posteriorsdict

Posterior samples. Posteriors and relative samples are key-value pairs. Each sample is a numpy.ndarray with a number of rows equal to the number of iterations and a number of columns equal to the number of Markov chains.

max_lagsint, optional

Maximum number of lags to which compute the auto-correlation. The default is 30.

Raises

TypeError
  • If posteriors is not a dict,

  • if a posterior sample is not a numpy.ndarray,

  • if max_lags is not an int.

KeyError

If posteriors does not contain 'intercept' key.

ValueError
  • If a posterior sample is an empty numpy.ndarray,

  • if max_lags is less or equal to 0.

autocorrelation_summary(posteriors: dict[str, ndarray], lags: list[int] | None = None, print_summary: bool = True) DataFrame

It prints the auto-correlation summary for each regression variable.

The summary reports the auto-correlation values at the lags listed in lags.

Parameters

posteriorsdict

Posterior samples. Posteriors and relative samples are key-value pairs. Each sample is a numpy.ndarray with a number of rows equal to the number of iterations and a number of columns equal to the number of Markov chains.

lagslist, optional

List of the lags to which compute the auto-correlation. It cannot be an empty list. It must contain only positive integers. The default is [0, 1, 5, 10, 30].

print_summarybool, optional

If True prints the autocorrelation summary report. Default is True.

Returns

pandas.DataFrame

The dataframe with a number of row equal to the number of element in lags and a number of columns equal to the number of model variables. Lags are reported in dataframe index.

Raises

TypeError
  • If posteriors is not a dict,

  • if a posterior sample is not a numpy.ndarray,

  • if lags is not a list,

  • if lags does not contain only int,

  • if print_summary is not a bool.

KeyError

If posteriors does not contain 'intercept' key.

ValueError
  • If a posterior sample is an empty numpy.ndarray,

  • if lags is an empty list,

  • if a value in lags is a negative int.

Notes

The reported auto-correlation for each variable is a mean of auto-correlations for the chains of that variable, for each chain.

effective_sample_size(posteriors: dict[str, ndarray], print_summary: bool = True) DataFrame

It computes and prints the effective number of sample for each posterior.

Parameters

posteriorsdict

Posterior samples. Posteriors and relative samples are key-value pairs. Each sample is a numpy.ndarray with a number of rows equals to the number of iterations and a number of columns equal to the number of Markov chains.

print_summarybool, optional

If True prints the effective sample size summary report. Default is True.

Returns

pandas.DataFrame

The dataframe with a single row and a number of columns equal to the number of model variables. The unique index of the dataframe is 'Effective Sample Size'.

Raises

TypeError
  • If posteriors is not a dict,

  • if a posterior sample is not a numpy.ndarray,

  • if print_summary is not a bool.

KeyError

If posteriors does not contain 'intercept' key.

ValueError

If a posterior sample is an empty numpy.ndarray.

Notes

The effective number of sample could be theoretically equal to the number of iterations in case of no auto-correlation of the Markov chain. The greater the auto-correlation of the Markov chain, the smaller the effective sample size of the posterior.