View likelihood chain histories

I am new to PyMC but have worked with Bayesian methods in the past. I have often found it useful to plot likelihood chain historioes - i.e., the values computed of the likelihood at each step of the Markov chain, for the separate Markov chains. This can be useful for assessing e.g. convergence or tuning. (they’re maybe better ways, but I thought this one was useful).
After much searching, I haven’t found any example of this. Can anyone tell me how I can plot the likelihood chain histories?

The idata returned by pm.sample stores the draws of each chain in the order they were drawn, from 0 to n. After you compute the log likelihood, you can sum over the data dimension then plot with the draw dimension on the x-axis. I think this will give you what you want.

If you want only the log likelihood contribution, you’ll need to sum the pointwise log likelihood values stored in the log_likelihood group as @jessegrabowski mentions. If you want both prior and likelihood contributions, there is a lp variable in the sample_stats group.

Example code to generate these plots:

import arviz as az

idata = az.load_arviz_data("centered_eight")
az.preview.plot_trace(idata.log_likelihood.sum("school"));

imatge

You can also use az.plot_trace instead of az.preview.plot_trace in which case you’ll get the following plot:

az.plot_trace(idata.log_likelihood.sum("school"), compact=False);

Using az.preview give you access to the ongoing refactor effort for ArviZ where are working on more flexible plots and are also rethinking some of the names like plot_trace which now give you the trace only, if you want the same behaviour as az.plot_trace you can use az.preview.plot_trace_dist. Docs for az.preview are at arviz-plots website

Potentially useful references: Other utils — PyMC dev documentation, if you don’t have a log_likelihood group, you can use the compute_log_likelihood function here to get it.

2 Likes