elfi-dev / elfi

ELFI - Engine for Likelihood-Free Inference
http://elfi.readthedocs.io
BSD 3-Clause "New" or "Revised" License
265 stars 60 forks source link

Update arviz data extracted from MCMC results #485

Open uremes opened 3 months ago

uremes commented 3 months ago

Summary:

BOLFI and BOLFIRE sample several MCMC chains that could be examined with arviz tools, but the current idata returned from the sample class does not separate the chains. Here the idata in BOLFI and BOLFIRE samples is updated to include the individual chains. This means that we can for example use arviz.rhat(idata) and arviz.plot_trace(idata, kind='rank_bars') to examine the MCMC results. Meanwhile for example arviz.plot_posterior(idata) produces the same result with the current and updated idata.

Since there is no difference* in how BOLFI and BOLFIRE samples are created based on MCMC chains, this update also combines the BolfiSample and BOLFIRESample classes into an McmcSample. In practice this means that we do not need to duplicate code for new functionalities (like the idata update) in two classes. For example in the current version, plot_traces is only implemented in the BolfiSample class while BOLFIRE uses the same MCMC methods to sample the posterior and could benefit from the same analysis.

*There was small a difference in that BOLFI uses the keyword warmup to save how many samples should be discarded as warmup while BOLFIRE uses the same keyword to save chains where the warmup samples have been discarded. I assumed the latter was a mistake since it would be better that the same keyword is used to save the same information.

Please make sure

If your contribution adds, removes or somehow changes the functional behavior of the package, please check that

and the proposed changes pass all unit tests (check step 6 of CONTRIBUTING.rst for details)

Copyright and Licensing

Please list the copyright holder for the work you are submitting (this will be you or your assignee, such as a university or company):

By submitting this pull request, the copyright holder is agreeing to license the submitted work under the following licenses: