def __init__(self, div_model_results_path): OrderedDivergenceModelResults.__init__(self, div_model_results_path) assert probability.almost_equal(self.cumulative_prob, 1.0)
def flat_result_iter(self, observed_index, prior_index, include_tau_exclusion_info=False): glm_failures = [] for sim_idx, result in enumerate( self.result_iter(observed_index, prior_index)): r = self.result_to_flat_dict(result) if include_tau_exclusion_info: div_times = sorted([ r['PRI.t.' + str(i)] for i in range(1, self.num_taxon_pairs + 1) ]) model_index = r['model_mode'] try: model_index_glm = int(round(r['model_mode_glm'])) except ValueError: model_index_glm = model_index glm_failures.append(sim_idx) tau_max = self.prior_configs[model_index].tau.maximum tau_max_glm = self.prior_configs[model_index_glm].tau.maximum prob_of_exclusion = 0.0 prob_of_exclusion_glm = 0.0 prior_prob_of_exclusion = 0.0 model_prior = float(1) / len(self.prior_configs.keys()) bf_tau_max = [] for i in self.prior_configs.iterkeys(): if max(div_times) > self.prior_configs[i].tau.maximum: prob_of_exclusion += r['model_{0}_prob'.format(i)] prob_of_exclusion_glm += r['model_{0}_prob_glm'.format( i)] prior_prob_of_exclusion += model_prior bf_tau_max.append(self.prior_configs[i].tau.maximum) if len(bf_tau_max) < 1: bf_tau_max = float('inf') else: bf_tau_max = max(bf_tau_max) ex = functions.get_sublist_greater_than(div_times, tau_max) ex_glm = functions.get_sublist_greater_than( div_times, tau_max_glm) prior_odds = (prior_prob_of_exclusion / (1 - prior_prob_of_exclusion)) post_odds = (prob_of_exclusion / (1 - prob_of_exclusion)) post_odds_glm = (prob_of_exclusion_glm / (1 - prob_of_exclusion_glm)) if probability.almost_equal(prior_odds, 0.0): bf_of_exclusion = float('inf') bf_of_exclusion_glm = float('inf') if probability.almost_equal(bf_of_exclusion, 0.0): bf_of_exclusion = 0.0 if probability.almost_equal(bf_of_exclusion_glm, 0.0): bf_of_exclusion_glm = 0.0 else: bf_of_exclusion = post_odds / prior_odds bf_of_exclusion_glm = post_odds_glm / prior_odds bf_ex = [] bf_ex_glm = [] if bf_of_exclusion > 1.0: bf_ex = functions.get_sublist_greater_than( div_times, bf_tau_max) if bf_of_exclusion_glm > 1.0: bf_ex_glm = functions.get_sublist_greater_than( div_times, bf_tau_max) r['prob_of_exclusion'] = prob_of_exclusion r['prob_of_exclusion_glm'] = prob_of_exclusion_glm r['prior_prob_of_exclusion'] = prior_prob_of_exclusion r['bf_of_exclusion'] = bf_of_exclusion r['bf_of_exclusion_glm'] = bf_of_exclusion_glm r['tau_max'] = tau_max r['tau_max_glm'] = tau_max_glm r['num_excluded'] = len(ex) r['num_excluded_glm'] = len(ex_glm) r['bf_num_excluded'] = len(bf_ex) r['bf_num_excluded_glm'] = len(bf_ex_glm) yield r if len(glm_failures) > 0: _LOG.warning('WARNING: there were GLM-regression failures:\n' 'For observed index {0} prior index {1}, there were ' 'failures at the following simulation indices:\n' '{2}'.format(observed_index, prior_index, glm_failures))
def flat_result_iter(self, observed_index, prior_index, include_tau_exclusion_info = False): glm_failures = [] for sim_idx, result in enumerate(self.result_iter(observed_index, prior_index)): r = self.result_to_flat_dict(result) if include_tau_exclusion_info: div_times = sorted([r['PRI.t.' + str(i)] for i in range(1, self.num_taxon_pairs + 1)]) model_index = r['model_mode'] try: model_index_glm = int(round(r['model_mode_glm'])) except ValueError: model_index_glm = model_index glm_failures.append(sim_idx) tau_max = self.prior_configs[model_index].tau.maximum tau_max_glm = self.prior_configs[model_index_glm].tau.maximum prob_of_exclusion = 0.0 prob_of_exclusion_glm = 0.0 prior_prob_of_exclusion = 0.0 model_prior = float(1) / len(self.prior_configs.keys()) bf_tau_max = [] for i in self.prior_configs.iterkeys(): if max(div_times) > self.prior_configs[i].tau.maximum: prob_of_exclusion += r['model_{0}_prob'.format(i)] prob_of_exclusion_glm += r['model_{0}_prob_glm'.format(i)] prior_prob_of_exclusion += model_prior bf_tau_max.append(self.prior_configs[i].tau.maximum) if len(bf_tau_max) < 1: bf_tau_max = float('inf') else: bf_tau_max = max(bf_tau_max) ex = functions.get_sublist_greater_than(div_times, tau_max) ex_glm = functions.get_sublist_greater_than(div_times, tau_max_glm) prior_odds = (prior_prob_of_exclusion / (1 - prior_prob_of_exclusion)) post_odds = (prob_of_exclusion / (1 - prob_of_exclusion)) post_odds_glm = (prob_of_exclusion_glm / (1 - prob_of_exclusion_glm)) if probability.almost_equal(prior_odds, 0.0): bf_of_exclusion = float('inf') bf_of_exclusion_glm = float('inf') if probability.almost_equal(bf_of_exclusion, 0.0): bf_of_exclusion = 0.0 if probability.almost_equal( bf_of_exclusion_glm, 0.0): bf_of_exclusion_glm = 0.0 else: bf_of_exclusion = post_odds / prior_odds bf_of_exclusion_glm = post_odds_glm / prior_odds bf_ex = [] bf_ex_glm = [] if bf_of_exclusion > 1.0: bf_ex = functions.get_sublist_greater_than(div_times, bf_tau_max) if bf_of_exclusion_glm > 1.0: bf_ex_glm = functions.get_sublist_greater_than(div_times, bf_tau_max) r['prob_of_exclusion'] = prob_of_exclusion r['prob_of_exclusion_glm'] = prob_of_exclusion_glm r['prior_prob_of_exclusion'] = prior_prob_of_exclusion r['bf_of_exclusion'] = bf_of_exclusion r['bf_of_exclusion_glm'] = bf_of_exclusion_glm r['tau_max'] = tau_max r['tau_max_glm'] = tau_max_glm r['num_excluded'] = len(ex) r['num_excluded_glm'] = len(ex_glm) r['bf_num_excluded'] = len(bf_ex) r['bf_num_excluded_glm'] = len(bf_ex_glm) yield r if len(glm_failures) > 0: _LOG.warning('WARNING: there were GLM-regression failures:\n' 'For observed index {0} prior index {1}, there were ' 'failures at the following simulation indices:\n' '{2}'.format(observed_index, prior_index, glm_failures))