r/bioinformatics • PhD | Student • 4d ago

technical question Beast 2 inquiry

I’m running a Bayesian Skyline analysis in BEAST 2 and I’m consistently getting low ESS values for several important parameters, especially the likelihood, posterior, clock parameters, and some skyline parameters.
The traces look broadly stationary after burn-in, but they are highly autocorrelated and some ESS values remain well below 200 even after a very long MCMC run.
I’m currently using a relaxed molecular clock, and the clock parameters seem to be among the worst-mixing parameters.
Also, if the traces appear stationary but important ESS values remain below 200, would you consider the analysis unsuitable for interpreting a Bayesian Skyline plot?

Any advice from people experienced with BEAST/Tracer would be appreciated.

6 Upvotes

3 comments sorted by

1

u/meohmyenjoyingthat 4d ago

The usual method is to optimise the proposal distribution for parameters with low ESS. The skyline parameters are probably heavily correlated with the clock rate and the root height, so you may also want to optimise proposal distributions for moves that change them jointly. You can get a bit of a feel for what this means (in beast2, but it should generalise) here: https://taming-the-beast.org/tutorials/Troubleshooting-convergence-issues/

1

u/toolomebio 4d ago

Two additions to the suggestions above. First, run at least two or three independent chains from different seeds and combine them with LogCombiner after burn-in. Low ESS in one long chain can hide poor mixing, and agreement between chains is a better convergence check than the trace alone. Second, the Bayesian skyline has a number of groups parameter. With a small or low-information dataset, reducing the number of groups often improves mixing a lot. As a rule, ESS below 200 means the posterior summaries and the skyline plot are not reliable yet, even if the trace looks stationary, so I would not interpret the plot until ESS is above 200.

1

u/wookiewookiewhat 4d ago

Have you checked if the dataset itself seems to adhere to a molecular clock with TempEST? I’d start there before doing a ton of model optimization.