diff --git a/bilby/core/result.py b/bilby/core/result.py index d604e52d1e2aa3990f777f306f352b78b08a660b..9964ee5caeaa25ee47fdc0430e3d80796384823a 100644 --- a/bilby/core/result.py +++ b/bilby/core/result.py @@ -238,8 +238,9 @@ class Result(object): sampler_kwargs=None, injection_parameters=None, meta_data=None, posterior=None, samples=None, nested_samples=None, log_evidence=np.nan, - log_evidence_err=np.nan, log_noise_evidence=np.nan, - log_bayes_factor=np.nan, log_likelihood_evaluations=None, + log_evidence_err=np.nan, information_gain=np.nan, + log_noise_evidence=np.nan, log_bayes_factor=np.nan, + log_likelihood_evaluations=None, log_prior_evaluations=None, sampling_time=None, nburn=None, num_likelihood_evaluations=None, walkers=None, max_autocorrelation_time=None, use_ratio=None, @@ -269,6 +270,8 @@ class Result(object): An array of the output posterior samples and the unweighted samples log_evidence, log_evidence_err, log_noise_evidence, log_bayes_factor: float Natural log evidences + information_gain: float + The Kullback-Leibler divergence log_likelihood_evaluations: array_like The evaluations of the likelihood for each sample point num_likelihood_evaluations: int @@ -321,6 +324,7 @@ class Result(object): self.use_ratio = use_ratio self.log_evidence = log_evidence self.log_evidence_err = log_evidence_err + self.information_gain = information_gain self.log_noise_evidence = log_noise_evidence self.log_bayes_factor = log_bayes_factor self.log_likelihood_evaluations = log_likelihood_evaluations @@ -573,7 +577,7 @@ class Result(object): 'log_noise_evidence', 'log_bayes_factor', 'priors', 'posterior', 'injection_parameters', 'meta_data', 'search_parameter_keys', 'fixed_parameter_keys', 'constraint_parameter_keys', - 'sampling_time', 'sampler_kwargs', 'use_ratio', + 'sampling_time', 'sampler_kwargs', 'use_ratio', 'information_gain', 'log_likelihood_evaluations', 'log_prior_evaluations', 'num_likelihood_evaluations', 'samples', 'nested_samples', 'walkers', 'nburn', 'parameter_labels', 'parameter_labels_with_unit', diff --git a/bilby/core/sampler/cpnest.py b/bilby/core/sampler/cpnest.py index 25183bd07eb53938b122bb0305b89b0c548d718d..14a3bd3cb1d7445b942cba68f564d8abb0b98d30 100644 --- a/bilby/core/sampler/cpnest.py +++ b/bilby/core/sampler/cpnest.py @@ -132,6 +132,7 @@ class Cpnest(NestedSampler): self.result.nested_samples['weights'] = np.exp(log_weights) self.result.log_evidence = out.NS.state.logZ self.result.log_evidence_err = np.sqrt(out.NS.state.info / out.NS.state.nlive) + self.result.information_gain = out.NS.state.info return self.result def _verify_kwargs_against_default_kwargs(self): diff --git a/bilby/core/sampler/dynesty.py b/bilby/core/sampler/dynesty.py index 22811bccba9fa330ecf40949a937e70adadb232f..237bebd9c98e6908dca11b708af117ec51ab912d 100644 --- a/bilby/core/sampler/dynesty.py +++ b/bilby/core/sampler/dynesty.py @@ -401,6 +401,7 @@ class Dynesty(NestedSampler): sorted_samples=self.result.samples) self.result.log_evidence = out.logz[-1] self.result.log_evidence_err = out.logzerr[-1] + self.result.information_gain = out.information[-1] def _run_nested_wrapper(self, kwargs): """ Wrapper function to run_nested diff --git a/bilby/core/sampler/nestle.py b/bilby/core/sampler/nestle.py index 0b97daf72b342a124183758fe212ea41bd1e32db..73f88f1cbc2dd615736a0114b074efca2dceffc5 100644 --- a/bilby/core/sampler/nestle.py +++ b/bilby/core/sampler/nestle.py @@ -74,6 +74,7 @@ class Nestle(NestedSampler): sorted_samples=self.result.samples) self.result.log_evidence = out.logz self.result.log_evidence_err = out.logzerr + self.result.information_gain = out.h self.calc_likelihood_count() return self.result diff --git a/bilby/core/sampler/ultranest.py b/bilby/core/sampler/ultranest.py index 9fa12578ddb9154d5ccdab5101c482891d83fa6d..7e2cbcd6981060724b53355753c0e72173ead7b8 100644 --- a/bilby/core/sampler/ultranest.py +++ b/bilby/core/sampler/ultranest.py @@ -366,6 +366,8 @@ class Ultranest(NestedSampler): self.result.nested_samples = nested_samples self.result.log_evidence = out["logz"] self.result.log_evidence_err = out["logzerr"] + if self.kwargs["num_live_points"] is not None: + self.result.information_gain = np.power(out["logzerr"], 2) * self.kwargs["num_live_points"] self.result.outputfiles_basename = self.outputfiles_basename self.result.sampling_time = datetime.timedelta(seconds=self.total_sampling_time)