JohannesBuchner/BXA

Degeneracy in identical parameters in multi-component models

Closed this issue · 2 comments

Hi Johannes,

Thank you for the wonderful package! This is probably a more conceptual question than a github "issue":

I was wondering if you have any suggestions for dealing with degeneracy in identical parameters in multi-component models. E.g., fitting with a model comprised of two apec components, and aiming to penalize when temperatures in both models are very similar (e.g., it can't find two temperatures, so the best-fit just splits the amplitude between the two components with similar temperature). I was trying to implement some trick, e.g., using the create_custom_prior_for(), but I couldn't come up with anything viable. Right now, I just let both parameters run wild and if the posteriors for both are really consistent and there are no other interesting features in any of the posteriors, I just conclude that the second component is unnecessary (which is probably ok, but not the best thing to do). I think without such a penalization, model evidence LogZ might naturally prefer the two-component model. Am I correct?

Any suggestion would be appreciated.
Arash

P.S. My apologies if github issue is not a proper venue for such a question.

If you need to decide for 1 or 2 components:

If only one component is needed, the logZ from a single apec model will
be higher, because the parameter space is smaller (the model is simpler,
there are fewer ways for the model to look different than the data). So
I would compare the logZ of the two models.

You can find a good delta-logZ threshold by simulating a large number of
single-apec models and computing the delta-logZs for each. The highest
delta-logZ will give you what you can get by chance under the null
hypothesis.

If you only want to know the temperature, and some objects have one or
two temperatures:
You could for each posterior point compute the lower and higher
temperature value. Then you could report the mean and uncertainty of
these new columns. This is effectively the same as requiring T1<T2.

Alternatively, you could parameterise the temperature of the second
component as apec2.kT = apec1.kT + newparam, where newparam is another
model parameter (e.g. a powerlaw photon index, where you set the
normalisation to zero so it does not add to the model).

A more general approach would be a mixture model, but that is currently
difficult to implement with BXA.

Awesome, thank you so much for the fast and thorough response!