{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# The empiricaldist API\n", "\n", "Copyright 2021 Allen Downey\n", "\n", "BSD 3-clause license: https://opensource.org/licenses/BSD-3-Clause" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A Pmf is a Series\n", "\n", "`empiricaldist` provides `Pmf`, which is a Pandas Series that represents a probability mass function." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from empiricaldist import Pmf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create a `Pmf` in any of the ways you can create a `Series`, but the most common way is to use `from_seq` to make a `Pmf` from a sequence.\n", "\n", "The following is a `Pmf` that represents a six-sided die." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, the probabilities are normalized to add up to 1." ] }, { "cell_type": "code", "execution_count": 4, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But you can also make an unnormalized `Pmf` if you want to keep track of the counts." ] }, { "cell_type": "code", "execution_count": 5, "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", "
probs
11
21
31
41
51
61
\n", "
" ], "text/plain": [ "1 1\n", "2 1\n", "3 1\n", "4 1\n", "5 1\n", "6 1\n", "Name: , dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6], normalize=False)\n", "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or normalize later (the return value is the prior sum)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the Pmf is normalized." ] }, { "cell_type": "code", "execution_count": 7, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties\n", "\n", "In a `Pmf` the index contains the quantities (`qs`) and the values contain the probabilities (`ps`).\n", "\n", "These attributes are available as properties that return arrays (same semantics as the Pandas `values` property)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.qs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,\n", " 0.16666667])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.ps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting PMFs\n", "\n", "`Pmf` provides two plotting functions. `bar` plots the `Pmf` as a histogram." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def decorate_dice(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Outcome')\n", " plt.ylabel('PMF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "d6.bar()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`plot` displays the `Pmf` as a line." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "d6.plot()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Selection\n", "\n", "The bracket operator looks up an outcome and returns its probability." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6[1]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6[6]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Outcomes that are not in the distribution cause a `KeyError`\n", "\n", "```\n", "d6[7]\n", "```\n", "\n", "You can also use parentheses to look up a quantity and get the corresponding probability." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With parentheses, a quantity that is not in the distribution returns `0`, not an error." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mutation\n", "\n", "`Pmf` objects are mutable, but in general the result is not normalized." ] }, { "cell_type": "code", "execution_count": 17, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6[7] = 1/6\n", "d6" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1666666666666665" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sum()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1666666666666665" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.normalize()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0000000000000002" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Statistics\n", "\n", "`Pmf` overrides the statistics methods to compute `mean`, `median`, etc.\n", "\n", "These functions only work correctly if the `Pmf` is normalized." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.5" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.mean()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.9166666666666665" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.var()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.707825127659933" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling\n", "\n", "`choice` chooses a random values from the Pmf, following the API of `np.random.choice`" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 2, 3, 6, 4, 3, 4, 5, 6, 5])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.choice(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sample` chooses a random values from the `Pmf`, with replacement." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1., 4., 5., 3., 2., 2., 1., 6., 5., 6.])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sample(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CDFs\n", "\n", "`empiricaldist` also provides `Cdf`, which represents a cumulative distribution function." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "from empiricaldist import Cdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create an empty `Cdf` and then add elements.\n", "\n", "Here's a `Cdf` that represents a four-sided die." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "d4 = Cdf.from_seq([1,2,3,4])" ] }, { "cell_type": "code", "execution_count": 29, "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", "
probs
10.25
20.50
30.75
41.00
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.50\n", "3 0.75\n", "4 1.00\n", "Name: , dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties\n", "\n", "In a `Cdf` the index contains the quantities (`qs`) and the values contain the probabilities (`ps`).\n", "\n", "These attributes are available as properties that return arrays (same semantics as the Pandas `values` property)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.qs" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.25, 0.5 , 0.75, 1. ])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.ps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Displaying CDFs\n", "\n", "`Cdf` provides two plotting functions.\n", "\n", "`plot` displays the `Cdf` as a line." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def decorate_dice(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Outcome')\n", " plt.ylabel('CDF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "d4.plot()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`step` plots the Cdf as a step function (which is more technically correct)." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "d4.step()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Selection\n", "\n", "The bracket operator works as usual." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.25" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[1]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluating CDFs\n", "\n", "`Cdf` provides `forward` and `inverse`, which evaluate the CDF and its inverse as functions.\n", "\n", "Evaluating a `Cdf` forward maps from a quantity to its cumulative probability." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "d6 = Cdf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.5)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`forward` interpolates, so it works for quantities that are not in the distribution." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.5)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(3.5)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(0)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(1.)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also call the `Cdf` like a function (which it is)." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.16666667)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(1.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`forward` can take an array of quantities, too." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "def decorate_cdf(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Quantity')\n", " plt.ylabel('CDF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "qs = np.linspace(0, 7)\n", "ps = d6(qs)\n", "plt.plot(qs, ps)\n", "decorate_cdf('Forward evaluation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Cdf` also provides `inverse`, which computes the inverse `Cdf`:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(3.)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.inverse(0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`quantile` is a synonym for `inverse`" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(3.)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.quantile(0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`inverse` and `quantile` work with arrays " ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ps = np.linspace(0, 1)\n", "qs = d6.quantile(ps)\n", "plt.plot(qs, ps)\n", "decorate_cdf('Inverse evaluation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These functions provide a simple way to make a Q-Q plot.\n", "\n", "Here are two samples from the same distribution." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cdf1 = Cdf.from_seq(np.random.normal(size=100))\n", "cdf2 = Cdf.from_seq(np.random.normal(size=100))\n", "\n", "cdf1.plot()\n", "cdf2.plot()\n", "decorate_cdf('Two random samples')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how we compute the Q-Q plot." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "def qq_plot(cdf1, cdf2):\n", " \"\"\"Compute results for a Q-Q plot.\n", " \n", " Evaluates the inverse Cdfs for a \n", " range of cumulative probabilities.\n", " \n", " :param cdf1: Cdf\n", " :param cdf2: Cdf\n", " \n", " :return: tuple of arrays\n", " \"\"\"\n", " ps = np.linspace(0, 1)\n", " q1 = cdf1.quantile(ps)\n", " q2 = cdf2.quantile(ps)\n", " return q1, q2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is near the identity line, which suggests that the samples are from the same distribution." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "q1, q2 = qq_plot(cdf1, cdf2)\n", "plt.plot(q1, q2)\n", "plt.xlabel('Quantity 1')\n", "plt.ylabel('Quantity 2')\n", "plt.title('Q-Q plot');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how we compute a P-P plot" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "def pp_plot(cdf1, cdf2):\n", " \"\"\"Compute results for a P-P plot.\n", " \n", " Evaluates the Cdfs for all quantities in either Cdf.\n", " \n", " :param cdf1: Cdf\n", " :param cdf2: Cdf\n", " \n", " :return: tuple of arrays\n", " \"\"\"\n", " qs = cdf1.index.union(cdf2.index)\n", " p1 = cdf1(qs)\n", " p2 = cdf2(qs)\n", " return p1, p2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "p1, p2 = pp_plot(cdf1, cdf2)\n", "plt.plot(p1, p2)\n", "plt.xlabel('Cdf 1')\n", "plt.ylabel('Cdf 2')\n", "plt.title('P-P plot');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Mutation\n", "\n", "`Cdf` objects are mutable, but in general the result is not a valid Cdf." ] }, { "cell_type": "code", "execution_count": 53, "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", "
probs
10.25
20.50
30.75
41.00
51.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.50\n", "3 0.75\n", "4 1.00\n", "5 1.25\n", "Name: , dtype: float64" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[5] = 1.25\n", "d4" ] }, { "cell_type": "code", "execution_count": 54, "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", "
probs
10.2
20.4
30.6
40.8
51.0
\n", "
" ], "text/plain": [ "1 0.2\n", "2 0.4\n", "3 0.6\n", "4 0.8\n", "5 1.0\n", "Name: , dtype: float64" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.normalize()\n", "d4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Statistics\n", "\n", "`Cdf` overrides the statistics methods to compute `mean`, `median`, etc." ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.5" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.mean()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.916666666666667" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.var()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.7078251276599332" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sampling\n", "\n", "`choice` chooses a random values from the Cdf, following the API of `np.random.choice`" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 2, 3, 4, 2, 5, 2, 2, 2, 2])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.choice(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sample` chooses a random values from the `Cdf`, with replacement." ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([6., 1., 5., 1., 6., 5., 1., 5., 6., 5.])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sample(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Arithmetic\n", "\n", "`Pmf` and `Cdf` provide `add_dist`, which computes the distribution of the sum." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the distribution of the sum of two dice." ] }, { "cell_type": "code", "execution_count": 60, "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
20.027778
30.055556
40.083333
50.111111
60.138889
70.166667
80.138889
90.111111
100.083333
110.055556
120.027778
\n", "
" ], "text/plain": [ "2 0.027778\n", "3 0.055556\n", "4 0.083333\n", "5 0.111111\n", "6 0.138889\n", "7 0.166667\n", "8 0.138889\n", "9 0.111111\n", "10 0.083333\n", "11 0.055556\n", "12 0.027778\n", "Name: , dtype: float64" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])\n", "\n", "twice = d6.add_dist(d6)\n", "twice" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.999999999999998" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "twice.bar()\n", "decorate_dice('Two dice')\n", "twice.mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To add a constant to a distribution, you could construct a deterministic `Pmf`" ] }, { "cell_type": "code", "execution_count": 62, "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", "
probs
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "const = Pmf.from_seq([1])\n", "d6.add_dist(const)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But `add_dist` also handles constants as a special case:" ] }, { "cell_type": "code", "execution_count": 63, "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", "
probs
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.add_dist(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other arithmetic operations are also implemented" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "d4 = Pmf.from_seq([1,2,3,4])" ] }, { "cell_type": "code", "execution_count": 65, "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", "
probs
-30.041667
-20.083333
-10.125000
00.166667
10.166667
20.166667
30.125000
40.083333
50.041667
\n", "
" ], "text/plain": [ "-3 0.041667\n", "-2 0.083333\n", "-1 0.125000\n", " 0 0.166667\n", " 1 0.166667\n", " 2 0.166667\n", " 3 0.125000\n", " 4 0.083333\n", " 5 0.041667\n", "Name: , dtype: float64" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sub_dist(d4)" ] }, { "cell_type": "code", "execution_count": 66, "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", "
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", "Name: , dtype: float64" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.mul_dist(d4)" ] }, { "cell_type": "code", "execution_count": 67, "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
0.2500000.0625
0.3333330.0625
0.5000000.1250
0.6666670.0625
0.7500000.0625
1.0000000.2500
1.3333330.0625
1.5000000.0625
2.0000000.1250
3.0000000.0625
4.0000000.0625
\n", "
" ], "text/plain": [ "0.250000 0.0625\n", "0.333333 0.0625\n", "0.500000 0.1250\n", "0.666667 0.0625\n", "0.750000 0.0625\n", "1.000000 0.2500\n", "1.333333 0.0625\n", "1.500000 0.0625\n", "2.000000 0.1250\n", "3.000000 0.0625\n", "4.000000 0.0625\n", "Name: , dtype: float64" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.div_dist(d4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparison operators\n", "\n", "`Pmf` implements comparison operators that return probabilities.\n", "\n", "You can compare a `Pmf` to a scalar:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3333333333333333" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.lt_dist(3)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.75" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.ge_dist(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or compare `Pmf` objects:" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.25" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.gt_dist(d6)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.41666666666666663" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.le_dist(d4)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.eq_dist(d6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Interestingly, this way of comparing distributions is [nontransitive]()." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "A = Pmf.from_seq([2, 2, 4, 4, 9, 9])\n", "B = Pmf.from_seq([1, 1, 6, 6, 8, 8])\n", "C = Pmf.from_seq([3, 3, 5, 5, 7, 7])" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.gt_dist(B)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B.gt_dist(C)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.gt_dist(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint distributions\n", "\n", "`Pmf.make_joint` takes two `Pmf` objects and makes their joint distribution, assuming independence." ] }, { "cell_type": "code", "execution_count": 77, "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", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "Name: , dtype: float64" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4 = Pmf.from_seq(range(1,5))\n", "d4" ] }, { "cell_type": "code", "execution_count": 78, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq(range(1,7))\n", "d6" ] }, { "cell_type": "code", "execution_count": 79, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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
110.041667
20.041667
30.041667
40.041667
50.041667
60.041667
210.041667
20.041667
30.041667
40.041667
50.041667
60.041667
310.041667
20.041667
30.041667
40.041667
50.041667
60.041667
410.041667
20.041667
30.041667
40.041667
50.041667
60.041667
\n", "
" ], "text/plain": [ "1 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "2 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "3 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "4 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "Name: , dtype: float64" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint = Pmf.make_joint(d4, d6)\n", "joint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a `Pmf` object that uses a MultiIndex to represent the values." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MultiIndex([(1, 1),\n", " (1, 2),\n", " (1, 3),\n", " (1, 4),\n", " (1, 5),\n", " (1, 6),\n", " (2, 1),\n", " (2, 2),\n", " (2, 3),\n", " (2, 4),\n", " (2, 5),\n", " (2, 6),\n", " (3, 1),\n", " (3, 2),\n", " (3, 3),\n", " (3, 4),\n", " (3, 5),\n", " (3, 6),\n", " (4, 1),\n", " (4, 2),\n", " (4, 3),\n", " (4, 4),\n", " (4, 5),\n", " (4, 6)],\n", " )" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you ask for the `qs`, you get an array of pairs:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2),\n", " (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4),\n", " (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6)],\n", " dtype=object)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.qs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can select elements using tuples:" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.041666666666666664" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint[1,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can get unnnormalized conditional distributions by selecting on different axes:" ] }, { "cell_type": "code", "execution_count": 83, "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", "
probs
10.041667
20.041667
30.041667
40.041667
50.041667
60.041667
\n", "
" ], "text/plain": [ "1 0.041667\n", "2 0.041667\n", "3 0.041667\n", "4 0.041667\n", "5 0.041667\n", "6 0.041667\n", "Name: , dtype: float64" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Pmf(joint[1])" ] }, { "cell_type": "code", "execution_count": 84, "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", "
probs
10.041667
20.041667
30.041667
40.041667
\n", "
" ], "text/plain": [ "1 0.041667\n", "2 0.041667\n", "3 0.041667\n", "4 0.041667\n", "Name: , dtype: float64" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Pmf(joint.loc[:, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But `Pmf` also provides `conditional(i,val)` which returns the conditional distribution where variable `i` has the value `val`: " ] }, { "cell_type": "code", "execution_count": 85, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.conditional(0, 1)" ] }, { "cell_type": "code", "execution_count": 86, "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", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "Name: , dtype: float64" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.conditional(1, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It also provides `marginal(i)`, which returns the marginal distribution along axis `i`" ] }, { "cell_type": "code", "execution_count": 87, "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", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "Name: , dtype: float64" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.marginal(0)" ] }, { "cell_type": "code", "execution_count": 88, "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", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.marginal(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some ways of iterating through a joint distribution." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1)\n", "(1, 2)\n", "(1, 3)\n", "(1, 4)\n", "(1, 5)\n", "(1, 6)\n", "(2, 1)\n", "(2, 2)\n", "(2, 3)\n", "(2, 4)\n", "(2, 5)\n", "(2, 6)\n", "(3, 1)\n", "(3, 2)\n", "(3, 3)\n", "(3, 4)\n", "(3, 5)\n", "(3, 6)\n", "(4, 1)\n", "(4, 2)\n", "(4, 3)\n", "(4, 4)\n", "(4, 5)\n", "(4, 6)\n" ] } ], "source": [ "for q in joint.qs:\n", " print(q)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n" ] } ], "source": [ "for p in joint.ps:\n", " print(p)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1) 0.041666666666666664\n", "(1, 2) 0.041666666666666664\n", "(1, 3) 0.041666666666666664\n", "(1, 4) 0.041666666666666664\n", "(1, 5) 0.041666666666666664\n", "(1, 6) 0.041666666666666664\n", "(2, 1) 0.041666666666666664\n", "(2, 2) 0.041666666666666664\n", "(2, 3) 0.041666666666666664\n", "(2, 4) 0.041666666666666664\n", "(2, 5) 0.041666666666666664\n", "(2, 6) 0.041666666666666664\n", "(3, 1) 0.041666666666666664\n", "(3, 2) 0.041666666666666664\n", "(3, 3) 0.041666666666666664\n", "(3, 4) 0.041666666666666664\n", "(3, 5) 0.041666666666666664\n", "(3, 6) 0.041666666666666664\n", "(4, 1) 0.041666666666666664\n", "(4, 2) 0.041666666666666664\n", "(4, 3) 0.041666666666666664\n", "(4, 4) 0.041666666666666664\n", "(4, 5) 0.041666666666666664\n", "(4, 6) 0.041666666666666664\n" ] } ], "source": [ "for q, p in joint.items():\n", " print(q, p)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 1 0.041666666666666664\n", "1 2 0.041666666666666664\n", "1 3 0.041666666666666664\n", "1 4 0.041666666666666664\n", "1 5 0.041666666666666664\n", "1 6 0.041666666666666664\n", "2 1 0.041666666666666664\n", "2 2 0.041666666666666664\n", "2 3 0.041666666666666664\n", "2 4 0.041666666666666664\n", "2 5 0.041666666666666664\n", "2 6 0.041666666666666664\n", "3 1 0.041666666666666664\n", "3 2 0.041666666666666664\n", "3 3 0.041666666666666664\n", "3 4 0.041666666666666664\n", "3 5 0.041666666666666664\n", "3 6 0.041666666666666664\n", "4 1 0.041666666666666664\n", "4 2 0.041666666666666664\n", "4 3 0.041666666666666664\n", "4 4 0.041666666666666664\n", "4 5 0.041666666666666664\n", "4 6 0.041666666666666664\n" ] } ], "source": [ "for (q1, q2), p in joint.items():\n", " print(q1, q2, p)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.9" } }, "nbformat": 4, "nbformat_minor": 2 }