def _build_results(self): """ build the results after a fit is performed :returns: :rtype: """ # set the median fit self.restore_median_fit() # Find maximum of the log posterior idx = self._log_probability_values.argmax() # Get parameter values at the maximum approximate_MAP_point = self._raw_samples[idx, :] # Sets the values of the parameters to their MAP values for i, parameter in enumerate(self._free_parameters): self._free_parameters[parameter].value = approximate_MAP_point[i] # Get the value of the posterior for each dataset at the MAP log_posteriors = collections.OrderedDict() log_prior = self._log_prior(approximate_MAP_point) # keep track of the total number of data points # and the total posterior total_n_data_points = 0 total_log_posterior = 0 for dataset in list(self._data_list.values()): log_posterior = dataset.get_log_like() + log_prior log_posteriors[dataset.name] = log_posterior total_n_data_points += dataset.get_number_of_data_points() total_log_posterior += log_posterior # compute the statistical measures statistical_measures = collections.OrderedDict() # compute the point estimates statistical_measures["AIC"] = aic(total_log_posterior, len(self._free_parameters), total_n_data_points) statistical_measures["BIC"] = bic(total_log_posterior, len(self._free_parameters), total_n_data_points) this_dic, pdic = dic(self) # compute the posterior estimates statistical_measures["DIC"] = this_dic statistical_measures["PDIC"] = pdic if self._marginal_likelihood is not None: statistical_measures["log(Z)"] = self._marginal_likelihood # TODO: add WAIC # Instance the result self._results = BayesianResults( self._likelihood_model, self._raw_samples, log_posteriors, statistical_measures=statistical_measures, log_probabilty=self._log_like_values)
def _build_results(self): # Find maximum of the log posterior idx = self._log_probability_values.argmax() # Get parameter values at the maximum approximate_MAP_point = self._raw_samples[idx, :] # Sets the values of the parameters to their MAP values for i, parameter in enumerate(self._free_parameters): self._free_parameters[parameter].value = approximate_MAP_point[i] # Get the value of the posterior for each dataset at the MAP log_posteriors = collections.OrderedDict() log_prior = self._log_prior(approximate_MAP_point) # keep track of the total number of data points # and the total posterior total_n_data_points = 0 total_log_posterior = 0 for dataset in self._data_list.values(): log_posterior = dataset.get_log_like() + log_prior log_posteriors[dataset.name] = log_posterior total_n_data_points += dataset.get_number_of_data_points() total_log_posterior += log_posterior # compute the statistical measures statistical_measures = collections.OrderedDict() # compute the point estimates statistical_measures['AIC'] = aic(total_log_posterior,len(self._free_parameters),total_n_data_points) statistical_measures['BIC'] = bic(total_log_posterior,len(self._free_parameters),total_n_data_points) this_dic, pdic = dic(self) # compute the posterior estimates statistical_measures['DIC'] = this_dic statistical_measures['PDIC'] = pdic if self._marginal_likelihood is not None: statistical_measures['log(Z)'] = self._marginal_likelihood #TODO: add WAIC # Instance the result self._results = BayesianResults(self._likelihood_model, self._raw_samples, log_posteriors,statistical_measures=statistical_measures)