def compute( self, observation, prediction, observation_name='observation', prediction_name='prediction', mcmc_iter=110000, mcmc_burn=10000, effect_size_type='mode', # 'mean' assume_normal=False, **kwargs): if not pymc: raise ImportError('Module best or pymc could not be loaded!') data_dict = { observation_name: observation, prediction_name: prediction } best_model = self.make_model(data_dict, assume_normal) M = MCMC(best_model) M.sample(iter=mcmc_iter, burn=mcmc_burn) group1_data = M.get_node(observation_name).value group2_data = M.get_node(prediction_name).value N1 = len(group1_data) N2 = len(group2_data) posterior_mean1 = M.trace('group1_mean')[:] posterior_mean2 = M.trace('group2_mean')[:] diff_means = posterior_mean1 - posterior_mean2 posterior_std1 = M.trace('group1_std')[:] posterior_std2 = M.trace('group2_std')[:] pooled_var = ((N1 - 1) * posterior_std1**2 + (N2 - 1) * posterior_std2**2) / (N1 + N2 - 2) self.effect_size = diff_means / np.sqrt(pooled_var) stats = best.calculate_sample_statistics(self.effect_size) self.score = best_effect_size(stats[effect_size_type]) self.score.mcmc_iter = mcmc_iter self.score.mcmc_burn = mcmc_burn self.score.data_size = [N1, N2] self.score.HDI = (stats['hdi_min'], stats['hdi_max']) self.HDI = self.score.HDI return self.score
def compute( self, observation, prediction, observation_name='observation', prediction_name='prediction', mcmc_iter=110000, mcmc_burn=10000, effect_size_type='mode', # 'mean' **kwargs): self.mcmc_iter = mcmc_iter self.mcmc_burn = mcmc_burn data_dict = { observation_name: observation, prediction_name: prediction } best_model = self.make_model(data_dict) M = MCMC(best_model) M.sample(iter=mcmc_iter, burn=mcmc_burn) group1_data = M.get_node(observation_name).value group2_data = M.get_node(prediction_name).value N1 = len(group1_data) N2 = len(group2_data) self.data_size = [N1, N2] posterior_mean1 = M.trace('group1_mean')[:] posterior_mean2 = M.trace('group2_mean')[:] diff_means = posterior_mean1 - posterior_mean2 posterior_std1 = M.trace('group1_std')[:] posterior_std2 = M.trace('group2_std')[:] pooled_var = ((N1 - 1) * posterior_std1**2 + (N2 - 1) * posterior_std2**2) / (N1 + N2 - 2) self.effect_size = diff_means / np.sqrt(pooled_var) stats = best.calculate_sample_statistics(self.effect_size) self.HDI = (stats['hdi_min'], stats['hdi_max']) self.score = best_effect_size(stats[effect_size_type]) return self.score