Looking at how each parameter chain evolves across the chains can show if any particular chains are diverging from the rest, if there are multiple modes being explored, or how wide the distribution of parameters are relative to each other.
Each line corresponds to one chain in the ensemble.
import matplotlib.pyplot as pltimport numpy as npfrom espei.analysis import truncate_arrays# ESPEI writes trace.npy and lnprob.npy; the documentation stores this run as a# compressed .npz archive to keep the repository small.mcmc_results = np.load('../_data/mcmc-results.npz')trace = mcmc_results['trace']lnprob = mcmc_results['lnprob']trace, lnprob = truncate_arrays(trace, lnprob)num_chains = trace.shape[0]num_parameters = trace.shape[2]iterations = np.arange(1,trace.shape[1]+1)fig, axs = plt.subplots(nrows=num_parameters, gridspec_kw=dict(hspace=0.4), figsize=(4, 3*num_parameters))for parameter inrange(num_parameters): ax = axs[parameter] ax.set_xlabel('Iterations') ax.set_ylabel('Parameter value') ax.plot(iterations, trace[..., parameter].T)fig.show()
and if we plot again after 500 iterations of burn-in: