Skip to content
Snippets Groups Projects
Commit 343c26df authored by Moritz Huebner's avatar Moritz Huebner
Browse files

Merge branch 'fix-bug-in-evidence-combination' into 'master'

Fix bug in combining evidences

See merge request !880
parents 787cf21b c5bfa29d
No related branches found
No related tags found
1 merge request!880Fix bug in combining evidences
Pipeline #156785 failed
...@@ -1644,24 +1644,26 @@ class ResultList(list): ...@@ -1644,24 +1644,26 @@ class ResultList(list):
The result object with the combined evidences. The result object with the combined evidences.
""" """
self.check_nested_samples() self.check_nested_samples()
if result.use_ratio:
log_bayes_factors = np.array([res.log_bayes_factor for res in self]) # Combine evidences
result.log_bayes_factor = logsumexp(log_bayes_factors, b=1. / len(self)) log_evidences = np.array([res.log_evidence for res in self])
result.log_evidence = result.log_bayes_factor + result.log_noise_evidence result.log_evidence = logsumexp(log_evidences, b=1. / len(self))
result_weights = np.exp(log_bayes_factors - np.max(log_bayes_factors)) result.log_bayes_factor = result.log_evidence - result.log_noise_evidence
else:
log_evidences = np.array([res.log_evidence for res in self]) # Propogate uncertainty in combined evidence
result.log_evidence = logsumexp(log_evidences, b=1. / len(self))
result_weights = np.exp(log_evidences - np.max(log_evidences))
log_errs = [res.log_evidence_err for res in self if np.isfinite(res.log_evidence_err)] log_errs = [res.log_evidence_err for res in self if np.isfinite(res.log_evidence_err)]
if len(log_errs) > 0: if len(log_errs) > 0:
result.log_evidence_err = 0.5 * logsumexp(2 * np.array(log_errs), b=1. / len(self)) result.log_evidence_err = 0.5 * logsumexp(2 * np.array(log_errs), b=1. / len(self))
else: else:
result.log_evidence_err = np.nan result.log_evidence_err = np.nan
# Combined posteriors with a weighting
result_weights = np.exp(log_evidences - np.max(log_evidences))
posteriors = list() posteriors = list()
for res, frac in zip(self, result_weights): for res, frac in zip(self, result_weights):
selected_samples = (np.random.uniform(size=len(res.posterior)) < frac) selected_samples = (np.random.uniform(size=len(res.posterior)) < frac)
posteriors.append(res.posterior[selected_samples]) posteriors.append(res.posterior[selected_samples])
# remove original nested_samples # remove original nested_samples
result.nested_samples = None result.nested_samples = None
result.sampler_kwargs = None result.sampler_kwargs = None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment