{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "You can order print and ebook versions of *Think Bayes 2e* from\n", "[Bookshop.org](https://bookshop.org/a/98697/9781492089469) and\n", "[Amazon](https://amzn.to/334eqGo)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Odds and Addends" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.054803Z", "iopub.status.busy": "2021-04-16T19:35:25.054381Z", "iopub.status.idle": "2021-04-16T19:35:25.056675Z", "shell.execute_reply": "2021-04-16T19:35:25.056251Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# install empiricaldist if necessary\n", "\n", "try:\n", " import empiricaldist\n", "except ImportError:\n", " !pip install empiricaldist\n", " import empiricaldist" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.060363Z", "iopub.status.busy": "2021-04-16T19:35:25.059859Z", "iopub.status.idle": "2021-04-16T19:35:25.061547Z", "shell.execute_reply": "2021-04-16T19:35:25.061891Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Get utils.py\n", "\n", "from os.path import basename, exists\n", "\n", "def download(url):\n", " filename = basename(url)\n", " if not exists(filename):\n", " from urllib.request import urlretrieve\n", " local, _ = urlretrieve(url, filename)\n", " print('Downloaded ' + local)\n", " \n", "download('https://github.com/AllenDowney/ThinkBayes2/raw/master/soln/utils.py')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.064750Z", "iopub.status.busy": "2021-04-16T19:35:25.064307Z", "iopub.status.idle": "2021-04-16T19:35:25.842409Z", "shell.execute_reply": "2021-04-16T19:35:25.841954Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from utils import set_pyplot_params\n", "set_pyplot_params()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This chapter presents a new way to represent a degree of certainty, **odds**, and a new form of Bayes's Theorem, called **Bayes's Rule**.\n", "Bayes's Rule is convenient if you want to do a Bayesian update on paper or in your head.\n", "It also sheds light on the important idea of **evidence** and how we can quantify the strength of evidence.\n", "\n", "The second part of the chapter is about \"addends\", that is, quantities being added, and how we can compute their distributions.\n", "We'll define functions that compute the distribution of sums, differences, products, and other operations.\n", "Then we'll use those distributions as part of a Bayesian update." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Odds\n", "\n", "One way to represent a probability is with a number between 0 and 1, but that's not the only way.\n", "If you have ever bet on a football game or a horse race, you have probably encountered another representation of probability, called **odds**.\n", "\n", "You might have heard expressions like \"the odds are three to one\", but you might not know what that means.\n", "The **odds in favor** of an event are the ratio of the probability\n", "it will occur to the probability that it will not.\n", "\n", "The following function does this calculation." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.847175Z", "iopub.status.busy": "2021-04-16T19:35:25.846506Z", "iopub.status.idle": "2021-04-16T19:35:25.850491Z", "shell.execute_reply": "2021-04-16T19:35:25.850052Z" } }, "outputs": [], "source": [ "def odds(p):\n", " return p / (1-p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, if my team has a 75% chance of winning, the odds in their favor are three to one, because the chance of winning is three times the chance of losing." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.857515Z", "iopub.status.busy": "2021-04-16T19:35:25.856721Z", "iopub.status.idle": "2021-04-16T19:35:25.859929Z", "shell.execute_reply": "2021-04-16T19:35:25.860503Z" } }, "outputs": [ { "data": { "text/plain": [ "3.0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "odds(0.75)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can write odds in decimal form, but it is also common to\n", "write them as a ratio of integers.\n", "So \"three to one\" is sometimes written $3:1$.\n", "\n", "When probabilities are low, it is more common to report the\n", "**odds against** rather than the odds in favor.\n", "For example, if my horse has a 10% chance of winning, the odds in favor are $1:9$." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.864570Z", "iopub.status.busy": "2021-04-16T19:35:25.863924Z", "iopub.status.idle": "2021-04-16T19:35:25.867151Z", "shell.execute_reply": "2021-04-16T19:35:25.866535Z" } }, "outputs": [ { "data": { "text/plain": [ "0.11111111111111112" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "odds(0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But in that case it would be more common I to say that the odds against are $9:1$." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.871386Z", "iopub.status.busy": "2021-04-16T19:35:25.870629Z", "iopub.status.idle": "2021-04-16T19:35:25.874421Z", "shell.execute_reply": "2021-04-16T19:35:25.873817Z" } }, "outputs": [ { "data": { "text/plain": [ "9.000000000000002" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "odds(0.9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the odds in favor, in decimal form, you can convert to probability like this:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.878254Z", "iopub.status.busy": "2021-04-16T19:35:25.877499Z", "iopub.status.idle": "2021-04-16T19:35:25.879194Z", "shell.execute_reply": "2021-04-16T19:35:25.879785Z" } }, "outputs": [], "source": [ "def prob(o):\n", " return o / (o+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, if the odds are $3/2$, the corresponding probability is $3/5$:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.884222Z", "iopub.status.busy": "2021-04-16T19:35:25.883524Z", "iopub.status.idle": "2021-04-16T19:35:25.886020Z", "shell.execute_reply": "2021-04-16T19:35:25.886547Z" } }, "outputs": [ { "data": { "text/plain": [ "0.6" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prob(3/2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or if you represent odds with a numerator and denominator, you can convert to probability like this:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.890280Z", "iopub.status.busy": "2021-04-16T19:35:25.889753Z", "iopub.status.idle": "2021-04-16T19:35:25.891691Z", "shell.execute_reply": "2021-04-16T19:35:25.892110Z" } }, "outputs": [], "source": [ "def prob2(yes, no):\n", " return yes / (yes + no)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.896932Z", "iopub.status.busy": "2021-04-16T19:35:25.896240Z", "iopub.status.idle": "2021-04-16T19:35:25.899626Z", "shell.execute_reply": "2021-04-16T19:35:25.899181Z" } }, "outputs": [ { "data": { "text/plain": [ "0.6" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prob2(3, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Probabilities and odds are different representations of the\n", "same information; given either one, you can compute the other.\n", "But some computations are easier when we work with odds, as we'll see in the next section, and some computations are even easier with log odds, which we'll see later." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bayes's Rule\n", "\n", "So far we have worked with Bayes's theorem in the \"probability form\": \n", "\n", "$$P(H|D) = \\frac{P(H)~P(D|H)}{P(D)}$$\n", "\n", "Writing $\\mathrm{odds}(A)$ for odds in favor of $A$, we can express Bayes's Theorem in \"odds form\":\n", "\n", "$$\\mathrm{odds}(A|D) = \\mathrm{odds}(A)~\\frac{P(D|A)}{P(D|B)}$$\n", "\n", "This is Bayes's Rule, which says that the posterior odds are the prior odds times the likelihood ratio.\n", "Bayes's Rule is convenient for computing a Bayesian update on paper or in your head. For example, let's go back to the cookie problem:\n", "\n", "> Suppose there are two bowls of cookies. Bowl 1 contains 30 vanilla cookies and 10 chocolate cookies. Bowl 2 contains 20 of each. Now suppose you choose one of the bowls at random and, without looking, select a cookie at random. The cookie is vanilla. What is the probability that it came from Bowl 1?\n", "\n", "The prior probability is 50%, so the prior odds are 1. The likelihood ratio is $\\frac{3}{4} / \\frac{1}{2}$, or $3/2$. So the posterior odds are $3/2$, which corresponds to probability $3/5$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.903843Z", "iopub.status.busy": "2021-04-16T19:35:25.903087Z", "iopub.status.idle": "2021-04-16T19:35:25.905922Z", "shell.execute_reply": "2021-04-16T19:35:25.906470Z" } }, "outputs": [ { "data": { "text/plain": [ "1.5" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prior_odds = 1\n", "likelihood_ratio = (3/4) / (1/2)\n", "post_odds = prior_odds * likelihood_ratio\n", "post_odds" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.911059Z", "iopub.status.busy": "2021-04-16T19:35:25.910422Z", "iopub.status.idle": "2021-04-16T19:35:25.913602Z", "shell.execute_reply": "2021-04-16T19:35:25.913967Z" } }, "outputs": [ { "data": { "text/plain": [ "0.6" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "post_prob = prob(post_odds)\n", "post_prob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we draw another cookie and it's chocolate, we can do another update:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.918775Z", "iopub.status.busy": "2021-04-16T19:35:25.918156Z", "iopub.status.idle": "2021-04-16T19:35:25.922078Z", "shell.execute_reply": "2021-04-16T19:35:25.921279Z" } }, "outputs": [ { "data": { "text/plain": [ "0.75" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "likelihood_ratio = (1/4) / (1/2)\n", "post_odds *= likelihood_ratio\n", "post_odds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And convert back to probability." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.926620Z", "iopub.status.busy": "2021-04-16T19:35:25.926000Z", "iopub.status.idle": "2021-04-16T19:35:25.929931Z", "shell.execute_reply": "2021-04-16T19:35:25.930427Z" } }, "outputs": [ { "data": { "text/plain": [ "0.42857142857142855" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "post_prob = prob(post_odds)\n", "post_prob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Oliver's Blood\n", "\n", "I’ll use Bayes’s Rule to solve another problem from MacKay’s\n", "[*Information Theory, Inference, and Learning Algorithms*](https://www.inference.org.uk/mackay/itila/):\n", "\n", "> Two people have left traces of their own blood at the scene of a crime. A suspect, Oliver, is tested and found to have type ‘O’ blood. The blood groups of the two traces are found to be of type ‘O’ (a common type in the local population, having frequency 60%) and of type ‘AB’ (a rare type, with frequency 1%). Do these data \\[the traces found at the scene\\] give evidence in favor of the proposition that Oliver was one of the people \\[who left blood at the scene\\]?\n", "\n", "To answer this question, we need to think about what it means for data\n", "to give evidence in favor of (or against) a hypothesis. Intuitively, we might say that data favor a hypothesis if the hypothesis is more likely in light of the data than it was before.\n", "\n", "In the cookie problem, the prior odds are 1, which corresponds to probability 50%. The posterior odds are $3/2$, or probability 60%. So the vanilla cookie is evidence in favor of Bowl 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bayes's Rule provides a way to make this intuition more precise. Again\n", "\n", "$$\\mathrm{odds}(A|D) = \\mathrm{odds}(A)~\\frac{P(D|A)}{P(D|B)}$$\n", "\n", "Dividing through by $\\mathrm{odds}(A)$, we get: \n", "\n", "$$\\frac{\\mathrm{odds}(A|D)}{\\mathrm{odds}(A)} = \\frac{P(D|A)}{P(D|B)}$$\n", "\n", "The term on the left is the ratio of the posterior and prior odds. The term on the right is the likelihood ratio, also called the **Bayes\n", "factor**.\n", "\n", "If the Bayes factor is greater than 1, that means that the data were\n", "more likely under $A$ than under $B$. And that means that the odds are\n", "greater, in light of the data, than they were before.\n", "\n", "If the Bayes factor is less than 1, that means the data were less likely under $A$ than under $B$, so the odds in favor of $A$ go down.\n", "\n", "Finally, if the Bayes factor is exactly 1, the data are equally likely\n", "under either hypothesis, so the odds do not change." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's apply that to the problem at hand. If Oliver is one of the people who left blood at the crime scene, he accounts for the ‘O’ sample; in that case, the probability of the data is the probability that a random member of the population has type ‘AB’ blood, which is 1%.\n", "\n", "If Oliver did not leave blood at the scene, we have two samples to\n", "account for. \n", "If we choose two random people from the population, what is the chance of finding one with type ‘O’ and one with type ‘AB’? \n", "Well, there are two ways it might happen: \n", "\n", "* The first person might have ‘O’ and the second ‘AB’, \n", "\n", "* Or the first person might have ‘AB’ and the second ‘O’.\n", "\n", "The probability of either combination is $(0.6) (0.01)$, which is 0.6%, so the total probability is twice that, or 1.2%.\n", "So the data are a little more likely if Oliver is *not* one of the people who left blood at the scene.\n", "\n", "We can use these probabilities to compute the likelihood ratio:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.935512Z", "iopub.status.busy": "2021-04-16T19:35:25.934799Z", "iopub.status.idle": "2021-04-16T19:35:25.940814Z", "shell.execute_reply": "2021-04-16T19:35:25.940217Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8333333333333334" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "like1 = 0.01\n", "like2 = 2 * 0.6 * 0.01\n", "\n", "likelihood_ratio = like1 / like2\n", "likelihood_ratio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the likelihood ratio is less than 1, the blood tests are evidence *against* the hypothesis that Oliver left blood at the scence.\n", "\n", "But it is weak evidence. For example, if the prior odds were 1 (that is, 50% probability), the posterior odds would be 0.83, which corresponds to a probability of 45%:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.943890Z", "iopub.status.busy": "2021-04-16T19:35:25.943238Z", "iopub.status.idle": "2021-04-16T19:35:25.948722Z", "shell.execute_reply": "2021-04-16T19:35:25.949237Z" } }, "outputs": [ { "data": { "text/plain": [ "0.45454545454545453" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "post_odds = 1 * like1 / like2\n", "prob(post_odds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So this evidence doesn't \"move the needle\" very much.\n", "\n", "This example is a little contrived, but it demonstrates the\n", "counterintuitive result that data *consistent* with a hypothesis are\n", "not necessarily *in favor of* the hypothesis.\n", "\n", "If this result still bothers you, this way of thinking might help: the\n", "data consist of a common event, type ‘O’ blood, and a rare event, type\n", "‘AB’ blood. If Oliver accounts for the common event, that leaves the\n", "rare event unexplained. If Oliver doesn’t account for the ‘O’ blood, we\n", "have two chances to find someone in the population with ‘AB’ blood. And\n", "that factor of two makes the difference." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Suppose that based on other evidence, you prior belief in Oliver's guilt is 90%. How much would the blood evidence in this section change your beliefs? What if you initially thought there was only a 10% chance of his guilt?" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.953967Z", "iopub.status.busy": "2021-04-16T19:35:25.953380Z", "iopub.status.idle": "2021-04-16T19:35:25.956711Z", "shell.execute_reply": "2021-04-16T19:35:25.957322Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8823529411764706" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "post_odds = odds(0.9) * like1 / like2\n", "prob(post_odds)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.961924Z", "iopub.status.busy": "2021-04-16T19:35:25.961197Z", "iopub.status.idle": "2021-04-16T19:35:25.965746Z", "shell.execute_reply": "2021-04-16T19:35:25.965223Z" } }, "outputs": [ { "data": { "text/plain": [ "0.0847457627118644" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "post_odds = odds(0.1) * like1 / like2\n", "prob(post_odds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Addends\n", "\n", "The second half of this chapter is about distributions of sums and results of other operations.\n", "We'll start with a forward problem, where we are given the inputs and compute the distribution of the output.\n", "Then we'll work on inverse problems, where we are given the outputs and we compute the distribution of the inputs.\n", "\n", "As a first example, suppose you roll two dice and add them up. What is the distribution of the sum? \n", "I’ll use the following function to create a `Pmf` that represents the\n", "possible outcomes of a die:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.970626Z", "iopub.status.busy": "2021-04-16T19:35:25.969863Z", "iopub.status.idle": "2021-04-16T19:35:25.972711Z", "shell.execute_reply": "2021-04-16T19:35:25.971836Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from empiricaldist import Pmf\n", "\n", "def make_die(sides):\n", " outcomes = np.arange(1, sides+1)\n", " die = Pmf(1/sides, outcomes)\n", " return die" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On a six-sided die, the outcomes are 1 through 6, all\n", "equally likely." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.977624Z", "iopub.status.busy": "2021-04-16T19:35:25.976820Z", "iopub.status.idle": "2021-04-16T19:35:25.980388Z", "shell.execute_reply": "2021-04-16T19:35:25.980927Z" } }, "outputs": [], "source": [ "die = make_die(6)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:25.985499Z", "iopub.status.busy": "2021-04-16T19:35:25.984796Z", "iopub.status.idle": "2021-04-16T19:35:26.189007Z", "shell.execute_reply": "2021-04-16T19:35:26.188413Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAAAdP0lEQVR4nO3df2xV9f3H8de11dlmwOqvTj23FndFubdri15BXZ2hDJXij3hXgxsrwXt1nbtjGS4yYsim/LPNaYyaLpJqB+vq0GqnZjYODZeNgpD+kKFcFDvFegqLc6mhF22lt/f7h+Fmfgu1wH33Ung+kpvcc/s5977vTciTe257rieVSqUEAAAy6pRsDwAAwImIwAIAYIDAAgBggMACAGCAwAIAYIDAAgBgIDfbA2Ta5MmT5ThOtscAAJwEXNfVvn37DvmzEy6wjuMoHo9newwAwEnA7/cf9mccIgYAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwMAJ9206mfTkS9uyPUJGReaXH/E+J9JrcLI/f4nXQOI1kI78NTjZn//R4h0sAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGTAMbi8Xk9/vl8/kUDoc1NDQ0Ys2SJUvkOI5yc0f+Se6WLVs0c+ZMBQIBBQIB7dmzx3JcAAAyxiywyWRSkUhEzc3N6u7uViKRUGNj44h1CxYsUGdn54jb+/v7tWjRIq1Zs0Y7duzQ5s2bVVBQYDUuAAAZZRbY9vZ2OY6jQCAgSYpEImppaRmxrqKiQoWFhSNub2pq0vz58zV9+nRJ0pQpU5SXl2c1LgAAGWUWWNd15fV609tFRUVyXXfM+7/99tsaHBzUnDlzNGPGDK1YsUKpVGrEurq6Ovn9/vSlr68vI/MDAHAsTD+D9Xg86euHiuNoDhw4oA0bNuiZZ57R5s2btXXr1kMeYo5Go4rH4+kLh5EBAMcDs8B6vV719PSkt13XleM4Y96/qKhI8+bN05lnnqm8vDzdcsst6urqshgVAICMMwtsMBhUb2+v4vG4JKmhoUGhUGjM+4dCIbW1tWlgYEDDw8Nav359+vNcAACOd2aBzcnJUX19vaqrq+Xz+ZSfn6+amhp1dHSoqqoqva62tlaO4yiZTMpxHNXW1kqSfD6fFi1apEsvvVSlpaU655xzFA6HrcYFACCjTL8PtrKyMv0O9qBgMKjW1tb09qpVqw67fzQaVTQaNZsPAAArnMkJAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAOmgY3FYvL7/fL5fAqHwxoaGhqxZsmSJXIcR7m5uYe8j48//ljnnXee7rjjDstRAQDIKLPAJpNJRSIRNTc3q7u7W4lEQo2NjSPWLViwQJ2dnYe9n2XLlmnOnDlWYwIAYMIssO3t7XIcR4FAQJIUiUTU0tIyYl1FRYUKCwsPeR+xWEyDg4MEFgAw4ZgF1nVdeb3e9HZRUZFc1x3z/p9++qmWL1+uBx98cNR1dXV18vv96UtfX99RzwwAQKaYfgbr8XjS11Op1BHte99996m2tlZnn332qOui0aji8Xj6UlBQcFSzAgCQSYf+zaIM8Hq96unpSW+7rivHcca8/+bNm/X0009r5cqVSiQSGhwcVCqV0pNPPmkxLgAAGWUW2GAwqN7eXsXjcfn9fjU0NCgUCo15/40bN6avr169Wm1tbXriiScsRgUAIOPMDhHn5OSovr5e1dXV8vl8ys/PV01NjTo6OlRVVZVeV1tbK8dxlEwm5TiOamtrrUYCAGDcmL2DlaTKykrF4/Ev3BYMBtXa2preXrVq1Zfez+LFi7V48eJMjwcAgBnO5AQAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAQILAIABAgsAgAECCwCAAdPAxmIx+f1++Xw+hcNhDQ0NjVizZMkSOY6j3NzcL9ze1NSksrIylZaW6vLLL9eGDRssRwUAIKPMAptMJhWJRNTc3Kzu7m4lEgk1NjaOWLdgwQJ1dnaOuH3q1KmKxWLavn27Vq9erdtuu03Dw8NW4wIAkFFmgW1vb5fjOAoEApKkSCSilpaWEesqKipUWFg44varrrpKZ5xxhiTJ7/drYGBAiUTCalwAADIq98uXHB3XdeX1etPbRUVFcl33qO7rqaeeUiAQ0OTJk0f8rK6uTnV1dentvr6+o3oMAAAyySywkuTxeNLXU6nUUd1HV1eXVqxYoXXr1h3y59FoVNFoNL3t9/uP6nEAAMgks0PEXq9XPT096W3XdeU4zhHdx65du3Trrbdq7dq1uuiiizI9IgAAZswCGwwG1dvbq3g8LklqaGhQKBQa8/6u62r+/Pl6/PHHNWvWLKsxAQAwYRbYnJwc1dfXq7q6Wj6fT/n5+aqpqVFHR4eqqqrS62pra+U4jpLJpBzHUW1trSTp/vvv14cffqh77rlH5eXlKi8v1+7du63GBQAgo0w/g62srEy/gz0oGAyqtbU1vb1q1apD7ltfX6/6+nrL8QAAMMOZnAAAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwQGABADBAYAEAMEBgAQAwYBrYWCwmv98vn8+ncDisoaGhEWuWLFkix3GUm5s74mfLli2Tz+fTtGnT9Oyzz1qOCgBARpkFNplMKhKJqLm5Wd3d3UokEmpsbByxbsGCBers7Bxx+7p167Rlyxa99dZbisViWrp0qfr7+63GBQAgo8wC297eLsdxFAgEJEmRSEQtLS0j1lVUVKiwsHDE7S0tLVq8eLFyc3N1/vnnq6KiQuvWrbMaFwCAjDILrOu68nq96e2ioiK5rpvx/evq6uT3+9OXvr6+YxscAIAMMP0M1uPxpK+nUimT/aPRqOLxePpSUFBw5IMCAJBhZoH1er3q6elJb7uuK8dxxm1/AACyySywwWBQvb29isfjkqSGhgaFQqEx7x8KhbRmzRolk0nt2bNHbW1tuvbaa63GBQAgo8wCm5OTo/r6elVXV8vn8yk/P181NTXq6OhQVVVVel1tba0cx1EymZTjOKqtrZUkzZ07V7NmzdLFF1+sa665Rg899JAmTZpkNS4AABk18o9PM6iysjL9DvagYDCo1tbW9PaqVasOu/8DDzygBx54wGw+AACscCYnAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAyMGtj/PclDV1eX+TAAAJwoRg3s2rVr09fvuOMO82EAADhRjBrY//2KuKP5ujkAAE5Wo56LeP/+/Xrttdc0PDysTz75RK+99toXQnvVVVeZDwgAwEQ0amDPO+883XvvvSOuS59/Gfr69ettpwMAYIIaNbAbNmwYpzEAADixjBrYzZs3j7ozh4gBADi0UQNbUVGhkpISnXXWWSN+yYlDxAAAHN6ogf31r3+tZ555RpMnT1ZNTY1uvPFGnXbaaeM1GwAAE9aof6bzi1/8Qp2dnfrVr36lTZs2qaysTD/60Y+0a9eu8ZoPAIAJadR3sAfNmDFD3/jGNzRt2jStWLFCM2fO1LRp06xnAwBgwho1sENDQ3rppZfU2Nio7u5u3Xrrrero6FBxcfE4jQcAwMQ0amC//vWv64ILLlBNTY2WLl0qj8ejPXv2aM+ePZL4LWIAAA5n1MCWlJTI4/HohRde0AsvvPCFn/FbxAAAHB4nmgAAwMCov0X83nvvKRQK6Zvf/KYWLlyovXv3jtdcAABMaKMGNhwOa9q0afrd736nKVOmaOnSpeM1FwAAE9qoh4g/+ugj/eY3v5EkXXfddZoxY8a4DAUAwEQ36jvYU089NX3d4/HolFNGXT5CLBaT3++Xz+dTOBzW0NDQmNekUin97Gc/UyAQkN/v11133aVkMnlEjw8AQLaMWsxt27bptNNOS18Obp966qlfesrEZDKpSCSi5uZmdXd3K5FIqLGxccxrYrGY2tvbtX37dr3xxht688039fLLLx/j0wUAYHyMGtjh4WF99tln6cvB7QMHDuizzz4b9Y7b29vlOI4CgYAkKRKJqKWlZcxrPB6PBgYG0o89ODiowsLCo36iAACMpzGdKvFouK4rr9eb3i4qKpLrumNeM3v2bM2ePVvnnnuupM/jGwwGRzxOXV2d6urq0tt9fX0ZfR4AAByNI/tQ9Qh5PJ709f//dXdftqajo0M9PT3au3ev9u7dqx07dqi5uXnE/tFoVPF4PH0pKCjI4DMAAODomAXW6/Wqp6cnve26rhzHGfOa1atXa+7cucrLy1NeXp5CoZBisZjVuAAAZJRZYIPBoHp7exWPxyVJDQ0NCoVCY15zwQUX6NVXX9Xw8LCSyaReeeUV+f1+q3EBAMgos8Dm5OSovr5e1dXV8vl8ys/PV01NjTo6OlRVVTXqGunzQ7+5ubkqKSlRaWmppkyZotraWqtxAQDIKLNfcpKkysrK9LvTg4LBoFpbW0ddI0n5+flqamqyHA8AADOmv+QEAMDJisACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGDANLCxWEx+v18+n0/hcFhDQ0NHtGbLli2aOXOmAoGAAoGA9uzZYzkuAAAZYxbYZDKpSCSi5uZmdXd3K5FIqLGxccxr+vv7tWjRIq1Zs0Y7duzQ5s2bVVBQYDUuAAAZZRbY9vZ2OY6jQCAgSYpEImppaRnzmqamJs2fP1/Tp0+XJE2ZMkV5eXlW4wIAkFFmgXVdV16vN71dVFQk13XHvObtt9/W4OCg5syZoxkzZmjFihVKpVIjHqeurk5+vz996evrM3pGAACMnelnsB6PJ339UHEcbc2BAwe0YcMGPfPMM9q8ebO2bt064hCzJEWjUcXj8fSFw8gAgOOBWWC9Xq96enrS267rynGcMa8pKirSvHnzdOaZZyovL0+33HKLurq6rMYFACCjzAIbDAbV29ureDwuSWpoaFAoFBrzmlAopLa2Ng0MDGh4eFjr169Pf1YLAMDxziywOTk5qq+vV3V1tXw+n/Lz81VTU6OOjg5VVVWNukaSfD6fFi1apEsvvVSlpaU655xzFA6HrcYFACCjci3vvLKyMv3u9KBgMKjW1tZR1xwUjUYVjUYtRwQAwARncgIAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAAIEFAMAAgQUAwACBBQDAgGlgY7GY/H6/fD6fwuGwhoaGjnjNxx9/rPPOO0933HGH5agAAGSUWWCTyaQikYiam5vV3d2tRCKhxsbGI16zbNkyzZkzx2pMAABMmAW2vb1djuMoEAhIkiKRiFpaWo5oTSwW0+DgIIEFAEw4ZoF1XVderze9XVRUJNd1x7zm008/1fLly/Xggw+O+jh1dXXy+/3pS19fXwafBQAAR8f0M1iPx5O+nkqljmjNfffdp9raWp199tmjPkY0GlU8Hk9fCgoKjnFqAACOXa7VHXu9XvX09KS3XdeV4zhjXrN582Y9/fTTWrlypRKJhAYHB5VKpfTkk09ajQwAQMaYBTYYDKq3t1fxeFx+v18NDQ0KhUJjXrNx48b0utWrV6utrU1PPPGE1bgAAGSU2SHinJwc1dfXq7q6Wj6fT/n5+aqpqVFHR4eqqqpGXQMAwERn9g5WkiorKxWPx79wWzAYVGtr66hr/r/Fixdr8eLFFiMCAGCCMzkBAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYIDAAgBggMACAGCAwAIAYMA0sLFYTH6/Xz6fT+FwWENDQ2Ne09TUpLKyMpWWluryyy/Xhg0bLEcFACCjzAKbTCYViUTU3Nys7u5uJRIJNTY2jnnN1KlTFYvFtH37dq1evVq33XabhoeHrcYFACCjzALb3t4ux3EUCAQkSZFIRC0tLWNec9VVV+mMM86QJPn9fg0MDCiRSFiNCwBARuVa3bHruvJ6ventoqIiua57xGsk6amnnlIgENDkyZNH/Kyurk51dXXp7b6+vkyMDwDAMTELrCR5PJ709VQqdVRrurq6tGLFCq1bt+6Q+0ejUUWj0fS23+8/2nEBAMgYs0PEXq9XPT096W3XdeU4zhGt2bVrl2699VatXbtWF110kdWoAABknFlgg8Ggent7FY/HJUkNDQ0KhUJjXuO6rubPn6/HH39cs2bNshoTAAATZoHNyclRfX29qqur5fP5lJ+fr5qaGnV0dKiqqmrUNZJ0//3368MPP9Q999yj8vJylZeXa/fu3VbjAgCQUaafwVZWVqbfnR4UDAbV2to66hpJqq+vV319veV4AACY4UxOAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABgwDWwsFpPf75fP51M4HNbQ0NARrVm2bJl8Pp+mTZumZ5991nJUAAAyyiywyWRSkUhEzc3N6u7uViKRUGNj45jXrFu3Tlu2bNFbb72lWCympUuXqr+/32pcAAAyyiyw7e3tchxHgUBAkhSJRNTS0jLmNS0tLVq8eLFyc3N1/vnnq6KiQuvWrbMaFwCAjMq1umPXdeX1etPbRUVFcl13zGtc19V3v/vdUfeXpLq6OtXV1aW33333Xfn9/ow9j/HQ19engoIC88d56B7zhzhq4/EanOzPX+I1kHgNpOP3NZiIz/9QXTrILLCS5PF40tdTqdQRrxnL/tFoVNFo9FjGzDq/3694PJ7tMbLqZH8NTvbnL/EaSLwGJ9rzNztE7PV61dPTk952XVeO44x5zVj2BwDgeGUW2GAwqN7e3vT/RhoaGhQKhca8JhQKac2aNUomk9qzZ4/a2tp07bXXWo0LAEBGmQU2JydH9fX1qq6uls/nU35+vmpqatTR0aGqqqpR10jS3LlzNWvWLF188cW65ppr9NBDD2nSpElW42bVRD/EnQkn+2twsj9/iddA4jU40Z6/J3W4DzcBAMBR40xOAAAYILAAABggsFm0ZMkSOY6j3FzTv5Y6bn3wwQeaM2eOpk+frpKSEq1YsSLbI2XF3LlzVVZWptLSUlVXV2vfvn3ZHikrfvzjH5+0/xaKi4sVCARUXl6u8vLyE+pPVcYqkUho0aJFmjZtmi655BKtWrUq2yMdMwKbRQsWLFBnZ2e2x8ia3Nxc/fa3v9XOnTvV1dWljRs36sUXX8z2WOPu2Wef1T//+U9t375dRUVFevjhh7M90rjbuHGj9u/fn+0xsupvf/ubtm3bpm3btk24k+Vkwt13362SkhLt2rVLO3fu1C233JLtkY7ZyfnfxeNERUVFtkfIqnPPPVfnnnuuJOm0005TaWmp3n///SxPNf6mTJkiSRoeHtYnn3yS3j5ZDA4Oavny5Xr++efV1NSU7XGQBf39/frrX/+aPveBx+PROeeck+Wpjh3vYHFc+O9//6vnn39e3/nOd7I9SlbcdNNNKiws1M6dO/Xzn/882+OMq5UrVyoSiejss8/O9ihZdeONN6qsrEwrVqw45DePncjeffddFRYW6ic/+YkuvfRS3Xzzzdq9e3e2xzpmBBZZNzg4qOrqat19992aPn16tsfJihdffFH//ve/dcUVV+j3v/99tscZN9u3b9fWrVt1++23Z3uUrGpra9Prr7+utrY2vfHGG3rooYeyPdK4OnDggLZt26abb75ZXV1duvHGGxUOh7M91jEjsMiqZDKphQsXKhgMaunSpdkeJ6tycnIUDof1xz/+MdujjJtNmzYpHo9r6tSpKi4uVjKZVHFxsfr6+rI92rg6eBrYSZMm6c4779SWLVuyPNH48nq9OuOMMzRv3jxJ0ve//311dXVleapjR2CRVT/84Q81efJkPfDAA9keJSv27dunvXv3prefe+45lZSUZHGi8XXXXXdpz5492r17t3bv3q2cnBzt3r17XL5R5Xixf//+9G+ODw0N6bnnnlNpaWmWpxpfhYWFKikpUUdHhyTplVdeSX+N6UTGmZyyqLa2Vi+99JJ6e3t1/vnna/78+SfEr6aP1aZNm1RRUaGSkhLl5ORIksLhsH76059mebLx88EHHygUCmlgYEAej0eXXHKJHnvsMRUWFmZ7tKzIzc09KT9/DIVCGh4eVjKZ1Le+9S098sgjysvLy/Zo4yoejysSiWj//v362te+plWrVk34j4wILAAABjhEDACAAQILAIABAgsAgAECCwCAAQILAIABAgtMIP39/brzzjt14YUXyufz6frrr9euXbtG3efjjz/Wo48+Ok4TAjiIwAITyJ133qnh4WG988476u7u1oIFC3TddddpYGDgsPsQWCA7CCwwQfzrX//SSy+9pIcffjh9Yo7bb79djuPoz3/+s4qLi+W6riTJdV0VFxdLkpYuXaoPPvhA5eXlWrRokSRp/fr1mjlzpsrKynT55ZfrP//5jyTpl7/8pUpKSlRSUqKVK1emH7u4uFj33nuvrr76al188cXq6OjQwoULNX36dN122206+Of077//vm644QYFg0EFg0H9/e9/H6+XBzju8HV1wASxY8cO+Xw+TZ48+Qu3B4NBvfnmm4fd7+GHH9Ybb7yhbdu2SZI++ugj1dTU6NVXX9X06dOVSCR06qmn6sUXX9Srr76aPl3dt7/9bc2cOVPXX3+9JKmgoEAbN27Uo48+qnnz5mnr1q2aOnWqrrzySv3jH//QNddco3A4rEceeUQlJSXavXu3Zs+erXfffVcej8fmRQGOYwQWmOBSqdQRBWzLli264oor0qeh++pXvypJ2rBhgxYuXKjTTz9d0ucnXF+/fn06sKFQSJJUXl4un8+nCy+8UJJUWlqq9957T5dddpk2bdqkH/zgB+nHOnDggD788MOT9tSPOLkRWGCCKCkp0TvvvKN9+/Z94V1sR0eHIpGInn/+eQ0PD0v6/CsAD+dwZ0c91O3/G+6vfOUrkqRTTjklff3g9tDQkFKplPLy8tLvlIGTHZ/BAhPEhRdeqBtuuEFLly5VMpmUJP3hD39Qb2+vvve972nq1Knq7OyU9Pm38hw0efJk9ff3p7evvPJKbdmyRTt37pQkJRIJDQ4Oavbs2frTn/6kwcFBDQwM6KmnntLs2bPHPN+kSZMUCATU0NCQvu31118/pucMTGQEFphA6uvrdcopp8jn88nn82nt2rV6+eWXdfrpp+v+++/X8uXLdfXVVyuRSKT3Ofg9m2VlZbr99tt11llnqbGxUTU1NSorK1NlZaX6+/t10003ae7cubrssst02WWX6YYbbkgfHh6rpqYm/eUvf1Fpaan8fr8ee+yxTL8EwITBt+kAAGCAd7AAABggsAAAGCCwAAAYILAAABggsAAAGCCwAAAYILAAABggsAAAGPg/5eBYmiW6wpoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from utils import decorate\n", "\n", "die.bar(alpha=0.4)\n", "decorate(xlabel='Outcome',\n", " ylabel='PMF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we roll two dice and add them up, there are 11 possible outcomes, 2\n", "through 12, but they are not equally likely. To compute the distribution\n", "of the sum, we have to enumerate the possible outcomes. \n", "\n", "And that's how this function works:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.193192Z", "iopub.status.busy": "2021-04-16T19:35:26.192722Z", "iopub.status.idle": "2021-04-16T19:35:26.194939Z", "shell.execute_reply": "2021-04-16T19:35:26.194501Z" } }, "outputs": [], "source": [ "def add_dist(pmf1, pmf2):\n", " \"\"\"Compute the distribution of a sum.\"\"\"\n", " res = Pmf()\n", " for q1, p1 in pmf1.items():\n", " for q2, p2 in pmf2.items():\n", " q = q1 + q2\n", " p = p1 * p2\n", " res[q] = res(q) + p\n", " return res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The parameters are `Pmf` objects representing distributions.\n", "\n", "The loops iterate though the quantities and probabilities in the `Pmf` objects.\n", "Each time through the loop `q` gets the sum of a pair of quantities, and `p` gets the probability of the pair.\n", "Because the same sum might appear more than once, we have to add up the total probability for each sum." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice a subtle element of this line:\n", "\n", "```\n", " res[q] = res(q) + p\n", "```\n", "\n", "I use parentheses on the right side of the assignment, which returns 0 if `q` does not appear yet in `res`.\n", "I use brackets on the left side of the assignment to create or update an element in `res`; using parentheses on the left side would not work.\n", "\n", "`Pmf` provides `add_dist`, which does the same thing.\n", "You can call it as a method, like this:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.199932Z", "iopub.status.busy": "2021-04-16T19:35:26.199258Z", "iopub.status.idle": "2021-04-16T19:35:26.200896Z", "shell.execute_reply": "2021-04-16T19:35:26.201275Z" } }, "outputs": [], "source": [ "twice = die.add_dist(die)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or as a function, like this:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.205592Z", "iopub.status.busy": "2021-04-16T19:35:26.205163Z", "iopub.status.idle": "2021-04-16T19:35:26.206990Z", "shell.execute_reply": "2021-04-16T19:35:26.206626Z" } }, "outputs": [], "source": [ "twice = Pmf.add_dist(die, die)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what the result looks like:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.210188Z", "iopub.status.busy": "2021-04-16T19:35:26.209766Z", "iopub.status.idle": "2021-04-16T19:35:26.211302Z", "shell.execute_reply": "2021-04-16T19:35:26.211647Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from utils import decorate\n", "\n", "def decorate_dice(title=''):\n", " decorate(xlabel='Outcome',\n", " ylabel='PMF',\n", " title=title)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.239441Z", "iopub.status.busy": "2021-04-16T19:35:26.238769Z", "iopub.status.idle": "2021-04-16T19:35:26.367977Z", "shell.execute_reply": "2021-04-16T19:35:26.368514Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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ev/991VRUaEdO3ZoxowZisfjmjBhgv70pz9px44dqVM4Xn311ZozZ45uuOEGSVJeXp52796tdevWadGiRTpw4ICmTp2qK6+8Ui+88IKuueYahcNhPfbYYyosLNTRo0c1f/58vfXWW585UT1wuiCwwDiXTCZPKWD79+/XN7/5zdR5fs8++2xJ0q5du3TrrbfqrLPOkvTplxDs3LkzFdhQKCRJKi4uls/n06WXXipJKioq0ttvv60rrrhCe/fu1W233ZZ6rN7eXh07dkz5+fmf/xcFxhkCC4wThYWFevPNN3X8+PHPPIttbm5WJBLR1q1b1d/fL+nTr008mZOdHXWw2/873F/60pckSWeccUbq+ontvr4+JZNJ5eTkpJ4pA6c73oMFxolLL71UN954o1auXKlEIiFJ+u1vf6v29nZ997vf1dSpU3Xw4EFJ0h/+8IfUfhMnTlRXV1dq+8orr9T+/fv12muvSZLi8bh6eno0f/58/e53v1NPT4+6u7u1efNmzZ8/f9jznXPOOQoEAqqtrU3d9tJLL32u3xkYzwgsMI7U1NTojDPOkM/nk8/n05YtW/Tcc8/prLPO0v3336/Vq1frqquuUjweT+1z4rtnZ86cqdtvv13nn3++6urqVFFRoZkzZ6q0tFRdXV361re+pYULF+qKK67QFVdcoRtvvDH18vBw1dfX649//KOKiork9/v161//Ot2HABg3+DYdAAAM8AwWAAADBBYAAAMEFgAAAwQWAAADBBYAAAMEFgAAAwQWAAADBBYAAAP/DxRhrV+/t3HPAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "twice = add_dist(die, die)\n", "twice.bar(color='C1', alpha=0.5)\n", "decorate_dice()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we have a sequence of `Pmf` objects that represent dice, we can compute the distribution of the sum like this:\n" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.371912Z", "iopub.status.busy": "2021-04-16T19:35:26.371501Z", "iopub.status.idle": "2021-04-16T19:35:26.374367Z", "shell.execute_reply": "2021-04-16T19:35:26.374905Z" } }, "outputs": [], "source": [ "def add_dist_seq(seq):\n", " \"\"\"Compute Pmf of the sum of values from seq.\"\"\"\n", " total = seq[0]\n", " for other in seq[1:]:\n", " total = total.add_dist(other)\n", " return total" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example, we can make a list of three dice like this:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.378258Z", "iopub.status.busy": "2021-04-16T19:35:26.377654Z", "iopub.status.idle": "2021-04-16T19:35:26.380487Z", "shell.execute_reply": "2021-04-16T19:35:26.380982Z" } }, "outputs": [], "source": [ "dice = [die] * 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can compute the distribution of their sum like this." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.385882Z", "iopub.status.busy": "2021-04-16T19:35:26.385458Z", "iopub.status.idle": "2021-04-16T19:35:26.388695Z", "shell.execute_reply": "2021-04-16T19:35:26.389169Z" } }, "outputs": [], "source": [ "thrice = add_dist_seq(dice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows what these three distributions look like:\n", "\n", "- The distribution of a single die is uniform from 1 to 6.\n", "\n", "- The sum of two dice has a triangle distribution between 2 and 12.\n", "\n", "- The sum of three dice has a bell-shaped distribution between 3\n", " and 18." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.421840Z", "iopub.status.busy": "2021-04-16T19:35:26.406759Z", "iopub.status.idle": "2021-04-16T19:35:26.603342Z", "shell.execute_reply": "2021-04-16T19:35:26.602970Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "die.plot(label='once')\n", "twice.plot(label='twice', ls='--')\n", "thrice.plot(label='thrice', ls=':')\n", "\n", "plt.xticks([0,3,6,9,12,15,18])\n", "decorate_dice(title='Distributions of sums')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an aside, this example demonstrates the Central Limit Theorem, which says that the distribution of a sum converges on a bell-shaped normal distribution, at least under some conditions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gluten Sensitivity\n", "\n", "In 2015 I read a paper that tested whether people diagnosed with gluten sensitivity (but not celiac disease) were able to distinguish gluten flour from non-gluten flour in a blind challenge\n", "([you can read the paper here](https://onlinelibrary.wiley.com/doi/full/10.1111/apt.13372)).\n", "\n", "Out of 35 subjects, 12 correctly identified the gluten flour based on\n", "resumption of symptoms while they were eating it. Another 17 wrongly\n", "identified the gluten-free flour based on their symptoms, and 6 were\n", "unable to distinguish.\n", "\n", "The authors conclude, \"Double-blind gluten challenge induces symptom\n", "recurrence in just one-third of patients.\"\n", "\n", "This conclusion seems odd to me, because if none of the patients were\n", "sensitive to gluten, we would expect some of them to identify the gluten flour by chance. \n", "So here's the question: based on this data, how many of the subjects are sensitive to gluten and how many are guessing?\n", "\n", "We can use Bayes's Theorem to answer this question, but first we have to make some modeling decisions. I'll assume:\n", "\n", "- People who are sensitive to gluten have a 95% chance of correctly\n", " identifying gluten flour under the challenge conditions, and\n", "\n", "- People who are not sensitive have a 40% chance of identifying the\n", " gluten flour by chance (and a 60% chance of either choosing the\n", " other flour or failing to distinguish).\n", "\n", "These particular values are arbitrary, but the results are not sensitive to these choices.\n", "\n", "I will solve this problem in two steps. First, assuming that we know how many subjects are sensitive, I will compute the distribution of the data. \n", "Then, using the likelihood of the data, I will compute the posterior distribution of the number of sensitive patients.\n", "\n", "The first is the **forward problem**; the second is the **inverse\n", "problem**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Forward Problem\n", "\n", "Suppose we know that 10 of the 35 subjects are sensitive to gluten. That\n", "means that 25 are not:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.606680Z", "iopub.status.busy": "2021-04-16T19:35:26.606215Z", "iopub.status.idle": "2021-04-16T19:35:26.607888Z", "shell.execute_reply": "2021-04-16T19:35:26.608296Z" } }, "outputs": [], "source": [ "n = 35\n", "num_sensitive = 10\n", "num_insensitive = n - num_sensitive" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each sensitive subject has a 95% chance of identifying the gluten flour,\n", "so the number of correct identifications follows a binomial distribution.\n", "\n", "I'll use `make_binomial`, which we defined in <<_TheBinomialDistribution>>, to make a `Pmf` that represents the binomial distribution." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.612684Z", "iopub.status.busy": "2021-04-16T19:35:26.612204Z", "iopub.status.idle": "2021-04-16T19:35:26.613941Z", "shell.execute_reply": "2021-04-16T19:35:26.614305Z" } }, "outputs": [], "source": [ "from utils import make_binomial\n", "\n", "dist_sensitive = make_binomial(num_sensitive, 0.95)\n", "dist_insensitive = make_binomial(num_insensitive, 0.40)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are the distributions for the number of correct identifications in each group.\n", "\n", "Now we can use `add_dist` to compute the distribution of the total number of correct identifications:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.618422Z", "iopub.status.busy": "2021-04-16T19:35:26.618001Z", "iopub.status.idle": "2021-04-16T19:35:26.620089Z", "shell.execute_reply": "2021-04-16T19:35:26.619662Z" } }, "outputs": [], "source": [ "dist_total = Pmf.add_dist(dist_sensitive, dist_insensitive)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the results:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.644030Z", "iopub.status.busy": "2021-04-16T19:35:26.631462Z", "iopub.status.idle": "2021-04-16T19:35:26.800922Z", "shell.execute_reply": "2021-04-16T19:35:26.800528Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dist_sensitive.plot(label='sensitive', ls=':')\n", "dist_insensitive.plot(label='insensitive', ls='--')\n", "dist_total.plot(label='total')\n", "\n", "decorate(xlabel='Number of correct identifications',\n", " ylabel='PMF',\n", " title='Gluten sensitivity')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We expect most of the sensitive subjects to identify the gluten flour correctly.\n", "Of the 25 insensitive subjects, we expect about 10 to identify the gluten flour by chance.\n", "So we expect about 20 correct identifications in total.\n", "\n", "This is the answer to the forward problem: given the number of sensitive subjects, we can compute the distribution of the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Inverse Problem\n", "\n", "Now let's solve the inverse problem: given the data, we'll compute the posterior distribution of the number of sensitive subjects.\n", "\n", "Here's how. I'll loop through the possible values of `num_sensitive` and compute the distribution of the data for each:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.820717Z", "iopub.status.busy": "2021-04-16T19:35:26.819593Z", "iopub.status.idle": "2021-04-16T19:35:26.868275Z", "shell.execute_reply": "2021-04-16T19:35:26.867749Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "\n", "table = pd.DataFrame()\n", "for num_sensitive in range(0, n+1):\n", " num_insensitive = n - num_sensitive\n", " dist_sensitive = make_binomial(num_sensitive, 0.95)\n", " dist_insensitive = make_binomial(num_insensitive, 0.4)\n", " dist_total = Pmf.add_dist(dist_sensitive, dist_insensitive) \n", " table[num_sensitive] = dist_total" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The loop enumerates the possible values of `num_sensitive`.\n", "For each value, it computes the distribution of the total number of correct identifications, and stores the result as a column in a Pandas `DataFrame`." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.872557Z", "iopub.status.busy": "2021-04-16T19:35:26.871819Z", "iopub.status.idle": "2021-04-16T19:35:26.898135Z", "shell.execute_reply": "2021-04-16T19:35:26.897756Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...26272829303132333435
01.719071e-081.432559e-091.193799e-109.948326e-128.290272e-136.908560e-145.757133e-154.797611e-163.998009e-173.331674e-18...1.501694e-361.251411e-371.042843e-388.690357e-407.241964e-416.034970e-425.029142e-434.190952e-443.492460e-452.910383e-46
14.011165e-075.968996e-087.162795e-097.792856e-108.013930e-117.944844e-127.676178e-137.276377e-146.796616e-156.274653e-16...7.508469e-346.486483e-355.596590e-364.823148e-374.152060e-383.570691e-393.067777e-402.633315e-412.258457e-421.935405e-43
24.545987e-069.741401e-071.709122e-072.506426e-083.269131e-093.940182e-104.490244e-114.908756e-125.197412e-135.365476e-14...1.806613e-311.620070e-321.449030e-331.292922e-341.151034e-351.022555e-369.066202e-388.023344e-397.088005e-406.251357e-41
\n", "

3 rows × 36 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 \\\n", "0 1.719071e-08 1.432559e-09 1.193799e-10 9.948326e-12 8.290272e-13 \n", "1 4.011165e-07 5.968996e-08 7.162795e-09 7.792856e-10 8.013930e-11 \n", "2 4.545987e-06 9.741401e-07 1.709122e-07 2.506426e-08 3.269131e-09 \n", "\n", " 5 6 7 8 9 ... \\\n", "0 6.908560e-14 5.757133e-15 4.797611e-16 3.998009e-17 3.331674e-18 ... \n", "1 7.944844e-12 7.676178e-13 7.276377e-14 6.796616e-15 6.274653e-16 ... \n", "2 3.940182e-10 4.490244e-11 4.908756e-12 5.197412e-13 5.365476e-14 ... \n", "\n", " 26 27 28 29 30 \\\n", "0 1.501694e-36 1.251411e-37 1.042843e-38 8.690357e-40 7.241964e-41 \n", "1 7.508469e-34 6.486483e-35 5.596590e-36 4.823148e-37 4.152060e-38 \n", "2 1.806613e-31 1.620070e-32 1.449030e-33 1.292922e-34 1.151034e-35 \n", "\n", " 31 32 33 34 35 \n", "0 6.034970e-42 5.029142e-43 4.190952e-44 3.492460e-45 2.910383e-46 \n", "1 3.570691e-39 3.067777e-40 2.633315e-41 2.258457e-42 1.935405e-43 \n", "2 1.022555e-36 9.066202e-38 8.023344e-39 7.088005e-40 6.251357e-41 \n", "\n", "[3 rows x 36 columns]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows selected columns from the `DataFrame`, corresponding to different hypothetical values of `num_sensitive`:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:26.936312Z", "iopub.status.busy": "2021-04-16T19:35:26.919136Z", "iopub.status.idle": "2021-04-16T19:35:27.103426Z", "shell.execute_reply": "2021-04-16T19:35:27.102967Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "table[0].plot(label='num_sensitive = 0')\n", "table[10].plot(label='num_sensitive = 10')\n", "table[20].plot(label='num_sensitive = 20', ls='--')\n", "table[30].plot(label='num_sensitive = 30', ls=':')\n", " \n", "decorate(xlabel='Number of correct identifications',\n", " ylabel='PMF',\n", " title='Gluten sensitivity')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use this table to compute the likelihood of the data:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.107058Z", "iopub.status.busy": "2021-04-16T19:35:27.106504Z", "iopub.status.idle": "2021-04-16T19:35:27.109131Z", "shell.execute_reply": "2021-04-16T19:35:27.109567Z" } }, "outputs": [], "source": [ "likelihood1 = table.loc[12]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`loc` selects a row from the `DataFrame`.\n", "The row with index 12 contains the probability of 12 correct identifications for each hypothetical value of `num_sensitive`.\n", "And that's exactly the likelihood we need to do a Bayesian update.\n", "\n", "I'll use a uniform prior, which implies that I would be equally surprised by any value of `num_sensitive`:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.113201Z", "iopub.status.busy": "2021-04-16T19:35:27.112749Z", "iopub.status.idle": "2021-04-16T19:35:27.115326Z", "shell.execute_reply": "2021-04-16T19:35:27.114769Z" } }, "outputs": [], "source": [ "hypos = np.arange(n+1)\n", "prior = Pmf(1, hypos)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the update:\n" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.119898Z", "iopub.status.busy": "2021-04-16T19:35:27.119367Z", "iopub.status.idle": "2021-04-16T19:35:27.127041Z", "shell.execute_reply": "2021-04-16T19:35:27.126620Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/plain": [ "0.4754741648615131" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior1 = prior * likelihood1\n", "posterior1.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For comparison, I also compute the posterior for another possible outcome, 20 correct identifications." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.132181Z", "iopub.status.busy": "2021-04-16T19:35:27.131596Z", "iopub.status.idle": "2021-04-16T19:35:27.133996Z", "shell.execute_reply": "2021-04-16T19:35:27.134357Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/plain": [ "1.7818649765887378" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "likelihood2 = table.loc[20]\n", "posterior2 = prior * likelihood2\n", "posterior2.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows posterior distributions of `num_sensitive` based on the actual data, 12 correct identifications, and the other possible outcome, 20 correct identifications." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.180198Z", "iopub.status.busy": "2021-04-16T19:35:27.174890Z", "iopub.status.idle": "2021-04-16T19:35:27.299021Z", "shell.execute_reply": "2021-04-16T19:35:27.298634Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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ydG6FCLSkE6nw5/+9CdERUUhNjbWduZVUVGBxx9/HBEREYiIiMD7778PACgpKcG9996LqKgoRERE4MUXX0R6ejree+89LFq0CCaTCStXroTVasWLL76I3r17IzIyEi+88EK1fb7++uvo378/VqxYgWnTpuGTTz4BUDXu7YgRIxAVFYVevXph+/btAKoCfMCAAZg2bRri4uJw+vRp2/by8/PRrVs3AMDly5eh0+nw1VdfAQBmzJiBVatW4dSpU7azzjlz5iA7OxsmkwkPP/ywbTvz5s1DTEwMoqKikJGRUev7NXToUPj4+NT6fOvWrQEA8fHx1eq71sWLF3H//fcjMjISUVFRtnZv2bIF8fHxiIqKwujRo3H27FkAwNy5c5GUlISRI0di2LBhtb4PX3zxBfr06YOYmBhMmDABly5dAgCcOnUKI0eORFRUFKKjo/HTTz9hzpw5UFUVJpMJw4cPv8FPRf3xKuJaSJKEr/+zG7IsITSuk9blEDmtVQu341xWYaNvt2OQNyY82femy6mqioCAABw4cADffPMNHnnkEezevRvvvfceLly4gAMHDqCwsBDx8fFISEhARkYG2rZtiy+//BIAUFBQAB8fH8ycORM6nQ4vvfQSAGDJkiUQQmDnzp1QVRX33HMPvv/+e4wcORKqqqJDhw7YunUrAFQ7I3zyyScxatQoPPnkk9i1axfuu+8+HDt2DACwa9cuLF68GD179qzWhrZt28LDwwOnT5/GoUOHEBcXh5SUFNxzzz3YtGkTXn/9dVy5csW2/N///nccPHgQqamp1d4Ho9GIffv24c0338Sbb76JxYsXN+i9f++99zBixIhaX/v973+PiIgIrFixAgCQl5eH8vJyPPDAA/jqq68QGxuLBQsW4KmnnsJnn30GANi+fTu2b98OT09PpKSkVHsf0tPT8Z///AebNm2Cq6sr5s+fj9deew3z58/H5MmTMXPmTEyZMgVWqxWXL1/GsGHD8M4771Rr++3gGewNhPUxIPdkAQrOF2tdChFpaMqUKQCAMWPG4MSJE7hy5QpSUlLwyCOPQJZltG3bFmPHjsXGjRsRFRWFlJQUPPPMM1i3bh28vLxq3eZ3332HL774AiaTCXFxcUhPT7cFJQBMnjy51vVSUlIwffp0AECvXr3g7e1tWy8mJqZGuF41aNAgpKSkYOPGjXj++eexbds2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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "posterior1.plot(label='posterior with 12 correct', color='C4')\n", "posterior2.plot(label='posterior with 20 correct', color='C1')\n", "\n", "decorate(xlabel='Number of sensitive subjects',\n", " ylabel='PMF',\n", " title='Posterior distributions')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With 12 correct identifications, the most likely conclusion is that none of the subjects are sensitive to gluten.\n", "If there had been 20 correct identifications, the most likely conclusion would be that 11-12 of the subjects were sensitive." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.302382Z", "iopub.status.busy": "2021-04-16T19:35:27.301973Z", "iopub.status.idle": "2021-04-16T19:35:27.306032Z", "shell.execute_reply": "2021-04-16T19:35:27.306511Z" } }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior1.max_prob()" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.310142Z", "iopub.status.busy": "2021-04-16T19:35:27.309624Z", "iopub.status.idle": "2021-04-16T19:35:27.311979Z", "shell.execute_reply": "2021-04-16T19:35:27.312474Z" } }, "outputs": [ { "data": { "text/plain": [ "11" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior2.max_prob()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "This chapter presents two topics that are almost unrelated except that they make the title of the chapter catchy.\n", "\n", "The first part of the chapter is about Bayes's Rule, evidence, and how we can quantify the strength of evidence using a likelihood ratio or Bayes factor.\n", "\n", "The second part is about `add_dist`, which computes the distribution of a sum.\n", "We can use this function to solve forward and inverse problems; that is, given the parameters of a system, we can compute the distribution of the data or, given the data, we can compute the distribution of the parameters.\n", "\n", "In the next chapter, we'll compute distributions for minimums and maximums, and use them to solve more Bayesian problems.\n", "But first you might want to work on these exercises." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Let's use Bayes's Rule to solve the Elvis problem from <<_Distributions>>:\n", "\n", "> Elvis Presley had a twin brother who died at birth. What is the probability that Elvis was an identical twin?\n", "\n", "In 1935, about 2/3 of twins were fraternal and 1/3 were identical.\n", "The question contains two pieces of information we can use to update this prior.\n", "\n", "* First, Elvis's twin was also male, which is more likely if they were identical twins, with a likelihood ratio of 2.\n", "\n", "* Also, Elvis's twin died at birth, which is more likely if they were identical twins, with a likelihood ratio of 1.25.\n", "\n", "If you are curious about where those numbers come from, I wrote [a blog post about it](https://www.allendowney.com/blog/2020/01/28/the-elvis-problem-revisited)." ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.315665Z", "iopub.status.busy": "2021-04-16T19:35:27.315244Z", "iopub.status.idle": "2021-04-16T19:35:27.317350Z", "shell.execute_reply": "2021-04-16T19:35:27.317875Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "prior_odds = odds(1/3)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.320891Z", "iopub.status.busy": "2021-04-16T19:35:27.320486Z", "iopub.status.idle": "2021-04-16T19:35:27.322254Z", "shell.execute_reply": "2021-04-16T19:35:27.322625Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "post_odds = prior_odds * 2 * 1.25" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.326406Z", "iopub.status.busy": "2021-04-16T19:35:27.325724Z", "iopub.status.idle": "2021-04-16T19:35:27.328858Z", "shell.execute_reply": "2021-04-16T19:35:27.328390Z" } }, "outputs": [ { "data": { "text/plain": [ "0.5555555555555555" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "prob(post_odds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** The following is an [interview question that appeared on glassdoor.com](https://www.glassdoor.com/Interview/You-re-about-to-get-on-a-plane-to-Seattle-You-want-to-know-if-you-should-bring-an-umbrella-You-call-3-random-friends-of-y-QTN_519262.htm), attributed to Facebook:\n", "\n", "> You're about to get on a plane to Seattle. You want to know if you should bring an umbrella. You call 3 random friends of yours who live there and ask each independently if it's raining. Each of your friends has a 2/3 chance of telling you the truth and a 1/3 chance of messing with you by lying. All 3 friends tell you that \"Yes\" it is raining. What is the probability that it's actually raining in Seattle?\n", "\n", "Use Bayes's Rule to solve this problem. As a prior you can assume that it rains in Seattle about 10% of the time.\n", "\n", "This question causes some confusion about the differences between Bayesian and frequentist interpretations of probability; if you are curious about this point, [I wrote a blog article about it](http://allendowney.blogspot.com/2016/09/bayess-theorem-is-not-optional.html)." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.332446Z", "iopub.status.busy": "2021-04-16T19:35:27.331910Z", "iopub.status.idle": "2021-04-16T19:35:27.333826Z", "shell.execute_reply": "2021-04-16T19:35:27.334261Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "prior_odds = odds(0.1)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.337763Z", "iopub.status.busy": "2021-04-16T19:35:27.337222Z", "iopub.status.idle": "2021-04-16T19:35:27.339316Z", "shell.execute_reply": "2021-04-16T19:35:27.339799Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "post_odds = prior_odds * 2 * 2 * 2" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.344018Z", "iopub.status.busy": "2021-04-16T19:35:27.343298Z", "iopub.status.idle": "2021-04-16T19:35:27.346940Z", "shell.execute_reply": "2021-04-16T19:35:27.346413Z" } }, "outputs": [ { "data": { "text/plain": [ "0.4705882352941177" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "prob(post_odds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** [According to the CDC](https://www.cdc.gov/tobacco/data_statistics/fact_sheets/health_effects/effects_cig_smoking), people who smoke are about 25 times more likely to develop lung cancer than nonsmokers.\n", "\n", "[Also according to the CDC](https://www.cdc.gov/tobacco/data_statistics/fact_sheets/adult_data/cig_smoking/index.htm), about 14\\% of adults in the U.S. are smokers.\n", "If you learn that someone has lung cancer, what is the probability they are a smoker?" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.350794Z", "iopub.status.busy": "2021-04-16T19:35:27.350217Z", "iopub.status.idle": "2021-04-16T19:35:27.352716Z", "shell.execute_reply": "2021-04-16T19:35:27.352226Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "prior_odds = odds(0.14)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.356825Z", "iopub.status.busy": "2021-04-16T19:35:27.356098Z", "iopub.status.idle": "2021-04-16T19:35:27.358326Z", "shell.execute_reply": "2021-04-16T19:35:27.358809Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "post_odds = prior_odds * 25" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.363702Z", "iopub.status.busy": "2021-04-16T19:35:27.362765Z", "iopub.status.idle": "2021-04-16T19:35:27.365904Z", "shell.execute_reply": "2021-04-16T19:35:27.366304Z" } }, "outputs": [ { "data": { "text/plain": [ "0.8027522935779816" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "prob(post_odds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** In *Dungeons & Dragons*, the amount of damage a goblin can withstand is the sum of two six-sided dice. The amount of damage you inflict with a short sword is determined by rolling one six-sided die.\n", "A goblin is defeated if the total damage you inflict is greater than or equal to the amount it can withstand.\n", "\n", "Suppose you are fighting a goblin and you have already inflicted 3 points of damage. What is your probability of defeating the goblin with your next successful attack?\n", "\n", "Hint: You can use `Pmf.sub_dist` to subtract a constant amount, like 3, from a `Pmf`." ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.370205Z", "iopub.status.busy": "2021-04-16T19:35:27.369557Z", "iopub.status.idle": "2021-04-16T19:35:27.371649Z", "shell.execute_reply": "2021-04-16T19:35:27.371182Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "d6 = make_die(6)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.375761Z", "iopub.status.busy": "2021-04-16T19:35:27.375251Z", "iopub.status.idle": "2021-04-16T19:35:27.377911Z", "shell.execute_reply": "2021-04-16T19:35:27.377227Z" } }, "outputs": [], "source": [ "# Solution\n", "# The amount the goblin started with is the sum of two d6\n", "hp_before = Pmf.add_dist(d6, d6)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
-10.027778
00.055556
10.083333
20.111111
30.138889
40.166667
50.138889
60.111111
70.083333
80.055556
90.027778
\n", "
" ], "text/plain": [ "-1 0.027778\n", " 0 0.055556\n", " 1 0.083333\n", " 2 0.111111\n", " 3 0.138889\n", " 4 0.166667\n", " 5 0.138889\n", " 6 0.111111\n", " 7 0.083333\n", " 8 0.055556\n", " 9 0.027778\n", "dtype: float64" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "# Here's the number of hit points after the first attack\n", "hp_after = Pmf.sub_dist(hp_before, 3)\n", "hp_after" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
-10.000000
00.000000
10.090909
20.121212
30.151515
40.181818
50.151515
60.121212
70.090909
80.060606
90.030303
\n", "
" ], "text/plain": [ "-1 0.000000\n", " 0 0.000000\n", " 1 0.090909\n", " 2 0.121212\n", " 3 0.151515\n", " 4 0.181818\n", " 5 0.151515\n", " 6 0.121212\n", " 7 0.090909\n", " 8 0.060606\n", " 9 0.030303\n", "dtype: float64" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "# But -1 and 0 are not possible, because in that case the goblin would be defeated.\n", "# So we have to zero them out and renormalize\n", "hp_after[[-1, 0]] = 0\n", "hp_after.normalize()\n", "hp_after" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.382061Z", "iopub.status.busy": "2021-04-16T19:35:27.381402Z", "iopub.status.idle": "2021-04-16T19:35:27.383660Z", "shell.execute_reply": "2021-04-16T19:35:27.383155Z" } }, "outputs": [], "source": [ "# Solution\n", "# The damage from the second attack is one d6\n", "damage = d6" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.424920Z", "iopub.status.busy": "2021-04-16T19:35:27.406232Z", "iopub.status.idle": "2021-04-16T19:35:27.539862Z", "shell.execute_reply": "2021-04-16T19:35:27.539344Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAFgCAYAAAAYQGiBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAAuJAAALiQE3ycutAAAs7ElEQVR4nO3df1iUdb7/8dcIqSuKku0xdcZfO+I6IIxGWi5qupmpZRtRlDqkUGphZ7M9W1mWZaX267R1jp2Mc1gVf12ZlJZsmgmbmrqiTtnBFilRB3It1x+Qq8Iw3z/6ep9YEAH5gMrzcV1zXXPf87k/9/tzl76877nnc9sCgUBAAACgXjVr7AIAALgcEbAAABhAwAIAYAABCwCAAQQsAAAGELAAABhAwAIAYAABC1yggoIC2Ww2HTt2rLFLsZyvpuzsbLVr185aHjlypN58882GKe48JkyYoIcffvicn99www36wx/+0GD1AHVFwALn0bp1a+sVFBSkFi1aWMsjR440ss8jR47ot7/9rbp3766QkBDZ7XaNHDlSa9asMbK/P/3pT3rwwQfrtG12drZsNpt1TLp06aLp06ervLy8nqsELi3BjV0AcLErKSmx3t9www36zW9+U+EMq6CgoF73d+zYMQ0cOFC9e/fWmjVr1KtXL5WWliorK0vvv/++Ro8eXa/7qw9t27a1zpZ3796tG2+8Ud27d9ekSZMqtCsrK1NwMH/toGngDBaoJx988IGcTqfatWunCRMmqLS01Pps586dGjp0qK688ko5nU6lpqaes58//OEPCg4O1rvvviuXy6WgoCC1bNlSI0eO1Pz58612xcXFmjRpkjp27KiOHTtqypQp+uGHHyr0tWLFCnXr1k3t27fXgw8+qDNnzlS5z59edj17+fi///u/5XA41L59ez366KM1Pg59+vTRoEGDtHv3butS9R//+Ec5nU517txZkrRu3Tr17dtXbdu2Vb9+/bR+/foKfZw4cUK33367WrduraioKG3atOmc+6vu2D7zzDO69dZbNWXKFLVt21bdu3dXVlaW3nvvPTmdToWFhenJJ5+s8diA2iBggXqyZs0a7dy5U7m5uVq/fr2WLFkiSTp06JCGDx+uBx54QN99953ef/99zZw5U5988kmV/axdu1Z33HHHec/0fvvb3yo/P19ffvmldu/era+++krTpk2r0Oa9996T1+vV7t279dlnn2nOnDk1GktxcbF2796tvXv3atOmTZo3b56ys7NrtO3nn3+uTz/9VP369bPWrV69Wjk5Odq3b5++/vpr3XbbbXrqqad05MgRPfHEExozZoz27dtntV+yZImSkpJ07NgxPfjggxozZkyV3yfX5NiuXbtWN954o/7+979r3LhxGj9+vN5//319/vnn2rRpk1555RXt3LmzRmMDaoOABerJM888o9DQUHXq1EkjR47Ujh07JEnp6ekaPHiw7rrrLgUFBSkyMlITJ07U0qVLq+zn+++/V6dOnazlvXv3ql27dmrbtq1atmyp48ePq7y8XEuXLtWcOXPUvn17XXXVVZo9e7YWLVpU4bvPZ555Ru3atVOnTp00ffp0paen12gsgUBAc+bMUcuWLdW7d28NHDjQGk9Vjh8/rnbt2iksLEx33XWXHnroIU2YMMH6fObMmWrXrp1atWql5cuX64YbblBcXJyCg4MVHx+v2NhYLVu2zGr/61//WrfeequCg4M1ZcoUdejQQR9++GGl/dbk2Pbr10/x8fEKCgrS2LFjVVRUpOnTpyskJEQRERGKjo4mYGEEX4YA9eTqq6+23oeEhFhnXAUFBcrMzKxw167f79egQYOq7Oeqq65SUVGRtdyzZ08dO3ZMBQUF6t69uwKBgL777judPn1a3bp1s9r16NFDp0+f1vfff2+t69q1a4X3hYWFNRpLaGioWrVqVWE8xcXF52z/0+9gq9KlSxfrvc/nq1D32dp9Pl+VdVdXe02O7U//u5wd0z+v++n37EB94QwWMMzhcOj222/XsWPHrFdxcbEyMzOrbD98+HBlZGTI7/efs8+f//znat68eYUbrPbt26cWLVroqquustbt37/fen/gwAHrO9CG1qzZ//1VY7fbK90Ytm/fPtntdmv5p3VL5669tscWaEgELGCYx+PRhg0btHLlSpWWlqq0tFRer1fbt2+vsv20adN0+vRp3XXXXdqzZ4/8fr/OnDmjzz77zGrTrFkzjR07Vk8++aT+/ve/68iRI3ryySfl8XgqhNmsWbN07NgxFRUVac6cORo3bpzx8Z5PQkKCsrOztWrVKvn9fmVkZGjjxo26++67rTYbNmzQmjVrVFZWptTUVH377bdV3j1d22MLNCQCFjCsc+fOWrt2rebPn6+OHTuqQ4cOSklJ0YkTJ6psHxYWpi1btqhjx466+eab1aZNG/3iF7/QokWL9OGHH1qXQ19//XV169ZNLpdLERERcjqd+vd///cKfd12221yu92KjIzUgAED9MQTT5ge7nk5nU5lZGRo5syZCgsL06xZs/Tee++pR48eVpuxY8cqNTVV7dq10xtvvKFVq1YpLCysUl+1PbZAQ7IFAoFAYxcBAMDlhjNYAAAMIGABADCAgAUAwAACFgAAA5rURBOhoaEVfmsHAMCF8Pl857xrvUkFrN1uV25ubmOXAQC4TLhcrnN+xiViAAAMIGABADCgSV0iBoCmgPmD6p/NZqv1NgQsAFwmysvLdfDgQZ08ebKxS7nstGrVSg6Ho8Jc3+dDwALAZeK7776TzWZTeHh4rYIA1SsvL1dhYaG+++47dejQocbbEbAAcJk4fvy4unbtqqCgoMYu5bISFBSkDh06aP/+/bUKWP6JAwCXgUAgIL/fryuuuKKxS7ksXXHFFfL7/bX6fpuABYDLSF1uxsH51eW4ErAAgHpls9ms5xD37t1b//Zv/6bi4uLGLqvBEbAAgHoVFBQkr9erL7/8Utu2bdPBgwd1++23N3ZZDY6ABQAYExoaqrfffltbtmzRF198IUmKj49XTEyMIiMjNW3aNKvthAkT9MADD+jGG29U165dtXz5cj3//PPq27evrr32Wh06dEiS9Kc//UnXXXed+vXrpwEDBmjnzp1WH3PnzlXPnj11/fXXa/LkybrvvvskSf/4xz80ZcoU9e/fX3369NF//ud/Gh87dxEDwGWo7LNFChwrqvd+be06KXhgYq22adu2rZxOp/bs2aOoqCjNnz9f7du3V3l5ueLi4rR27VqNGDFCklRYWKh169bpyy+/1PXXX6//+Z//0a5du/Too49q/vz5mjlzpq677jp99tlnatasmXbu3KmUlBRt2bJFO3bs0IIFC7Rr1y41b95cN9xwgzVX8Jw5c9S3b1+99dZbOnXqlH71q19p2LBh1c4lfKEIWOAydsdT7zbo/lY+F9+g+8Ol5eyNQm+//bbeeecd+f1+HT58WLGxsVbA3nbbbWrWrJn69OmjU6dOWZeW3W631q1bJ0k6dOiQxo8fr/379ys4OFj5+fmSpI0bN2rMmDFq3bq1JCkhIUG7d++WJGVmZuof//iH/uu//kuSdOLECf31r38lYAEAtVPbs0yTTpw4oa+//loul0t//vOftXLlSn366adq06aNfve73+nUqVNW2xYtWkj6MYxtNpu13KxZM5WVlUmSHnzwQU2aNEn33HOPiouLFRYWZm1/rrt9A4GAlixZIrfbbWiUlfEdLADAmOLiYk2ZMkUDBw5UZGSkTpw4oXbt2qlNmzY6cuSIVq5cWes+T5w4YT3b++2337bWDxo0SKtWrVJJSYnOnDmjd955x/ps5MiRev311+X3+yVJ+fn5xu9sJmABAPXK7/dbP9Pp37+/OnfurIyMDEnSzTffrNatWysiIkLjx4/XkCFDat3/c889p4kTJyo2NlalpaXW+muuuUYej0d9+/bViBEjFBUVpdDQUEnSjBkz1Lp1a0VHR6tPnz667777dPr06foZ8DnYAk3osQsul4sHrqNJ4TvYpiMQCOirr77SL3/5yyY92URJSYlat26t0tJS/eY3v9H48eN1zz33XHC/5zq+1eUK38ECAC4bKSkp8nq9On36tIYPH66EhIRGq4WABQBcNhYuXNjYJViMfgeblZUll8slp9OppKQk6w6wn3rooYdkt9sVHFwx69966y253W7r1bx5c61atUrSjz9G7tq1q/XZokWLTA4DAIBaMxawfr9fycnJWrFihfLz81VSUqL09PRK7RISErRjx45K66dMmSKv1yuv16sPPvhAISEh1u+kJOmFF16wPk9MvHhuRwcAQDIYsNu3b5fdbldERIQkKTk52bqL7KdiY2PP+3y9JUuWKC4uTi1btjRSKwAA9c1YwPp8PjkcDmu5S5cu8vl8depr8eLF8ng8FdY9++yzioqKksfjsean/Gfz5s2Ty+WyXkePHq3T/gEAqC2j38H+9Fbmuv4aaNeuXTpx4kSF30rNnj1beXl58nq96tWrlyZOnFjltikpKcrNzbVeP53tAwBgxj/fU7Np0ybdcMMNkqScnBxNmTJFklRQUFDv99CMGjVKhw8frraNif1WxdhdxA6HQwcOHLCWfT6fNfNGbSxevFjjxo2rENadOnWS9GOAP/zww3r11VcvvGAAuMyY+B30hf7WOSYmRjExMZL+L+jq8z6azMzM87Yxsd+qGDuDjYmJUWFhofUD3LS0NMXFxdWqD7/fr2XLllW6PFxU9H9PiFi+fLmioqIuvGAAgHHZ2dm68cYbJUnTpk3Ttm3b5Ha79fjjj1dq261bNz3xxBPq27ev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ScOHD9eAAQPUq1cvDRkyRK+++qratGkjSZo7d64WLVqk8PBwLVu2TLNnzzY1jMsSl80r45hUxPGoiONRGcfk/GyBc32BCQAA6oyZnAAAMICABQDAAAK2CanJ1JVNycGDB/XrX/9avXv3VmRkpGbMmNHYJV00HnzwQQUHG/0V3yWjpKREiYmJCg8P1y9/+UvNnz+/sUtqVB999JHcbrfcbrcGDhyoPXv2NHZJFy0CtomoydSVTU1wcLBefPFF7dmzRzt37tTGjRuZFUzSxo0b9cMPPzR2GReNRx55RJGRkcrLy9OePXt0++23N3ZJjWrSpElatmyZvF6vJkyYoKefvngmj7jYELBNRE2mrmxqOnbsqJiYGElS8+bNFRUVpf379zdyVY3r9OnTevzxx/XKK680dikXheLiYn344Yd65JFHJP04yc2//Mu/NHJVjctms+nEiROSpOPHj6tjx46NXNHFi2tATURNpq5syo4cOaL3339f69ata+xSGtWsWbOUnJysn//8541dykXhm2++UYcOHTR16lT95S9/kcPh0Ouvv65u3bo1dmmNJj09XaNHj9bPfvYzhYSEaPPmzY1d0kWLM9gmpCZTVzZFp0+fVnx8vB555BH17t27sctpNF988YW2bdumiRMnNnYpF43S0lJ5vV7ddttt2rlzp2699VYlJSU1dlmNxu/3a86cOcrKytLBgwf16KOPWg9eQWUEbBNRk6krmyK/369x48YpJiZG06ZNa+xyGtXmzZuVm5ur7t27q1u3bvL7/erWrZuOHj3a2KU1GofDoSuvvFIjR46UJI0dO1Y7d+5s5Koaz65du3TixAn16dNHkjR+/HhlZ2c3blEXMQK2iajJ1JVN0aRJkxQaGqqXXnqpsUtpdA888ICKiopUUFCggoICBQUFqaCg4JJ+8tKF6tChgyIjI5WTkyNJ+vjjj637GJqizp07669//asKCwsl/XhHcVO+6nM+zOTUhGzYsEFTp07VmTNnNHjwYL399ttN+qcYmzdvVmxsrCIjIxUUFCRJSkpK0r/+6782cmUXh+Dg4Cb/Uy5Jys3NVXJysn744Qe1a9dO8+fPb9Kh8sc//lGvvPKKgoOD1bp1a7355puKjo5u7LIuSgQsAAAGcIkYAAADCFgAAAwgYAEAMICABQDAAAIWAAADCFjgElZcXKz7779fPXr0kNPp1M0336y8vLxqtzl27JjeeOONBqoQaLoIWOASdv/996u8vFx79+5Vfn6+EhISNGLECJ06deqc2xCwQMMgYIFL1Ndff601a9botddesybKmDhxoux2u5YtW6Zu3bpZD3Tw+XzWBPXTpk3TwYMH5Xa7rXlkN2zYoP79+ys6OlrXXnutvvvuO0nS008/rcjISEVGRmrWrFnWvrt166YnnnhCgwYNUq9evZSTk6Nx48apd+/euvvuu625rvfv369bbrlFMTExiomJ0Z///OeGOjxAo2u60/gAl7j//d//ldPpVGhoaIX1MTEx+vLLL8+53Wuvvabdu3fL6/VKkr7//nt5PB6tX79evXv3VklJia644gqtXr1a69evt6YJHDx4sPr376+bb75ZkhQWFqaNGzfqjTfe0MiRI7Vt2zZ1795d119/vT799FMNGTJESUlJev311xUZGamCggINHTpU33zzTYUHTwCXKwIWuMwEAoFaBdjWrVt13XXXWdP/tW7dWpKUnZ2tcePGqWXLlpJ+nOh+w4YNVsCencva7XbL6XSqR48ekqSoqCjt27dP11xzjTZv3qzx48db+yotLdXhw4fVoUOHCx8ocJEjYIFLVGRkpPbu3asTJ05UOIvNyclRcnKy3n//fZWXl0v68ZF853Ku2VKrWv/T4G7RooUkqVmzZtb7s8tlZWUKBAL62c9+Zp0pA00N38ECl6gePXrolltu0bRp0+T3+yX9OBF7YWGh7rnnHnXv3l07duyQJK1cudLaLjQ0VMXFxdby9ddfr61bt2rPnj2SpJKSEp0+fVpDhw7V4sWLdfr0aZ06dUpLly7V0KFDa1xfmzZtFBERobS0NGvdrl27LmjMwKWEgAUuYampqWrWrJmcTqecTqeWL1+ujz76SC1bttSzzz6rxx9/XIMGDVJJSYm1zdnnm0ZHR2vixIm66qqrlJ6eLo/Ho+joaA0bNkzFxcUaM2aMhg8frmuuuUbXXHONbrnlFuvycE0tWbJE7733nqKiouRyufQf//Ef9X0IgIsWT9MBAMAAzmABADCAgAUAwAACFgAAAwhYAAAMIGABADCAgAUAwAACFgAAAwhYAAAM+H9E/fwAsgJ7FAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Solution\n", "# Here's what the distributions look like\n", "hp_after.bar(label='Hit points')\n", "damage.plot(label='Damage', color='C1')\n", "decorate_dice('The Goblin Problem')" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.544172Z", "iopub.status.busy": "2021-04-16T19:35:27.543760Z", "iopub.status.idle": "2021-04-16T19:35:27.546538Z", "shell.execute_reply": "2021-04-16T19:35:27.547016Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "# Here's the distribution of points the goblin has left\n", "points_left = Pmf.sub_dist(hp_after, damage)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.550649Z", "iopub.status.busy": "2021-04-16T19:35:27.550237Z", "iopub.status.idle": "2021-04-16T19:35:27.555283Z", "shell.execute_reply": "2021-04-16T19:35:27.554906Z" } }, "outputs": [ { "data": { "text/plain": [ "0.4545454545454545" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# And here's the probability the goblin is dead\n", "points_left.prob_le(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Suppose I have a box with a 6-sided die, an 8-sided die, and a 12-sided die.\n", "I choose one of the dice at random, roll it twice, multiply the outcomes, and report that the product is 12.\n", "What is the probability that I chose the 8-sided die?\n", "\n", "Hint: `Pmf` provides a function called `mul_dist` that takes two `Pmf` objects and returns a `Pmf` that represents the distribution of the product." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.559242Z", "iopub.status.busy": "2021-04-16T19:35:27.558669Z", "iopub.status.idle": "2021-04-16T19:35:27.560621Z", "shell.execute_reply": "2021-04-16T19:35:27.561052Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "hypos = [6, 8, 12]\n", "prior = Pmf(1, hypos)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.570896Z", "iopub.status.busy": "2021-04-16T19:35:27.570353Z", "iopub.status.idle": "2021-04-16T19:35:27.574763Z", "shell.execute_reply": "2021-04-16T19:35:27.575226Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.0625
20.1250
30.1250
40.1875
60.1250
80.1250
90.0625
120.1250
160.0625
\n", "
" ], "text/plain": [ "1 0.0625\n", "2 0.1250\n", "3 0.1250\n", "4 0.1875\n", "6 0.1250\n", "8 0.1250\n", "9 0.0625\n", "12 0.1250\n", "16 0.0625\n", "dtype: float64" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here's the distribution of the product for the 4-sided die\n", "\n", "d4 = make_die(4)\n", "Pmf.mul_dist(d4, d4)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.582633Z", "iopub.status.busy": "2021-04-16T19:35:27.580097Z", "iopub.status.idle": "2021-04-16T19:35:27.584876Z", "shell.execute_reply": "2021-04-16T19:35:27.585267Z" } }, "outputs": [ { "data": { "text/plain": [ "[0.1111111111111111, 0.0625, 0.041666666666666664]" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here's the likelihood of getting a 12 for each die\n", "likelihood = []\n", "\n", "for sides in hypos:\n", " die = make_die(sides)\n", " pmf = Pmf.mul_dist(die, die)\n", " likelihood.append(pmf[12])\n", " \n", "likelihood" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.591475Z", "iopub.status.busy": "2021-04-16T19:35:27.590954Z", "iopub.status.idle": "2021-04-16T19:35:27.593367Z", "shell.execute_reply": "2021-04-16T19:35:27.593715Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
60.516129
80.290323
120.193548
\n", "
" ], "text/plain": [ "6 0.516129\n", "8 0.290323\n", "12 0.193548\n", "dtype: float64" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# And here's the update\n", "posterior = prior * likelihood\n", "posterior.normalize()\n", "posterior" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** *Betrayal at House on the Hill* is a strategy game in which characters with different attributes explore a haunted house. Depending on their attributes, the characters roll different numbers of dice. For example, if attempting a task that depends on knowledge, Professor Longfellow rolls 5 dice, Madame Zostra rolls 4, and Ox Bellows rolls 3. Each die yields 0, 1, or 2 with equal probability. \n", "\n", "If a randomly chosen character attempts a task three times and rolls a total of 3 on the first attempt, 4 on the second, and 5 on the third, which character do you think it was?" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.599975Z", "iopub.status.busy": "2021-04-16T19:35:27.599314Z", "iopub.status.idle": "2021-04-16T19:35:27.602133Z", "shell.execute_reply": "2021-04-16T19:35:27.602555Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
00.333333
10.333333
20.333333
\n", "
" ], "text/plain": [ "0 0.333333\n", "1 0.333333\n", "2 0.333333\n", "dtype: float64" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "die = Pmf(1/3, [0,1,2])\n", "die" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.614916Z", "iopub.status.busy": "2021-04-16T19:35:27.614014Z", "iopub.status.idle": "2021-04-16T19:35:27.619438Z", "shell.execute_reply": "2021-04-16T19:35:27.619807Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "pmfs = {}\n", "pmfs['Bellows'] = add_dist_seq([die]*3)\n", "pmfs['Zostra'] = add_dist_seq([die]*4)\n", "pmfs['Longfellow'] = add_dist_seq([die]*5)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.623276Z", "iopub.status.busy": "2021-04-16T19:35:27.622677Z", "iopub.status.idle": "2021-04-16T19:35:27.624942Z", "shell.execute_reply": "2021-04-16T19:35:27.625311Z" } }, "outputs": [ { "data": { "text/plain": [ "0.2345679012345679" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "pmfs['Zostra'](4)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.629708Z", "iopub.status.busy": "2021-04-16T19:35:27.629052Z", "iopub.status.idle": "2021-04-16T19:35:27.632391Z", "shell.execute_reply": "2021-04-16T19:35:27.631917Z" } }, "outputs": [ { "data": { "text/plain": [ "0.00915247412224499" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "pmfs['Zostra']([3,4,5]).prod()" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.639970Z", "iopub.status.busy": "2021-04-16T19:35:27.639171Z", "iopub.status.idle": "2021-04-16T19:35:27.642148Z", "shell.execute_reply": "2021-04-16T19:35:27.642611Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
Bellows0.333333
Zostra0.333333
Longfellow0.333333
\n", "
" ], "text/plain": [ "Bellows 0.333333\n", "Zostra 0.333333\n", "Longfellow 0.333333\n", "dtype: float64" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "hypos = pmfs.keys()\n", "prior = Pmf(1/3, hypos)\n", "prior" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.652015Z", "iopub.status.busy": "2021-04-16T19:35:27.651434Z", "iopub.status.idle": "2021-04-16T19:35:27.653898Z", "shell.execute_reply": "2021-04-16T19:35:27.654265Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
Bellows0.006401
Zostra0.009152
Longfellow0.004798
\n", "
" ], "text/plain": [ "Bellows 0.006401\n", "Zostra 0.009152\n", "Longfellow 0.004798\n", "dtype: float64" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "likelihood = prior.copy()\n", "\n", "for hypo in hypos:\n", " likelihood[hypo] = pmfs[hypo]([3,4,5]).prod()\n", "\n", "likelihood" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.660241Z", "iopub.status.busy": "2021-04-16T19:35:27.659730Z", "iopub.status.idle": "2021-04-16T19:35:27.662465Z", "shell.execute_reply": "2021-04-16T19:35:27.662071Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
Bellows0.314534
Zostra0.449704
Longfellow0.235762
\n", "
" ], "text/plain": [ "Bellows 0.314534\n", "Zostra 0.449704\n", "Longfellow 0.235762\n", "dtype: float64" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "posterior = (prior * likelihood)\n", "posterior.normalize()\n", "posterior" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** There are 538 members of the United States Congress. Suppose we audit their investment portfolios and find that 312 of them out-perform the market.\n", "Let's assume that an honest member of Congress has only a 50% chance of out-performing the market, but a dishonest member who trades on inside information has a 90% chance. How many members of Congress are honest?" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:27.667020Z", "iopub.status.busy": "2021-04-16T19:35:27.666574Z", "iopub.status.idle": "2021-04-16T19:35:29.234154Z", "shell.execute_reply": "2021-04-16T19:35:29.233711Z" } }, "outputs": [ { "data": { "text/plain": [ "(539, 539)" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "n = 538\n", "\n", "ns = range(0, n+1)\n", "table = pd.DataFrame(index=ns, columns=ns, dtype=float)\n", "\n", "for n_honest in ns:\n", " n_dishonest = n - n_honest\n", "\n", " dist_honest = make_binomial(n_honest, 0.5)\n", " dist_dishonest = make_binomial(n_dishonest, 0.9)\n", " dist_total = Pmf.add_dist(dist_honest, dist_dishonest) \n", " table[n_honest] = dist_total\n", " \n", "table.shape" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.237941Z", "iopub.status.busy": "2021-04-16T19:35:29.237391Z", "iopub.status.idle": "2021-04-16T19:35:29.243431Z", "shell.execute_reply": "2021-04-16T19:35:29.242940Z" } }, "outputs": [ { "data": { "text/plain": [ "539" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "data = 312\n", "likelihood = table.loc[312]\n", "len(likelihood)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.247538Z", "iopub.status.busy": "2021-04-16T19:35:29.246906Z", "iopub.status.idle": "2021-04-16T19:35:29.249712Z", "shell.execute_reply": "2021-04-16T19:35:29.249309Z" } }, "outputs": [ { "data": { "text/plain": [ "539" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "hypos = np.arange(n+1)\n", "prior = Pmf(1, hypos)\n", "len(prior)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.253937Z", "iopub.status.busy": "2021-04-16T19:35:29.252471Z", "iopub.status.idle": "2021-04-16T19:35:29.256808Z", "shell.execute_reply": "2021-04-16T19:35:29.256391Z" } }, "outputs": [ { "data": { "text/plain": [ "431.4882114501996" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "posterior = prior * likelihood\n", "posterior.normalize()\n", "posterior.mean()" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.291044Z", "iopub.status.busy": "2021-04-16T19:35:29.290611Z", "iopub.status.idle": "2021-04-16T19:35:29.403725Z", "shell.execute_reply": "2021-04-16T19:35:29.403346Z" } }, "outputs": [ { "data": { "image/png": "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RBJgD5aIiEgCDFgiIiIJMGD7KS8vD/Hx8TAYDMjOzobFYpG7JMn9+te/hk6ng0ql6vb99evXw2AwIC4uDrt373Z8v7S0FPPmzUNcXBzS09NRXl4+1CVLqrS0FDfccAOmTJmCxMREPP74447nvPWYAMCCBQuQkpKC5ORkZGZmOu4N9OZjAgD/+q//2u3/jjcfj9jYWCQkJCA1NRWpqamOW3JG7DER5DKLxSImTJggfvjhByGEEMuXLxfbtm2TuSrpff7556KiokIolUrH9z788EMxb9480dHRIYxGo9DpdKKhoUEIIcSdd94p/ud//kcIIURubq64++67ZalbKuXl5eLo0aNCCCHa2trE/PnzxTvvvOPVx0QIIerq6hz/XrdunXjyySe9/ph89tln4u6773b83/H24zF+/HhRWlra7Xsj+ZgwYPvhyy+/FPPmzXM8/uCDD8RNN90kY0VDq2vA3n///eKVV15xPL7jjjvE7t27hc1mE8HBwaKlpUUIIURTU5MICQkZ8lqH0r/927+JzZs385hcYrVaxf333y+efPJJrz4mra2t4tprrxVVVVWO/zvefDyE6D1gR/Ix4SnifjAajdDr9Y7HMTExMBqNMlYkn76Ohclkgkajgb+/PwBAo9HAz88P9fX1cpUqKZPJhLfffhs33ngjjwmApUuXYvTo0Thx4gQefPBBrz4mTz/9NHJychAZGen4njcfD7ubb74ZKSkpePzxx2GxWEb0MWHA9pNCoXD8W3j5HU59HYuu37/8uZGkra0NmZmZeOCBBzBlyhQAPCbvvvsuKioqMHv2bPz5z38G4J3H5NixY/jqq6+watWqHs954/Gwy8/Px7fffov8/HwcP34cmzZtAjByjwkDth/0ej1KSkocj41Go1sWDxiO+joW4eHhaGpqQmtrKwDAbDajo6MDwcHBcpUqCavVihUrViAtLQ3r1q0DwGNip1QqkZ2djddff91rj8kXX3yBwsJCTJgwAbGxsbBarYiNjfXa42Fn/30ZFBSEe++9F4cPHx7Rx4QB2w9paWkoKytzjHzbtm0bMjIyZK5KHhkZGdi+fTusVivKy8uRn5+PhQsXQqFQYMmSJdixYwcAYPv27Vi6dKnM1brffffdB61Wi+eff97xPW8+Jg0NDbhw4YLj8d///nckJiZ67TH51a9+hfLychQXF6O4uBhKpRLFxcVeezwAoLm52TGy3GKx4O9//zuSk5NH9jGR6drvsHXw4EExZcoUMWnSJLFq1SrR0dEhd0mSu++++8S4ceMEADFu3Dhx3333CSGEeOihh8SkSZOEwWAQf/vb3xztS0pKxNy5c8VVV10l5s2bJ4xGo1ylSyI/P18AEImJiSIlJUWkpKSIF154QQjhvcekpKREpKWlicTERJGUlCSWL18uKioqhBDee0y66jpA0FuPx5kzZ0RKSopISkoS8fHx4t577xVms1kIMXKPCadKJCIikgBPERMREUmAAUtERCQBBiwREZEEGLBEREQSYMASERFJgAFLQ06hUGDlypWOx/n5+bjuuuvctv0nn3wSzzzzjNu250x1dTVmz56NqVOndlsFZKjr6M3TTz8t23t3dfkqTEPN2WcEAB9//DGuueYaGAwGxMfHY8WKFaisrJShUhppGLA05Hx8fHDo0CH89NNPcpfSK6vV6nLbgwcPYvz48fj222+RmZkpYVX95ykBO1j9+Tx64+wzKiwsxB133IHnn38eRUVFKCwsxJ133omqqqpBveeVDHafaHhgwNKQUygUWL9+PZ566qkez7322mtYvXq14/Hq1avx2muvAQBWrlyJX/3qV7jxxhsxfvx4/N///R+eeeYZTJ06FTNmzEBFRYXjdadOncL8+fMRFxeH//zP/3R8/9ixY7j++usxffp0zJkzB8ePHwfQ2dvMycnBokWLcMMNN/SoKz8/H2lpaUhOTsaSJUtQUVGBr776Cg899BA+/vhjpKamori4uMfrioqKcOONN2LSpEl47LHHnG7PXsfKlSt7fU1ftb/99ttITk5GamoqUlJScP78eaxbtw5WqxWpqam48cYbe9Tl6rFsaWnBmjVrMHPmTCQlJeFPf/oTAKC4uBgTJ07E2rVrMXXqVFx//fX47rvvsGDBAkycOBF/+MMfur3fE088geTkZEybNs1Rt81mw4YNGxzb7rqvKpUKzz33HObMmYM333wTW7ZsQWJiIlJSUjBt2jTH9HmD/Yx+97vfYc2aNZg3b57jezfddBOSkpIAAC+99BISExORlJSEX//61471n6+77jo8/PDDuOaaazBhwgS89dZbjtdv3LgRV111Fa655hrcf//9jp/ny3/G+tp/s9mMZcuWITk5GYmJidiwYUOfnzN5OLlnuiDvo1QqRVtbm4iNjRUn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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "posterior.plot(label='posterior')\n", "decorate(xlabel='Number of honest members of Congress',\n", " ylabel='PMF')" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.407201Z", "iopub.status.busy": "2021-04-16T19:35:29.406723Z", "iopub.status.idle": "2021-04-16T19:35:29.411010Z", "shell.execute_reply": "2021-04-16T19:35:29.411524Z" } }, "outputs": [ { "data": { "text/plain": [ "430" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "posterior.max_prob()" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:29.415545Z", "iopub.status.busy": "2021-04-16T19:35:29.415072Z", "iopub.status.idle": "2021-04-16T19:35:29.420156Z", "shell.execute_reply": "2021-04-16T19:35:29.419744Z" } }, "outputs": [ { "data": { "text/plain": [ "array([388., 477.])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "posterior.credible_interval(0.9)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-print" ] }, "source": [ "*Think Bayes*, Second Edition\n", "\n", "Copyright 2020 Allen B. Downey\n", "\n", "License: [Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 4 }