def Update(self, data): a_sat, b_sat = data a_like = thinkbayes2.PmfProbGreater(a_sat, b_sat) b_like = thinkbayes2.PmfProbLess(a_sat, b_sat) c_like = thinkbayes2.PmfProbEqual(a_sat, b_sat) a_like += c_like / 2 b_like += c_like / 2 self.Mult('A', a_like) self.Mult('B', b_like) self.Normalize()
def ComparePosteriorPredictive(a_sat, b_sat): """Compares the predictive distributions of raw scores. a_sat: posterior distribution b_sat: """ a_pred = a_sat.MakePredictiveDist() b_pred = b_sat.MakePredictiveDist() #thinkplot.Clf() #thinkplot.Pmfs([a_pred, b_pred]) #thinkplot.Show() a_like = thinkbayes2.PmfProbGreater(a_pred, b_pred) b_like = thinkbayes2.PmfProbLess(a_pred, b_pred) c_like = thinkbayes2.PmfProbEqual(a_pred, b_pred) print('Posterior predictive') print('A', a_like) print('B', b_like) print('C', c_like)
def main(): #ReadHockeyData() #return formats = ['pdf', 'eps'] suite1 = Hockey('bruins') suite2 = Hockey('canucks') thinkplot.Clf() thinkplot.PrePlot(num=2) thinkplot.Pmf(suite1) thinkplot.Pmf(suite2) thinkplot.Save(root='hockey0', xlabel='Goals per game', ylabel='Probability', formats=formats) suite1.UpdateSet([0, 2, 8, 4]) suite2.UpdateSet([1, 3, 1, 0]) thinkplot.Clf() thinkplot.PrePlot(num=2) thinkplot.Pmf(suite1) thinkplot.Pmf(suite2) thinkplot.Save(root='hockey1', xlabel='Goals per game', ylabel='Probability', formats=formats) goal_dist1 = MakeGoalPmf(suite1) goal_dist2 = MakeGoalPmf(suite2) thinkplot.Clf() thinkplot.PrePlot(num=2) thinkplot.Pmf(goal_dist1) thinkplot.Pmf(goal_dist2) thinkplot.Save(root='hockey2', xlabel='Goals', ylabel='Probability', formats=formats) time_dist1 = MakeGoalTimePmf(suite1) time_dist2 = MakeGoalTimePmf(suite2) print('MLE bruins', suite1.MaximumLikelihood()) print('MLE canucks', suite2.MaximumLikelihood()) thinkplot.Clf() thinkplot.PrePlot(num=2) thinkplot.Pmf(time_dist1) thinkplot.Pmf(time_dist2) thinkplot.Save(root='hockey3', xlabel='Games until goal', ylabel='Probability', formats=formats) diff = goal_dist1 - goal_dist2 p_win = diff.ProbGreater(0) p_loss = diff.ProbLess(0) p_tie = diff.prob(0) print(p_win, p_loss, p_tie) p_overtime = thinkbayes2.PmfProbLess(time_dist1, time_dist2) p_adjust = thinkbayes2.PmfProbEqual(time_dist1, time_dist2) p_overtime += p_adjust / 2 print('p_overtime', p_overtime) print(p_overtime * p_tie) p_win += p_overtime * p_tie print('p_win', p_win) # win the next two p_series = p_win**2 # split the next two, win the third p_series += 2 * p_win * (1-p_win) * p_win print('p_series', p_series)