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

Here’s how `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
0.

Otherwise the question is, “Given that there are `hypo`

sides, what is the chance of rolling
`data`

?” The answer is `1/hypo`

, regardless of `data`

.

Here is the statement that does the update (if I roll a 6):

suite.Update(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 ...

Start Free Trial

No credit card required