Hi Prof. Peixoto,
My question is about convergence of Merge-split Markov chain Monte Carlo (in this paper: DOI: 10.1103/PhysRevE.102.012305).
You check for convergence/mixing of chains by diagnosing with Be (effective number of blocks), autocorrelation function, and ESS (effective sample size).
But is there a way to check for convergence in graph-tool?
I am using graph-tool version 2.59 on ubuntu 22.04.
I am inferring modular structure of networks following the cookbook.
I use mcmc_equilibrate() and pass a callback function to collect all partitions b’s and their description lengths dl’s.
I presume I can collect Be in the same callback function and plot them.
But how do I compute the autocorrelation function and ESS?
Also, should I run multiple chains in parallel–like you show in the paper?
In the graph-tool codes I found the following functions/classes:
MulticanonicalState(); has its equilibration function multicanonical_equilibrate().
TemperingState(); meant to be used to mcmc_equilibrate().
The wikipedia page says that using TemperingState has two advantages over running a single MCMC sampler: lower computational cost than running parallel MCMC samplers, and faster convergence to global optimum.
Would these functions/classes help in better convergence/mixing times? If so, how do I use them with mcmc_equilibrate() and diagnose convergence (by plotting Be, etc.)?
mcmc_equilibrate() can return history of sweeps, will it help in diagnosing convergence?
I cannot give you a full lecture on MCMC diagnosis here. There’s no fully automatized way to do it with graph-tool, you have to follow the steps as described in the paper using your own implementation.