Suppose I have a box of dice that contains a 4-sided die, a 6-sided die, an 8-sided die, a 12-sided die, and a 20-sided die. If you have ever played Dungeons & Dragons, you know what I am talking about.
Suppose I select a die from the box at random, roll it, and get a 6. What is the probability that I rolled each die?
Let me suggest a three-step strategy for approaching a problem like this.
Choose a representation for the hypotheses.
Choose a representation for the data.
Write the likelihood function.
In previous examples I used strings to represent hypotheses and data, but for the die problem I’ll use numbers. Specifically, I’ll use the integers 4, 6, 8, 12, and 20 to represent hypotheses:
suite = Dice([4, 6, 8, 12, 20])
And integers from 1 to 20 for the data. These representations make it easy to write the likelihood function:
class Dice(Suite): def Likelihood(self, data, hypo): if hypo < data: return 0 else: return 1.0/hypo
Likelihood works. If
hypo<data, that means the roll is greater than
the number of sides on the die. That can’t happen, so the likelihood is
Otherwise the question is, “Given that there are
hypo sides, what is the chance of rolling
data?” The answer is
1/hypo, regardless of
Here is the statement that does the update (if I roll a 6):
And here is the posterior distribution:
4 0.0 6 0.392156862745 8 0.294117647059 12 0.196078431373 20 0.117647058824
After we roll a 6, the probability for the 4-sided die ...