{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Minimum, Maximum, and Mixture" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "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/)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:30.749769Z", "iopub.status.busy": "2021-04-16T19:35:30.748995Z", "iopub.status.idle": "2021-04-16T19:35:30.752221Z", "shell.execute_reply": "2021-04-16T19:35:30.751509Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# If we're running on Colab, install empiricaldist\n", "# https://pypi.org/project/empiricaldist/\n", "\n", "import sys\n", "IN_COLAB = 'google.colab' in sys.modules\n", "\n", "if IN_COLAB:\n", " !pip install empiricaldist" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:30.756174Z", "iopub.status.busy": "2021-04-16T19:35:30.755765Z", "iopub.status.idle": "2021-04-16T19:35:30.757511Z", "shell.execute_reply": "2021-04-16T19:35:30.757889Z" }, "tags": [ "hide-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:30.760611Z", "iopub.status.busy": "2021-04-16T19:35:30.760188Z", "iopub.status.idle": "2021-04-16T19:35:31.437686Z", "shell.execute_reply": "2021-04-16T19:35:31.438042Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from utils import set_pyplot_params\n", "set_pyplot_params()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the previous chapter we computed distributions of sums.\n", "In this chapter, we'll compute distributions of minimums and maximums, and use them to solve both forward and inverse problems.\n", "\n", "Then we'll look at distributions that are mixtures of other distributions, which will turn out to be particularly useful for making predictions.\n", "\n", "But we'll start with a powerful tool for working with distributions, the cumulative distribution function." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cumulative Distribution Functions\n", "\n", "So far we have been using probability mass functions to represent distributions.\n", "A useful alternative is the **cumulative distribution function**, or CDF.\n", "\n", "As an example, I'll use the posterior distribution from the Euro problem, which we computed in <<_BayesianEstimation>>.\n", "\n", "Here's the uniform prior we started with." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.442337Z", "iopub.status.busy": "2021-04-16T19:35:31.441797Z", "iopub.status.idle": "2021-04-16T19:35:31.443480Z", "shell.execute_reply": "2021-04-16T19:35:31.443832Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from empiricaldist import Pmf\n", "\n", "hypos = np.linspace(0, 1, 101)\n", "pmf = Pmf(1, hypos)\n", "data = 140, 250" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the update." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.447686Z", "iopub.status.busy": "2021-04-16T19:35:31.447185Z", "iopub.status.idle": "2021-04-16T19:35:31.449283Z", "shell.execute_reply": "2021-04-16T19:35:31.448866Z" } }, "outputs": [], "source": [ "from scipy.stats import binom\n", "\n", "def update_binomial(pmf, data):\n", " \"\"\"Update pmf using the binomial distribution.\"\"\"\n", " k, n = data\n", " xs = pmf.qs\n", " likelihood = binom.pmf(k, n, xs)\n", " pmf *= likelihood\n", " pmf.normalize()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.454274Z", "iopub.status.busy": "2021-04-16T19:35:31.453576Z", "iopub.status.idle": "2021-04-16T19:35:31.459248Z", "shell.execute_reply": "2021-04-16T19:35:31.458812Z" } }, "outputs": [], "source": [ "update_binomial(pmf, data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The CDF is the cumulative sum of the PMF, so we can compute it like this:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.462631Z", "iopub.status.busy": "2021-04-16T19:35:31.462163Z", "iopub.status.idle": "2021-04-16T19:35:31.463845Z", "shell.execute_reply": "2021-04-16T19:35:31.464199Z" } }, "outputs": [], "source": [ "cumulative = pmf.cumsum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it looks like, along with the PMF." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.467579Z", "iopub.status.busy": "2021-04-16T19:35:31.467137Z", "iopub.status.idle": "2021-04-16T19:35:31.469147Z", "shell.execute_reply": "2021-04-16T19:35:31.468672Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from utils import decorate\n", "\n", "def decorate_euro(title):\n", " decorate(xlabel='Proportion of heads (x)',\n", " ylabel='Probability',\n", " title=title)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.474021Z", "iopub.status.busy": "2021-04-16T19:35:31.472944Z", "iopub.status.idle": "2021-04-16T19:35:31.677455Z", "shell.execute_reply": "2021-04-16T19:35:31.677848Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cumulative.plot(label='CDF')\n", "pmf.plot(label='PMF')\n", "decorate_euro(title='Posterior distribution for the Euro problem')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The range of the CDF is always from 0 to 1, in contrast with the PMF, where the maximum can be any probability.\n", "\n", "The result from `cumsum` is a Pandas `Series`, so we can use the bracket operator to select an element:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.681378Z", "iopub.status.busy": "2021-04-16T19:35:31.680792Z", "iopub.status.idle": "2021-04-16T19:35:31.684176Z", "shell.execute_reply": "2021-04-16T19:35:31.683818Z" } }, "outputs": [ { "data": { "text/plain": [ "0.9638303193984255" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cumulative[0.61]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is about 0.96, which means that the total probability of all quantities less than or equal to 0.61 is 96%.\n", "\n", "To go the other way --- to look up a probability and get the corresponding quantile --- we can use interpolation:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.688718Z", "iopub.status.busy": "2021-04-16T19:35:31.688069Z", "iopub.status.idle": "2021-04-16T19:35:31.691063Z", "shell.execute_reply": "2021-04-16T19:35:31.690624Z" } }, "outputs": [ { "data": { "text/plain": [ "array(0.60890171)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.interpolate import interp1d\n", "\n", "ps = cumulative.values\n", "qs = cumulative.index\n", "\n", "interp = interp1d(ps, qs)\n", "interp(0.96)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is about 0.61, so that confirms that the 96th percentile of this distribution is 0.61.\n", "\n", "`empiricaldist` provides a class called `Cdf` that represents a cumulative distribution function.\n", "Given a `Pmf`, you can compute a `Cdf` like this:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.694831Z", "iopub.status.busy": "2021-04-16T19:35:31.694113Z", "iopub.status.idle": "2021-04-16T19:35:31.696012Z", "shell.execute_reply": "2021-04-16T19:35:31.696439Z" } }, "outputs": [], "source": [ "cdf = pmf.make_cdf()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`make_cdf` uses `np.cumsum` to compute the cumulative sum of the probabilities.\n", "\n", "You can use brackets to select an element from a `Cdf`:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.700286Z", "iopub.status.busy": "2021-04-16T19:35:31.699659Z", "iopub.status.idle": "2021-04-16T19:35:31.702626Z", "shell.execute_reply": "2021-04-16T19:35:31.703050Z" } }, "outputs": [ { "data": { "text/plain": [ "0.9638303193984255" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf[0.61]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But if you look up a quantity that's not in the distribution, you get a `KeyError`.\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.707236Z", "iopub.status.busy": "2021-04-16T19:35:31.706612Z", "iopub.status.idle": "2021-04-16T19:35:31.709290Z", "shell.execute_reply": "2021-04-16T19:35:31.709801Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KeyError(0.615)\n" ] } ], "source": [ "try:\n", " cdf[0.615]\n", "except KeyError as e:\n", " print(repr(e))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To avoid this problem, you can call a `Cdf` as a function, using parentheses.\n", "If the argument does not appear in the `Cdf`, it interpolates between quantities." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.714823Z", "iopub.status.busy": "2021-04-16T19:35:31.714082Z", "iopub.status.idle": "2021-04-16T19:35:31.718078Z", "shell.execute_reply": "2021-04-16T19:35:31.717545Z" } }, "outputs": [ { "data": { "text/plain": [ "array(0.96383032)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf(0.615)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Going the other way, you can use `quantile` to look up a cumulative probability and get the corresponding quantity:\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.722903Z", "iopub.status.busy": "2021-04-16T19:35:31.722203Z", "iopub.status.idle": "2021-04-16T19:35:31.725892Z", "shell.execute_reply": "2021-04-16T19:35:31.725379Z" } }, "outputs": [ { "data": { "text/plain": [ "array(0.61)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf.quantile(0.9638303)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Cdf` also provides `credible_interval`, which computes a credible interval that contains the given probability:\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.730655Z", "iopub.status.busy": "2021-04-16T19:35:31.730044Z", "iopub.status.idle": "2021-04-16T19:35:31.733376Z", "shell.execute_reply": "2021-04-16T19:35:31.733908Z" } }, "outputs": [ { "data": { "text/plain": [ "array([0.51, 0.61])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf.credible_interval(0.9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CDFs and PMFs are equivalent in the sense that they contain the\n", "same information about the distribution, and you can always convert\n", "from one to the other.\n", "Given a `Cdf`, you can get the equivalent `Pmf` like this:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.738651Z", "iopub.status.busy": "2021-04-16T19:35:31.738024Z", "iopub.status.idle": "2021-04-16T19:35:31.740320Z", "shell.execute_reply": "2021-04-16T19:35:31.740851Z" } }, "outputs": [], "source": [ "pmf = cdf.make_pmf()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`make_pmf` uses `np.diff` to compute differences between consecutive cumulative probabilities.\n", "\n", "One reason `Cdf` objects are useful is that they compute quantiles efficiently.\n", "Another is that they make it easy to compute the distribution of a maximum or minimum, as we'll see in the next section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Best Three of Four\n", "\n", "In *Dungeons & Dragons*, each character has six attributes: strength, intelligence, wisdom, dexterity, constitution, and charisma.\n", "\n", "To generate a new character, players roll four 6-sided dice for each attribute and add up the best three.\n", "For example, if I roll for strength and get 1, 2, 3, 4 on the dice, my character's strength would be the sum of 2, 3, and 4, which is 9.\n", "\n", "As an exercise, let's figure out the distribution of these attributes.\n", "Then, for each character, we'll figure out the distribution of their best attribute.\n", "\n", "I'll import two functions from the previous chapter: `make_die`, which makes a `Pmf` that represents the outcome of rolling a die, and `add_dist_seq`, which takes a sequence of `Pmf` objects and computes the distribution of their sum.\n", "\n", "Here's a `Pmf` that represents a six-sided die and a sequence with three references to it." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.746067Z", "iopub.status.busy": "2021-04-16T19:35:31.745270Z", "iopub.status.idle": "2021-04-16T19:35:31.748598Z", "shell.execute_reply": "2021-04-16T19:35:31.747789Z" } }, "outputs": [], "source": [ "from utils import make_die\n", "\n", "die = make_die(6)\n", "dice = [die] * 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the distribution of the sum of three dice." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.755067Z", "iopub.status.busy": "2021-04-16T19:35:31.753615Z", "iopub.status.idle": "2021-04-16T19:35:31.757421Z", "shell.execute_reply": "2021-04-16T19:35:31.757933Z" } }, "outputs": [], "source": [ "from utils import add_dist_seq\n", "\n", "pmf_3d6 = add_dist_seq(dice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it looks like:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.762372Z", "iopub.status.busy": "2021-04-16T19:35:31.761881Z", "iopub.status.idle": "2021-04-16T19:35:31.764211Z", "shell.execute_reply": "2021-04-16T19:35:31.763786Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def decorate_dice(title=''):\n", " decorate(xlabel='Outcome',\n", " ylabel='PMF',\n", " title=title)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.799186Z", "iopub.status.busy": "2021-04-16T19:35:31.784859Z", "iopub.status.idle": "2021-04-16T19:35:31.931262Z", "shell.execute_reply": "2021-04-16T19:35:31.930892Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pmf_3d6.plot()\n", "decorate_dice('Distribution of attributes')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we roll four dice and add up the best three, computing the distribution of the sum is a bit more complicated.\n", "I'll estimate the distribution by simulating 10,000 rolls.\n", "\n", "First I'll create an array of random values from 1 to 6, with 10,000 rows and 4 columns:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.934466Z", "iopub.status.busy": "2021-04-16T19:35:31.934017Z", "iopub.status.idle": "2021-04-16T19:35:31.936034Z", "shell.execute_reply": "2021-04-16T19:35:31.936379Z" } }, "outputs": [], "source": [ "n = 10000\n", "a = np.random.randint(1, 7, size=(n, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the best three outcomes in each row, I'll use `sort` with `axis=1`, which sorts the rows in ascending order." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.939312Z", "iopub.status.busy": "2021-04-16T19:35:31.938870Z", "iopub.status.idle": "2021-04-16T19:35:31.940846Z", "shell.execute_reply": "2021-04-16T19:35:31.941280Z" } }, "outputs": [], "source": [ "a.sort(axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, I'll select the last three columns and add them up." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.944292Z", "iopub.status.busy": "2021-04-16T19:35:31.943874Z", "iopub.status.idle": "2021-04-16T19:35:31.945874Z", "shell.execute_reply": "2021-04-16T19:35:31.946275Z" } }, "outputs": [], "source": [ "t = a[:, 1:].sum(axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now `t` is an array with a single column and 10,000 rows.\n", "We can compute the PMF of the values in `t` like this:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.950862Z", "iopub.status.busy": "2021-04-16T19:35:31.949475Z", "iopub.status.idle": "2021-04-16T19:35:31.953994Z", "shell.execute_reply": "2021-04-16T19:35:31.953526Z" } }, "outputs": [], "source": [ "pmf_best3 = Pmf.from_seq(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows the distribution of the sum of three dice, `pmf_3d6`, and the distribution of the best three out of four, `pmf_best3`." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:31.997678Z", "iopub.status.busy": "2021-04-16T19:35:31.996921Z", "iopub.status.idle": "2021-04-16T19:35:32.130553Z", "shell.execute_reply": "2021-04-16T19:35:32.130960Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pmf_3d6.plot(label='sum of 3 dice')\n", "pmf_best3.plot(label='best 3 of 4', ls='--')\n", "\n", "decorate_dice('Distribution of attributes')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you might expect, choosing the best three out of four tends to yield higher values.\n", "\n", "Next we'll find the distribution for the maximum of six attributes, each the sum of the best three of four dice." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Maximum\n", "\n", "To compute the distribution of a maximum or minimum, we can make good use of the cumulative distribution function.\n", "First, I'll compute the `Cdf` of the best three of four distribution:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.134886Z", "iopub.status.busy": "2021-04-16T19:35:32.134220Z", "iopub.status.idle": "2021-04-16T19:35:32.135956Z", "shell.execute_reply": "2021-04-16T19:35:32.136306Z" } }, "outputs": [], "source": [ "cdf_best3 = pmf_best3.make_cdf()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that `Cdf(x)` is the sum of probabilities for quantities less than or equal to `x`.\n", "Equivalently, it is the probability that a random value chosen from the distribution is less than or equal to `x`.\n", "\n", "Now suppose I draw 6 values from this distribution.\n", "The probability that all 6 of them are less than or equal to `x` is `Cdf(x)` raised to the 6th power, which we can compute like this:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.141260Z", "iopub.status.busy": "2021-04-16T19:35:32.140745Z", "iopub.status.idle": "2021-04-16T19:35:32.143280Z", "shell.execute_reply": "2021-04-16T19:35:32.143621Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/plain": [ "3 4.665600e-20\n", "4 5.948233e-16\n", "5 3.297304e-12\n", "6 4.139767e-10\n", "7 3.084098e-08\n", "8 1.000000e-06\n", "9 2.248307e-05\n", "10 3.110606e-04\n", "11 2.935667e-03\n", "12 1.706486e-02\n", "13 6.693521e-02\n", "14 1.998047e-01\n", "15 4.212166e-01\n", "16 6.859162e-01\n", "17 9.049950e-01\n", "18 1.000000e+00\n", "dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf_best3**6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If all 6 values are less than or equal to `x`, that means that their maximum is less than or equal to `x`.\n", "So the result is the CDF of their maximum.\n", "We can convert it to a `Cdf` object, like this:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.147141Z", "iopub.status.busy": "2021-04-16T19:35:32.146607Z", "iopub.status.idle": "2021-04-16T19:35:32.148575Z", "shell.execute_reply": "2021-04-16T19:35:32.148928Z" } }, "outputs": [], "source": [ "from empiricaldist import Cdf\n", "\n", "cdf_max6 = Cdf(cdf_best3**6)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "And compute the equivalent `Pmf` like this:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.152335Z", "iopub.status.busy": "2021-04-16T19:35:32.151777Z", "iopub.status.idle": "2021-04-16T19:35:32.153560Z", "shell.execute_reply": "2021-04-16T19:35:32.154071Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "pmf_max6 = cdf_max6.make_pmf()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The following figure shows the result." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.174609Z", "iopub.status.busy": "2021-04-16T19:35:32.169559Z", "iopub.status.idle": "2021-04-16T19:35:32.328490Z", "shell.execute_reply": "2021-04-16T19:35:32.328844Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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z5/PihUrqu3WPX/+fFatWkXfvn2ZPHkyzz//PJ/8ZPXv34QJE7j66quZMmVKdJvLLruMRx99lP79+/PBBx9wxx138NZbb/H973+fV199lV69enHw4MEaPw+RsHjm7dVs3X0IgMyMdD558UCefGMlAK8t2MRHhvVmSN4pY6i2GC0qQSVKXl5e9EpiyJAhXHbZZZgZw4YNY/PmzQAcOnSIW265hfXr12NmlJRELu/T0tKYOXMmw4cP51//9V+ZOHHiKcefM2cOd999NwADBw6kb9++rFu3jg4dOtQYU2lpKevXr2f27Nnk5+dz4YUXsmLFCjp16lRpu5///Oe88MILAGzbto3169eTk5NT57/5vPPOq/GZo/POO4+zzjoLiNwjmzNnTo0JqqojR44wd+5cPvWpT0WXFRUVAZFke+utt/LpT3+aT3ziE/U6nkiirNtWwPPvrI22P3vFMK4afzYb8g9E70f96qVFPHjnR2mVmZ6oMBNKJb5m0Lp16+jrtLS0aDstLY3S0ki30u9+97tccsklrFixgpdffrnSMzvr16+nffv27Nixo9rju3uDY8rNzeWaa64hMzOTvLw8BgwYwPr16yttM3v2bN544w3ef/99li5dyqhRo+r9LFG7du1qXFe1y3dFO3Z5TecpLy+nU6dOLFmyJPq1enWkfv/oo4/ygx/8gG3btjFy5EgKCgrqFatIcysqLuUXzy3EifzfHZrXnavGn42Z8f8+Poq2rSMjnuwsOMLTb7fc+68t6gqqtjJcoh06dIhevXoBMHPmzErLv/KVr/DOO+9w11138eyzz55ytTFp0iSeeOIJLr30UtatW8fWrVsZMGAAO3fW3BPo2muv5cknn+TWW29l3759rFu3LnpVE3vuzp07k5WVxZo1a5g3b150XWZmJiUlJWRmZpKdnc3hw4fr/W+dP38+H374IX379uUvf/kL06ZNA+CMM85g9erVDBgwgBdeeIHs7GyASsfv0KEDeXl5PPPMM3zqU5/C3Vm2bBkjRoxg48aNnH/++Zx//vm8/PLLbNu2rV5XeyLN7fHXV7CjIPIz3aZVBndeNyb6B1pOh7bc8rFhPDprMQAvzVnHhKG5nNWzc8LiTRRdQYXEN77xDe67777oPaEK99xzD3fccQfnnnsujz32GNOnT2fPnj2V9r3jjjsoKytj2LBh3HDDDcycObPS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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pmf_max6.plot(label='max of 6 attributes')\n", "\n", "decorate_dice('Distribution of attributes')" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Most characters have at least one attribute greater than 12; almost 10% of them have an 18." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure shows the CDFs for the three distributions we have computed." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.376448Z", "iopub.status.busy": "2021-04-16T19:35:32.371540Z", "iopub.status.idle": "2021-04-16T19:35:32.535663Z", "shell.execute_reply": "2021-04-16T19:35:32.536011Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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fOdLJyhN05qctIyTfL92H8u3HsLucFap79ouigkDOjAkMe6irifVxJV7FOeqD7F0GYG145AKdbZRv4LAcMRS9+etrGNUO2YmX8Os9V/xy4HXMiCup8/PeT50gtI0rUkoKXOwfMshfli3j31Hqt7vF+BnY3Tf9oxPTiC+dYRPYlBOB87tP+DcMhdcTlTeMSyxPZHAM60zCa46m4svDWnfh+4tOhARFF6v562N+rkduJFLT0+nZ8+L/+axZMmSGmcQ//rrr0lKSqJPnz4kJyezfPny8zr2559/Tvfu3RkzZky19fn5+cTGxnLPPfec81jlf9+UlBTuu+++84pF0+rTwRP5vP3dJn75/Fz+/fX6KsmpfasIfn1lP955+HLuuKKvz5KTKysd+9xncG76BlzuVpuyF+M6ttsn56usqKyY/278lhJ71SnJzJicQLegTGXJkiWEhoYydOjQKnXjxo3jyiuvRETYsmUL1113Hbt27ar1sd955x1ef/31GhPU448/fs7ZKaqTnJxMcnKV2xc0zVB2h5PV2w/zw7p97DyQVaXez2ZlWK84JgzoQOe485sC6HwpRxnOTd/g3LGQ8kPGJao9tqG3YImM89m5TztekM3Lyz/g6KlMsgtzuXfY9HqbruhimD/CBsLhcDBjxgySkpK49tprKSpyD09dv349o0aNon///kyYMIGjR90Ttr/yyiv06NGDpKQkpk2bRnp6Om+88Qb//Oc/6dOnD8uWLatw/NDQUO8fUWFhYY1/UB9//DG9evWiZ8+ePPzwwwD8+c9/Zvny5dx555089NBDVZ6zfv16jh8/zvjx42v8/davX0/v3r0ZMmQIr732mrd8yZIlTJ48GXBPrzRz5kx69epFUlKSd3qnH3/8kSFDhtCvXz+mTp3qXcJD0+pacamd/y3Yxq9emMdLs9dWSU5tosK4dVJv3nroMu69ZgBd2kb5NDm5ju7C/s1TOHcswJucrH7Y+v8Cv0kP10tyAtibfZCjpzIB2HR0JzuO762X816sRtmCcmz6FueW72q1r7XzcGxDbq74/FUf4kw904VmTZqMrc8VZz3O7t27eeeddxg2bBi33XYbr7/+Ovfffz/33nsvX3/9NTExMXz66af88Y9/5N133+W5555j//79BAQEkJubS0RExDmXzpgzZw6PPvooJ06c8C7tUd6RI0d4+OGHWb9+PZGRkYwfP56vvvqKJ554gp9++om///3vVVo7LpeL3/3ud3z44YcsWrSoxt9v5syZ3uU+qktyAE8//TTNmjVj69atAOTk5JCVlcVf/vIXFi5cSEhICH/729948cUXeeKJJ876emra+VBKsWr7Yd6bt5mTp4or1FksFgZ1b8OEgR3omRDj04TkjaesCGfKbJxpKyrG0qortsE3IdXMJu5LQ9v35XDecRakruT2Ab+gZ6vO9Xr+C9UoE5QR2rZty7BhwwC46aabeOWVV5g4cSLbtm3zziDudDpp3bo1AElJSUyfPp2rr766ytpPNZkyZQpTpkxh6dKlPP744yxcuLBC/bp16xg9ejQxMTEATJ8+naVLl571+K+//jqXXXYZbdu2rXGfyst93HzzzcyfP7/KfgsXLuSTTz7xbkdGRvLdd9+xY8cO72tTVlbGkCFDqjxX0y7U0ewC3pm7iY2pxyqURzcL5tIBCYztG0/z8Hq+t0e5cGVs8W6KXxDW5KlVJnitT9f2msCw+H60qefkeDF0gqojld90IoJSisTERFatWlVl/7lz57J06VK++eYbnn76abZv317rc40cOZK9e/eSlZVFdPSZeyQuZF7FVatWsWzZMl5//XUKCgooKysjNDSU5557rsJxa/NHVd1+SikuvfRSPv744/OOTdPOxu5wMmfZbr5curvCUPHwkABunZjEiKR2WCzGJAMJCMU6cBqOpW9hadcH28AbkOAIQ2LxxiTSoJITNNIEZetzxTm75M76/CE3V+n2O5eDBw+yatUqhgwZwscff8zw4cPp2rUrmZmZ3nK73c6ePXvo3r07hw4dYsyYMQwfPpz//e9/FBQUEBYWRn5+frXHT0tLo2PHjogIGzZsoKysjKioqAr7DBo0iPvvv5+srCwiIyP5+OOPuffee88a90cffeR9PGvWLFJSUiokJ4CIiAiaNWvG8uXLGT58eIXnlDd+/HheffVVXnrpJcDdxTd48GDuvvtu0tLS6NSpE0VFRWRkZNCli2/nEdMat81px3nru40czT5zPVMQxg/swPRLEs97tvCLoZRCZe7F0qJThXJL+/74TYjA0rJTDc/0bUyp2QfoEh1f7+euS3qQRB3p3r0777//PklJSZw8eZLf/OY3+Pv7M3v2bB5++GF69+5Nnz59WLlyJU6nk5tuuolevXrRt29fHnjgASIi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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "cdf_3d6 = pmf_3d6.make_cdf()\n", "cdf_3d6.plot(label='sum of 3 dice')\n", "\n", "cdf_best3 = pmf_best3.make_cdf()\n", "cdf_best3.plot(label='best 3 of 4 dice', ls='--')\n", "\n", "cdf_max6.plot(label='max of 6 attributes', ls=':')\n", "\n", "decorate_dice('Distribution of attributes')\n", "plt.ylabel('CDF');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Cdf` provides `max_dist`, which does the same computation, so we can also compute the `Cdf` of the maximum like this:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.539561Z", "iopub.status.busy": "2021-04-16T19:35:32.539069Z", "iopub.status.idle": "2021-04-16T19:35:32.541075Z", "shell.execute_reply": "2021-04-16T19:35:32.540695Z" } }, "outputs": [], "source": [ "cdf_max_dist6 = cdf_best3.max_dist(6)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "And we can confirm that the differences are small." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.544620Z", "iopub.status.busy": "2021-04-16T19:35:32.544171Z", "iopub.status.idle": "2021-04-16T19:35:32.546496Z", "shell.execute_reply": "2021-04-16T19:35:32.546875Z" }, "tags": [ "remove-cell" ] }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(cdf_max_dist6, cdf_max6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the next section we'll find the distribution of the minimum.\n", "The process is similar, but a little more complicated.\n", "See if you can figure it out before you go on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Minimum\n", "\n", "In the previous section we computed the distribution of a character's best attribute.\n", "Now let's compute the distribution of the worst.\n", "\n", "To compute the distribution of the minimum, we'll use the **complementary CDF**, which we can compute like this:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.550107Z", "iopub.status.busy": "2021-04-16T19:35:32.549668Z", "iopub.status.idle": "2021-04-16T19:35:32.551795Z", "shell.execute_reply": "2021-04-16T19:35:32.552222Z" } }, "outputs": [], "source": [ "prob_gt = 1 - cdf_best3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As the variable name suggests, the complementary CDF is the probability that a value from the distribution is greater than `x`.\n", "If we draw 6 values from the distribution, the probability that all 6 exceed `x` is:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.556052Z", "iopub.status.busy": "2021-04-16T19:35:32.555455Z", "iopub.status.idle": "2021-04-16T19:35:32.557352Z", "shell.execute_reply": "2021-04-16T19:35:32.557778Z" } }, "outputs": [], "source": [ "prob_gt6 = prob_gt**6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If all 6 exceed `x`, that means their minimum exceeds `x`, so `prob_gt6` is the complementary CDF of the minimum.\n", "And that means we can compute the CDF of the minimum like this:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.561848Z", "iopub.status.busy": "2021-04-16T19:35:32.561049Z", "iopub.status.idle": "2021-04-16T19:35:32.562922Z", "shell.execute_reply": "2021-04-16T19:35:32.563376Z" } }, "outputs": [], "source": [ "prob_le6 = 1 - prob_gt6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a Pandas `Series` that represents the CDF of the minimum of six attributes. We can put those values in a `Cdf` object like this:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.566892Z", "iopub.status.busy": "2021-04-16T19:35:32.566369Z", "iopub.status.idle": "2021-04-16T19:35:32.568328Z", "shell.execute_reply": "2021-04-16T19:35:32.568768Z" } }, "outputs": [], "source": [ "cdf_min6 = Cdf(prob_le6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what it looks like, along with the distribution of the maximum." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.613126Z", "iopub.status.busy": "2021-04-16T19:35:32.604907Z", "iopub.status.idle": "2021-04-16T19:35:32.762095Z", "shell.execute_reply": "2021-04-16T19:35:32.761655Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cdf_min6.plot(color='C4', label='minimum of 6')\n", "cdf_max6.plot(color='C2', label='maximum of 6', ls=':')\n", "decorate_dice('Minimum and maximum of six attributes')\n", "plt.ylabel('CDF');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Cdf` provides `min_dist`, which does the same computation, so we can also compute the `Cdf` of the minimum like this:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.766536Z", "iopub.status.busy": "2021-04-16T19:35:32.766111Z", "iopub.status.idle": "2021-04-16T19:35:32.767892Z", "shell.execute_reply": "2021-04-16T19:35:32.768318Z" } }, "outputs": [], "source": [ "cdf_min_dist6 = cdf_best3.min_dist(6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can confirm that the differences are small." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.772657Z", "iopub.status.busy": "2021-04-16T19:35:32.772097Z", "iopub.status.idle": "2021-04-16T19:35:32.774638Z", "shell.execute_reply": "2021-04-16T19:35:32.775069Z" } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(cdf_min_dist6, cdf_min6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the exercises at the end of this chapter, you'll use distributions of the minimum and maximum to do Bayesian inference.\n", "But first we'll see what happens when we mix distributions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mixture\n", "\n", "In this section I'll show how we can compute a distribution which is a mixture of other distributions.\n", "I'll explain what that means with some simple examples;\n", "then, more usefully, we'll see how these mixtures are used to make predictions.\n", "\n", "Here's another example inspired by *Dungeons & Dragons*:\n", "\n", "* Suppose your character is armed with a dagger in one hand and a short sword in the other.\n", "\n", "* During each round, you attack a monster with one of your two weapons, chosen at random.\n", "\n", "* The dagger causes one 4-sided die of damage; the short sword causes one 6-sided die of damage.\n", "\n", "What is the distribution of damage you inflict in each round?\n", "\n", "To answer this question, I'll make a `Pmf` to represent the 4-sided and 6-sided dice:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.779457Z", "iopub.status.busy": "2021-04-16T19:35:32.778936Z", "iopub.status.idle": "2021-04-16T19:35:32.781650Z", "shell.execute_reply": "2021-04-16T19:35:32.781084Z" } }, "outputs": [], "source": [ "d4 = make_die(4)\n", "d6 = make_die(6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's compute the probability you inflict 1 point of damage.\n", "\n", "* If you attacked with the dagger, it's 1/4.\n", "\n", "* If you attacked with the short sword, it's 1/6.\n", "\n", "Because the probability of choosing either weapon is 1/2, the total probability is the average:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.786557Z", "iopub.status.busy": "2021-04-16T19:35:32.785642Z", "iopub.status.idle": "2021-04-16T19:35:32.788922Z", "shell.execute_reply": "2021-04-16T19:35:32.789450Z" } }, "outputs": [ { "data": { "text/plain": [ "0.20833333333333331" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prob_1 = (d4(1) + d6(1)) / 2\n", "prob_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the outcomes 2, 3, and 4, the probability is the same, but for 5 and 6 it's different, because those outcomes are impossible with the 4-sided die." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.794121Z", "iopub.status.busy": "2021-04-16T19:35:32.793553Z", "iopub.status.idle": "2021-04-16T19:35:32.796490Z", "shell.execute_reply": "2021-04-16T19:35:32.796042Z" } }, "outputs": [ { "data": { "text/plain": [ "0.08333333333333333" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prob_6 = (d4(6) + d6(6)) / 2\n", "prob_6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compute the distribution of the mixture, we could loop through the possible outcomes and compute their probabilities.\n", "\n", "But we can do the same computation using the `+` operator:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.802178Z", "iopub.status.busy": "2021-04-16T19:35:32.801710Z", "iopub.status.idle": "2021-04-16T19:35:32.803562Z", "shell.execute_reply": "2021-04-16T19:35:32.803939Z" } }, "outputs": [], "source": [ "mix1 = (d4 + d6) / 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the mixture of these distributions looks like." ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.828505Z", "iopub.status.busy": "2021-04-16T19:35:32.820367Z", "iopub.status.idle": "2021-04-16T19:35:32.966618Z", "shell.execute_reply": "2021-04-16T19:35:32.966177Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mix1.bar(alpha=0.7)\n", "decorate_dice('Mixture of one 4-sided and one 6-sided die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now suppose you are fighting three monsters:\n", "\n", "* One has a club, which causes one 4-sided die of damage.\n", "\n", "* One has a mace, which causes one 6-sided die.\n", "\n", "* And one has a quarterstaff, which also causes one 6-sided die. \n", "\n", "Because the melee is disorganized, you are attacked by one of these monsters each round, chosen at random.\n", "To find the distribution of the damage they inflict, we can compute a weighted average of the distributions, like this:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.971304Z", "iopub.status.busy": "2021-04-16T19:35:32.970806Z", "iopub.status.idle": "2021-04-16T19:35:32.972845Z", "shell.execute_reply": "2021-04-16T19:35:32.972416Z" } }, "outputs": [], "source": [ "mix2 = (d4 + 2*d6) / 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This distribution is a mixture of one 4-sided die and two 6-sided dice.\n", "Here's what it looks like." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:32.995932Z", "iopub.status.busy": "2021-04-16T19:35:32.995150Z", "iopub.status.idle": "2021-04-16T19:35:33.117724Z", "shell.execute_reply": "2021-04-16T19:35:33.117207Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mix2.bar(alpha=0.7)\n", "decorate_dice('Mixture of one 4-sided and two 6-sided die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section we used the `+` operator, which adds the probabilities in the distributions, not to be confused with `Pmf.add_dist`, which computes the distribution of the sum of the distributions.\n", "\n", "To demonstrate the difference, I'll use `Pmf.add_dist` to compute the distribution of the total damage done per round, which is the sum of the two mixtures:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.122025Z", "iopub.status.busy": "2021-04-16T19:35:33.121481Z", "iopub.status.idle": "2021-04-16T19:35:33.123747Z", "shell.execute_reply": "2021-04-16T19:35:33.123236Z" } }, "outputs": [], "source": [ "total_damage = Pmf.add_dist(mix1, mix2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.139228Z", "iopub.status.busy": "2021-04-16T19:35:33.136581Z", "iopub.status.idle": "2021-04-16T19:35:33.278941Z", "shell.execute_reply": "2021-04-16T19:35:33.279427Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "total_damage.bar(alpha=0.7)\n", "decorate_dice('Total damage inflicted by both parties')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General Mixtures\n", "\n", "In the previous section we computed mixtures in an *ad hoc* way.\n", "Now we'll see a more general solution.\n", "In future chapters, we'll use this solution to generate predictions for real-world problems, not just role-playing games.\n", "But if you'll bear with me, we'll continue the previous example for one more section.\n", "\n", "Suppose three more monsters join the combat, each of them with a battle axe that causes one 8-sided die of damage.\n", "Still, only one monster attacks per round, chosen at random, so the damage they inflict is a mixture of:\n", "\n", "* One 4-sided die,\n", "* Two 6-sided dice, and\n", "* Three 8-sided dice.\n", "\n", "I'll use a `Pmf` to represent a randomly chosen monster:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.286725Z", "iopub.status.busy": "2021-04-16T19:35:33.284730Z", "iopub.status.idle": "2021-04-16T19:35:33.290910Z", "shell.execute_reply": "2021-04-16T19:35:33.290555Z" } }, "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
40.166667
60.333333
80.500000
\n", "
" ], "text/plain": [ "4 0.166667\n", "6 0.333333\n", "8 0.500000\n", "dtype: float64" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hypos = [4,6,8]\n", "counts = [1,2,3]\n", "pmf_dice = Pmf(counts, hypos)\n", "pmf_dice.normalize()\n", "pmf_dice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This distribution represents the number of sides on the die we'll roll and the probability of rolling each one.\n", "For example, one of the six monsters has a dagger, so the probability is $1/6$ that we roll a 4-sided die.\n", "\n", "Next I'll make a sequence of `Pmf` objects to represent the dice:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.294783Z", "iopub.status.busy": "2021-04-16T19:35:33.294222Z", "iopub.status.idle": "2021-04-16T19:35:33.295894Z", "shell.execute_reply": "2021-04-16T19:35:33.296242Z" } }, "outputs": [], "source": [ "dice = [make_die(sides) for sides in hypos]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compute the distribution of the mixture, I'll compute the weighted average of the dice, using the probabilities in `pmf_dice` as the weights.\n", "\n", "To express this computation concisely, it is convenient to put the distributions into a Pandas `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.300969Z", "iopub.status.busy": "2021-04-16T19:35:33.300520Z", "iopub.status.idle": "2021-04-16T19:35:33.309423Z", "shell.execute_reply": "2021-04-16T19:35:33.309778Z" } }, "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", "
12345678
00.2500000.2500000.2500000.250000NaNNaNNaNNaN
10.1666670.1666670.1666670.1666670.1666670.166667NaNNaN
20.1250000.1250000.1250000.1250000.1250000.1250000.1250.125
\n", "
" ], "text/plain": [ " 1 2 3 4 5 6 7 8\n", "0 0.250000 0.250000 0.250000 0.250000 NaN NaN NaN NaN\n", "1 0.166667 0.166667 0.166667 0.166667 0.166667 0.166667 NaN NaN\n", "2 0.125000 0.125000 0.125000 0.125000 0.125000 0.125000 0.125 0.125" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "pd.DataFrame(dice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a `DataFrame` with one row for each distribution and one column for each possible outcome.\n", "Not all rows are the same length, so Pandas fills the extra spaces with the special value `NaN`, which stands for \"not a number\".\n", "We can use `fillna` to replace the `NaN` values with 0." ] }, { "cell_type": "raw", "metadata": { "execution": { "iopub.execute_input": "2021-04-12T15:01:40.666810Z", "iopub.status.busy": "2021-04-12T15:01:40.666262Z", "iopub.status.idle": "2021-04-12T15:01:40.669604Z", "shell.execute_reply": "2021-04-12T15:01:40.669178Z" } }, "source": [ "pd.DataFrame(dice).fillna(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next step is to multiply each row by the probabilities in `pmf_dice`, which turns out to be easier if we transpose the matrix so the distributions run down the columns rather than across the rows:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.314949Z", "iopub.status.busy": "2021-04-16T19:35:33.314409Z", "iopub.status.idle": "2021-04-16T19:35:33.316129Z", "shell.execute_reply": "2021-04-16T19:35:33.316499Z" } }, "outputs": [], "source": [ "df = pd.DataFrame(dice).fillna(0).transpose()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.324161Z", "iopub.status.busy": "2021-04-16T19:35:33.323375Z", "iopub.status.idle": "2021-04-16T19:35:33.326601Z", "shell.execute_reply": "2021-04-16T19:35:33.326987Z" }, "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", "
012
10.250.1666670.125
20.250.1666670.125
30.250.1666670.125
40.250.1666670.125
50.000.1666670.125
60.000.1666670.125
70.000.0000000.125
80.000.0000000.125
\n", "
" ], "text/plain": [ " 0 1 2\n", "1 0.25 0.166667 0.125\n", "2 0.25 0.166667 0.125\n", "3 0.25 0.166667 0.125\n", "4 0.25 0.166667 0.125\n", "5 0.00 0.166667 0.125\n", "6 0.00 0.166667 0.125\n", "7 0.00 0.000000 0.125\n", "8 0.00 0.000000 0.125" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can multiply by the probabilities in `pmf_dice`:\n" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.330625Z", "iopub.status.busy": "2021-04-16T19:35:33.328502Z", "iopub.status.idle": "2021-04-16T19:35:33.332816Z", "shell.execute_reply": "2021-04-16T19:35:33.332380Z" } }, "outputs": [], "source": [ "df *= pmf_dice.ps" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.340823Z", "iopub.status.busy": "2021-04-16T19:35:33.340224Z", "iopub.status.idle": "2021-04-16T19:35:33.343890Z", "shell.execute_reply": "2021-04-16T19:35:33.343386Z" } }, "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", "
012
10.0416670.0555560.0625
20.0416670.0555560.0625
30.0416670.0555560.0625
40.0416670.0555560.0625
50.0000000.0555560.0625
60.0000000.0555560.0625
70.0000000.0000000.0625
80.0000000.0000000.0625
\n", "
" ], "text/plain": [ " 0 1 2\n", "1 0.041667 0.055556 0.0625\n", "2 0.041667 0.055556 0.0625\n", "3 0.041667 0.055556 0.0625\n", "4 0.041667 0.055556 0.0625\n", "5 0.000000 0.055556 0.0625\n", "6 0.000000 0.055556 0.0625\n", "7 0.000000 0.000000 0.0625\n", "8 0.000000 0.000000 0.0625" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And add up the weighted distributions:" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.349701Z", "iopub.status.busy": "2021-04-16T19:35:33.348913Z", "iopub.status.idle": "2021-04-16T19:35:33.352453Z", "shell.execute_reply": "2021-04-16T19:35:33.351964Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/plain": [ "1 0.159722\n", "2 0.159722\n", "3 0.159722\n", "4 0.159722\n", "5 0.118056\n", "6 0.118056\n", "7 0.062500\n", "8 0.062500\n", "dtype: float64" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sum(axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The argument `axis=1` means we want to sum across the rows.\n", "The result is a Pandas `Series`.\n", "\n", "Putting it all together, here's a function that makes a weighted mixture of distributions." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.356915Z", "iopub.status.busy": "2021-04-16T19:35:33.356141Z", "iopub.status.idle": "2021-04-16T19:35:33.358351Z", "shell.execute_reply": "2021-04-16T19:35:33.358991Z" } }, "outputs": [], "source": [ "def make_mixture(pmf, pmf_seq):\n", " \"\"\"Make a mixture of distributions.\"\"\"\n", " df = pd.DataFrame(pmf_seq).fillna(0).transpose()\n", " df *= np.array(pmf)\n", " total = df.sum(axis=1)\n", " return Pmf(total)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The first parameter is a `Pmf` that maps from each hypothesis to a probability.\n", "The second parameter is a sequence of `Pmf` objects, one for each hypothesis.\n", "We can call it like this:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.365638Z", "iopub.status.busy": "2021-04-16T19:35:33.363553Z", "iopub.status.idle": "2021-04-16T19:35:33.367689Z", "shell.execute_reply": "2021-04-16T19:35:33.368168Z" } }, "outputs": [], "source": [ "mix = make_mixture(pmf_dice, dice)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.399930Z", "iopub.status.busy": "2021-04-16T19:35:33.390116Z", "iopub.status.idle": "2021-04-16T19:35:33.566607Z", "shell.execute_reply": "2021-04-16T19:35:33.566961Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAlEUlEQVR4nO3deZwdZZ3v8c+XLGQhiEBGIAl0vEYw7LzC4kSRAcUEMEFxHJBFNjOZIWziKDp6BWdE7lxwIBMuMcMSWQRlcSZiZBMDAgHSYQshg9OGSJoEaWAgQZYk5Hf/eJ4OJ4fT3aeTLk4l+b5fr/PqqnqeeupXdarqd2rpKkUEZmZmZbNZowMwMzOrxQnKzMxKyQnKzMxKyQnKzMxKyQnKzMxKyQnKzMxKyQmqIJKmSvpuD7W1o6TXJfXK/bMkndoTbef2fi3pKz3VXjem+8+SXpL0Qp31Q9JHio6r0aq/7w7qrNey6Ol1aH1IOk/Sdbm7el3/kKT7JC2XdLGSqyX9j6RHGhu5Fa13owPYEElaBHwIWAW8AzwNXANMi4jVABExsRttnRoRd3dUJyKeA7ZYv6jXTO884CMRcVxF+2N7ou1uxjEMOAfYKSJefL+nX2bV37ekWcB1EXHFurRX6zsvqxrr+gTgJWDLiAhJnwQ+AwyNiD+/n7FJagKeBfpExKr3c9qbKh9BrbvPRcQgYCfgQuCbwJU9PRFJG+uPiJ2Al52cyq/B6+BOwNPx7hMFdgIWrUty2oi3pY1XRPjTzQ+wCPh01bD9gNXAbrl/OvDPuXtb4DbgVeAV4HekHwfX5nHeBF4HvgE0AQGcAjwH3FcxrHdubxbwQ+AR4DXgP4Gtc9lBQGuteIExwApgZZ7eExXtnZq7NwO+A/wReJF0ZPiBXNYex1dybC8B/9jJcvpAHr8tt/ed3P6n8zyvznFM72D8fwCWAkuAk/O0P5LLDgceA5YBi4HzKsZrj/OkXPY/wERgX+DJ/D1Mqaj/v4B7gJfzPF0PbFVRvk+e1nLgJuBn7d9tLj8CeDy3+yCwRwfzcz7wb7m7D/Bn4F9yf3/gLeCDld838APSUfpbeVlNyfUjz9N/5/m7DFCNaXb2nf8T8ECerzuBbauW35p1MA8/GViQp3cH6ei3fTq7AHeR1u9ngC91sl4MB+7N070LmEI6Qqycdm/SNrQyx/868Ld5ObyT+8/vavmT1v1v5u/97dzuAbneq8ATwEEV9TtbLs/l2F7Pn49XzVc/0nrdXv87pLMsW+b+fwYuyd2bAxflNv8ETAX657IPkvYXbXlZ30Y6YqyMseb2n8vHAfPz/M0CPla1PL6el8drpHW5X2f7qYbuaxs58Q31Q40EVbEC/13uns67CeqHeQXskz+fJO9Mqtvi3Q30GmAgacfVPqwyQT0P7Jbr3MK7G/hBdJCgcvd57XUrymfxboI6GWgBPkw61XIrcG1VbP+e49qTtNF/rIPldE3eeAblcX8PnNJRnFXjjiFtuO3z+FPWTlAHAbuTEt4eue6RVXFOJe00DiXt2P4D+AtgCCn5firX/wjptNHmwGDSj4JLcllfUnI9M393XyDtMNu/231yW/sDvUjJexGweY15OhiYl7v/EvgD8HBF2RNV8feu/n4q2grSzmQrYEfSzmxMB8uyo+/8D8BH83c5C7iwk3XwSNJ68THSTv47wIO5/kDSD4GTctk+pES/awfxzAZ+lJf3gaRE8J4EVb0d5f4Tgfsr+jtd/rn7cWBYno8hpB8ih5HWnc/k/sHdWC69O1lv7wOOyt135rbGVpR9PndfAswAtiZtH78EfpjLtgGOAgbkspuA/6j67jra/j9K+uHzGdL6+o38vfWtWB6PADvkaS8AJna1n2rUx6f4etYS0pdebSWwPekX58qI+F3kNaIT50XEnyPizQ7Kr42IpyKd6vgu8KXOLqp3w7HAjyJiYUS8DnwLOLrq9Mj5EfFmRDxB+gW6Z3UjOZa/Ab4VEcsjYhFwMXB8nXF8Cbi6Yh7PqyyMiFkRMS8iVkfEk8ANwKeq2viniHgrIu4kbbQ3RMSLEfE86dfh3rmtloi4KyLejog20s6zva0DSDvdyfm7u5W0gbf7KvDjiHg4It6JiJ+QkvYBNeZpNjBC0jakHfOVwBBJW+Tp3Vvnsml3YUS8Gum6zW+Bvbo5/tUR8fu8jv28xviV6+DfknagCyJdf7kA2EvSTqQjmEURcXVErIqIR0k7zS9WT1DSjqQj2e/m5X0faee8rupZ/pMjYnGej+OAmRExM687dwHNpIRV73LpzL3Ap/L2sgcwOff3I8337yQpx312RLwSEctJy/NogIh4OSJuiYg3ctkPeO+63dH2/zfAr/L6vJJ0lNaf9IOocnksiYhXSMu+ff7WZT9VKCeonjWEdGhc7f+SfsXcKWmhpHPraGtxN8r/SPrFs21dUXZuh9xeZdu9STeFtKu86+4Nat/AsS3vHn1UtjWkG3FUz+MakvaX9FtJbZJeI53uqp7/P1V0v1mjf4vc1l9IulHS85KWAddVtLUD8HzVhloZ107AOZJebf+Qfq3vUD1DeYfXTNrZHEjamT0IjGbdElQ938P6jF89n5dWzOMrgEjf507A/lXL4FhguxrT3AH4n1j7GtIfa9SrVz3Lv3o+/rqq/idIO+Z267Nc7yUd3e8DzCOdwvwUKWG2RMRLpKP0AcDcihhuz8ORNEDSjyX9Ma+P9wFbVf0A7Wj7X2v7jXTT1mLW3u46mr912U8Vygmqh0jal7QS3F9dlo8gzomIDwOfA74m6ZD24g6a7OqXy7CK7h1Jv35eIh0pDKiIqxd5xa+z3SWkjbiy7VWsvXOvx0s5puq2nq9z/KW8dx4r/ZR0imRYRHyAdGpC3Yyx3Q9Jy2WPiNiS9Cu7va2lpKOcyrYr41oM/CAitqr4DIiIGzqY1r2k03l7A3Ny/2dJ1zDv62Cc9f0Vu67jVyflv62az/4R8WAuu7eqbIuI+LsabS4FPihpYMWw6u+2O+pZ/tXzcW1V/YERcWEd06pnOT4I7Ax8nrRMnibN3+G8+wPkJdIPpF0rYvhARLQninNyG/vn9fHAPLyjdbBy+19r+83r7TDq2O662E81hBPUepK0paQjgBtJ54Hn1ahzhKSP5JVlGeki7zu5+E+k6z3ddZykkZIGAN8Hbo6Id0jXefpJOlxSH9K1gs0rxvsT0CSpo+/+BuBsScPzqacLgJ9FN2+rzbH8HPiBpEH5VNDXSEcn9fg5cGLFPH6vqnwQ8EpEvCVpP+DL3YmvRluvA69KGkK6OaPdbNJ3NUlSb0njScmk3b8DE/MRnSQNzMt+UAfTuhc4gXRn2gry9SXg2Xx6sZZ1XUcqx+/sO6/HVOBbknYFkPQBSX+dy24DPirpeEl98mdfSR+rbiQi/kg6ijxfUl9JnyDtDNdVd5f/dcDnJH1WUi9J/SQdJGloHdNqI93Y0+F3ERFvAHOB03g3IT1IOkV6b66zOsf9r5L+AkDSEEmfzfUHkRLYq5K25r3rPnS8/f8cOFzSIXn7P4d0yvPBrmaui/1UQzhBrbtfSlpO+kX2j6TrFid1UHcEcDdpJzgb+H8RMSuX/RD4Tj7U/3o3pn8t6QLyC6QbAc4AiIjXgL8HriD9avoz0Fox3k3578uSHq3R7lW57ftI//PxFnB6N+KqdHqe/kLSkeVPc/tdiohfky4k30M67XBPVZW/B76fv4P/Tdow19X5pFMyrwG/It0Y0h7HCtKNEaeQ7m46jrRDfjuXN5OuJ0wh3XHVQrqQ35EHSdcE2o+WniYt446OngAuBb6o9M+pk7s1Z0lX33mXIuIXwP8BbsynnZ4Cxuay5aQbUY4m/YJ/IdfdvHZrfJl0U8MrpJ3vNesSU552t5Z/RCwGxgPfJiWcxaQfJF3uC3Py+QHwQN5ea11nhJSI+vDutcp7SUmn8jv+Zo71obw87yYdNUFa7/uTjogeIp3+q9bR9v8MaR39tzz+50j/ErOiq/mj8/1UQ7TfSWZmdZL0MDA1Iq5udCy26dF6/uP2hsRHUGZdkPQpSdvlU3xfId2dVetXrZn1IP9ntVnXdiadQtyC9H8tX4yIpY0NyWzj51N8ZmZWSj7FZ2ZmpbRRneLbdttto6mpqdFhmJlZN8ydO/eliBhcPXyjSlBNTU00Nzc3OgwzM+sGSTWfJuJTfGZmVkpOUGZmVkpOUGZmVkob1TUoM7NGWLlyJa2trbz11luNDqXU+vXrx9ChQ+nTp09d9Z2gzMzWU2trK4MGDaKpqYm1H3xv7SKCl19+mdbWVoYPH17XOIWe4pM0RtIzklpqvVtE0i6SZkt6u/pBqZK2knSzpP+StEDSx4uM1cxsXb311ltss802Tk6dkMQ222zTraPMwo6g8nuILiO9ergVmCNpRn4/SrtXSE/hPbJGE5cCt0fEFyX1peIdR2ZmZePk1LXuLqMij6D2I71BcmF+1PuNpMfcrxHp9dtzSC/bWkNS+0u6rsz1VkTEqwXGamZmJVPkNaghrP1a4lbSO2Dq8WHSu1qulrQn6QVgZ1a9JhoASROACQA77rg+L+Y0M+sZky7p2YfdTzlrTI+0M2PGDJ5++mnOPbfjt7lPnz6dQw89lB122KFHprk+ikxQtY7l6n0ybW/SC+ROj4iHJV0KnAt89z0NRkwDpgGMGjVqvZ5829Mr1bqqZ2V0rN23scVq1l3jxo1j3LhxndaZPn06u+22W7cS1KpVq+jdu+fTSZGn+FqBYRX9Q0lv26x33NaIeDj330xKWGZmVsOiRYvYZZddOPXUU9ltt9049thjufvuuxk9ejQjRozgkUceYfr06UyaNAmA8ePHc8016WXGP/7xjzn22GO5+eabaW5u5thjj2WvvfbizTffpKmpiZdeegmA5uZmDjroIADOO+88JkyYwKGHHsoJJ5xAW1sbRx11FPvuuy/77rsvDzzwwHrPU5FHUHOAEZKGk149fjTpVc9diogXJC2WtHN+hfEhpFdjm5lZB1paWrjpppuYNm0a++67Lz/96U+5//77mTFjBhdccAFHHnnkmrrTpk1j9OjRDB8+nIsvvpiHHnqIrbfemilTpnDRRRcxatSoLqc3d+5c7r//fvr378+Xv/xlzj77bD7xiU/w3HPP8dnPfpYFCxas1/wUlqAiYpWkScAdQC/gqoiYL2liLp8qaTugGdgSWC3pLGBkRCwDTgeuz3fwLQROKipWM7ONwfDhw9l9990B2HXXXTnkkEOQxO67786iRYvWqvuhD32I73//+/zVX/0Vv/jFL9h66627Pb1x48bRv39/AO6++26efvrd44hly5axfPlyBg0atM7zU+g/6kbETGBm1bCpFd0vkE791Rr3caDrFG5mZgBsvvnma7o322yzNf2bbbYZq1atek/9efPmsc0227BkScdXX3r37s3q1asB3vM/TAMHDlzTvXr1ambPnr0mYfUEP4vPzGwT9Mgjj/DrX/+axx57jIsuuohnn30WgEGDBrF8+fI19Zqampg7dy4At9xyS4ftHXrooUyZMmVN/+OPP77eMfpRR2ZmPazsd2G+/fbbfPWrX+Xqq69mhx124OKLL+bkk0/mnnvu4cQTT2TixIn079+f2bNn873vfY9TTjmFCy64gP337/g/hSZPnsxpp53GHnvswapVqzjwwAOZOnVqh/Xr4QRlZrYRaGpq4qmnnlrTP3369JplJ554IgBPPPHEmvLK28+POuoojjrqqDVln/zkJ/n973//numdd955a/Vvu+22/OxnP1vf2ViLT/GZmVkpOUGZmVkpOUGZmfWAiPV6kM0mobvLyAnKzGw99evXj5dfftlJqhPt74Pq169f3eP4Jgkzs/U0dOhQWltbaWtra3Qopdb+Rt16OUGZma2nPn361P2WWKufT/GZmVkpOUGZmVkpOUGZmVkpOUGZmVkpOUGZmVkpOUGZmVkpOUGZmVkpOUGZmVkpFZqgJI2R9IykFknn1ijfRdJsSW9L+nqN8l6SHpN0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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mix.bar(label='mixture', alpha=0.6)\n", "decorate_dice('Distribution of damage with three different weapons')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section I used Pandas so that `make_mixture` is concise, efficient, and hopefully not too hard to understand.\n", "In the exercises at the end of the chapter, you'll have a chance to practice with mixtures, and we will use `make_mixture` again in the next chapter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "This chapter introduces the `Cdf` object, which represents the cumulative distribution function (CDF).\n", "\n", "A `Pmf` and the corresponding `Cdf` are equivalent in the sense that they contain the same information, so you can convert from one to the other. \n", "The primary difference between them is performance: some operations are faster and easier with a `Pmf`; others are faster with a `Cdf`.\n", "\n", "In this chapter we used `Cdf` objects to compute distributions of maximums and minimums; these distributions are useful for inference if we are given a maximum or minimum as data.\n", "You will see some examples in the exercises, and in future chapters.\n", "We also computed mixtures of distributions, which we will use in the next chapter to make predictions.\n", "\n", "But first you might want to work on these exercises." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** When you generate a D&D character, instead of rolling dice, you can use the \"standard array\" of attributes, which is 15, 14, 13, 12, 10, and 8.\n", "Do you think you are better off using the standard array or (literally) rolling the dice?\n", "\n", "Compare the distribution of the values in the standard array to the distribution we computed for the best three out of four:\n", "\n", "* Which distribution has higher mean? Use the `mean` method.\n", "\n", "* Which distribution has higher standard deviation? Use the `std` method.\n", "\n", "* The lowest value in the standard array is 8. For each attribute, what is the probability of getting a value less than 8? If you roll the dice six times, what's the probability that at least one of your attributes is less than 8?\n", "\n", "* The highest value in the standard array is 15. For each attribute, what is the probability of getting a value greater than 15? If you roll the dice six times, what's the probability that at least one of your attributes is greater than 15?" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "To get you started, here's a `Cdf` that represents the distribution of attributes in the standard array:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.571476Z", "iopub.status.busy": "2021-04-16T19:35:33.571037Z", "iopub.status.idle": "2021-04-16T19:35:33.573281Z", "shell.execute_reply": "2021-04-16T19:35:33.572815Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "standard = [15,14,13,12,10,8]\n", "cdf_standard = Cdf.from_seq(standard)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "We can compare it to the distribution of attributes you get by rolling four dice at adding up the best three." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.667038Z", "iopub.status.busy": "2021-04-16T19:35:33.649741Z", "iopub.status.idle": "2021-04-16T19:35:33.820988Z", "shell.execute_reply": "2021-04-16T19:35:33.820486Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA0A0lEQVR4nO3deXyU5bn/8c81SwgQ9kV2QQTKDhEVBEWkLrhb26rFam3r1rrU9rTqadXWnv5qq6e11CLHlbpUrXZR61IVQawFFSgiKAgCQkBZZV+Smbl+f8zDkA2SQCbPJHzfr1demed+ti9DkmvuZ7vN3REREck1kbADiIiIVEYFSkREcpIKlIiI5CQVKBERyUkqUCIikpNUoEREJCepQEnOMrNJZnZLLW2rm5ltM7NoMD3NzL5dG9sOtveSmV1aW9urwX7/x8zWm9lndbjP481sUanp5Wb2xbravxw6VKAkFMEftZ1mttXMNpnZv83sKjPL/Ey6+1Xu/vNqbmu/fyDdfYW7F7h7shay/9TMHiu3/XHu/seD3XYNc3QFfgD0c/cOB7B+hSJtZm5mR+5vPXd/09371HR/+8gw2cz+pza2JQ2PCpSE6Sx3bwYcDtwB3Ag8WNs7MbNYbW8zRxwObHD3tXW1wwb8XkoOUoGS0Ln7Znd/DrgAuNTMBkDZT9dm1tbM/hH0tjaa2ZtmFjGzR4FuwPPBIbwfmVn3oCfwLTNbAbxeqq30H9ieZvaOmW02s2fNrHWwrxPNrKh0xj29NDM7Dfhv4IJgf+8F8zO9kSDXT8zsEzNba2aPmFmLYN6eHJea2Yrg8NyP9/XemFmLYP11wfZ+Emz/i8CrQKcgx+RK1m0VvGfrzOzz4HWXYN4vgOOBe4L17zGz6cGq7wVtF+x5L8zsxuAw4sOVvT/A0Wb2QbCfh80sP9jPN8zsX+VyuZkdaWZXAOOBHwX7ez6Y38nM/hLkXmZm15Va9xgzm2VmW8xsjZn9Zl/vndR/KlCSM9z9HaCI9B/O8n4QzGsHHEa6SLi7fx1YQbo3VuDuvy61zmigL3DqPnZ5CfBNoBOQACZUI+PLwP8Dngr2N7iSxb4RfI0BjgAKgHvKLTMK6AOMBW41s7772OXvgRbBdkYHmS9z99eAccDqIMc3Klk3AjxMuqfVDdi5J4e7/xh4E7gmWP8adz8hWG9w0PZUMN0BaB1s54p95BxP+n3uCfQGfrKP5TLc/T7gceDXwf7OCg7xPg+8B3Qm/f58z8z2/B/+DviduzcP9vXnqvYj9ZcKlOSa1aT/GJZXAnQEDnf3kuA8SFUPkvypu2939537mP+ou8939+3ALcBXLbiI4iCNB37j7kvdfRtwM3Bhud7bz9x9p7u/R/qPcYVCF2S5ALjZ3be6+3Lgf4GvVyeEu29w97+4+w533wr8gnSRq6kUcJu7797Pe3mPu690943Bfi46gP0AHA20c/fb3b3Y3ZcC9wMXBvNLgCPNrK27b3P3mQe4H6kHVKAk13QGNlbSfiewBHjFzJaa2U3V2NbKGsz/BIgDbauVcv86Bdsrve0Y6Z7fHqWvuttBupdVXlsgr5Jtda5OCDNrYmb/Fxwa3AJMB1oeQBFe5+67qlim/HvZqYb72ONw0octN+35It1b3vPefYt0D22hmb1rZmce4H6kHlCBkpxhZkeT/uP7r/Lzgh7ED9z9COAs4PtmNnbP7H1ssqoeVtdSr7uR/nS+HtgONCmVK0r60GJ1t7ua9B/a0ttOAGuqWK+89UGm8ttaVc31f0D6MOKxwSGxPYfwLPhe3aEMqrNc+fdydfC6/HtZ/mrD8tteCSxz95alvpq5++kA7r7Y3S8C2gO/Ap4xs6bV/HdIPaMCJaEzs+bBJ+Engcfc/f1KljkzOLFuwBYgGXxB+g//EQew64vNrJ+ZNQFuB54JLkP/CMg3szPMLE76fEqjUuutAbpbqUviy3kCuMHMephZAXvPWSVqEi7I8mfgF2bWzMwOB74PPLb/NTOakT7vtCm4AOS2cvMre98O9L38rpl1Cfbz38Ce81fvAf3NbEhw4cRPq9jfO8CW4KKMxmYWNbMBwYcXzOxiM2vn7ilgU7DOQd86ILlJBUrC9LyZbSX9qfnHwG+Ay/axbC/gNWAbMAOY6O7Tgnm/BH4SHBL6rxrs/1FgMunDbfnAdZC+qhD4DvAA6d7KdtIXaOzxdPB9g5nNqWS7DwXbng4sA3YB19YgV2nXBvtfSrpn+adg+9VxN9CYdE9sJvByufm/A74cXHm35wKRnwJ/DN7Lr9Yg55+AV4KcS4H/AXD3j0gX/9eAxVTsHT8I9Av29/egKJ8FDCH93q0n/f/QIlj+NGCBmW0L8l9YjcOPUk+ZBiwUEZFcpB6UiIjkJBUoERHJSSpQIiKSk1SgREQkJ9W7Bz+2bdvWu3fvHnYMERGpJbNnz17v7u3Kt9e7AtW9e3dmzZoVdgwREaklZvZJZe06xCciIjlJBUpERHKSCpSIiOSkencOqjIlJSUUFRWxa5eeeBKm/Px8unTpQjweDzuKiDQADaJAFRUV0axZM7p37076WaJS19ydDRs2UFRURI8ePcKOIyINQNYO8ZnZQ5Ye7nr+PuabmU0wsyVmNs/MCg90X7t27aJNmzYqTiEyM9q0aaNerIjUmmyeg5pM+snD+zKO9BOqe5EeRvreg9mZilP49H8gIrUpa4f43H26mXXfzyLnAI8Ew3bPNLOWZtbR3T/NViYRkYNx//33Z15ffvnlISapG+4OOz7Ht6zFt67Ft6yF4h3EjrukTvYf5jmozpQdJrooaKtQoMzsCtK9LLp161Yn4Wpi+fLlnHnmmcyfX+nRzGqbNm0aeXl5HHfccRXmPfvss9xyyy1EIhFisRh33303o0aNqva2n376aW699VY6dOjA1KlTK8zfsmULffv25bzzzuOee+45qH+HiNQvnkzg65cFhWhN+ntQlEiWlFvaiB5zIRbLy3quMAtUZceDKh2cyt3vA+4DGDZsWIMdwGratGkUFBRUWqDGjh3L2WefjZkxb948vvrVr7Jw4cJqb/vBBx9k4sSJjBkzptL5t9xyC6NHjz7g7CKS23z3tkzhiXQdhOU12TszlaDkn3dVd0v4tvVYy05ZyVlamPdBFQFdS013AVaHlOWgJRIJLr30UgYNGsSXv/xlduzYAcDs2bMZPXo0Rx11FKeeeiqffpruIE6YMIF+/foxaNAgLrzwQpYvX86kSZP47W9/y5AhQ3jzzTfLbL+goCBzjmf79u37PN/zxBNPMHDgQAYMGMCNN94IwO23386//vUvrrrqKn74wx9WWGf27NmsWbOGU045pdbeDxEJlyeKSX48k5JX76b4yRsofuoHlLz0KxJvPYxvLCqzrMXzsfxmlW7H8poSaduDyBHHEh18FrHjv401blHpsrUtzB7Uc8A1ZvYkcCywubbOPyXmPk9y3j+qtWy01yhiI75edv0Zj5JcvHdk6uigM4kNOWu/21m0aBEPPvggI0eO5Jvf/CYTJ07k+uuv59prr+XZZ5+lXbt2PPXUU/z4xz/moYce4o477mDZsmU0atSITZs20bJlS6666ioKCgr4r/+qfNTyv/3tb9x8882sXbuWF154ocL81atXc+ONNzJ79mxatWrFKaecwt///nduvfVWXn/9de666y6GDRtWZp1UKsUPfvADHn30UaZMmVKt90xEcldq4wpSi98itfRtvGRnpcv41rXQoXeZtkjXwXjJbqx5e6xZ+/T35u2xRgV1EbtSWStQZvYEcCLQ1syKgNuAOIC7TwJeBE4HlgA7gMuylaUudO3alZEjRwJw8cUXM2HCBE477TTmz5/PySefDEAymaRjx44ADBo0iPHjx3Puuedy7rnnVmsf5513Hueddx7Tp0/nlltu4bXXXisz/9133+XEE0+kXbv0Q4HHjx/P9OnT97v9iRMncvrpp9O1a9d9LiMiuS+57F2SH7yKb6j0uasQzcOatUsXnSYtK8wu/0E9F2TzKr6LqpjvwHeztf+6Vv6Qm5nh7vTv358ZM2ZUWP6FF15g+vTpPPfcc/z85z9nwYIF1d7XCSecwMcff8z69etp27Ztpj39ltbMjBkzePPNN5k4cSLbtm2juLiYgoIC7rjjjhpvS0TC45tWVyhO1qwd0SNHEelxNDRtXe9uBWkQT5IoLzbkrCoPye13/RFfr/GniRUrVjBjxgxGjBjBE088wahRo+jTpw/r1q3LtJeUlPDRRx/Rt29fVq5cyZgxYxg1ahR/+tOf2LZtG82aNWPLli2Vbn/JkiX07NkTM2POnDkUFxfTpk2bMssce+yxXH/99axfv55WrVrxxBNPcO211+439+OPP555PXnyZGbNmqXiJJLDfNdWUp8tItq97OH6aK9RJN9/CSJRIocXEj1yJNahT70rSqU1yAIVhr59+/LHP/6RK6+8kl69enH11VeTl5fHM888w3XXXcfmzZtJJBJ873vfo3fv3lx88cVs3rwZd+eGG26gZcuWnHXWWXz5y1/m2Wef5fe//z3HH398Zvt/+ctfeOSRR4jH4zRu3Jinnnqqwg9ex44d+eUvf8mYMWNwd04//XTOOeecun4rRKSWuTv+6YckF/+L1Mq5kEoRadsDK9j7IdUK2hAbfQWRDr1DPW9Um+xADguFadiwYV5+wMIPP/yQvn37hpRIStP/hTRkdX2jrm/fSHLJv0kt+Te+fUOZedFBZxAbcnbWM9QFM5vt7sPKt6sHJSKSQzyZwFfNJ7n4TVKrFlDZ7aGRdkdgrTrXfbg6pgIlIpIjkstnkXznSXzX1grzLK8pkZ7DiRw5ksghUJxABUpEJGdY4xYVilOkwxeI9BpFpOvgOnm8UC5RgRIRCYG7V7w9pf2RWPPDoGQXkSOPS1+J16xdSAnDpwIlIlLHfPNnJGY+RnTAOCKd+2fazYz42GvT9yxFoiEmzA0qUCIidcSTCVIfvEbivechlcC3bSB+9k+xeKPMModyj6m8MB8W2+DdfffdmYfG1obu3buzfv36A15/8uTJXHPNNQeVYdOmTUycOPGgtiFyKEptWEHJi3eQ+M/fIJUAwHdswtcsCjlZ7lKByqLaLlA1lUwma32bKlAiNeOJYhJz/krJi7/EP987BJ617kb8jJuJdBkUYrrcpgJVC7Zv384ZZ5zB4MGDGTBgAE899RQTJkxg9erVjBkzJjMG09VXX82wYcPo378/t912W2b97t27c9ttt1FYWMjAgQMz4zxt2LCBU045haFDh3LllVeWedbeueeey1FHHUX//v257777Mu0FBQXceuutHHvsscyYMYOHH36Y3r17M3r0aN56661K87/xxhsMGTKEIUOGMHToULZuTV9FdOedd3L00UczaNCgTN6bbrqJjz/+mCFDhlQ6dIeI7JX67CNKnv85yfn/BE+lG6NxYoVfIn76TURa594ArLmkwZ2DKn2nd23b153jL7/8Mp06dcoMgbF582ZatGjBb37zG6ZOnZp5oOsvfvELWrduTTKZZOzYscybN49Bg9Kfntq2bcucOXOYOHEid911Fw888AA/+9nPGDVqFLfeeisvvPBCmUL00EMP0bp1a3bu3MnRRx/N+eefT5s2bdi+fTsDBgzg9ttv59NPP+VrX/sas2fPpkWLFowZM4ahQ4dWyH/XXXfxhz/8gZEjR7Jt2zby8/N55ZVXWLx4Me+88w7uztlnn8306dO54447mD9/PnPnzq3ld1ek4fDiHSRn/5Xk4rLjukUO601sxMXpK/WkSupB1YKBAwfy2muvceONN/Lmm2/SokXlg3n9+c9/prCwkKFDh7JgwQI++OCDzLwvfelLABx11FEsX74cgOnTp3PxxRcDcMYZZ9CqVavM8hMmTGDw4MEMHz6clStXsnjxYgCi0Sjnn38+AG+//XZm+I28vDwuuOCCSnONHDmS73//+0yYMIFNmzYRi8V45ZVXeOWVVxg6dCiFhYUsXLgwsw8RqULxTpLL3slMWjyf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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cdf_best3.plot(label='best 3 of 4', color='C1', ls='--')\n", "cdf_standard.step(label='standard set', color='C7')\n", "\n", "decorate_dice('Distribution of attributes')\n", "plt.ylabel('CDF');" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "I plotted `cdf_standard` as a step function to show more clearly that it contains only a few quantities." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.825146Z", "iopub.status.busy": "2021-04-16T19:35:33.824423Z", "iopub.status.idle": "2021-04-16T19:35:33.827188Z", "shell.execute_reply": "2021-04-16T19:35:33.826753Z" } }, "outputs": [ { "data": { "text/plain": [ "(12.296699999999998, 12.0)" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here are the means\n", "cdf_best3.mean(), cdf_standard.mean()" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.831439Z", "iopub.status.busy": "2021-04-16T19:35:33.830792Z", "iopub.status.idle": "2021-04-16T19:35:33.833271Z", "shell.execute_reply": "2021-04-16T19:35:33.833623Z" }, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(2.8381101299984817, 2.3804761428476167)" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# And the standard deviations\n", "cdf_best3.std(), cdf_standard.std()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.837780Z", "iopub.status.busy": "2021-04-16T19:35:33.837233Z", "iopub.status.idle": "2021-04-16T19:35:33.839569Z", "shell.execute_reply": "2021-04-16T19:35:33.839916Z" } }, "outputs": [ { "data": { "text/plain": [ "0.055999999999999994" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here's the probability that a single attribute is less than 8\n", "cdf_best3.lt_dist(8)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.843912Z", "iopub.status.busy": "2021-04-16T19:35:33.843367Z", "iopub.status.idle": "2021-04-16T19:35:33.845820Z", "shell.execute_reply": "2021-04-16T19:35:33.846168Z" } }, "outputs": [ { "data": { "text/plain": [ "0.13419999999999999" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# And the probability that a single attribute is greater than 15\n", "cdf_best3.gt_dist(15)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.850671Z", "iopub.status.busy": "2021-04-16T19:35:33.850253Z", "iopub.status.idle": "2021-04-16T19:35:33.854102Z", "shell.execute_reply": "2021-04-16T19:35:33.853687Z" } }, "outputs": [ { "data": { "text/plain": [ "(0.2923280761096768, 0.2923280761096768)" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here are two ways to compute the probability that at\n", "# least one attribute is less than 8\n", "cdf_min6.lt_dist(8), 1 - (1-cdf_best3.lt_dist(8))**6" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.858526Z", "iopub.status.busy": "2021-04-16T19:35:33.858063Z", "iopub.status.idle": "2021-04-16T19:35:33.860312Z", "shell.execute_reply": "2021-04-16T19:35:33.860666Z" } }, "outputs": [ { "data": { "text/plain": [ "(0.5787833897023915, 0.5787833897023917)" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# And two ways to compute the probability that at least\n", "# one attribute is greater than 15\n", "cdf_max6.gt_dist(15), 1 - (1-cdf_best3.gt_dist(15))**6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Suppose you are fighting three monsters:\n", "\n", "* One is armed with a short sword that causes one 6-sided die of damage,\n", "\n", "* One is armed with a battle axe that causes one 8-sided die of damage, and\n", "\n", "* One is armed with a bastard sword that causes one 10-sided die of damage.\n", "\n", "One of the monsters, chosen at random, attacks you and does 1 point of damage.\n", "\n", "Which monster do you think it was? Compute the posterior probability that each monster was the attacker.\n", "\n", "If the same monster attacks you again, what is the probability that you suffer 6 points of damage?\n", "\n", "Hint: Compute a posterior distribution as we have done before and pass it as one of the arguments to `make_mixture`." ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.869825Z", "iopub.status.busy": "2021-04-16T19:35:33.869229Z", "iopub.status.idle": "2021-04-16T19:35:33.871979Z", "shell.execute_reply": "2021-04-16T19:35:33.872359Z" } }, "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.425532
80.319149
100.255319
\n", "
" ], "text/plain": [ "6 0.425532\n", "8 0.319149\n", "10 0.255319\n", "dtype: float64" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# Here's what we believe about the dice after seeing the data\n", "\n", "hypos = [6, 8, 10]\n", "prior = Pmf(1, hypos)\n", "likelihood = 1/prior.qs\n", "posterior = prior * likelihood\n", "posterior.normalize()\n", "posterior" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.876419Z", "iopub.status.busy": "2021-04-16T19:35:33.875994Z", "iopub.status.idle": "2021-04-16T19:35:33.877630Z", "shell.execute_reply": "2021-04-16T19:35:33.878036Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "# Here's a sequence that represents the three dice\n", "\n", "d6 = make_die(6)\n", "d8 = make_die(8)\n", "d10 = make_die(10)\n", "\n", "dice = d6, d8, d10" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:33.903730Z", "iopub.status.busy": "2021-04-16T19:35:33.901601Z", "iopub.status.idle": "2021-04-16T19:35:34.009597Z", "shell.execute_reply": "2021-04-16T19:35:34.009942Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "# And here's a mixture of the three dice, weighting\n", "# each one with the probability from the posterior distribution\n", "\n", "mix3 = make_mixture(posterior, dice)\n", "mix3.bar()" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:34.013646Z", "iopub.status.busy": "2021-04-16T19:35:34.013169Z", "iopub.status.idle": "2021-04-16T19:35:34.015385Z", "shell.execute_reply": "2021-04-16T19:35:34.015763Z" } }, "outputs": [ { "data": { "text/plain": [ "0.13634751773049647" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Solution\n", "\n", "# From the mixture, we can pull out the probability of\n", "# rolling a 6.\n", "\n", "mix3[6]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Henri Poincaré was a French mathematician who taught at the Sorbonne around 1900. The following anecdote about him is probably fiction, but it makes an interesting probability problem.\n", "\n", "Supposedly Poincaré suspected that his local bakery was selling loaves of bread that were lighter than the advertised weight of 1 kg, so every day for a year he bought a loaf of bread, brought it home and weighed it. At the end of the year, he plotted the distribution of his measurements and showed that it fit a normal distribution with mean 950 g and standard deviation 50 g. He brought this evidence to the bread police, who gave the baker a warning.\n", "\n", "For the next year, Poincaré continued to weigh his bread every day. At the end of the year, he found that the average weight was 1000 g, just as it should be, but again he complained to the bread police, and this time they fined the baker.\n", "\n", "Why? Because the shape of the new distribution was asymmetric. Unlike the normal distribution, it was skewed to the right, which is consistent with the hypothesis that the baker was still making 950 g loaves, but deliberately giving Poincaré the heavier ones.\n", "\n", "To see whether this anecdote is plausible, let's suppose that when the baker sees Poincaré coming, he hefts `n` loaves of bread and gives Poincaré the heaviest one. How many loaves would the baker have to heft to make the average of the maximum 1000 g?" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "To get you started, I'll generate a year's worth of data from a normal distribution with the given parameters." ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:34.019380Z", "iopub.status.busy": "2021-04-16T19:35:34.018836Z", "iopub.status.idle": "2021-04-16T19:35:34.020500Z", "shell.execute_reply": "2021-04-16T19:35:34.020849Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "mean = 950\n", "std = 50\n", "\n", "np.random.seed(17)\n", "sample = np.random.normal(mean, std, size=365)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:34.027571Z", "iopub.status.busy": "2021-04-16T19:35:34.024739Z", "iopub.status.idle": "2021-04-16T19:35:34.031491Z", "shell.execute_reply": "2021-04-16T19:35:34.031066Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 978.4666876067706\n", "3 992.7589004318227\n", "4 1002.0372868686195\n", "5 1008.8226939493089\n" ] } ], "source": [ "# Solution\n", "\n", "# Here's the mean of the maximum of `n` loaves,\n", "# for a range of values of `n`\n", "\n", "cdf = Cdf.from_seq(sample)\n", "\n", "for n in range(2, 6):\n", " cdf_max = cdf.max_dist(n)\n", " print(n, cdf_max.mean())" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:35:34.071771Z", "iopub.status.busy": "2021-04-16T19:35:34.052696Z", "iopub.status.idle": "2021-04-16T19:35:34.214328Z", "shell.execute_reply": "2021-04-16T19:35:34.213871Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "# It looks like hefting 4 loaves is enough to get the mean over 1000,\n", "# so the story is not entirely implausible.\n", "\n", "# Here's what the distribution of the maximum looks like, compared\n", "# to the actual distribution of weights.\n", "\n", "cdf.plot(label='one loaf')\n", "cdf.max_dist(4).plot(label='maximum of four loaves')\n", "\n", "decorate(xlabel='Weight in grams',\n", " ylabel='CDF')" ] } ], "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.8.12" } }, "nbformat": 4, "nbformat_minor": 4 }