diff --git a/examples/beta-binomial.ipynb b/examples/beta-binomial.ipynb deleted file mode 100644 index c90cce95..00000000 --- a/examples/beta-binomial.ipynb +++ /dev/null @@ -1,902 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "f07c7715", - "metadata": {}, - "source": [ - "# The All-Knowing Cube of Probability" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "94eb4081", - "metadata": {}, - "outputs": [], - "source": [ - "try:\n", - " import empiricaldist\n", - "except ImportError:\n", - " !pip install empiricaldist" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e68dfce7", - "metadata": {}, - "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, - "id": "de8f6c49", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "id": "949ce91c", - "metadata": {}, - "source": [ - "Suppose you run $n$ trials where the probability of success is $p$.\n", - "To compute the probability of $k$ successes, we can use the binomial distribution.\n", - "\n", - "For example, here's a range of value for $k$ and $n$, and a discrete grid of values for $p$." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "78f531f8", - "metadata": {}, - "outputs": [], - "source": [ - "ks = np.arange(101)\n", - "ns = np.arange(101)\n", - "ps = np.linspace(0, 1, 101)" - ] - }, - { - "cell_type": "markdown", - "id": "d77a2b77", - "metadata": {}, - "source": [ - "We can use `meshgrid` to make a 3-D grid of $k$, $n$, and $p$, and `binom` to evaluate the binomial PMF at each point." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "9e450ec2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(101, 101, 101)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "from scipy.stats import binom\n", - "\n", - "K, N, P = np.meshgrid(ks, ns, ps, indexing='ij')\n", - "cube = binom.pmf(K, N, P)\n", - "cube.shape" - ] - }, - { - "cell_type": "markdown", - "id": "95297582", - "metadata": {}, - "source": [ - "The result is the all-knowing cube of probability, so-called because it can answer all of our questions about Bernoulli trials.\n", - "Allow me to demonstrate." - ] - }, - { - "cell_type": "markdown", - "id": "d482aa8d", - "metadata": {}, - "source": [ - "## The binomial distribution" - ] - }, - { - "cell_type": "markdown", - "id": "b7377f5f", - "metadata": {}, - "source": [ - "Suppose we are given $n$ and $p$, and we would like to know the distribution of $k$.\n", - "We can answer that question by selecting a vector from the cube along the $k$ axis." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "ae639fe4", - "metadata": {}, - "outputs": [], - "source": [ - "n = 50\n", - "p = 50\n", - "pmf_k = cube[:, n, p]" - ] - }, - { - "cell_type": "markdown", - "id": "ab6c3676", - "metadata": {}, - "source": [ - "The result is a normalized PMF." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "07e338a7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9999999999999996" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pmf_k.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "da690210", - "metadata": {}, - "source": [ - "Here's what it looks like." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "6daa1886", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.bar(ks, pmf_k)\n", - "plt.xlabel('k')\n", - "plt.ylabel('PMF');" - ] - }, - { - "cell_type": "markdown", - "id": "c3071e06", - "metadata": {}, - "source": [ - "Because we used `binom` to compute the cube, we should not be surprised to find that this slice from the cube is a binomial PMF.\n", - "But just to make sure, we can use `binom` again to confirm it." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "46e816a6", - "metadata": {}, - "outputs": [], - "source": [ - "pmf_binom = binom.pmf(ks, n, p/100)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "5b889032", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.allclose(pmf_k, pmf_binom)" - ] - }, - { - "cell_type": "markdown", - "id": "56cd2854", - "metadata": {}, - "source": [ - "So we can think of the cube as a collection of binomial PMFs.\n", - "But we can also think of it as a joint distribution of $k$, $n$, and $p$, which raises the question: what do we get if we select a vector along the $n$ and $p$ axes?" - ] - }, - { - "cell_type": "markdown", - "id": "5ba8700f", - "metadata": {}, - "source": [ - "## The negative binomial distribution\n", - "\n", - "Suppose we plan to run Bernoulli trials with probability $p$ until we see $k$ successes.\n", - "How many trials will it take?\n", - "\n", - "We can answer this question by selecting a vector from the cube along the $n$ axis." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "517c99e8", - "metadata": {}, - "outputs": [], - "source": [ - "k = 25\n", - "p = 50\n", - "pmf_n = cube[k, :, p].copy()" - ] - }, - { - "cell_type": "markdown", - "id": "1d7679c1", - "metadata": {}, - "source": [ - "The result is close to the answer we want, but there's something we have to fix.\n", - "Remember that the values in the cube come from the binomial PMF, which looks like this.\n", - "\n", - "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", - "\n", - "The first term is the binomial coefficient, which indicates that there are $n$ places we could find $k$ successes.\n", - "But if we keep running trials until we see $k$ successes, we know the last trial will be a success, which means there are only $n-1$ places we could find the other $k-1$ successes.\n", - "\n", - "So we have to adjust the values from the cube by dividing the elements by $n/k$." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "a9d6f7f5", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_125703/780240301.py:1: RuntimeWarning: invalid value encountered in divide\n", - " pmf_n /= (ns / k)\n" - ] - } - ], - "source": [ - "pmf_n /= (ns / k)\n", - "pmf_n[0] = 0" - ] - }, - { - "cell_type": "markdown", - "id": "ea6153c2", - "metadata": {}, - "source": [ - "Now we have to normalize the results to get a proper PMF." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "c4ff9e52", - "metadata": {}, - "outputs": [], - "source": [ - "pmf_n /= pmf_n.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "7cf1fe07", - "metadata": {}, - "source": [ - "Here's what it looks like." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "97bd5171", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(ks, pmf_n)\n", - "plt.xlabel('n')\n", - "plt.ylabel('PMF');" - ] - }, - { - "cell_type": "markdown", - "id": "8f05f187", - "metadata": {}, - "source": [ - "This is a negative binomial distribution, which we can confirm using `nbinom`." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "b6e9de88", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9999999094998685" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from scipy.stats import nbinom\n", - "\n", - "pmf_nbinom = nbinom.pmf(ns-k, k, p/100)\n", - "pmf_nbinom.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "df8e2c43", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.allclose(pmf_n, pmf_nbinom)" - ] - }, - { - "cell_type": "markdown", - "id": "b35dd161", - "metadata": {}, - "source": [ - "To see why this works we can compare the binomial PMF, which is a distribution over $k$ with $n$ and $p$ as parameters:\n", - "\n", - "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", - "\n", - "And the negative binomial PMF, which I've written as a distribution over $n$ with $k$ and $p$ as parameters:\n", - "\n", - "$$Pr(n; k, p) = \\binom{n-1}{k-1} p^k (1-p)^{n-k}$$\n", - "\n", - "This is not the most common way to parameterize the negative binomial distribution, but it shows that the only difference is in the binomial coefficient, because we know that the last trial is a success." - ] - }, - { - "cell_type": "markdown", - "id": "aa0033cf", - "metadata": {}, - "source": [ - "## The beta distribution\n", - "\n", - "Suppose we have 101 devices that perform Bernoulli trials with different probabilities.\n", - "One device has $p=0$, one has $p=0.01$, one has $p=0.02$, and so on up to one device with $p=1$.\n", - "\n", - "Now suppose we choose one of the devices so that all values of $p$ are equally likely.\n", - "If we run $n$ trials and see $k$ successes, what is the distribution of $p$?\n", - "\n", - "We can answer this question by selecting a vector from the cube along the $p$ axis." - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "id": "a0ff5426", - "metadata": {}, - "outputs": [], - "source": [ - "k = 25\n", - "n = 50\n", - "k = 6\n", - "n = 12\n", - "pdf_p = cube[k, n, :].copy()" - ] - }, - { - "cell_type": "markdown", - "id": "e001ecbe", - "metadata": {}, - "source": [ - "The result is not normalized." - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "id": "59f2ee8f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "7.692307692307231" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pdf_p.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "3f2195eb", - "metadata": {}, - "source": [ - "But we can normalize it like this." - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "id": "90da0a89", - "metadata": {}, - "outputs": [], - "source": [ - "pdf_p /= pdf_p.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "5d85a72c", - "metadata": {}, - "source": [ - "And here's what it looks like." - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "id": "7e58f780", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAGwCAYAAABSN5pGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABX8klEQVR4nO3de1xT9/0/8FcSSML9KldRvKB4R0UQq1UrFatry2ZXay86f07brTonW+ulVru2q203N3uxdXbrdfrVulrXWkeLaG+KN/Cu4F3wEi4ihIskJDm/P0JiQVBAkk8ur+fjkYf18Enyzqkkr3xuRyZJkgQiIiIispKLLoCIiIjI0TAgERERETXBgERERETUBAMSERERURMMSERERERNMCARERERNcGARERERNSEh+gCnJXJZMLly5fh5+cHmUwmuhwiIiJqBUmSUFVVhaioKMjlLfcTMSC10+XLlxETEyO6DCIiImqHoqIidO7cucWfMyC1k5+fHwDzCfb39xdcDREREbWGVqtFTEyM9XO8JQxI7WQZVvP392dAIiIicjK3mx7DSdpERERETTAgERERETXBgERERETUhEMEpFWrViE2NhZqtRrJycnYu3fvLdtv3LgR8fHxUKvVGDBgALZu3dro5y+88ALi4+Ph4+ODoKAgpKamYs+ePY3alJeX47HHHoO/vz8CAwMxc+ZMVFdXd/hrIyIiIucjPCBt2LABGRkZWLZsGfLy8jBo0CCkpaWhpKSk2fa7du3C1KlTMXPmTBw4cADp6elIT0/H0aNHrW169eqFt99+G0eOHMGPP/6I2NhYjB8/HqWlpdY2jz32GI4dO4asrCxs2bIF33//PWbPnm3z10tERESOTyZJkiSygOTkZAwbNgxvv/02APMGjDExMZg7dy4WLlx4U/spU6agpqYGW7ZssR4bPnw4EhISsHr16mafQ6vVIiAgANu2bcO4ceNw4sQJ9O3bF/v27UNiYiIAIDMzExMnTsTFixcRFRV102PodDrodLpGjxkTE4PKykquYiMiInISlkxwu89voT1Ier0eubm5SE1NtR6Ty+VITU1FTk5Os/fJyclp1B4A0tLSWmyv1+uxZs0aBAQEYNCgQdbHCAwMtIYjAEhNTYVcLr9pKM5i+fLlCAgIsN64SSQREZHrEhqQysrKYDQaER4e3uh4eHg4NBpNs/fRaDStar9lyxb4+vpCrVbj73//O7KyshAaGmp9jLCwsEbtPTw8EBwc3OLzLlq0CJWVldZbUVFRm14rEREROQ+X3Shy7NixOHjwIMrKyvDee+/h4Ycfxp49e24KRq2lUqmgUqk6uEoiIiJyREJ7kEJDQ6FQKFBcXNzoeHFxMSIiIpq9T0RERKva+/j4oGfPnhg+fDj+9a9/wcPDA//617+sj9F0ErjBYEB5eXmLz0tERETuQ2hAUiqVGDp0KLKzs63HTCYTsrOzkZKS0ux9UlJSGrUHgKysrBbb//RxLZOsU1JSUFFRgdzcXOvPt2/fDpPJhOTk5Pa+HCIiInIRwofYMjIyMH36dCQmJiIpKQkrV65ETU0NZsyYAQCYNm0aoqOjsXz5cgDAvHnzMHr0aKxYsQKTJk3C+vXrsX//fqxZswYAUFNTgz//+c944IEHEBkZibKyMqxatQqXLl3CL3/5SwBAnz59MGHCBMyaNQurV69GfX095syZg0ceeaTZFWxERETkXoQHpClTpqC0tBRLly6FRqNBQkICMjMzrROxCwsLIZff6OgaMWIE1q1bhyVLlmDx4sWIi4vD5s2b0b9/fwCAQqFAfn4+PvroI5SVlSEkJATDhg3DDz/8gH79+lkfZ+3atZgzZw7GjRsHuVyOyZMn480337Tviycih1RRq4eXUgGVh0J0KUQkiPB9kJxVa/dRICLHVlatw7cFpci/okW+pgr5Gi3KqvVQyGXo0ckHvSP8ER/hh0GdAzGiRwjk8ltfAZyIHFtrP7+F9yAREYmgravHe9+fxT9/OIfr9cabfm40SThZXI2TxdX48pD5WP9ofzybFo9RcaGQyRiUiFwZAxIRuZW6eiP+vfsCVu04jWu19QCAvpH+SO4ejD4R/ugd4Ye4cF9UXq839yhdMfcqZZ8owdFLWkx7fy9SuodgwX3xSIgJFPtiiMhmOMTWThxiI3I+Ry9V4slPcnGp4joAoEcnHzyTFo+0fuG37RG6Wq3DO9+ewSc5F6A3mgAAjwyLwYsP9ofSQ/hlLYmolVr7+c2A1E4MSETOZUdBCZ5em4davRER/mrMvzcOk4d0hoeibeHm4rVarNx2Cp/lXYQkASN7huLdx4fAT+1po8qJqCMxINkYAxKR89iwrxCLPz8Ko0nqsEDzbUEJftsQuOIj/PDhjCREBKg7qGIishWnuFgtEZEtSZKEv2edxILPjsBokvCLwdF4/1fDOqS3Z0zvMGyYnYJQXxXyNVX4+Ts7UaCp6oCqicgRMCARkUuSJAl/+vI43sg+BQCYM7YnVjw8qEPnCw3oHIDPfzsC3Tv54EplHR5avQtHL1V22OMTkTgMSETkkv69+wI+3HUeMhnw55/3xx/TettkaX5MsDc+e2oEhnYNQlWdAbM/3o/SKl2HPw8R2RcDEhG5nF1nyvDCl8cBAAsmxOOx5K42fb4gHyXe/9UwdA/1weXKOvzm37nQG0w2fU4isi0GJCJyKYVXa/H02jwYTRLSE6Lw5N3d7fK8AV6eeG96IvzUHth/4RqW/vcouAaGyHkxIBGRy6jWGTDr4/24VluPgZ0D8OrkgXbd8bpHJ1+8OXUw5DJg/b4ifJxzwW7PTUQdiwGJiFyCySQhY8NBFBRXoZOfCmueSITa0/4Xmx3bOwwL74sHALy45Th2ni6zew1EdOcYkIjIJXyy+wK+OV4MpUKOfzwxVOieRLNGdccvBkfDaJIwb/1BVNTqhdVCRO3DgERETu/itVq8lpkPAHhuUh8M6RIktB6ZTIZXfjEAcWG+KKvW4eWvTgith4jajgGJiJyaJElY/PlR1OqNGBYbhCeG23bFWmupPRUNc6CA/+RexPcnS0WXRERtwIBERE5tU94lfH+yFEoPOV6dPBByuf0mZd/O0K5B+NWIWADAok1HUKMziC2IiFqNAYmInFZplQ4vfWXe7+j3qXHo0clXcEU3++P43ogO9MKliuv46zcFossholZiQCIip/XCl8dQUVuPflH+mDXKPvsdtZWPygPLfzEAAPDhrvPIvXBNcEVE1BoMSETklL45psFXh69AIZfhtckD4alw3Lezu3t1wuQhnSFJwILPDkNnMIouiYhuw3HfUYiIWlBXb8SfGi4lMvvu7ugfHSC4ott7/md9EOqrxOmSanyw87zocojoNhiQiMjpfJJzAZcqriMyQI154+JEl9Mqgd5KLLyvDwDgnR2nuTcSkYNjQCIip1J5vR5v7zgNAJh/by8hu2W3188HRyM+wg/aOgPe/faM6HKI6BYYkIjIqbz77RlUXq9Hr3BfTB7SWXQ5baKQy7BggvkyJB/sOo9LFdcFV0RELWFAIiKncaXyOj7YeQ4AsGBCPBQOtOdRa43p3QnDuwdDbzDh71knRZdDRC1gQCIip7Ey6xR0BhOSYoNxT3yY6HLaRSaTWecifZZ3EfkareCKiKg5DEhE5BROFVdhY24RAGDhxHjIZM7Xe2SREBOISQMiIUnA65ncPJLIETEgEZFTeC2zACYJmNAvQvjFaDvCH9N6QyGXYXt+CXafvSq6HCJqggGJiBxe7oVr2HaiGAq5DM9M6C26nA7RLdQHU5NiAACvZeZDkiTBFRHRTzEgEZHDe6dhWf9DQzo75PXW2ut34+Kg8pDjQGEFdp8tF10OEf0EAxIRObQCTRWy80sgkwFPjekhupwOFeanxsOJ5l6kd7/jvkhEjoQBiYgc2j8agsPE/pHoFuojuJqON/vu7lDIZfj+ZCmOXa4UXQ4RNWBAIiKHdfFaLf576DIA4KnRrtV7ZBET7I2fDYwEAKz+7qzgaojIggGJiBzWP384B6NJwsieoRjQ2fEvSNtelvD31eHLuHC1RnA1RAQwIBGRg7parcP6fYUAgN+42NyjpvpE+mNs704wScCa79mLROQIGJCIyCF9tOs86upNGNg5ACN6hIgux+Z+M6YnAGBj7kWUVNUJroaIGJCIyOFU6wz4KOcCAOA3o3s49a7ZrTUsNghDuwZBbzDhg53nRZdD5PYYkIjI4azfW4jK6/XoHuqD8f0iRJdjFzKZDL9pmIv075wL0NbVC66IyL0xIBGRQzEYTXj/x3MAbiyBdxf3xIehV7gvqnQGbNhbJLocIrfGgEREDmXbiRJcrqxDsI8S6YOjRZdjV3K5DDPu6gYA+PeeCzCZePkRIlEYkIjIoXyy+zwA4OHEGKg9FWKLEeDBhCj4qT1w4WotvjtVKrocIrfFgEREDuN0STV2nr4KuQx4LLmL6HKE8FZ64JdDzZcf+aRhojoR2R8DEhE5jH/vNgeCe+LDERPsLbgacZ5I6QoA2FFQgqLyWsHVELknBiQicgg1OgM+y70IAJjWEBDcVbdQH4yKC4Uk3QiNRGRfDEhE5BA+P3AJVToDuoX6YGTPUNHlCDctJRYAsGF/EerqjWKLIXJDDEhEJJwkSdb5No8P7wq5Gy3tb8k98WGIDvRCRW09vmy4YC8R2Q8DEhEJt/dcOQqKq+DlqcBDQzuLLschKOQyPDbcPFH9Ew6zEdmdQwSkVatWITY2Fmq1GsnJydi7d+8t22/cuBHx8fFQq9UYMGAAtm7dav1ZfX09FixYgAEDBsDHxwdRUVGYNm0aLl9u/A0sNjYWMpms0e3VV1+1yesjolv7uCEApA+OQoCXp+BqHMeUxBgoFXIcvliJg0UVosshcivCA9KGDRuQkZGBZcuWIS8vD4MGDUJaWhpKSkqabb9r1y5MnToVM2fOxIEDB5Ceno709HQcPXoUAFBbW4u8vDw8//zzyMvLw6ZNm1BQUIAHHnjgpsd68cUXceXKFett7ty5Nn2tRHSzEm0dvj6qAQA8MTxWbDEOJsRXhZ8NjAQAfJxzXmwxRG5GJkmS0K1ak5OTMWzYMLz99tsAAJPJhJiYGMydOxcLFy68qf2UKVNQU1ODLVu2WI8NHz4cCQkJWL16dbPPsW/fPiQlJeHChQvo0sXcZR0bG4vf//73+P3vf9+qOnU6HXQ6nfXvWq0WMTExqKyshL+/f2tfLhE1sWrHafzl6wIM7RqEz34zQnQ5DudA4TX8/J1dUHnIsfe5VPawEd0hrVaLgICA235+C+1B0uv1yM3NRWpqqvWYXC5HamoqcnJymr1PTk5Oo/YAkJaW1mJ7AKisrIRMJkNgYGCj46+++ipCQkIwePBg/OUvf4HBYGjxMZYvX46AgADrLSYmphWvkIhuRZIkbNxvvubYI8P4O9WchJhA9A73g85g4mRtIjsSGpDKyspgNBoRHh7e6Hh4eDg0Gk2z99FoNG1qX1dXhwULFmDq1KmNkuLvfvc7rF+/Hjt27MCTTz6JV155Bc8++2yLtS5atAiVlZXWW1ERLyRJdKf2X7iG81dr4a1UYOKASNHlOCSZTIZfJponrm9s2CeKiGzPQ3QBtlRfX4+HH34YkiTh3XffbfSzjIwM638PHDgQSqUSTz75JJYvXw6VSnXTY6lUqmaPE1H7fbrP/EXjZwMj4aNy6bejO5I+OBqv/i8fh4oqcLK4Cr3C/USXROTyhPYghYaGQqFQoLi4uNHx4uJiRERENHufiIiIVrW3hKMLFy4gKyvrtvOEkpOTYTAYcP78+ba/ECJqsxqdAV8duQLAfGFaalmorwrj+oQBgHVIkohsS2hAUiqVGDp0KLKzs63HTCYTsrOzkZKS0ux9UlJSGrUHgKysrEbtLeHo1KlT2LZtG0JCQm5by8GDByGXyxEWFtbOV0NEbfHVkSuo1RvRPdQHQ7sGiS7H4VkuYPv5gUuoN5oEV0Pk+oT3aWdkZGD69OlITExEUlISVq5ciZqaGsyYMQMAMG3aNERHR2P58uUAgHnz5mH06NFYsWIFJk2ahPXr12P//v1Ys2YNAHM4euihh5CXl4ctW7bAaDRa5ycFBwdDqVQiJycHe/bswdixY+Hn54ecnBzMnz8fjz/+OIKC+EZNZA//2W+eT/NQYmfIZNw5+3bG9O6ETn4qlFbpsCO/BOP7Nd/LTkQdQ3hAmjJlCkpLS7F06VJoNBokJCQgMzPTOhG7sLAQcvmNjq4RI0Zg3bp1WLJkCRYvXoy4uDhs3rwZ/fv3BwBcunQJX3zxBQAgISGh0XPt2LEDY8aMgUqlwvr16/HCCy9Ap9OhW7dumD9/fqN5SURkO2dLq7H3fDnkMmDyEO6c3RoeCjl+MTga//j+LD7df5EBicjGhO+D5Kxau48CEd3s9cx8vPPtGYzt3QkfzEgSXY7TOF1ShdS/fQ+FXIacRfcgzE8tuiQip+MU+yARkfsxmiR8lmceXvslJ2e3Sc8wPwzuEgijScLmA5dEl0Pk0hiQiMiuvj9VimKtDkHentaVWdR6lhV/n+6/CA4AENkOAxIR2ZVlcnb64GioPBSCq3E+PxsYCbWnHKdLqnkBWyIbYkAiIrvR1tUj64R5H7OHhnJydnv4qT0xsb951/HPOcxGZDMMSERkN5lHNNAbTOgV7ou+kVzc0F4PDo4GAGw5fIV7IhHZCAMSEdnNfw+ZezweTIjm3kd34K4eIQj1VaK8Ro8fT5eJLofIJTEgEZFdFGvrsOvMVQDAA4OiBFfj3DwUcvxsoPkc/pfDbEQ2wYBERHbx5aHLkCQgsWsQYoK9RZfj9B5MMAekb44Xo1ZvEFwNkethQCIiu/jvwcsAbnyw051JiAlE1xBv1OqNyDpefPs7EFGbMCARkc2dKa3GkUuV8JDLMGkgA1JHkMlkeLBhqNISPomo4zAgEZHNWT7AR8WFIthHKbga1/FAgnk12/cnS1FeoxdcDZFrYUAiIpuSJAlfHDRPJE5vWJ5OHaNnmC/6R/vDYJLw1ZErosshcikMSERkU4cuVuL81Vp4eSqQ2idcdDku58FB5tDJ1WxEHYsBiYhsynJR1fH9wuGj8hBcjeu5f1AUZDJg/4VrKCqvFV0OkctgQCIimzEYTdhy2Dz0w9VrthERoMbwbiEAgC8OcbI2UUdhQCIim8k5exVl1ToE+ygxKq6T6HJcVvpgy2o2DrMRdRQGJCKymS2HzL1H9/WPgKeCbze2MqF/JDwVMpwsrsap4irR5RC5BL5jEZFN1BtN+Pq4BgAwaWCk4GpcW4CXp7WHjqvZiDoGAxIR2cSuM1dRUVuPUF8lkhvmyJDtTBxgDqFbGZCIOgQDEhHZxNaGydkT+kdAIZcJrsb13ds3nMNsRB2IAYmIOtxPh9csPRtkWxxmI+pYDEhE1OE4vCaGJYx+dZgBiehOMSARUYfj8JoYlmG2UyUcZiO6UwxIRNShOLwmDofZiDoOAxIRdSgOr4k1icNsRB2CAYmIOtRXh82Xu+DwmhipPxlmO8lhNqJ2Y0Aiog5TbzTh62PFAIBJA3jtNRECvDxxt2WYjb1IRO3GgEREHWbn6TJUXq9HqK8KSd2CRZfjtrhpJNGdY0Aiog5j+UCe0D+cw2sCcZiN6M4xIBFRh6g3mvDNcfPwGlevifXTYTb2IhG1DwMSEXWIvefKUVFbjxAfrl5zBBP6RwCAdU4YEbUNAxIRdYjMo+a9j1L7cHjNEVj+P5y4okXh1VrR5RA5HQYkIrpjJpOEbxo2h7T0XJBYQT5KJDdMlP/6mEZwNUTOhwGJiO7YwYsVKNbq4KvywIieHF5zFJawmsmARNRmDEhEdMe+bhheGxsfBpWHQnA1ZDG+rzkg5V64hhJtneBqiJwLAxIR3RFJkqxDOBP6cXjNkUQEqDG4SyAAWFcYElHrMCAR0R0pKK7C+au1UHrIMaZ3J9HlUBNp/Syr2TjMRtQWDEhEdEcsq9fujguFj8pDcDXUlCUg5Zy5iopaveBqiJwHAxIR3RFLQErj8JpD6hbqg/gIPxhMErJPlIguh8hpMCARUbtduFqDfE0VFHIZUvuEiy6HWsBhNqK2Y0AionazfOAO7x6MIB+l4GqoJZaA9N3JUtTqDYKrIXIODEhE1G4cXnMOfSL90CXYGzqDCd8VlIouh8gpMCARUbuUaOuQV1gB4MZ+O+SYZDLZT67NxmE2otZgQCKidrHsq5MQE4iIALXgauh2LL182SdKoDeYBFdD5PgYkIioXSwBaXw/Ts52BoNjAhHqq0KVzoA9566KLofI4TEgEVGbVdXVI+dMGQAOrzkLuVyG1D5hAIAs7qpNdFsOEZBWrVqF2NhYqNVqJCcnY+/evbdsv3HjRsTHx0OtVmPAgAHYunWr9Wf19fVYsGABBgwYAB8fH0RFRWHatGm4fPlyo8coLy/HY489Bn9/fwQGBmLmzJmorq62yesjcjXfnSxFvVFC91Af9AzzFV0OtdK9fc29fduOF0OSJMHVEDk24QFpw4YNyMjIwLJly5CXl4dBgwYhLS0NJSXNb2i2a9cuTJ06FTNnzsSBAweQnp6O9PR0HD16FABQW1uLvLw8PP/888jLy8OmTZtQUFCABx54oNHjPPbYYzh27BiysrKwZcsWfP/995g9e7bNXy+RK7D0QFg+cMk53NUzFN5KBS5X1uHYZa3ocogcmkwS/DUiOTkZw4YNw9tvvw0AMJlMiImJwdy5c7Fw4cKb2k+ZMgU1NTXYsmWL9djw4cORkJCA1atXN/sc+/btQ1JSEi5cuIAuXbrgxIkT6Nu3L/bt24fExEQAQGZmJiZOnIiLFy8iKirqtnVrtVoEBASgsrIS/v7+7XnpRE6p3mjC0JeyoK0z4D9PpSAxNlh0SdQGT32Si8xjGvxuXBwy7u0luhwiu2vt57fQHiS9Xo/c3FykpqZaj8nlcqSmpiInJ6fZ++Tk5DRqDwBpaWkttgeAyspKyGQyBAYGWh8jMDDQGo4AIDU1FXK5HHv27Gn2MXQ6HbRabaMbkTvae64c2joDQnyUGNwlSHQ51EaWXj/OQyK6NaEBqaysDEajEeHhjbvpw8PDodE0v1eHRqNpU/u6ujosWLAAU6dOtSZFjUaDsLCwRu08PDwQHBzc4uMsX74cAQEB1ltMTEyrXiORq7F8sI7rEwaFXCa4Gmqre+LN/99OXNGiqLxWdDlEDkv4HCRbqq+vx8MPPwxJkvDuu+/e0WMtWrQIlZWV1ltRUVEHVUnkPCRJ+sn8I65ec0ZBPkokdjX3/G07wV4kopYIDUihoaFQKBQoLm78S1pcXIyIiObffCMiIlrV3hKOLly4gKysrEbjjBERETdNAjcYDCgvL2/xeVUqFfz9/RvdiNzNsctaXKq4DrWnHCN7hoouh9rJMsz2zTEGJKKWCA1ISqUSQ4cORXZ2tvWYyWRCdnY2UlJSmr1PSkpKo/YAkJWV1ai9JRydOnUK27ZtQ0hIyE2PUVFRgdzcXOux7du3w2QyITk5uSNeGpFLsvQejYrrBC+lQnA11F6Wvav2ni9HRa1ecDVEjkn4EFtGRgbee+89fPTRRzhx4gR+85vfoKamBjNmzAAATJs2DYsWLbK2nzdvHjIzM7FixQrk5+fjhRdewP79+zFnzhwA5nD00EMPYf/+/Vi7di2MRiM0Gg00Gg30evMbQZ8+fTBhwgTMmjULe/fuxc6dOzFnzhw88sgjrVrBRuSuLAFpPJf3O7UuId7oHe4Ho0nCjoLmt1QhcnceoguYMmUKSktLsXTpUmg0GiQkJCAzM9M6EbuwsBBy+Y0cN2LECKxbtw5LlizB4sWLERcXh82bN6N///4AgEuXLuGLL74AACQkJDR6rh07dmDMmDEAgLVr12LOnDkYN24c5HI5Jk+ejDfffNP2L5jISV28VovjV7SQy4BxfRiQnN29fcNRUFyFrOPF+PngzqLLIXI4wvdBclbcB4nczYc7z+GFL48jKTYYnz7V/BA4OY9DRRV4cNVO+CgVyFt6L1QeHDIl9+AU+yARkfPIOsHds13JgOgAhPurUKM3YtcZXryWqCkGJCK6LW1dPfacLQcApDIguQTzxWtvXJuNiBpjQCKi2/quoBQGk4SeYb7oFuojuhzqIJawm32ihBevJWqCAYmIbsuyoeC4PmG3aUnOJKV7CLyVCmi0vHgtUVMMSER0S/VGE3bkm5eCp3L1mktReyqsG35yV22ixhiQiOiW9p+/Bm2dAUHenhjCi9O6HMswGwMSUWMMSER0S9kNH5xj43lxWld0T3wYZDLg6CUtrlReF10OkcNgQCKiFkmSZO1ZuJfDay4p1FeFwTGBAMyTtYnIjAGJiFp0prQG56/WQqmQY1SvTqLLIRux7IyezWE2IisGJCJqkaX3aHiPEPiqhF+ZiGzEsvnnzjNXUas3CK6GyDEwIBFRiyw9Cqlc3u/S4sJ8ERPsBb3BhB9OlYkuh8ghMCARUbPKa/TIvXANAC9O6+pkMu6qTdQUAxIRNWtHfglMEtAn0h/RgV6iyyEbswSkHQUlMJm4qzYRAxIRNSs7n8Nr7mRYbDD8VB4oq9bj4MUK0eUQCceAREQ30RmM+K6gFAB3z3YXSg85Rvc2r1TkMBsRAxIRNWPP2XLU6I3o5KfCgOgA0eWQnVjnIXG5PxEDEhHdzLJ6bVx8GOTcPdttjOndCQq5DCeLq1FUXiu6HCKhGJCIqBHz7tnmHZW5es29BHorMbSr+Xp73DSS3B0DEhE1crK4GpcqrkPlIbde6Z3ch2VSfnY+LztC7o0BiYgascw/GdEjBF5KheBqyN4svYZ7zpajWsddtcl9MSARUSPW+UccXnNL3UN9EBviDb3RhB9Oloouh0gYBiQisrparcOBogoAwDjuf+SWZDLZjYvXcpiN3BgDEhFZ7SgohSQBfSP9ERnA3bPdlSUc78gvgZG7apObYkAiIqvt3D2b0LCrttoDV2v0OMRdtclNMSAREQBAbzDh+5PmK7nfw/lHbs1TIcfoXuZdtbncn9wVAxIRAQD2njOvWurkp8JA7p7t9izDbNknOA+J3BMDEhEBuLG8/57e3D2bgDG9wiCXAfmaKly8xl21yf0wIBERJElCdsP8o3s4/4gABPkokdg1GACwnavZyA0xIBERTpdUo6j8OpTcPZt+4h4Os5EbY0AiIuu111K6h8BH5SG4GnIUltWMOWeuooa7apObYUAiIi7vp2b16OSLrpZdtU+ViS6HyK4YkIjc3LUaPXIvXAMAjI1nQKIbZDIZ7mn4N2EJ0UTuggGJyM3tKCiBSQLiI/zQOchbdDnkYFIb9sTanl8KE3fVJjfCgETk5izX20rl5pDUjGGxwfBTeaCsWofDlypFl0NkNwxIRG5MbzDh+wLzFdu5vJ+ao/SQ427uqk1uiAGJyI3tP1+OKp0BIT5KJHQOFF0OOSjuqk3uiAGJyI1ZlvePjefu2dSyMb3Nu2ofv6LF5YrrosshsgsGJCI39dPds7m8n24l2EeJIV2CANyYs0bk6hiQiNzUmdIaXLhaC6VCjpFxnUSXQw7OMkdtO+chkZtgQCJyU5YJt8ndg+HL3bPpNiyrHHeeuYpaPXfVJtfHgETkpri8n9oiLswXnYO8oDeYsPP0VdHlENkcAxKRG6qovbF79j3cPZtaQSaTWcM0l/uTO2BAInJD3xaUwmiS0DvcDzHB3D2bWscSprPzS7irNrk8BiQiN2QZXhvH1WvUBsndg+GjVKC0Soejl7mrNrm2NgWkpUuXora21vr3a9eudXhBRGRb9UYTvi1gQKK2U3koMKphxeM2bhpJLq5NAenPf/4zqqurrX/v2rUrzp492+FFEZHt7Dtfjqo6A4J9lEiICRJdDjmZG7tqcx4SubY2BSRJkm759/ZYtWoVYmNjoVarkZycjL17996y/caNGxEfHw+1Wo0BAwZg69atjX6+adMmjB8/HiEhIZDJZDh48OBNjzFmzBjIZLJGt6eeeuqOXwuRM7BcLmJM705QcPdsaqOx8WGQyYBjl7W4Usldtcl1CZ2DtGHDBmRkZGDZsmXIy8vDoEGDkJaWhpKS5rtud+3ahalTp2LmzJk4cOAA0tPTkZ6ejqNHj1rb1NTUYOTIkXjttddu+dyzZs3ClStXrLfXX3+9Q18bkSOSJMn6zf9eLu+ndgj1VWFwTCAAXpuNXFubApJMJkNVVRW0Wi0qKyshk8lQXV0NrVbb6NZaf/vb3zBr1izMmDEDffv2xerVq+Ht7Y3333+/2fZvvPEGJkyYgGeeeQZ9+vTBSy+9hCFDhuDtt9+2tnniiSewdOlSpKam3vK5vb29ERERYb35+/u3um4iZ3WmtAbnG3bPHtWLu2dT+4zjcn9yA20eYuvVqxeCgoIQHByM6upqDB48GEFBQQgKCkJgYCCCglo3p0Gv1yM3N7dRkJHL5UhNTUVOTk6z98nJybkp+KSlpbXY/lbWrl2L0NBQ9O/fH4sWLWo0+bw5Op2u3UGQyFFw92zqCNxVm9xBm94hd+zY0WFPXFZWBqPRiPDwxt384eHhyM/Pb/Y+Go2m2fYajaZNz/3oo4+ia9euiIqKwuHDh7FgwQIUFBRg06ZNLd5n+fLl+NOf/tSm5yFyNNtOWC5Oy+E1ar9e4eZdtS9eu44fTpUhrV+E6JKIOlybAtLo0aNtVYddzZ492/rfAwYMQGRkJMaNG4czZ86gR48ezd5n0aJFyMjIsP5dq9UiJibG5rUSdZRrNTd2z+byfroTll21P9x1HtknihmQyCUJm6QdGhoKhUKB4uLGY9jFxcWIiGj+ly0iIqJN7VsrOTkZAHD69OkW26hUKvj7+ze6ETmTHQUlMElAfIQfOgdx92y6M5ZeyO35pdxVm1xSmwKSQqFo1a01lEolhg4diuzsbOsxk8mE7OxspKSkNHuflJSURu0BICsrq8X2rWXZCiAyMvKOHofIkVlWHHF4jTpCUrdg+Kk8UFatw6GLFaLLIepwbRpikyQJXbt2xfTp0zF48OA7fvKMjAxMnz4diYmJSEpKwsqVK1FTU4MZM2YAAKZNm4bo6GgsX74cADBv3jyMHj0aK1aswKRJk7B+/Xrs378fa9assT5meXk5CgsLcfnyZQBAQUEBAFhXq505cwbr1q3DxIkTERISgsOHD2P+/Pm4++67MXDgwDt+TUSOSG8w4buTpQA4vEYdQ+khx929O+Grw1eQfaIEg7tw01FyMVIb7Nu3T3rqqaekwMBAafDgwdJbb70llZeXt+UhbvLWW29JXbp0kZRKpZSUlCTt3r3b+rPRo0dL06dPb9T+008/lXr16iUplUqpX79+0ldffdXo5x988IEE4KbbsmXLJEmSpMLCQunuu++WgoODJZVKJfXs2VN65plnpMrKyjbVXVlZKQFo8/2IRPj+ZInUdcEWaehLWZLRaBJdDrmITXlFUtcFW6S0v38nuhSiVmvt57dMktq+HXZdXR3+85//4IMPPsDu3btx//33Y+bMmbj33ns7NLw5Mq1Wi4CAAFRWVnI+Ejm8F744hg93ncfDiZ3x+kODRJdDLuJajR5DX86CSQJ+XDCWc9vIKbT287tdk7TVajUef/xxZGdn4+jRoygpKcGECRNQXl7e7oKJyDYkSeLyfrKJIB8lErsGA+Cu2uR62r2K7eLFi3j55Zdx7733Ij8/H8888wx7Uogc0Mnialy8dh1KDzlGxoWKLodcTGpf85y2bdxVm1xMmwKSXq/Hhg0bMH78eMTFxSEvLw8rV65EUVERXn31VXh4cGdeIkdj+eC6q0cIvJX8HaWOZbnsyO6zV1FVVy+4GqKO06Z3y8jISPj5+WH69Ol45513EBZm/uZQU1PTqB17kogchyUgjePwGtlAj06+6Bbqg3NlNfjhVBkmDuB2KeQa2tSDdO3aNRQWFuKll15C7969rddga8+12IjI9kqrdDhYVAGAy/vJdlIb/m1tO85hNnIdwq7FRkS2tz2/GJIEDIgOQGSAl+hyyEWl9gnHez+cw/aCEhiMJngohF2kgajDtCkgjRw5En/961/xxRdfQK/XY9y4cVi2bBm8vPjGS+SIshq+0d/bl8NrZDtDuwYhyNsT12rrsf/CNQzvHiK6JKI71qaY/8orr2Dx4sXw9fVFdHQ03njjDTz99NO2qo2I7sB1vRE/nCoDwOX9ZFseCjnGxpuH2bI4zEYuok0B6eOPP8Y777yDr7/+Gps3b8aXX36JtWvXwmQy2ao+ImqnH06VQmcwITrQC30i/USXQy5ufEMv5bYTxWjH/sNEDqdNAamwsBATJ060/j01NRUymcx63TMichw/HV6TyWSCqyFXNyquE5Qecly4WotTJdWiyyG6Y20KSAaDAWq1utExT09P1Ndz7wsiR2I0Sdieb97ZmPOPyB58VB64q4d57hGH2cgVtGmStiRJ+NWvfgWVSmU9VldXh6eeego+Pj7WY5s2beq4ComozQ4UXsPVGj381R5I6hYsuhxyE/f2jcCOglJkHS/G02N7ii6H6I60KSBNnz79pmOPP/54hxVDRB0jq2FzyLHxYfDkkmuyk3F9woDPgYNFFSjR1iHMX337OxE5qDYFpA8++MBWdRBRB7IMcXD1GtlTuL8ag2ICcaioAttOlODR5C6iSyJqN361JHIxZ0qrcba0Bp4KGcb07iS6HHIz9/bhxWvJNTAgEbkYy+UehncPgZ/aU3A15G7u7RsBAPjxdBlqdAbB1RC1HwMSkYvh7tkkUq9wX8QEe0FvMOGHU6WiyyFqNwYkIhdytVqH3MJrADj/iMSQyWS4t4+5FynreIngaojajwGJyIVk55dAkoB+Uf6ICuQ1EkmM1L7meUjb84thMPJKC+ScGJCIXMg3xzQAgPEN80CIREiKDUZgw8Vr952/JroconZhQCJyETU6A75vuDhtWn8Or5E4Hgo5xsWb/w1+c1wjuBqi9mFAInIR358shd5gQpdgb/QO58VpSazx/RoC0jFevJacEwMSkYv4umF4La0fL05L4t0d1wlqTzkuVVzHscta0eUQtRkDEpEL0BtMyG64OG1aP84/IvG8lAqM7mXeqNQS3omcCQMSkQvYffYqquoMCPVVYUiXINHlEAG4Eda/OcZdtcn5MCARuQDLN/R7+4ZDLufwGjmGcfHhUMhlKCiuwvmyGtHlELUJAxKRkzOZJOvu2ZaJsUSOIMDbE8O7BwPgMBs5HwYkIid38GIFSqp08FV5YESPENHlEDViGWZjQCJnw4BE5OQsHzxj48Og8lAIroaoMcumpXmFFSjR1gmuhqj1GJCInJgkSdYJsGkcXiMHFBGgxqCYQABA1glO1ibnwYBE5MROlVTjXFkNlAo5xvQOE10OUbMs4f1rrmYjJ8KAROTEvj5qHl67q2cIfFUegqshap5lmC3nTBm0dfWCqyFqHQYkIif29XHL7tncHJIcV88wX/To5IN6o4QdDRuaEjk6BiQiJ1VUXoujl7SQy4DUvpx/RI5tQn9ziM88ytVs5BwYkIiclOWDJqlbMEJ9VYKrIbq1+/pHAgB2FJSgVm8QXA3R7TEgETmprUevAAAmDogUXAnR7fWL8kdMsBfq6k34tqBUdDlEt8WAROSErlRex4HCCshknH9EzkEmk2FiQy/S1iNXBFdDdHsMSEROyDK8ltg1COH+asHVELXOfQ29ndvzS1BXbxRcDdGtMSAROaH/HTEHJMu8DiJnMKhzAKIC1KjVG/H9SQ6zkWNjQCJyMiVVddh3oRzAjZVBRM5AJpNhQkOo/x9Xs5GDY0AicjJfHyuGJAEJMYGICvQSXQ5Rm0wcYA71244XQ2fgMBs5LgYkIifzvyOW1WvsPSLnM6RLEML8VKjSGbDzdJnocohaxIBE5ESuVuuw++xVAJx/RM5JLpfhvoah4a1HOMxGjosBiciJfHO8GCYJGBAdgJhgb9HlELWLZTVb1vFi1BtNgqshah4DEpETsewfcx+H18iJDYsNRqivEpXX65Fz5qrocoiaxYBE5CQqavXWDxMOr5EzU8hlGN+wwen/jnLTSHJMDEhETuKb48UwmCTER/ihW6iP6HKI7ohlV+2vjxXDwGE2ckDCA9KqVasQGxsLtVqN5ORk7N2795btN27ciPj4eKjVagwYMABbt25t9PNNmzZh/PjxCAkJgUwmw8GDB296jLq6Ojz99NMICQmBr68vJk+ejOLi4o58WUQdbsthXnuNXMfw7sEI9lGivEaPXRxmIwckNCBt2LABGRkZWLZsGfLy8jBo0CCkpaWhpKSk2fa7du3C1KlTMXPmTBw4cADp6elIT0/H0aNHrW1qamowcuRIvPbaay0+7/z58/Hll19i48aN+O6773D58mX84he/6PDXR9RRymv01iXR9w+KElwN0Z3zUMitq9m2HL4suBqim8kkSZJEPXlycjKGDRuGt99+GwBgMpkQExODuXPnYuHChTe1nzJlCmpqarBlyxbrseHDhyMhIQGrV69u1Pb8+fPo1q0bDhw4gISEBOvxyspKdOrUCevWrcNDDz0EAMjPz0efPn2Qk5OD4cOHN1urTqeDTqez/l2r1SImJgaVlZXw9/dv9zkgao21ey7guc+Pon+0P7bMHSW6HKIOkXPmKqa+txv+ag/sX3IvlB7CBzXIDWi1WgQEBNz281vYv0a9Xo/c3FykpqbeKEYuR2pqKnJycpq9T05OTqP2AJCWltZi++bk5uaivr6+0ePEx8ejS5cut3yc5cuXIyAgwHqLiYlp9XMS3akth8zDa/cPZO8RuY6kbsEI81NBW2fAD6d4bTZyLMICUllZGYxGI8LDwxsdDw8Ph0bT/OZhGo2mTe1begylUonAwMA2Pc6iRYtQWVlpvRUVFbX6OYnuRIm2DrvPmedoTBrI+UfkOhRymXVO3ZeHOMxGjoX9ma2kUqng7+/f6EZkD18duQJJAoZ0CUTnIG4OSa7FMqcu63gx6up5bTZyHMICUmhoKBQKxU2rx4qLixER0fwmeBEREW1q39Jj6PV6VFRU3NHjENmLZfUaJ2eTKxrSJRDRgV6o0RuxI7/5BTpEIggLSEqlEkOHDkV2drb1mMlkQnZ2NlJSUpq9T0pKSqP2AJCVldVi++YMHToUnp6ejR6noKAAhYWFbXocInu4eK0WuReuQSbj8n5yTTKZDD9rGDr+kqvZyIF4iHzyjIwMTJ8+HYmJiUhKSsLKlStRU1ODGTNmAACmTZuG6OhoLF++HAAwb948jB49GitWrMCkSZOwfv167N+/H2vWrLE+Znl5OQoLC3H5svkXraCgAIC55ygiIgIBAQGYOXMmMjIyEBwcDH9/f8ydOxcpKSktrmAjEuWrht6j5G7BCPdXC66GyDbuHxSFf3x/FtknSlCtM8BXJfSjiQiA4IA0ZcoUlJaWYunSpdBoNEhISEBmZqZ1InZhYSHk8hudXCNGjMC6deuwZMkSLF68GHFxcdi8eTP69+9vbfPFF19YAxYAPPLIIwCAZcuW4YUXXgAA/P3vf4dcLsfkyZOh0+mQlpaGd955xw6vmKhtLMNrP+PqNXJh/aL8ERvijfNXa5F9ohgPJkSLLolI7D5Izqy1+ygQtde5shqM/eu3UMhl2Lt4HEJ8VaJLIrKZFd8U4K3tp5HaJwz/nD5MdDnkwhx+HyQiurUtDcue7+oZynBELs+yCOG7k6WorK0XXA0RAxKRw7oxvMbJ2eT6eoX7oVe4L+qNEr4+1vq97YhshQGJyAEdv6xFQXEVlAo50vpy+wlyDw809CJtPnhJcCVEDEhEDsnyATGuTxgCvD0FV0NkH5bJ2Tlnr+JK5XXB1ZC7Y0AicjBGk4T/NgSk9MFczUPuIybYG8NigyBJwH8Pck8kEosBicjB7DpThmKtDoHenhjbO0x0OUR29fPBnQEAmw9wmI3EYkAicjCfN3wwTBoQCaUHf0XJvUwaEAmlQo58TRWOX9aKLofcGN99iRxIrd6AzKPmFTy/GMLhNXI/Ad6euCfe3HPKydokEgMSkQPJOl6MWr0RXYK9MaRLkOhyiISwzL3778FLMJq4lzGJwYBE5EA25d2YnC2TyQRXQyTG2PhOCPDyRLFWh5wzV0WXQ26KAYnIQZRU1eGHU6UAgJ9z9Rq5MZWHwrpB6qYDFwVXQ+6KAYnIQXx56ApMEpAQE4huoT6iyyESyvIl4eujGtTqDYKrIXfEgETkID5v+KbMydlEwNCuQYgJ9kKN3ois48WiyyE3xIBE5ABOFVfh6CUtPOQy/GxglOhyiISTyWT4ecPO2p9zTyQSgAGJyAF81jA5e3SvTgj2UQquhsgxWFaz/XCqDMXaOsHVkLthQCISzGA04bM88/DaLxM7C66GyHF07+SLoV2DYDRJ1t8RInthQCIS7NuCUpRW6RDio8Q98eGiyyFyKFMSYwAAG/dfhCRxTySyHwYkIsE27C8CYF61w0uLEDU2cWAkvJUKnCurwb7z10SXQ26E78ZEApVU1WF7fgkAYMqwGMHVEDkeX5WHdU+kTxu+TBDZAwMSkUCf55kvpTC4SyDiwv1El0PkkCxfHr46fAVVdfWCqyF3wYBEJIgkSdbhtYcT2XtE1JIhXYLQvZMPrtcbseXwFdHlkJtgQCISJK/wGs6W1sDL88ZlFYjoZjKZzDpZm8NsZC8MSESCbNhnfqOfNDASfmpPwdUQObZfDOkMhVyGA4UVOFVcJboccgMMSEQCVOsM1qECDq8R3V4nPxXuiQ8DcOPLBZEtMSARCbD18BXU6o3oHuqDYbFBosshcgqWYbbPD1yC3mASXA25OgYkIgEsk7N/mRgDmUwmuBoi5zCmdyeE+alwtUaP7fm8gC3ZFgMSkZ3la7TIvXANCrkMk4dEiy6HyGl4KOSYPNR8OZ61ewoFV0OujgGJyM7+vfsCACCtXzjC/NWCqyFyLo8mdYFMZr6A7bmyGtHlkAtjQCKyo6q6enyedwkA8PjwroKrIXI+McHeGNvbPFnb8mWDyBYYkIjs6PMDl1CjN6JHJx+kdA8RXQ6RU3qi4cvFxv1FuK43Cq6GXBUDEpGdSJKET3LM33ifGN6Vk7OJ2unuXp0QE+wFbZ0BXx66LLocclEMSER2sudcOU6VVMNbqcAvGiaaElHbKeQyPJZs7kX6ePd5SJIkuCJyRQxIRHbyScN8ifTB0fDnztlEd+ThxBgoPeQ4ekmLQxcrRZdDLogBicgOSrR1+PqoBgDweDInZxPdqWAfpfUahpaha6KOxIBEZAf/t7cIBpOExK5B6BvlL7ocIpdgmaz95eHLKK/RC66GXA0DEpGN1RtNWLe3YXJ2CnuPiDpKQkwg+kf7Q28wYeN+Xp+NOhYDEpGNbTtejGKtDiE+SkzoHyG6HCKXIZPJrL1I/95zAUYTJ2tTx2FAIrKxf/14DgAwZVgMVB4KwdUQuZYHBkUjwMsTReXXkXWc12ejjsOARGRDBwqvYf+Fa/BUyDB9RKzocohcjpdSgceSuwAA/vnDWcHVkCthQCKyoX/+YO49emBQNMJ53TUim5g+IhaeChn2X7iGA4XXRJdDLoIBichGispr8b+jVwAAvx7VTXA1RK4r3F+NBwZFA7jxpYToTjEgEdnIv348B5MEjIoLRZ9ILu0nsqVZd5u/hPzv6BUUldcKroZcAQMSkQ1U1tbj04Zlx7NGdRdcDZHri4/wx6i4UJikGwsjiO4EAxKRDazbW4havRHxEX4YFRcquhwit2D5MvLp/iJU1tYLroacHQMSUQfTG0z4cJf5G+yvR3WHTCYTXBGRexgVF4r4CD/U6o1Yt7dQdDnk5BiQiDrYlsOXUazVIcxPhQcGRYkuh8htyGQy/LqhF+nDXeegN5gEV0TOzCEC0qpVqxAbGwu1Wo3k5GTs3bv3lu03btyI+Ph4qNVqDBgwAFu3bm30c0mSsHTpUkRGRsLLywupqak4depUozaxsbGQyWSNbq+++mqHvzZyL5IkYc335r1Ypo+IhdLDIX7FiNzGA4OiEOanQrFWhy8OXRZdDjkx4e/eGzZsQEZGBpYtW4a8vDwMGjQIaWlpKCkpabb9rl27MHXqVMycORMHDhxAeno60tPTcfToUWub119/HW+++SZWr16NPXv2wMfHB2lpaairq2v0WC+++CKuXLlivc2dO9emr5VcX/aJEuRrquD9k83riMh+lB5yzLjLvKLtnW9P8/Ij1G7CA9Lf/vY3zJo1CzNmzEDfvn2xevVqeHt74/3332+2/RtvvIEJEybgmWeeQZ8+ffDSSy9hyJAhePvttwGYv8GvXLkSS5YswYMPPoiBAwfi448/xuXLl7F58+ZGj+Xn54eIiAjrzcfHx9Yvl1yYJEl4I9vcUzktJRaB3krBFRG5p8eHd0GAlyfOltZgy2H2IlH7CA1Ier0eubm5SE1NtR6Ty+VITU1FTk5Os/fJyclp1B4A0tLSrO3PnTsHjUbTqE1AQACSk5NvesxXX30VISEhGDx4MP7yl7/AYDC0WKtOp4NWq210I/qpbwtKceRSJbw8FZjFjSGJhPFTe+LXI82/g29tPw0Te5GoHYQGpLKyMhiNRoSHhzc6Hh4eDo1G0+x9NBrNLdtb/rzdY/7ud7/D+vXrsWPHDjz55JN45ZVX8Oyzz7ZY6/LlyxEQEGC9xcTEtP6FksuTJAkrrb1HXRHiqxJcEZF7m35XLPzVHjhdUo2tDTvaE7WF8CE2UTIyMjBmzBgMHDgQTz31FFasWIG33noLOp2u2faLFi1CZWWl9VZUVGTnismRfXeyFIeKKqD2lFtX0RCROP5qT/y/hl6kN7NPsReJ2kxoQAoNDYVCoUBxcXGj48XFxYiIiGj2PhEREbdsb/mzLY8JAMnJyTAYDDh//nyzP1epVPD39290IwIazz16PLkrOvmx94jIEcy4qxv8VB44WVyNr481PypB1BKhAUmpVGLo0KHIzs62HjOZTMjOzkZKSkqz90lJSWnUHgCysrKs7bt164aIiIhGbbRaLfbs2dPiYwLAwYMHIZfLERYWdicvidzQj6fLcKCwAioPOWaPZu8RkaMI8PLEjLtiAQBvsBeJ2shDdAEZGRmYPn06EhMTkZSUhJUrV6KmpgYzZswAAEybNg3R0dFYvnw5AGDevHkYPXo0VqxYgUmTJmH9+vXYv38/1qxZA8C8Udjvf/97vPzyy4iLi0O3bt3w/PPPIyoqCunp6QDME7337NmDsWPHws/PDzk5OZg/fz4ef/xxBAUFCTkP5JwkScIb28y9R48md0GYn1pwRUT0U/9vZDe8v/M88jVV+OZ4MSb0b3kkgeinhAekKVOmoLS0FEuXLoVGo0FCQgIyMzOtk6wLCwshl9/o6BoxYgTWrVuHJUuWYPHixYiLi8PmzZvRv39/a5tnn30WNTU1mD17NioqKjBy5EhkZmZCrTZ/eKlUKqxfvx4vvPACdDodunXrhvnz5yMjI8O+L56c3q4zV7H/wjUoPeR4anQP0eUQUROB3kpMH9EVq3acwZvZpzC+bzjkcl7+h25PJkkS+xzbQavVIiAgAJWVlZyP5KZMJgnp7+zE4YuVmJ7SFX96sP/t70REdnetRo+Rr21Hjd6IN6cO5iWA3FxrP7/ddhUb0Z366sgVHL5YCR+lAnPuiRNdDhG1IMhHiScbenhfz8yHzmAUXBE5AwYkonbQGYx4/et8AMCTo3tw5RqRg/v1qG4I81Ph4rXr+CTnguhyyAkwIBG1w793F6Ko/DrC/FT4NXfNJnJ43koPZNzbC4B5d+3K2nrBFZGjY0AiaqPK6/V4a7t55VrGvb3grRS+1oGIWuGhoZ3RK9wXldfr8c63p0WXQw6OAYmojd759jQqausRF+aLh4Z2Fl0OEbWSh0KOhffFAwA+2HUeF6/VCq6IHBkDElEbXKq4jg92ngcALLwvHh4K/goROZOxvcMwvHsw9AYTVnxzUnQ55MD47k7UBiu+LoDeYMLw7sG4J567rhM5G5lMhsUT+wAAPj9wCUcvVQquiBwVAxJRK+VeKMemA5cAAIsn9oFMxs3miJzRwM6B1r2Qln1xjJcgoWYxIBG1Qr3RhOc+PwoAeDixMwZ2DhRbEBHdkYX3xcNbqUDuhWvYmFskuhxyQAxIRK3wYcO1nAK9PbHwvj6iyyGiOxQV6IX5qeZl/8v/l4/yGr3gisjRMCAR3cbliuv4+zbzZM7F9/VBsI9ScEVE1BF+dVcs4iP8UFFbj+VbT4guhxwMAxLRbfzpy2Oo1RsxLDaIy/qJXIinQo4//3wAAGBj7kXsPVcuuCJyJAxIRLew7Xgxvj5WDA+5DC+nD+BVwIlczNCuQZiaFAMAWLL5CPQGk+CKyFEwIBG1oFZvwLIvjgEAZo7qht4RfoIrIiJbWDAhHsE+Spwsrsa/fjwnuhxyEAxIRC1Y8c1JXKq4juhAL8wbFye6HCKykUBvpXVvpDeyT+JsabXgisgRMCARNWPn6TLrN8mX0vvxemtELm7ykGjc1TMEdfUmzN9wEPVGDrW5OwYkoiYqa+vxh08PAQAeTe6Ce+LDBVdERLYmk8nw118Ogr/aA4cuVuKt7byYrbtjQCJqYsl/j0KjrUO3UB8smcQ9j4jcRWSAF15uWNW2asdp5BVeE1wRicSARPQT/z14CV8eugyFXIa/T0ng0BqRm3lgUBQeTIiC0SRh/oaDqNEZRJdEgjAgETW4VHEdSzabLycy956eSIgJFFsQEQnx4oP9ERWgxoWrtXhpy3HR5ZAgDEhEAAxGEzI2HERVnQEJMYGYM7an6JKISJAAL0/89eFBkMmA9fuKkHlUI7okEoABiQjAa5n52HOuHN5KBf4+JQEeCv5qELmzET1CMWtUdwDAHzcewukSLv13N/wUILf334OX8N4P5iX9f3loELqF+giuiIgcwR/H90ZSbDCqdQbM/mQ/tHX1oksiO2JAIrd29FIlnv3PYQDAb8f0wKSBkYIrIiJHofSQY9VjQxAZoMbZ0hrMX38QJpMkuiyyEwYkcltXq3V48pNc6AwmjOndCX8Y31t0SUTkYDr5qbDmiUSoPOTIzi/Bym0nRZdEdsKARG6p3mjC0+vycKniOrqF+uCNRwZDwQvRElEzBnQOwPJfmPdHenP7aWQevSK4IrIHBiRyO5Ik4bnPj2D32XL4KBVY88RQBHh5ii6LiBzYL4Z0xsyR3QAAGZ8e4iaSboABidyKJEl4+asT+HT/RchlwMpHBiMu3E90WUTkBBbdF4+7e3VCrd6IGR/sw4krWtElkQ0xIJFbeTP7tPUitK9NHoh7+/I6a0TUOh4KOVY/PgRDuwah8no9nvjXXpwvqxFdFtkIAxK5jfd/PIe/N0ywXHZ/X/wyMUZwRUTkbLyVHnj/V8PQJ9IfZdU6PPbPPbhSeV10WWQDDEjkFj7dX4QXGy4ZkHFvL8y4q5vgiojIWQV4eeKTmUnoHuqDSxXX8fg/96CsWie6LOpgDEjk8j7ceQ4LPjPvdfTrkd0w9x5eRoSI7kyorwqf/DoZUQFqnCmtwcP/yEFRea3osqgDMSCRy5IkCa9n5uOFL49DkoBpKV3x3KQ+kMm4nJ+I7lx0oBfWzhqO6EAvnC2tweR3d+H4ZU7cdhUMSOSS6o0m/HHjYbzz7RkAwB/H98KfHujHcEREHapbqA8++80IxEf4oaRKhyn/yEHOmauiy6IOwIBELqdWb8Dsj/fjs7yLUMhleH3yQMy5J47hiIhsIiJAjQ1PpiCpWzCqdAZMf38vvjrMzSSdHQMSuZSTxVV48O2d2FFQCrWnHGueGIqHh3G1GhHZVoCXJz7+f0mY0C8C+oad+pdvPYF6o0l0adRODEjkEiRJwqf7i/DA2z/iVEk1wvxUWDdrOMb14T5HRGQfak8FVj02BP+vYZXsP74/iyn/yMGlCm4D4IwYkMjp1egM+MOnh/Dsfw6jrt6EUXGh2DpvFIZ0CRJdGhG5GYVchqX398Xqx4fAT+2BvMIKTHzjB2w7Xiy6NGojmSRJkuginJFWq0VAQAAqKyvh7+8vuhy3tfN0GZZsPopzZTWQy4A/jO+N34zuATkvPEtEghWV12LOujwculgJAJia1AULJvRGoLdScGXurbWf3wxI7cSAJFaJtg4vf3UCXxy6DACI8FfjzamDkdQtWHBlREQ36A0mvJaZb73EUbCPEovui8fkIZ35RU4QBiQbY0ASw2A04ZPdF7Dim5Oo1hkglwHTUmKRMb4X/NWeossjImrW3nPlWLL5CE4WVwMAErsG4aX0/ugTyc8Pe2NAsjEGJPvSG0z4LO8i3vn2NIrKzRMeB8UE4s/p/dE/OkBwdUREt1dvNOGDneewctsp1OqNkMmAif0jMeeengxKdsSAZGMMSPZRV2/Ep/uLsPrbM7hcWQcACPFRImN8L0wd1oVd1ETkdC5XXMefvzqBr47c2CtpfN9wzL0nDgM68wufrTEg2RgDkm0VaKqwcX8RPj9wCVdr9ACAMD8VZt/dHY8md4G30kNwhUREd+bEFS3e3nEaW49cgeWTeFhsEH6ZGINJAyLho+L7nC0wINkYA1LHK63S4etjGmzcX2Rd9QEAUQFqPDWmBx5OjIHaUyGwQiKijne6pBrv7DiN/x66DKPJ/JHsrVRg0oBI/GJIZyTGBsFTwV15OgoDko0xIN05k0nCkUuV2J5fgm8LShqFIg+5DOP6hOGXQ2MwuncnvjkQkcvTVNZh04GL2Lj/Is6V1ViP+6k9cHevThjbOwxjendCqK9KYJXOz6kC0qpVq/CXv/wFGo0GgwYNwltvvYWkpKQW22/cuBHPP/88zp8/j7i4OLz22muYOHGi9eeSJGHZsmV47733UFFRgbvuugvvvvsu4uLirG3Ky8sxd+5cfPnll5DL5Zg8eTLeeOMN+Pr6tqpmBqS2u1ajx8GLFThYWIGDReZb5fX6Rm36R/sjPSEa6YOj+SZARG5JkiTsv3ANG/cXIet4Ma7VNn6f7Bnmi4SYQOstPsIPHvwS2WpOE5A2bNiAadOmYfXq1UhOTsbKlSuxceNGFBQUICws7Kb2u3btwt13343ly5fjZz/7GdatW4fXXnsNeXl56N+/PwDgtddew/Lly/HRRx+hW7dueP7553HkyBEcP34carUaAHDffffhypUr+Mc//oH6+nrMmDEDw4YNw7p161pVNwPSzSRJQnmNHlcq61CsrcP5q7U4W1qNM6XVOFtag5Iq3U338VN5YFSvUIzpHYYxvTohzF8toHIiIsdkNEk4dLECO/JLsKOgBEcvaW9qo1TI0TXEGz06+aJ7Jx907+SL6EAvRAaoERGg5tSEJpwmICUnJ2PYsGF4++23AQAmkwkxMTGYO3cuFi5ceFP7KVOmoKamBlu2bLEeGz58OBISErB69WpIkoSoqCj84Q9/wB//+EcAQGVlJcLDw/Hhhx/ikUcewYkTJ9C3b1/s27cPiYmJAIDMzExMnDgRFy9eRFRU1G3rtlVAKq3SQWcwtvl+Lf1ftByXIEGSAAnmIGMe5jb/aTBKMEkSjCYJBpMEg9GEeqMEvdEIvUGCzmDEdb0RtXojrtcbUas3oKrOgIraelyr1aPyej3Ka/Qo0eqgv82FGbuH+pi/9XQJxOCYIMRH+nH4jIiola5W66w98AcKK3CoqAJVOsMt7xPg5YkwPxUCvT0R4KVEkLcnArw84aPygLdSAW+lAl5KD3h5KqD0kMNTIYPSQw6lQg6FXNb4JpNBJgNkMhlkAOQNfwcAGW78d1MtHb+dUF9Vhwe81n5+C50ir9frkZubi0WLFlmPyeVypKamIicnp9n75OTkICMjo9GxtLQ0bN68GQBw7tw5aDQapKamWn8eEBCA5ORk5OTk4JFHHkFOTg4CAwOt4QgAUlNTIZfLsWfPHvz85z+/6Xl1Oh10uhs9IFrtzSm+I/xh4yF8f7LUJo9tL6G+SkQEqNE50Bs9wnwavtWYv9lwM0ciovYL8VVhXJ9w64W4TSYJlyquW3vqz5aZ/9RU1uFKZR2u1xtReb3+pukMzuLj/5eEu3t1EvLcQgNSWVkZjEYjwsMbX3E9PDwc+fn5zd5Ho9E0216j0Vh/bjl2qzZNh+88PDwQHBxsbdPU8uXL8ac//amVr6z9lAoZVB7t61FpLqH/NNHL0JD6ZebUL2/4FmD5VqCQyyCXA54K8zcH8zcJ83+bv2Eo4KP0gJdSAX+1BwK8lQj08kSgt/kW7q9GmJ8aynbWT0REbSOXyxAT7I2YYG+M6d34Z5IkQVtngKayDmXVOlRer0dFbT0qrutRWVuPGr0BtXojanVG1NYbUac3Qm80ob7hpjeYYDBJMJkkGBtGGYwmCRLMwUySAFPDMIV5dKLheSE1qeMOXl97u546ADdZaKVFixY16rnSarWIiYnp8Of55/RhHf6YRETkfmQyGQK8zMNpveEnuhynI/SrfmhoKBQKBYqLixsdLy4uRkRERLP3iYiIuGV7y5+3a1NSUtLo5waDAeXl5S0+r0qlgr+/f6MbERERuSahAUmpVGLo0KHIzs62HjOZTMjOzkZKSkqz90lJSWnUHgCysrKs7bt164aIiIhGbbRaLfbs2WNtk5KSgoqKCuTm5lrbbN++HSaTCcnJyR32+oiIiMg5CR9iy8jIwPTp05GYmIikpCSsXLkSNTU1mDFjBgBg2rRpiI6OxvLlywEA8+bNw+jRo7FixQpMmjQJ69evx/79+7FmzRoA5i7F3//+93j55ZcRFxdnXeYfFRWF9PR0AECfPn0wYcIEzJo1C6tXr0Z9fT3mzJmDRx55pFUr2IiIiMi1CQ9IU6ZMQWlpKZYuXQqNRoOEhARkZmZaJ1kXFhZCLr/R0TVixAisW7cOS5YsweLFixEXF4fNmzdb90ACgGeffRY1NTWYPXs2KioqMHLkSGRmZlr3QAKAtWvXYs6cORg3bpx1o8g333zTfi+ciIiIHJbwfZCcFTeKJCIicj6t/fzmemwiIiKiJhiQiIiIiJpgQCIiIiJqggGJiIiIqAkGJCIiIqImGJCIiIiImmBAIiIiImqCAYmIiIioCQYkIiIioiaEX2rEWVk2INdqtYIrISIiotayfG7f7kIiDEjtVFVVBQCIiYkRXAkRERG1VVVVFQICAlr8Oa/F1k4mkwmXL1+Gn58fZDJZhz2uVqtFTEwMioqKeI03G+O5tg+eZ/vgebYPnmf7sOV5liQJVVVViIqKglze8kwj9iC1k1wuR+fOnW32+P7+/vzlsxOea/vgebYPnmf74Hm2D1ud51v1HFlwkjYRERFREwxIRERERE0wIDkYlUqFZcuWQaVSiS7F5fFc2wfPs33wPNsHz7N9OMJ55iRtIiIioibYg0RERETUBAMSERERURMMSERERERNMCARERERNcGAJMCqVasQGxsLtVqN5ORk7N2795btN27ciPj4eKjVagwYMABbt261U6XOrS3n+b333sOoUaMQFBSEoKAgpKam3vb/C93Q1n/TFuvXr4dMJkN6erptC3QRbT3PFRUVePrppxEZGQmVSoVevXrx/aMV2nqeV65cid69e8PLywsxMTGYP38+6urq7FStc/r+++9x//33IyoqCjKZDJs3b77tfb799lsMGTIEKpUKPXv2xIcffmjbIiWyq/Xr10tKpVJ6//33pWPHjkmzZs2SAgMDpeLi4mbb79y5U1IoFNLrr78uHT9+XFqyZInk6ekpHTlyxM6VO5e2nudHH31UWrVqlXTgwAHpxIkT0q9+9SspICBAunjxop0rdz5tPdcW586dk6Kjo6VRo0ZJDz74oH2KdWJtPc86nU5KTEyUJk6cKP3444/SuXPnpG+//VY6ePCgnSt3Lm09z2vXrpVUKpW0du1a6dy5c9LXX38tRUZGSvPnz7dz5c5l69at0nPPPSdt2rRJAiB9/vnnt2x/9uxZydvbW8rIyJCOHz8uvfXWW5JCoZAyMzNtViMDkp0lJSVJTz/9tPXvRqNRioqKkpYvX95s+4cffliaNGlSo2PJycnSk08+adM6nV1bz3NTBoNB8vPzkz766CNblegy2nOuDQaDNGLECOmf//ynNH36dAakVmjreX733Xel7t27S3q93l4luoS2nuenn35auueeexody8jIkO666y6b1ulKWhOQnn32Walfv36Njk2ZMkVKS0uzWV0cYrMjvV6P3NxcpKamWo/J5XKkpqYiJyen2fvk5OQ0ag8AaWlpLban9p3npmpra1FfX4/g4GBblekS2nuuX3zxRYSFhWHmzJn2KNPptec8f/HFF0hJScHTTz+N8PBw9O/fH6+88gqMRqO9ynY67TnPI0aMQG5urnUY7uzZs9i6dSsmTpxol5rdhYjPQl6s1o7KyspgNBoRHh7e6Hh4eDjy8/ObvY9Go2m2vUajsVmdzq4957mpBQsWICoq6qZfSGqsPef6xx9/xL/+9S8cPHjQDhW6hvac57Nnz2L79u147LHHsHXrVpw+fRq//e1vUV9fj2XLltmjbKfTnvP86KOPoqysDCNHjoQkSTAYDHjqqaewePFie5TsNlr6LNRqtbh+/Tq8vLw6/DnZg0TUxKuvvor169fj888/h1qtFl2OS6mqqsITTzyB9957D6GhoaLLcWkmkwlhYWFYs2YNhg4diilTpuC5557D6tWrRZfmUr799lu88soreOedd5CXl4dNmzbhq6++wksvvSS6NLpD7EGyo9DQUCgUChQXFzc6XlxcjIiIiGbvExER0ab21L7zbPHXv/4Vr776KrZt24aBAwfaskyX0NZzfebMGZw/fx7333+/9ZjJZAIAeHh4oKCgAD169LBt0U6oPf+mIyMj4enpCYVCYT3Wp08faDQa6PV6KJVKm9bsjNpznp9//nk88cQT+PWvfw0AGDBgAGpqajB79mw899xzkMvZD9ERWvos9Pf3t0nvEcAeJLtSKpUYOnQosrOzrcdMJhOys7ORkpLS7H1SUlIatQeArKysFttT+84zALz++ut46aWXkJmZicTERHuU6vTaeq7j4+Nx5MgRHDx40Hp74IEHMHbsWBw8eBAxMTH2LN9ptOff9F133YXTp09bAygAnDx5EpGRkQxHLWjPea6trb0pBFlCqcRLnXYYIZ+FNpv+Tc1av369pFKppA8//FA6fvy4NHv2bCkwMFDSaDSSJEnSE088IS1cuNDafufOnZKHh4f017/+VTpx4oS0bNkyLvNvhbae51dffVVSKpXSf/7zH+nKlSvWW1VVlaiX4DTaeq6b4iq21mnreS4sLJT8/PykOXPmSAUFBdKWLVuksLAw6eWXXxb1EpxCW8/zsmXLJD8/P+n//u//pLNnz0rffPON1KNHD+nhhx8W9RKcQlVVlXTgwAHpwIEDEgDpb3/7m3TgwAHpwoULkiRJ0sKFC6UnnnjC2t6yzP+ZZ56RTpw4Ia1atYrL/F3RW2+9JXXp0kVSKpVSUlKStHv3buvPRo8eLU2fPr1R+08//VTq1auXpFQqpX79+klfffWVnSt2Tm05z127dpUA3HRbtmyZ/Qt3Qm39N/1TDEit19bzvGvXLik5OVlSqVRS9+7dpT//+c+SwWCwc9XOpy3nub6+XnrhhRekHj16SGq1WoqJiZF++9vfSteuXbN/4U5kx44dzb7nWs7t9OnTpdGjR990n4SEBEmpVErdu3eXPvjgA5vWKJMk9gESERER/RTnIBERERE1wYBERERE1AQDEhEREVETDEhERERETTAgERERETXBgERERETUBAMSERERURMMSERERERNMCARERERNcGARERERNQEAxIRERFREx6iCyAichRjxoxB//79AQCffPIJPD098Zvf/AYvvvgiZDKZ4OqIyJ7Yg0RE9BMfffQRPDw8sHfvXrzxxhv429/+hn/+85+iyyIiO5NJkiSJLoKIyBGMGTMGJSUlOHbsmLXHaOHChfjiiy9w/PhxwdURkT2xB4mI6CeGDx/eaDgtJSUFp06dgtFoFFgVEdkbAxIRERFREwxIREQ/sWfPnkZ/3717N+Li4qBQKARVREQiMCAREf1EYWEhMjIyUFBQgP/7v//DW2+9hXnz5okui4jsjMv8iYh+Ytq0abh+/TqSkpKgUCgwb948zJ49W3RZRGRnDEhERD/h6emJlStX4t133xVdChEJxCE2IiIioiYYkIiIiIia4EaRRERERE2wB4mIiIioCQYkIiIioiYYkIiIiIiaYEAiIiIiaoIBiYiIiKgJBiQiIiKiJhiQiIiIiJpgQCIiIiJq4v8D541z58vAH1sAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(ps, pdf_p)\n", - "plt.xlabel('p')\n", - "plt.ylabel('PMF');" - ] - }, - { - "cell_type": "markdown", - "id": "a6227be2", - "metadata": {}, - "source": [ - "This is a beta distribution, which we can confirm by running `beta` with a change of variables, $a = k+1$ and $b = n-k+1$." - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "id": "fb3fc2ef", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(7, 7)" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from scipy.stats import beta\n", - "\n", - "a = k + 1\n", - "b = n - k + 1\n", - "a, b" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "id": "18185a97", - "metadata": {}, - "outputs": [], - "source": [ - "pdf_beta = beta.pdf(ps, a, b)\n", - "pdf_beta /= pdf_beta.sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "id": "534580f9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.allclose(pdf_p, pdf_beta)" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "id": "26eca5b7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(6, 12)" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a - 1, b + k - 1" - ] - }, - { - "cell_type": "markdown", - "id": "5dd2e524", - "metadata": {}, - "source": [ - "To see why this works, let's compare the PDF of the beta distribution\n", - "\n", - "$$f(p, a, b) = \\frac{1}{B(a, b)} p^{a-1} (1-p)^{b-1} $$\n", - "\n", - "And the PMF of the binomial distribution.\n", - "\n", - "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", - "\n", - "With the change of variables, they are identical except for the first term, which normalizes the distributions." - ] - }, - { - "cell_type": "markdown", - "id": "7fb375ee", - "metadata": {}, - "source": [ - "## Conjugate priors\n", - "\n", - "This similarity is the reason the beta and binomial are conjugate distributions, which means they are joined together.\n", - "This relationship has a useful property for Bayesian statistics: if the prior distribution for $p$ is beta and the likelihood of the data is binomial, the posterior distribution is also beta.\n", - "\n", - "To see how that works, suppose the prior distribution of $p$ is beta with parameters $a$ and $b$. Here is the PDF of that distribution:\n", - "\n", - "$$p^{a-1} (1-p)^{b-1}$$\n", - "\n", - "I have omitted the normalizing factor, which we don't need because we are going to normalize the distribution after the update.\n", - "\n", - "Now suppose we see $k$ successes in $n$ trials.\n", - "The likelihood of this data is given by the binomial distribution, which has this PMF.\n", - "\n", - "$$p^{k} (1-p)^{n-k}$$\n", - "\n", - "Again, I have omitted the normalizing factor.\n", - "Now to get the unnormalized posterior, we multiply the beta prior and the binomial likelihood. The result is\n", - "\n", - "$$p^{a-1+k} (1-p)^{b-1+n-k}$$\n", - "\n", - "which we recognize as an unnormalized beta distribution with parameters $a+k$ and $b+n-k$.\n", - "\n", - "So if we observe $k$ successes in $n$ trials, we can do the update by making a beta distribution with parameters $a+k$ and $b+n-k$.\n", - "\n", - "As an example, let's start with a beta prior." - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "1441b8cc", - "metadata": {}, - "outputs": [], - "source": [ - "a = 2\n", - "b = 3\n", - "\n", - "prior = beta.pdf(ps, a, b)" - ] - }, - { - "cell_type": "markdown", - "id": "7e2d2437", - "metadata": {}, - "source": [ - "And suppose we see 5 successes in 10 attempts." - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "a7853483", - "metadata": {}, - "outputs": [], - "source": [ - "k = 5\n", - "n = 10\n", - "\n", - "like = binom.pmf(k, n, ps)" - ] - }, - { - "cell_type": "markdown", - "id": "3f235ad5", - "metadata": {}, - "source": [ - "We can compute the posterior by multiplying the prior and the likelihood, then normalizing the results." - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "id": "7209c35d", - "metadata": {}, - "outputs": [], - "source": [ - "posterior = prior * like\n", - "posterior /= posterior.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "a3eb050d", - "metadata": {}, - "source": [ - "Or we can compute a beta distribution with the updated parameters." - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "id": "5dbefc32", - "metadata": {}, - "outputs": [], - "source": [ - "posterior_beta = beta.pdf(ps, a+k, b+n-k)\n", - "posterior_beta /= posterior_beta.sum()" - ] - }, - { - "cell_type": "markdown", - "id": "492f22dd", - "metadata": {}, - "source": [ - "The result is the same either way." - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "id": "31c83e74", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.allclose(posterior, posterior_beta)" - ] - }, - { - "cell_type": "markdown", - "id": "f8f7ea3d", - "metadata": {}, - "source": [ - "## The all-knowing cube knows all" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "fca0f595", - "metadata": {}, - "outputs": [], - "source": [ - "def get_beta(a, b, cube):\n", - " k = a - 1\n", - " n = b + k - 1\n", - "\n", - " pdf= cube[k, n, :].copy()\n", - " pdf /= pdf.sum()\n", - " return pdf" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "93710b0d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 3, 5, 10)" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a, b, k, n" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "f4ef867d", - "metadata": {}, - "outputs": [], - "source": [ - "posterior_cube = get_beta(a + k, b + n - k, cube)" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "860796a2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.allclose(posterior_beta, posterior_cube)" - ] - }, - { - "cell_type": "markdown", - "id": "c41afc17", - "metadata": {}, - "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": null, - "id": "707d9f6f", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "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.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/beta_binomial.ipynb b/examples/beta_binomial.ipynb new file mode 100644 index 00000000..8a664feb --- /dev/null +++ b/examples/beta_binomial.ipynb @@ -0,0 +1,1251 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "89c73067", + "metadata": {}, + "source": [ + "# The All-Knowing Cube of Probability\n", + "\n", + "> This example uses array computations to explore the concept of conjugate distributions.\n", + "It is an extension of *[Think Bayes](https://greenteapress.com/wp/think-bayes/)*, [Chapter 18](https://allendowney.github.io/ThinkBayes2/chap18.html), which explains how to use conjugate priors to do Bayesian updates with very little computation. \n", + "\n", + "The all-knowing cube of probability is an 3-D array that contains the past, the present, and the probabilistic future.\n", + "\n", + "At first, the cube appears to be a collection of binomial PMFs, but if we turn it sideways, we see that it is also a collection of negative binomial PMFs, and if we turn it sideways again, it is also a collection of grid-approximated beta distributions.\n", + "\n", + "This tripartite nature is the source of its uncanny ability to perform Bayesian updates, which I will demonstrate." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f24d9f87", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "4fb82f00", + "metadata": {}, + "source": [ + "## Making the cube\n", + "\n", + "Suppose you run $n$ trials where the probability of success is $p$.\n", + "To compute the probability of $k$ successes, we can use the binomial distribution.\n", + "\n", + "For example, here's a range of values for $k$ and $n$, and a discrete grid of values for $p$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "58f25a33", + "metadata": {}, + "outputs": [], + "source": [ + "ks = np.arange(101)\n", + "ns = np.arange(101)\n", + "ps = np.linspace(0, 1, 101)" + ] + }, + { + "cell_type": "markdown", + "id": "cdcb4bc0", + "metadata": {}, + "source": [ + "We can use `meshgrid` to make a 3-D grid of $k$, $n$, and $p$, and `binom` to evaluate the binomial PMF at each point." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bacdd002", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(101, 101, 101)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.stats import binom\n", + "\n", + "K, N, P = np.meshgrid(ks, ns, ps, indexing='ij')\n", + "cube = binom.pmf(K, N, P)\n", + "cube.shape" + ] + }, + { + "cell_type": "markdown", + "id": "e5bf8bf0", + "metadata": {}, + "source": [ + "The result is the **all-knowing cube of probability**, so-called because it can answer all of our questions about Bernoulli trials.\n", + "Allow me to demonstrate." + ] + }, + { + "cell_type": "markdown", + "id": "7de075fe", + "metadata": {}, + "source": [ + "## The binomial distribution\n", + "\n", + "Suppose we are given $n$ and $p$, and we would like to know the distribution of $k$.\n", + "We can answer that question by selecting a vector from the cube along the $k$ axis." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a5ab6a2c", + "metadata": {}, + "outputs": [], + "source": [ + "n = 50\n", + "p = 50\n", + "pmf_k = cube[:, n, p]" + ] + }, + { + "cell_type": "markdown", + "id": "9374bc05", + "metadata": {}, + "source": [ + "The result is a normalized PMF." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0c728977", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9999999999999996" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pmf_k.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "1ece73cc", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "19a9791b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKfklEQVR4nO3deXhU9d3+8XtmsocskEBCICwqCgiCshWKgjU1WqxGW0TqEqmt9QEUmhYrVsE+LnHDokhF+9R6WaVY+1NUVBQRbS0REFChKOIGCCQhELKSbeb8/kjOJIEASZiZc2bm/bquXJIzZ858zgHMzXd1GIZhCAAAIIw4rS4AAAAg0AhAAAAg7BCAAABA2CEAAQCAsEMAAgAAYYcABAAAwg4BCAAAhB0CEAAACDsEIAAAEHYIQIDFnnnmGTkcDn377bdWl3JMJ1Pjyd7fXXfdJYfD4dNrtldbn2PWU1JS4tfPPl4NdrNhwwaNGzdO8fHxcjgc+vjjj495bmVlpZxOp/74xz8GrkCgDQQgwA/MH1otv3r06KHzzz9fb775ptXlhaW1a9fqrrvu0qFDh6wu5Sh2ru1E6uvrNXnyZB08eFB//OMf9be//U19+/Y95vlbt26VYRgaMmRIAKsEjkYAAvzof//3f/W3v/1Nzz77rG699Vbt379fP/rRj7RixQrvOddee60OHz583B8aVrNbjZ2pZ+3atfrDH/7QoZARqPs+Xm12e/ZH+uqrr7Rz50799re/1Y033qhrrrlGXbt2Peb5W7ZskSQNHTo0UCUCbYqwugAglF188cUaOXKk9/sbbrhBaWlp+vvf/65LLrlEkuRyueRyuawqsV3sVqO/66mqqlJ8fLwt7tsONRxPcXGxJCk5Obld52/ZskWpqalKT0/3Y1XAidECBARQcnKyYmNjFRHR/G+P440z+fLLL3X99dcrOTlZSUlJmjZtmqqrq1tdc/Pmzbr44ouVmJioLl266IILLtCHH37Y6hzzel988YWuueYaJSUlqXv37rrzzjtlGIZ2796tyy67TImJiUpPT9eCBQtavb+tGnfu3Knp06frjDPOUGxsrFJSUjR58uSTGqvywQcfaNSoUYqJidGpp56qJ598ss3zjqynoqJCs2fPVr9+/RQdHa0ePXrohz/8oTZt2uS9/zlz5kiS+vfv7+2W/Pbbb73PZtu2bfrZz36mrl27avz48ce8b1NJSYmuvPJKJSYmKiUlRbNmzVJNTY339euvv179+vU76n1Hjmk6Xm3HqqEjv+ft+TN0LCf6nOuvv14TJkyQJE2ePFkOh0MTJ0487jW3bNmiM888s9WxP//5z4qKitLs2bPldrvbVRtwsmgBAvyorKxMJSUlMgxDxcXFWrRokSorK3XNNde06/1XXnml+vfvr/z8fG3atEn/93//px49euiBBx6QJP33v//Vueeeq8TERN16662KjIzUk08+qYkTJ+r999/XmDFjWl1vypQpGjRokO6//369/vrruueee9StWzc9+eST+sEPfqAHHnhAzz//vH77299q1KhROu+8845Z24YNG7R27VpdddVV6t27t7799ls98cQTmjhxorZt26a4uLgOPastW7bowgsvVPfu3XXXXXepoaFB8+fPV1pa2gnfe9NNN+mf//ynZs6cqcGDB+vAgQP64IMP9Nlnn+mcc87RFVdcoS+++EJ///vf9cc//lGpqamSpO7du3uvMXnyZA0YMED33XefDMM44WdeeeWV6tevn/Lz8/Xhhx/qscceU2lpqZ599tkO3Xd7amupo7/nJ/ozdCzt+Zxf/epX6tWrl+677z7dcsstGjVq1Al/v7Zs2aKpU6dKkhoaGjR79mw99dRTWrx4sX75y1+297EBJ88A4HN//etfDUlHfUVHRxvPPPNMm+d+88033mPz5883JBk///nPW517+eWXGykpKd7vc3JyjKioKOOrr77yHtu7d6+RkJBgnHfeeUdd78Ybb/Qea2hoMHr37m04HA7j/vvv9x4vLS01YmNjjdzc3OPWWF1dfdR9FxQUGJKMZ5999rjvbUtOTo4RExNj7Ny503ts27ZthsvlMo78X9WR10xKSjJmzJhx3Os/9NBDbdZhPpupU6ce9Z7j/d5ceumlrc6dPn26Icn45JNPDMMwjNzcXKNv375HXdN8f3tqa6uGjv6en+jP0LG093PWrFljSDJefPHFE15z7969hiRjyZIlxoEDB4wf/OAHRrdu3Yw1a9ac8L2Ar9EFBvjR4sWLtWrVKq1atUrPPfeczj//fP3iF7/QSy+91K7333TTTa2+P/fcc3XgwAGVl5fL7Xbr7bffVk5Ojk455RTvOT179tTPfvYzffDBByovL2/1/l/84hfeX7tcLo0cOVKGYeiGG27wHk9OTtYZZ5yhr7/++ri1xcbGen9dX1+vAwcO6LTTTlNycrK366m93G633nrrLeXk5KhPnz7e44MGDVJ2dvYJ35+cnKx169Zp7969Hfrclo581icyY8aMVt/ffPPNkqQ33nij0zWcSGd+z4/3Z8iXn9Men376qSTJ4XBo1KhR2rt3r9atW3fCbjPAHwhAgB+NHj1aWVlZysrK0tVXX63XX39dgwcP1syZM1VXV3fC97cMA5K8s2tKS0u1f/9+VVdX64wzzjjqfYMGDZLH49Hu3buPe72kpCTFxMR4u11aHi8tLT1ubYcPH9a8efOUmZmp6Ohopaamqnv37jp06JDKyspOeG8t7d+/X4cPH9aAAQOOeq2t+zvSgw8+qK1btyozM1OjR4/WXXfddcIAd6T+/ft36Pwjaz311FPldDr9ul6PL37PW/4Z8uXntIc5A2zmzJlKS0tTQUGBTjvttA5fB/AFAhAQQE6nU+eff7727dunHTt2nPD8Y83+MdoxRqW91+vsZ9x888269957deWVV+of//iH3n77ba1atUopKSnyeDydqq+zrrzySn399ddatGiRMjIy9NBDD+nMM8/s0JpLLVu0OuPIxRqP/N4U6EG+vv4zdDK2bNmivn376txzz9VXX32lysrKgNcAmAhAQIA1NDRI0kn/z7979+6Ki4vT9u3bj3rt888/l9PpVGZm5kl9xvH885//VG5urhYsWKCf/vSn+uEPf6jx48d3ajG/7t27KzY2ts1Q2Nb9taVnz56aPn26li9frm+++UYpKSm69957va8fK5B01pG1fvnll/J4PN6ZX127dm3zWezcufOoY+2tLVC/5/76nC1btmj48OFatmyZYmJidPnll7eaOQcEEgEICKD6+nq9/fbbioqK0qBBg07qWi6XSxdeeKFeeeWVVt0uRUVFWrp0qcaPH6/ExMSTrPj4n39kK8KiRYs61cLhcrmUnZ2t5cuXa9euXd7jn332md56663jvtftdh/V5dajRw9lZGSotrbWeyw+Pl6SfLba8uLFi1t9v2jRIkmNaz9JjV1iZWVl3nEvkrRv3z69/PLLR12rvbUF6vfcH5/jdrv12WefaejQoerevbteeuklbd26Vf/zP/9z0vUCncE0eMCP3nzzTX3++eeSGheMW7p0qXbs2KHbbrvNJz+o7rnnHq1atUrjx4/X9OnTFRER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f/xDzz//vJYuXaozzzxTH3/8sWbPnq2MjAyec5ihCywAUlNT5XK5jpoVU1RUpPT0dIuqCh0zZ87UihUrtGbNGvXu3dt7PD09XXV1dTp06FCr83nuHbNx40YVFxfrnHPOUUREhCIiIvT+++/rscceU0REhNLS0njOPtCzZ08NHjy41bFBgwZp165dkuR9lvx/5OTMmTNHt912m6666ioNHTpU1157rX79618rPz9fEs/ZX9rzXNPT04+aGNTQ0KCDBw/65dkTgAIgKipKI0aM0OrVq73HPB6PVq9erbFjx1pYWXAzDEMzZ87Uyy+/rHfffVf9+/dv9fqIESMUGRnZ6rlv375du3bt4rl3wAUXXKAtW7bo448/9n6NHDlSV199tffXPOeT9/3vf/+oZRy++OIL9e3bV5LUv39/paent3rO5eXlWrduHc+5A6qrq+V0tv7R53K55PF4JPGc/aU9z3Xs2LE6dOiQNm7c6D3n3Xfflcfj0ZgxY3xflM+HVaNNy5YtM6Kjo41nnnnG2LZtm3HjjTcaycnJRmFhodWlBa3/+Z//MZKSkoz33nvP2Ldvn/erurrae85NN91k9OnTx3j33XeNjz76yBg7dqwxduxYC6sODS1ngRkGz9kX1q9fb0RERBj33nuvsWPHDuP555834uLijOeee857zv33328kJycbr7zyivHpp58al112mdG/f3/j8OHDFlYeXHJzc41evXoZK1asML755hvjpZdeMlJTU41bb73Vew7PuXMqKiqMzZs3G5s3bzYkGY888oixefNmY+fOnYZhtO+5XnTRRcbZZ59trFu3zvjggw+MAQMGGFOnTvVLvQSgAFq0aJHRp08fIyoqyhg9erTx4YcfWl1SUJPU5tdf//pX7zmHDx82pk+fbnTt2tWIi4szLr/8cmPfvn3WFR0ijgxAPGffeO2114whQ4YY0dHRxsCBA42nnnqq1esej8e48847jbS0NCM6Otq44IILjO3bt1tUbXAqLy83Zs2aZfTp08eIiYkxTjnlFOP3v/+9UVtb6z2H59w5a9asafP/ybm5uYZhtO+5HjhwwJg6darRpUsXIzEx0Zg2bZpRUVHhl3odhtFi+UsAAIAwwBggAAAQdghAAAAg7BCAAABA2CEAAQCAsEMAAgAAYYcABAAAwg4BCAAAhB0CEICwMHHiRM2ePdvqMgDYBAEIAACEHQIQAAAIOwQgAGHp9ddfV1JSkp5//nmrSwFggQirCwCAQFu6dKluuukmLV26VJdcconV5QCwAC1AAMLK4sWLNX36dL322muEHyCM0QIEIGz885//VHFxsf7zn/9o1KhRVpcDwEK0AAEIG2effba6d++up59+WoZhWF0OAAsRgACEjVNPPVVr1qzRK6+8optvvtnqcgBYiC4wAGHl9NNP15o1azRx4kRFRERo4cKFVpcEwAIEIABh54wzztC7776riRMnyuVyacGCBVaXBCDAHAYd4QAAIMwwBggAAIQdAhAAAAg7BCAAABB2CEAAACDsEIAAAEDYIQABAICwQwACAABhhwAEAADCDgEIAACEHQIQAAAIOwQgAAAQdghAAAAg7Px/a1ob5qZn8VcAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(ks, pmf_k)\n", + "plt.xlabel('k')\n", + "plt.ylabel('PMF')\n", + "plt.title('Binomial distribution of $k$');" + ] + }, + { + "cell_type": "markdown", + "id": "76d9eefb", + "metadata": {}, + "source": [ + "Because we used `binom` to compute the cube, we should not be surprised to find that this slice from the cube is a binomial PMF.\n", + "But just to make sure, we can use `binom` again to confirm it." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "86a96168", + "metadata": {}, + "outputs": [], + "source": [ + "pmf_binom = binom.pmf(ks, n, p/100)" + ] + }, + { + "cell_type": "markdown", + "id": "c40c6631", + "metadata": {}, + "source": [ + "And we can check that the results are consistent." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "7772b040", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(pmf_k, pmf_binom)" + ] + }, + { + "cell_type": "markdown", + "id": "61ae1c86", + "metadata": {}, + "source": [ + "So we can think of the cube as a collection of binomial PMFs.\n", + "But we can also think of it as a joint distribution of $k$, $n$, and $p$, which raises the question: what do we get if we select a vector along the $n$ and $p$ axes?" + ] + }, + { + "cell_type": "markdown", + "id": "1fe61840", + "metadata": {}, + "source": [ + "## The negative binomial distribution\n", + "\n", + "Suppose we plan to run Bernoulli trials with probability $p$ until we see $k$ successes.\n", + "How many trials will it take?\n", + "\n", + "We can answer this question by selecting a vector from the cube along the $n$ axis." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a23bff39", + "metadata": {}, + "outputs": [], + "source": [ + "k = 25\n", + "p = 50\n", + "pmf_n = cube[k, :, p].copy()" + ] + }, + { + "cell_type": "markdown", + "id": "fcaaf97c", + "metadata": {}, + "source": [ + "The result is close to the answer we want, but there's something we have to fix.\n", + "Remember that the values in the cube come from the binomial PMF, which looks like this.\n", + "\n", + "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", + "\n", + "The first term is the binomial coefficient, which indicates that there are $n$ places we could find $k$ successes.\n", + "But if we keep running trials until we see $k$ successes, we know the last trial will be a success, which means there are only $n-1$ places we could find the other $k-1$ successes.\n", + "\n", + "So we have to adjust the values from the cube by dividing the elements by $n/k$." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4957a477", + "metadata": {}, + "outputs": [], + "source": [ + "np.seterr(divide='ignore', invalid='ignore')\n", + "\n", + "pmf_n /= (ns / k)\n", + "pmf_n[0] = 0" + ] + }, + { + "cell_type": "markdown", + "id": "64a7194a", + "metadata": {}, + "source": [ + "And normalize the results to get a proper PMF." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "58be38fc", + "metadata": {}, + "outputs": [], + "source": [ + "pmf_n /= pmf_n.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "d85e8909", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "ea70deff", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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fj2GDh2K/fv344knnkBsbCzPs5fhEJgThIeHQ6lUtlsVU1RUhOjoaJmq8hzz58/H5s2b8e233yIuLs58PDo6Gk1NTaisrLRoz/Nun71796K4uBijRo2CSqWCSqXCtm3b8Je//AUqlQpRUVE8z90gJiYGQ4YMsTg2ePBg5OfnA4D5XPLnSNcsXLgQTz/9NGbMmIHhw4fj/vvvx69//WtkZWUB4Hl2FFvOa3R0dLuFQS0tLSgvL3fIuWcAcgK1Wo3Ro0cjJyfHfMxoNCInJwepqakyVubehBCYP38+PvnkE3zzzTdISEiwuH/06NHw8fGxOO/Hjx9Hfn4+z7sdbr75Zhw6dAj79+8338aMGYN7773X/Gee56677rrr2m3jcOLECfTu3RsAkJCQgOjoaIvzrNfrsXPnTp5nO9TV1UGhsPzVp1QqYTQaAfA8O4ot5zU1NRWVlZXYu3evuc0333wDo9GIlJSU7i+q26dVk1Uffvih0Gg04p133hFHjhwRDz30kAgJCRE6nU7u0tzWI488IoKDg8XWrVtFYWGh+VZXV2du8/DDD4tevXqJb775RuzZs0ekpqaK1NRUGav2DJevAhOC57k77Nq1S6hUKvHiiy+KkydPivfff1/4+fmJ9957z9xm+fLlIiQkRPz73/8WBw8eFHfeeadISEgQ9fX1MlbuXmbPni169uwpNm/eLM6cOSM+/vhjER4eLp588klzG57nzqmurhb79u0T+/btEwDEn/70J7Fv3z5x7tw5IYRt53XKlCli5MiRYufOnWL79u0iMTFRzJw50yH1MgA50WuvvSZ69eol1Gq1GDdunPj+++/lLsmtAbB6+/vf/25uU19fLx599FERGhoq/Pz8xF133SUKCwvlK9pDXBmAeJ67x2effSaGDRsmNBqNGDRokFi7dq3F/UajUTz77LMiKipKaDQacfPNN4vjx4/LVK170uv1YsGCBaJXr15Cq9WKvn37it/97neisbHR3IbnuXO+/fZbqz+TZ8+eLYSw7byWlZWJmTNnioCAABEUFCTmzJkjqqurHVKvJMRl218SEREReQHOASIiIiKvwwBEREREXocBiIiIiLwOAxARERF5HQYgIiIi8joMQEREROR1GICIiIjI6zAAERERkddhACIiIiKvwwBEREREXkcldwFERM4wefJkjBgxAlqtFm+//TbUajUefvhhLFu2TO7SiEgG7AEiIq+xbt06+Pv7Y+fOnXj55Zfx+9//HtnZ2XKXRUQy4MVQicgrTJ48GQaDAd9995352Lhx43DTTTdh+fLlMlZGRHJgDxAReY0RI0ZYfB0TE4Pi4mKZqiEiOTEAEZHX8PHxsfhakiQYjUaZqiEiOTEAERERkddhACIiIiKvwwBEREREXoerwIiIiMjrsAeIiIiIvA4DEBEREXkdBiAiIiLyOgxARERE5HUYgIiIiMjrMAARERGR12EAIiIiIq/DAERERERehwGIiIiIvA4DEBEREXkdBiAiIiLyOgxARERE5HX+H5JG+o47FSlwAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(ns, pmf_n)\n", + "plt.xlabel('n')\n", + "plt.ylabel('PMF')\n", + "plt.title('Negative binomial distribution of $n$');" + ] + }, + { + "cell_type": "markdown", + "id": "261cc2ed", + "metadata": {}, + "source": [ + "This is a negative binomial distribution, which we can confirm using `scipy.stats.nbinom`." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c80264b5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.9999999094998685" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.stats import nbinom\n", + "\n", + "pmf_nbinom = nbinom.pmf(ns-k, k, p/100)\n", + "pmf_nbinom.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f1edea40", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(pmf_n, pmf_nbinom)" + ] + }, + { + "cell_type": "markdown", + "id": "456a0e2f", + "metadata": {}, + "source": [ + "To see why this works we can compare the binomial PMF, which is a distribution over $k$ with $n$ and $p$ as parameters:\n", + "\n", + "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", + "\n", + "And the negative binomial PMF, which I've written as a distribution over $n$ with $k$ and $p$ as parameters:\n", + "\n", + "$$Pr(n; k, p) = \\binom{n-1}{k-1} p^k (1-p)^{n-k}$$\n", + "\n", + "This is not the most common way to parameterize the negative binomial distribution, but it shows that the only difference is in the binomial coefficient, because we know that the last trial is a success." + ] + }, + { + "cell_type": "markdown", + "id": "60cf707b", + "metadata": {}, + "source": [ + "## The beta distribution\n", + "\n", + "Suppose we have 101 devices that perform Bernoulli trials with different probabilities.\n", + "The first device has $p=0$, the second has $p=0.01$, and so on up to the last device with $p=1$.\n", + "\n", + "Now suppose we choose one of the devices so that all values of $p$ are equally likely.\n", + "If we run $n$ trials and see $k$ successes, what is the distribution of $p$?\n", + "\n", + "We can answer this question by selecting a vector from the cube along the $p$ axis." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ba38e2ee", + "metadata": {}, + "outputs": [], + "source": [ + "k = 25\n", + "n = 50\n", + "\n", + "pdf_p = cube[k, n, :].copy()" + ] + }, + { + "cell_type": "markdown", + "id": "f34bb5f2", + "metadata": {}, + "source": [ + "The result is not normalized." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "0e414602", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.96078431372549" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pdf_p.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "8bc36c8b", + "metadata": {}, + "source": [ + "But we can normalize it like this." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b1a13ea4", + "metadata": {}, + "outputs": [], + "source": [ + "pdf_p /= pdf_p.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "5c7f9c1f", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "d6725de7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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32O059/z1VdfjcOHD9sCJgAcPHgQcXFxDD/NaM91rqmpuSzkSKFT8BjNTiPb56BTp1j7oFWrVgmtVitWrFgh9u7dKx544AERFhYm9Hq9EEKIe+65R8ydO9fW/n//+59Qq9Xib3/7m9i3b59YuHAhl8G3Qluv8wsvvCA0Go345JNPxJkzZ2y3qqoqud6CR2jrdb4UV4G1Tluvc1FRkQgODhazZs0SBw4cEF9++aWIjo4Wzz33nFxvwSO09TovXLhQBAcHi48//lgcPXpUfPvttyI5OVncfvvtcr0Fj1BVVSUKCwtFYWGhACBefvllUVhYKE6cOCGEEGLu3LninnvusbWXlsHPmTNH7Nu3TyxdupTL4D3Vq6++Krp37y40Go0YMWKE2Lp1q+1rY8eOFVOnTrVr/3//93+id+/eQqPRiP79+4uvvvrKxRV7prZc5x49eggAl90WLlzo+sI9TFv/PV+MAaj12nqdt2zZItLT04VWqxVJSUniL3/5izCbzS6u2vO05To3NDSIRYsWieTkZKHT6URCQoKYMWOGOH/+vOsL9yAbN250+PNWurZTp04VY8eOvewxaWlpQqPRiKSkJPHee+85vU6FEOzHIyIiIt/COUBERETkcxiAiIiIyOcwABEREZHPYQAiIiIin8MARERERD6HAYiIiIh8DgMQERER+RwGICIiIvI5DEBERETkcxiAiIiIyOeo5S6AiMgVxo0bhwEDBgAAPvzwQ/j5+eGhhx7CM888A4VCIXN1RORq7AEiIp/x/vvvQ61WY9u2bXjllVfw8ssv4+2335a7LCKSAQ9DJSKfMG7cOJSWlmLPnj22Hp+5c+fiiy++wN69e2WujohcjT1AROQzRo4caTfclZGRgUOHDsFischYFRHJgQGIiIiIfA4DEBH5jB9//NHu71u3bkVKSgpUKpVMFRGRXBiAiMhnFBUVIScnBwcOHMDHH3+MV199FbNnz5a7LCKSAZfBE5HPmDJlCmprazFixAioVCrMnj0bDzzwgNxlEZEMGICIyGf4+flhyZIleOONN+QuhYhkxiEwIiIi8jkMQERERORzuBEiERER+Rz2ABEREZHPYQAiIiIin8MARERERD6HAYiIiIh8DgMQERER+RwGICIiIvI5DEBERETkcxiAiIiIyOcwABEREZHP+X/I2lG2qKtrqgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(ps, pdf_p)\n", + "plt.xlabel('p')\n", + "plt.ylabel('PMF')\n", + "plt.title('Beta distribution of $p$');" + ] + }, + { + "cell_type": "markdown", + "id": "d95ca672", + "metadata": {}, + "source": [ + "This is a beta distribution, which we can confirm by running `scipy.stats.beta` with a change of variables, $a = k+1$ and $b = n-k+1$." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "085631c9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(26, 26)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from scipy.stats import beta\n", + "\n", + "a = k + 1\n", + "b = n - k + 1\n", + "a, b" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "b81b5fab", + "metadata": {}, + "outputs": [], + "source": [ + "pdf_beta = beta.pdf(ps, a, b)\n", + "pdf_beta /= pdf_beta.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "2bbc7562", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(pdf_p, pdf_beta)" + ] + }, + { + "cell_type": "markdown", + "id": "cfda31fb", + "metadata": {}, + "source": [ + "To see why this works, let's compare the PDF of the beta distribution\n", + "\n", + "$$f(p, a, b) = \\frac{1}{B(a, b)} p^{a-1} (1-p)^{b-1} $$\n", + "\n", + "And the PMF of the binomial distribution.\n", + "\n", + "$$Pr(k; n, p) = \\binom{n}{k} p^{k} (1-p)^{n-k}$$\n", + "\n", + "With the change of variables, they are identical except for the first term, which normalizes the distributions." + ] + }, + { + "cell_type": "markdown", + "id": "190d7793", + "metadata": {}, + "source": [ + "## Conjugate priors\n", + "\n", + "This similarity is the reason the beta and binomial are conjugate distributions, which means they are joined together.\n", + "This relationship has a useful property for Bayesian statistics: if the prior distribution of $p$ is beta and the likelihood of the data is binomial, the posterior distribution is also beta.\n", + "\n", + "To see how that works, here is the PDF of the a beta prior distribution with parameters $a$ and $b$.\n", + "\n", + "$$p^{a-1} (1-p)^{b-1}$$\n", + "\n", + "I have omitted the normalizing factor -- we don't need it because we are going to normalize the distribution after the update.\n", + "\n", + "Now suppose we see $k$ successes in $n$ trials.\n", + "The likelihood of this data is given by the binomial distribution, which has this PMF.\n", + "\n", + "$$p^{k} (1-p)^{n-k}$$\n", + "\n", + "Again, I have omitted the normalizing factor.\n", + "Now to get the unnormalized posterior, we multiply the beta prior and the binomial likelihood. The result is\n", + "\n", + "$$p^{a-1+k} (1-p)^{b-1+n-k}$$\n", + "\n", + "which we recognize as an unnormalized beta distribution with parameters $a+k$ and $b+n-k$.\n", + "\n", + "So if we observe $k$ successes in $n$ trials, we can do the update by making a beta posterior with parameters $a+k$ and $b+n-k$.\n", + "\n", + "As an example, suppose the prior is a beta distribution with parameters $a=2$ and $b=3$." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "3c6d91dd", + "metadata": {}, + "outputs": [], + "source": [ + "a = 2\n", + "b = 3\n", + "\n", + "prior = beta.pdf(ps, a, b)" + ] + }, + { + "cell_type": "markdown", + "id": "8e5573f4", + "metadata": {}, + "source": [ + "And suppose we see $k=5$ successes in $n=10$ attempts." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "e915b7a6", + "metadata": {}, + "outputs": [], + "source": [ + "k = 5\n", + "n = 10\n", + "\n", + "like = binom.pmf(k, n, ps)" + ] + }, + { + "cell_type": "markdown", + "id": "641f80cf", + "metadata": {}, + "source": [ + "We can compute the posterior by multiplying the prior and the likelihood, then normalizing the results." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "206ee73f", + "metadata": {}, + "outputs": [], + "source": [ + "posterior = prior * like\n", + "posterior /= posterior.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "899bdd2b", + "metadata": {}, + "source": [ + "Or we can compute a beta distribution with the updated parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "a3e1de63", + "metadata": {}, + "outputs": [], + "source": [ + "posterior_beta = beta.pdf(ps, a+k, b+n-k)\n", + "posterior_beta /= posterior_beta.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "99c746f1", + "metadata": {}, + "source": [ + "The result is the same either way." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "edd20fc0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(posterior, posterior_beta)" + ] + }, + { + "cell_type": "markdown", + "id": "b6106b93", + "metadata": {}, + "source": [ + "But we don't have to compute the posterior by doing an explicit update, or by computing a beta distribution, because the all-knowing cube of probability already knows the answer -- we just have to ask.\n", + "\n", + "The following function takes the parameters $a$ and $b$ and looks up the corresponding beta distribution already computed in the cube." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "d74d2aa4", + "metadata": {}, + "outputs": [], + "source": [ + "def get_beta(a, b, cube):\n", + " k = a - 1\n", + " n = b + k - 1\n", + "\n", + " pdf = cube[k, n, :].copy()\n", + " pdf /= pdf.sum()\n", + " return pdf" + ] + }, + { + "cell_type": "markdown", + "id": "54a38ea4", + "metadata": {}, + "source": [ + "We can use it to get the posterior distribution of $p$ from the cube." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "c7611ca6", + "metadata": {}, + "outputs": [], + "source": [ + "posterior_cube = get_beta(a + k, b + n - k, cube)" + ] + }, + { + "cell_type": "markdown", + "id": "09eec658", + "metadata": {}, + "source": [ + "And confirm that we get the same result." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "b1f1b76f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(posterior_beta, posterior_cube)" + ] + }, + { + "cell_type": "markdown", + "id": "9732d125", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "fd959935", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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X7z77rvFb7/9tkk1N7ZUfdWqVWJoaKhoa2srent7i08//bRYXFxs0mb06NFinz59bnHFTH333Xdir169RKVSKfbu3VvcsmWLOGvWrJsu86+urhb//ve/i/369ROdnJxEBwcHsV+/fuInn3xi8ppr166JDz30kOjq6mqydUDdsvvNmzffUE9jy/z79OkjHjlyRIyKihJVKpXYtWtXcdWqVTe8/uzZs2J0dLSoVCpFb29vccmSJWJiYuIN52ystoaW+YuiKO7cuVMcPny4aGdnJzo7O4v33HOPePLkSZM2dUvq8/PzTY439jVtyKZNm8T+/fuLSqVSdHNzEx9++GHx0qVLDZ6vOcv8T548KT744IOik5OT2KlTJ3HevHkm2wkQtRVBFM1o9h0RERGubzKan58PDw8PqcuhDohzkIiIiIjqYUAiIiIiqocBiYiIiKgezkEiIiIiqoc9SERERET1MCARERER1cONIltIr9fjypUrcHJy4r2BiIiILIQoiigrK4Ofnx9kssb7iRiQWujKlSsICAiQugwiIiJqgezsbHTu3LnR5xmQWqju5p3Z2dlwdnaWuBoiIiJqCrVajYCAgFvehJsBqYXqhtWcnZ0ZkIiIiCzMrabHcJI2ERERUT0MSERERET1MCARERER1cOARERERFQPAxIRERFRPQxIRERERPUwIBERERHVw4BEREREVA8DEhEREVE9DEhERERE9TAgEREREdXDgERERERUDwMSEVmN0ooaVNXopC6DiKyAjdQFEBG1VFG5BgfOFWL/2QIkny3E2fxyAIC3sxJd3OzRxc0BoT5OmDooAC72thJXS0SWRBBFUZS6CEukVqvh4uKC0tJSODs7S10OUYdytbQSS/97Aoknc5vU3lllgydHd8djwwLhoOTvhUQdWVN/fpvFENvq1asRGBgIlUqFyMhIHDp06KbtN2/ejNDQUKhUKoSHh2PHjh0mzy9fvhyhoaFwcHBAp06dEB0djYMHD5q0KSoqwsMPPwxnZ2e4urpizpw5uHbtWqt/NiJqPXq9iK8PXMSd7/9qDEehPk54bFggPn10INKW3omjr9yJrc8Ox0cz+uP5u0IQ4u0IdZUW7/6UiVHv7Mbnv53jMBwR3ZLkPUibNm3CzJkzsXbtWkRGRmLlypXYvHkzMjMz4eXldUP7/fv3Y9SoUYiLi8Pdd9+NjRs3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sjI8+uij+Oyzz+Dh4SF1OVZNr9fDy8sL69atw8CBAzFt2jS89NJLWLt2rdSlWZU9e/bgzTffxCeffILU1FRs2bIFP/74I15//XWpS6PbxB6kduTh4QG5XI7c3FyT47m5ufDx8WnwNT4+Ps1qTy27znXee+89vPXWW9i5cyf69u3blmVaheZe67Nnz+LChQu45557jMf0ej0AwMbGBpmZmejevXvbFm2BWvJ32tfXF7a2tpDL5cZjvXr1Qk5ODjQaDRQKRZvWbIlacp1feeUVPProo/jLX/4CAAgPD0d5eTmeeOIJvPTSS5DJ2A/RGhr7Wejs7NwmvUcAe5DalUKhwMCBA5GUlGQ8ptfrkZSUhKioqAZfExUVZdIeABITExttTy27zgDwzjvv4PXXX0dCQgIGDRrUHqVavOZe69DQUBw7dgxpaWnGx7333ouxY8ciLS0NAQEB7Vm+xWjJ3+nhw4fjzJkzxgAKAKdOnYKvry/DUSNacp0rKipuCEF1oVTkrU5bjSQ/C9ts+jc1KD4+XlQqleL69evFkydPik888YTo6uoq5uTkiKIoio8++qi4aNEiY/t9+/aJNjY24nvvvSemp6eLy5Yt4zL/JmjudX7rrbdEhUIhfvvtt+LVq1eNj7KyMqk+gsVo7rWuj6vYmqa51zkrK0t0cnIS582bJ2ZmZorbt28Xvby8xH/84x9SfQSL0NzrvGzZMtHJyUn897//LZ47d078+eefxe7du4tTp06V6iNYhLKyMvHo0aPi0aNHRQDi+++/Lx49elS8ePGiKIqiuGjRIvHRRx81tq9b5v/3v/9dTE9PF1evXs1l/tbo448/Frt06SIqFApxyJAh4oEDB4zPjR49Wpw1a5ZJ+//85z9iSEiIqFAoxD59+og//vhjO1dsmZpznbt27SoCuOGxbNmy9i/cAjX37/SfMSA1XXOv8/79+8XIyEhRqVSK3bp1E9944w1Rq9W2c9WWpznXuaamRly+fLnYvXt3UaVSiQEBAeIzzzwjFhcXt3/hFmT37t0Nfs+tu7azZs0SR48efcNrIiIiRIVCIXbr1k388ssv27RGQRTZB0hERET0Z5yDRERERFQPAxIRERFRPQxIRERERPUwIBERERHVw4BEREREVA8DEhEREVE9DEhERERE9TAgEREREdXDgERERERUDwMSERERUT02UhdARGQuxowZg7CwMADA119/DVtbWzz99NN47bXXIAiCxNURUXtiDxIR0Z9s2LABNjY2OHToED788EO8//77+Pzzz6Uui4jaGW9WS0RUa8yYMcjLy8OJEyeMPUaLFi3Ctm3bcPLkSYmrI6L2xB4kIqI/GTp0qMlwWlRUFE6fPg2dTidhVUTU3hiQiIiIiOphQCIi+pODBw+a/PnAgQMIDg6GXC6XqCIikgIDEhHRn2RlZSE2NhaZmZn497//jY8//hgLFiyQuiwiamdc5k9E9CczZ85EZWUlhgwZArlcjgULFuCJJ56QuiwiamcMSEREf2Jra4uVK1dizZo1UpdCRBLiEBsRERFRPQxIRERERPVwo0giIiKietiDRERERFQPAxIRERFRPQxIRERERPUwIBERERHVw4BEREREVA8DEhEREVE9DEhERERE9TAgEREREdXDgERERERUz/8DDqyuimb1zK4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(ps, posterior_cube)\n", + "\n", + "plt.xlabel('p')\n", + "plt.ylabel('PMF')\n", + "plt.title('Posterior distribution of p');" + ] + }, + { + "cell_type": "markdown", + "id": "11e2b2a3", + "metadata": {}, + "source": [ + "## Update with nbinom\n", + "\n", + "\n", + "Now suppose that instead of running $n$ trials, we keep running trials until we see $k$ successes -- and suppose it takes $n$ trials.\n", + "\n", + "In this case, we can use the negative binomial distribution to compute the likelihood of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "6b135be5", + "metadata": {}, + "outputs": [], + "source": [ + "like2 = nbinom.pmf(n-k, k, ps)\n", + "like2[0] = 0" + ] + }, + { + "cell_type": "markdown", + "id": "931cd775", + "metadata": {}, + "source": [ + "And we can do the update in the usual way." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "a74f074f", + "metadata": {}, + "outputs": [], + "source": [ + "posterior2 = prior * like2\n", + "posterior2 /= posterior2.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "adfb562c", + "metadata": {}, + "source": [ + "It turns out that the result is the same in both cases:\n", + "\n", + "* If we decide ahead of time to run $n$ trials, and see $k$ successes, or\n", + "\n", + "* If we run until we see $k$ successes, and it takes $n$ trials." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d16e727e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(posterior, posterior2)" + ] + }, + { + "cell_type": "markdown", + "id": "7509811c", + "metadata": {}, + "source": [ + "Bayesian inference only depends on the data, not the stopping condition.\n", + "Or, as my friend Ted Bunn put it: [Who knows what evil lurks in the hearts of men? The Bayesian doesn't care.](https://blog.richmond.edu/physicsbunn/2012/01/05/who-knows-what-evil-lurks-in-the-hearts-of-men-the-bayesian-doesnt-care/)" + ] + }, + { + "cell_type": "markdown", + "id": "30ce208a", + "metadata": {}, + "source": [ + "## Posterior predictive distributions\n", + "\n", + "The all-knowing cube of probability knows what we should believe in the light of new data, but that's not all.\n", + "It also knows the future, at least probabilistically.\n", + "\n", + "After an update, we can get posterior predictive distribution by computing a weighted mixture of binomial distributions with different values of $p$, weighted by the posterior probabilities.\n", + "\n", + "We can do that by selecting the $(k, p)$ plane from the cube, multiplying by the posterior and summing away the $p$ axis." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "a1fb858f", + "metadata": {}, + "outputs": [], + "source": [ + "post_pred_k = (cube[:, n, :] * posterior).sum(axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "7d9998e1", + "metadata": {}, + "source": [ + "The result is a distribution over $k$. Here's what it looks like (dropping values of $k$ greater than $n$)." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "22bfde12", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAHHCAYAAABEEKc/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABCHklEQVR4nO3deVxWZf7/8Teg3KCyiAiImahp7hsokhaWFJo1UZRLNiKaLUqpTE1i5pI1WC5haZkzaTWjo9moLTYU4tKUuEFOX0sdM00LAZcEhQSF8/ujH3feB1BR9AC9no/HecR9netc53PODd7vzrnu+3YyDMMQAAAA7JytLgAAAKC6ISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAHV1Ntvvy0nJycdPHjQ6lKuifKOt2/fvurbt2+V7WPatGlycnKqsvGu1IgRIxQUFOTQ5uTkpGnTpl31fW/cuFFOTk7auHGjva1v377q2LHjVd+3JB08eFBOTk56++23r8n+LldycrK6du0qNzc3OTk56eTJk+X2K/3dOnbs2LUtEFcNAQm1RukLbOni5uamNm3aKC4uTtnZ2VW+v4KCAk2bNs3hBQbW+z0+L8uWLVNSUpLVZZSrOtd2McePH9egQYPk7u6uBQsW6O9//7vq169vdVm4RupYXQBQ1Z5//nm1aNFCZ86c0RdffKE33nhDn3zyiXbt2qV69epV2X4KCgo0ffp0SarSqxyl/vjHP2rIkCGy2WxVPnZN8dlnn1V6mws9L5MnT9bEiROrorSr5pdfflGdOpX7p3nZsmXatWuXxo8ff8nb3HLLLfrll1/k6upayQorp6Lamjdvrl9++UV169a9qvu/Etu3b9epU6c0Y8YMRUREWF0OrjECEmqdAQMGKCQkRJL08MMPq1GjRpo7d64++OADDR061OLqLi4/P1/169eXi4uLXFxcqmzcgoKCKg2Ipc6dO6eSkpKr8kJb1WPWqVOn0uHjWnNzc7uq4585c0aurq5ydna+6vu6kNKrvNVZTk6OJMnb29vaQmAJbrGh1rvtttskSQcOHJD06wv6jBkz1KpVK9lsNgUFBWnSpEkqLCx02G7Hjh2KjIyUr6+v3N3d1aJFC40cOVLSr/MnGjduLEmaPn26/bbe+XNH9uzZo/vvv18+Pj5yc3NTSEiIPvzwQ4d9lN4W3LRpk8aMGSM/Pz9dd911DuvMc5Bef/11dejQQTabTYGBgRo7dmyZeRGlc0nS09N1yy23qF69epo0aVKF52jEiBFq0KCBvv/+e0VGRqp+/foKDAzU888/L8Mw7P1K543Mnj1bSUlJ9nP47bffXvIxS9I333yj2267Te7u7rruuuv0wgsvqKSkpEy/8uYgnTlzRtOmTVObNm3k5uamJk2a6L777tP+/fsv+ryY5yB17NhRt956a5n9lpSUqGnTprr//vsd2pKSktShQwe5ubnJ399fjz76qH7++ecKz+v51qxZo44dO8rNzU0dO3bU6tWry+1n/j06deqUxo8fr6CgINlsNvn5+en2229XRkaG/RytXbtWP/zwg/14S+c1lc4zWr58uSZPnqymTZuqXr16ysvLK3cOUqn09HTddNNN9t/7hQsXOqyv6HfTPOaFaqtoDtL69et18803q379+vL29tY999yj3bt3O/QpfR6/++47jRgxQt7e3vLy8lJsbKwKCgoqfhLOs3LlSgUHB8vd3V2+vr566KGH9NNPP9nX9+3bVzExMZKkHj16yMnJSSNGjLiksUv98MMPuuGGG9SxY8ercpsfV1f1/l8poArs379fktSoUSNJv15Veuedd3T//ffrT3/6k7Zu3arExETt3r3b/qKVk5OjO+64Q40bN9bEiRPl7e2tgwcPatWqVZKkxo0b64033tDjjz+ue++9V/fdd58kqXPnzpJ+DQC9e/dW06ZNNXHiRNWvX1/vvfeeoqKi9K9//Uv33nuvQ41jxoxR48aNNWXKFOXn51d4LNOmTdP06dMVERGhxx9/XHv37tUbb7yh7du368svv3S4XXH8+HENGDBAQ4YM0UMPPSR/f/8Lnqfi4mL1799fvXr10ssvv6zk5GRNnTpV586d0/PPP+/Qd8mSJTpz5oweeeQR2Ww2+fj4XPIxZ2Vl6dZbb9W5c+fs/RYtWiR3d/cLP5H/v8a77rpLqampGjJkiMaNG6dTp04pJSVFu3btUkRExAWfF7PBgwdr2rRpysrKUkBAgL39iy++UGZmpoYMGWJve/TRR/X2228rNjZWTz75pA4cOKD58+frq6++KnPuzT777DNFR0erffv2SkxM1PHjxxUbG2sPwxfy2GOP6f3331dcXJzat2+v48eP64svvtDu3bvVvXt3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97//SVKZybFmlTnm5s2ba9++fWXa9+7de9EaW7Vqpa1bt+rs2bMVToqu7K22Fi1aqGfPnlqxYoXi4uK0atUqRUVFOXz+VKtWrbRu3Tr17t270mGj9Hm73GOWpCZNmmjMmDEaM2aMcnJy1L17d7344ov2gFSVnw6emZlp/6iJUubfg9IrNeZ3T5Z39eVSazv/99tsz5498vX1rZIPaTx/P6XvcC21d+/eMv8GVNasWbNUp04djRkzRh4eHnrwwQevaDxYh1ts+F258847JanMJ/vOnTtX0q/zEKRfL9Gb/y+0a9eukmS/zVb6mULmFwk/Pz/17dtXb775po4cOVKmhqNHj15W7REREXJ1ddWrr77qUNtbb72l3Nxce+1XYv78+fafDcPQ/PnzVbduXfXr1++C21XmmO+8805t2bJF27Ztc1hf0dWZ80VHR+vYsWMOdZ5fr1Tx83IhgwcP1pYtW7R48WIdO3bM4faa9OtVnOLiYs2YMaPMtufOnbvgvpo0aaKuXbvqnXfeUW5urr09JSXF/vEIFSkuLnbYRvr1XAcGBjrc7q1fv36Zfpfr3LlzevPNN+2Pi4qK9Oabb6px48YKDg6WJPu7uT7//HOHWhctWlRmvEut7fzzdP753LVrlz777DP73+6VCgkJkZ+fnxYuXOhwDv/9739r9+7dV/x35OTkpEWLFun+++9XTExMuR9zgZqBK0j4XenSpYtiYmK0aNEinTx5UuHh4dq2bZveeecdRUVF2T8T55133tHrr7+ue++9V61atdKpU6f017/+VZ6envZ/qN3d3dW+fXutWLFCbdq0kY+Pjzp27KiOHTtqwYIF6tOnjzp16qTRo0erZcuWys7OVlpamn788Uf997//rXTtjRs3VkJCgqZPn67+/fvrD3/4g/bu3avXX39dPXr00EMPPXRF58bNzU3JycmKiYlRaGio/v3vf2vt2rWaNGnSJd1CutRj/vOf/6y///3v6t+/v8aNG2d/m3/z5s319ddfX3Afw4cP17vvvqv4+Hht27ZNN998s/Lz87Vu3TqNGTNG99xzzwWfl4oMGjRITz31lJ566in5+PiUuQoWHh6uRx99VImJidq5c6fuuOMO1a1bV/v27dPKlSs1b948h89MMktMTNTAgQPVp08fjRw5UidOnNBrr72mDh066PTp0xVud+rUKV133XW6//771aVLFzVo0EDr1q3T9u3bNWfOHHu/4OBgrVixQvHx8erRo4caNGigu++++4LnsiKBgYF66aWXdPDgQbVp00YrVqzQzp07tWjRIvtVuw4dOqhXr15KSEjQiRMn5OPjo+XLl+vcuXNlxqtMbbNmzdKAAQMUFhamUaNG2d/m7+XlVWXfT1e3bl299NJLio2NVXh4uIYOHWp/m39QUJAmTJhwxftwdnbWP/7xD0VFRWnQoEH65JNPylytQg1g4TvogCp1qW/JPXv2rDF9+nSjRYsWRt26dY1mzZoZCQkJDm9Pz8jIMIYOHWpcf/31hs1mM/z8/Iy77rrL2LFjh8NYmzdvNoKDgw1XV9cyb8/ev3+/MXz4cCMgIMCoW7eu0bRpU+Ouu+4y3n///UuquaK3Us+fP99o27atUbduXcPf3994/PHHjZ9//tmhT3h4uNGhQ4eLnLHfxMTEGPXr1zf2799v3HHHHUa9evUMf39/Y+rUqQ4fKVD61uxZs2aVO86lHLNhGMbXX39thIeHG25ubkbTpk2NGTNmGG+99dZF3+ZvGIZRUFBgPPvss/bnLyAgwLj//vuN/fv32/tU9LyY3+Z/vt69e5f7ERDnW7RokREcHGy4u7sbHh4eRqdOnYw///nPRmZmZoXblPrXv/5ltGvXzrDZbEb79u2NVatWGTExMRd8m39hYaHx9NNPG126dDE8PDyM+vXrG126dDFef/11h21Onz5tPPjgg4a3t7fDRweUvu1+5cqVZeqp6G3+HTp0MHbs2GGEhYUZbm5uRvPmzY358+eX2X7//v1GRESEYbPZDH9/f2PSpElGSkpKmTErqq28t/kbhmGsW7fO6N27t+Hu7m54enoad999t/Htt9869Dn/LfXnq+hvpjwrVqwwunXrZthsNsPHx8cYNmyY8eOPP5Y7XmXf5l+qoKDACA8PNxo0aGBs2bLlomOgenEyDAtnswGoFkaMGKH333//glczAOD3hDlIAAAAJgQkAAAAEwISAACACXOQAAAATLiCBAAAYEJAAgAAMOGDIi9TSUmJMjMz5eHhUaUf8w8AAK4ewzB06tQpBQYGytm54utEBKTLlJmZqWbNmlldBgAAuAyHDx/WddddV+F6AtJl8vDwkPTrCfb09LS4GgAAcCny8vLUrFkz++t4RQhIl6n0tpqnpycBCQCAGuZi02OYpA0AAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACASR2rCwCAqhY0ca3VJejgzIFWlwDgCnAFCQAAwISABAAAYEJAAgAAMCEgAQAAmDBJG8Alqw6TnyUmQAO4+riCBAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYWB6QFixYoKCgILm5uSk0NFTbtm2rsO8333yj6OhoBQUFycnJSUlJSWX6lK4zL2PHjrX36du3b5n1jz322NU4PAAAUANZGpBWrFih+Ph4TZ06VRkZGerSpYsiIyOVk5NTbv+CggK1bNlSM2fOVEBAQLl9tm/friNHjtiXlJQUSdIDDzzg0G/06NEO/V5++eWqPTgAAFBjWRqQ5s6dq9GjRys2Nlbt27fXwoULVa9ePS1evLjc/j169NCsWbM0ZMgQ2Wy2cvs0btxYAQEB9uXjjz9Wq1atFB4e7tCvXr16Dv08PT2r/PgAAEDNZFlAKioqUnp6uiIiIn4rxtlZERERSktLq7J9/OMf/9DIkSPl5OTksG7p0qXy9fVVx44dlZCQoIKCgirZJwAAqPnqWLXjY8eOqbi4WP7+/g7t/v7+2rNnT5XsY82aNTp58qRGjBjh0P7ggw+qefPmCgwM1Ndff61nnnlGe/fu1apVqyocq7CwUIWFhfbHeXl5VVIjAACofiwLSNfCW2+9pQEDBigwMNCh/ZFHHrH/3KlTJzVp0kT9+vXT/v371apVq3LHSkxM1PTp069qvQAAoHqw7Babr6+vXFxclJ2d7dCenZ1d4QTsyvjhhx+0bt06PfzwwxftGxoaKkn67rvvKuyTkJCg3Nxc+3L48OErrhEAAFRPlgUkV1dXBQcHKzU11d5WUlKi1NRUhYWFXfH4S5YskZ+fnwYOHHjRvjt37pQkNWnSpMI+NptNnp6eDgsAAKidLL3FFh8fr5iYGIWEhKhnz55KSkpSfn6+YmNjJUnDhw9X06ZNlZiYKOnXSdfffvut/eeffvpJO3fuVIMGDXTDDTfYxy0pKdGSJUsUExOjOnUcD3H//v1atmyZ7rzzTjVq1Ehff/21JkyYoFtuuUWdO3e+RkcOAACqM0sD0uDBg3X06FFNmTJFWVlZ6tq1q5KTk+0Ttw8dOiRn598ucmVmZqpbt272x7Nnz9bs2bMVHh6ujRs32tvXrVunQ4cOaeTIkWX26erqqnXr1tnDWLNmzRQdHa3JkydfvQMFAAA1ipNhGIbVRdREeXl58vLyUm5uLrfb8LsRNHGt1SVIkg7OvPCt8+pQ58VqBGCNS339tvyrRgAAAKobAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJjUsboAAPi9Cpq41uoSdHDmQKtLAKolriABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAICJ5QFpwYIFCgoKkpubm0JDQ7Vt27YK+37zzTeKjo5WUFCQnJyclJSUVKbPtGnT5OTk5LC0bdvWoc+ZM2c0duxYNWrUSA0aNFB0dLSys7Or+tAAAEANZWlAWrFiheLj4zV16lRlZGSoS5cuioyMVE5OTrn9CwoK1LJlS82cOVMBAQEVjtuhQwcdOXLEvnzxxRcO6ydMmKCPPvpIK1eu1KZNm5SZman77ruvSo8NAADUXJYGpLlz52r06NGKjY1V+/bttXDhQtWrV0+LFy8ut3+PHj00a9YsDRkyRDabrcJx69Spo4CAAPvi6+trX5ebm6u33npLc+fO1W233abg4GAtWbJEmzdv1pYtW6r8GAEAQM1jWUAqKipSenq6IiIifivG2VkRERFKS0u7orH37dunwMBAtWzZUsOGDdOhQ4fs69LT03X27FmH/bZt21bXX3/9Fe8XAADUDpYFpGPHjqm4uFj+/v4O7f7+/srKyrrscUNDQ/X2228rOTlZb7zxhg4cOKCbb75Zp06dkiRlZWXJ1dVV3t7eldpvYWGh8vLyHBYAAFA71bqvGhkwYID9586dOys0NFTNmzfXe++9p1GjRl32uImJiZo+fXpVlAgAAKo5y64g+fr6ysXFpcy7x7Kzsy84AbuyvL291aZNG3333XeSpICAABUVFenkyZOV2m9CQoJyc3Pty+HDh6usRgAAUL1YFpBcXV0VHBys1NRUe1tJSYlSU1MVFhZWZfs5ffq09u/fryZNmkiSgoODVbduXYf97t27V4cOHbrgfm02mzw9PR0WAABQO1l6iy0+Pl4xMTEKCQlRz549lZSUpPz8fMXGxkqShg8frqZNmyoxMVHSrxO7v/32W/vPP/30k3bu3KkGDRrohhtukCQ99dRTuvvuu9W8eXNlZmZq6tSpcnFx0dChQyVJXl5eGjVqlOLj4+Xj4yNPT0898cQTCgsLU69evSw4CwAAoLqxNCANHjxYR48e1ZQpU5SVlaWuXbsqOTnZPnH70KFDcnb+7SJXZmamunXrZn88e/ZszZ49W+Hh4dq4caMk6ccff9TQoUN1/PhxNW7cWH369NGWLVvUuHFj+3avvPKKnJ2dFR0drcLCQkVGRur111+/NgcNAACqPSfDMAyri6iJ8vLy5OXlpdzcXG63oUoETVxrdQk6OHPgBddXhxqlmlHnxWqUak6dQG1yqa/fln/VCAAAQHVDQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJpYHpAULFigoKEhubm4KDQ3Vtm3bKuz7zTffKDo6WkFBQXJyclJSUlKZPomJierRo4c8PDzk5+enqKgo7d2716FP37595eTk5LA89thjVX1oAACghrI0IK1YsULx8fGaOnWqMjIy1KVLF0VGRionJ6fc/gUFBWrZsqVmzpypgICAcvts2rRJY8eO1ZYtW5SSkqKzZ8/qjjvuUH5+vkO/0aNH68iRI/bl5ZdfrvLjAwAANVMdK3c+d+5cjR49WrGxsZKkhQsXau3atVq8eLEmTpxYpn+PHj3Uo0cPSSp3vSQlJyc7PH777bfl5+en9PR03XLLLfb2evXqVRiyAADA75tlV5CKioqUnp6uiIiI34pxdlZERITS0tKqbD+5ubmSJB8fH4f2pUuXytfXVx07dlRCQoIKCgouOE5hYaHy8vIcFgAAUDtZdgXp2LFjKi4ulr+/v0O7v7+/9uzZUyX7KCkp0fjx49W7d2917NjR3v7ggw+qefPmCgwM1Ndff61nnnlGe/fu1apVqyocKzExUdOnT6+SugAAQPVm6S22q23s2LHatWuXvvjiC4f2Rx55xP5zp06d1KRJE/Xr10/79+9Xq1atyh0rISFB8fHx9sd5eXlq1qzZ1SkcAABYyrKA5OvrKxcXF2VnZzu0Z2dnV8ncoLi4OH388cf6/PPPdd11112wb2hoqCTpu+++qzAg2Ww22Wy2K64LAABUf5bNQXJ1dVVwcLBSU1PtbSUlJUpNTVVYWNhlj2sYhuLi4rR69WqtX79eLVq0uOg2O3fulCQ1adLksvcLAABqD0tvscXHxysmJkYhISHq2bOnkpKSlJ+fb39X2/Dhw9W0aVMlJiZK+nVi97fffmv/+aefftLOnTvVoEED3XDDDZJ+va22bNkyffDBB/Lw8FBWVpYkycvLS+7u7tq/f7+WLVumO++8U40aNdLXX3+tCRMm6JZbblHnzp0tOAsAAKC6sTQgDR48WEePHtWUKVOUlZWlrl27Kjk52T5x+9ChQ3J2/u0iV2Zmprp162Z/PHv2bM2ePVvh4eHauHGjJOmNN96Q9OuHQZ5vyZIlGjFihFxdXbVu3Tp7GGvWrJmio6M1efLkq3uwAACgxrB8knZcXJzi4uLKXVcaekoFBQXJMIwLjnex9c2aNdOmTZsqVSMAAPh9sfyrRgAAAKobAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEzqWF0AAKB6C5q41uoSdHDmQKtLwO8MV5AAAABMKhWQpkyZooKCAvvjn3/+ucoLAgAAsFqlAtKLL76o06dP2x83b95c33//fZUXBQAAYKVKBSTDMC74GAAAoDawfA7SggULFBQUJDc3N4WGhmrbtm0V9v3mm28UHR2toKAgOTk5KSkp6bLGPHPmjMaOHatGjRqpQYMGio6OVnZ2dlUeFgAAqMEqFZCcnJx06tQp5eXlKTc3V05OTjp9+rTy8vIclku1YsUKxcfHa+rUqcrIyFCXLl0UGRmpnJyccvsXFBSoZcuWmjlzpgICAi57zAkTJuijjz7SypUrtWnTJmVmZuq+++6rzKkAAAC1WKVvsbVp00YNGzaUj4+PTp8+rW7duqlhw4Zq2LChvL291bBhw0seb+7cuRo9erRiY2PVvn17LVy4UPXq1dPixYvL7d+jRw/NmjVLQ4YMkc1mu6wxc3Nz9dZbb2nu3Lm67bbbFBwcrCVLlmjz5s3asmVLZU4HAACopSr1OUgbNmyosh0XFRUpPT1dCQkJ9jZnZ2dFREQoLS3tqo2Znp6us2fPKiIiwt6nbdu2uv7665WWlqZevXqVO3ZhYaEKCwvtjytzpQwAANQslQpI4eHhVbbjY8eOqbi4WP7+/g7t/v7+2rNnz1UbMysrS66urvL29i7TJysrq8KxExMTNX369MuqCwAA1CyWT9KuKRISEpSbm2tfDh8+bHVJAADgKqnUFSQXF5dL6ldcXHzRPr6+vnJxcSnz7rHs7OwKJ2BXxZgBAQEqKirSyZMnHa4iXWy/NputwnlPAACgdqlUQDIMQ82bN1dMTIy6det2RTt2dXVVcHCwUlNTFRUVJUkqKSlRamqq4uLirtqYwcHBqlu3rlJTUxUdHS1J2rt3rw4dOqSwsLArOiYAAFA7VCogbdu2TW+99ZbmzZunFi1aaOTIkRo2bFil3rl2vvj4eMXExCgkJEQ9e/ZUUlKS8vPzFRsbK0kaPny4mjZtqsTEREm/TsL+9ttv7T//9NNP2rlzpxo0aKAbbrjhksb08vLSqFGjFB8fLx8fH3l6euqJJ55QWFhYhRO0AQDA70ulAlJISIhCQkL0yiuv6P3339eSJUv0zDPP6O6779aoUaN0++23V2rngwcP1tGjRzVlyhRlZWWpa9euSk5Otk+yPnTokJydf5smlZmZ6XDlavbs2Zo9e7bCw8O1cePGSxpTkl555RU5OzsrOjpahYWFioyM1Ouvv16p2gEAQO3lZFzh94UcOHBAo0aN0qZNm3T06FH5+PhUVW3VWl5enry8vJSbmytPT0+ry0EtEDRxrdUl6ODMgRdcXx1qlGpGnRerUaLOyriUOoFLcamv35W6gnS+H3/8UW+//bbefvttFRQU6OmnnyYoAACAWqFSAamoqEirV6/WW2+9pf/85z8aMGCAkpKSNGDAgEt+hxsAAEB1V6mA1KRJE3l4eCgmJkavv/66/Pz8JEn5+fkO/biSBAAAarJKBaSff/5ZP//8s2bMmKEXXnihzHrDMOTk5HRJn4MEAABQXVn2XWwAAADVVaUCUp8+fTR79mx9+OGHKioqUr9+/TR16lS5u7tfrfoAAACuuUp9F9tf/vIXTZo0SQ0aNFDTpk01b948jR079mrVBgAAYIlKBaR3331Xr7/+uj799FOtWbNGH330kZYuXaqSkpKrVR8AAMA1V6lbbIcOHdKdd95pfxwRESEnJydlZmbquuuuq/LigKrAh9wBACqrUleQzp07Jzc3N4e2unXr6uzZs1VaFAAAgJUqdQXJMAyNGDFCNpvN3nbmzBk99thjql+/vr1t1apVVVchAADANVapgBQTE1Om7aGHHqqyYgAAAKqDSgWkJUuWXK06AAAAqo1KzUECAAD4PSAgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwKRaBKQFCxYoKChIbm5uCg0N1bZt2y7Yf+XKlWrbtq3c3NzUqVMnffLJJw7rnZycyl1mzZpl7xMUFFRm/cyZM6/K8QEAgJrF8oC0YsUKxcfHa+rUqcrIyFCXLl0UGRmpnJyccvtv3rxZQ4cO1ahRo/TVV18pKipKUVFR2rVrl73PkSNHHJbFixfLyclJ0dHRDmM9//zzDv2eeOKJq3qsAACgZrA8IM2dO1ejR49WbGys2rdvr4ULF6pevXpavHhxuf3nzZun/v376+mnn1a7du00Y8YMde/eXfPnz7f3CQgIcFg++OAD3XrrrWrZsqXDWB4eHg796tevf1WPFQAA1AyWBqSioiKlp6crIiLC3ubs7KyIiAilpaWVu01aWppDf0mKjIyssH92drbWrl2rUaNGlVk3c+ZMNWrUSN26ddOsWbN07ty5CmstLCxUXl6ewwIAAGqnOlbu/NixYyouLpa/v79Du7+/v/bs2VPuNllZWeX2z8rKKrf/O++8Iw8PD913330O7U8++aS6d+8uHx8fbd68WQkJCTpy5Ijmzp1b7jiJiYmaPn36pR4aAACowSwNSNfC4sWLNWzYMLm5uTm0x8fH23/u3LmzXF1d9eijjyoxMVE2m63MOAkJCQ7b5OXlqVmzZlevcAAAYBlLA5Kvr69cXFyUnZ3t0J6dna2AgIBytwkICLjk/v/5z3+0d+9erVix4qK1hIaG6ty5czp48KBuvPHGMuttNlu5wQkAANQ+ls5BcnV1VXBwsFJTU+1tJSUlSk1NVVhYWLnbhIWFOfSXpJSUlHL7v/XWWwoODlaXLl0uWsvOnTvl7OwsPz+/Sh4FAACobSy/xRYfH6+YmBiFhISoZ8+eSkpKUn5+vmJjYyVJw4cPV9OmTZWYmChJGjdunMLDwzVnzhwNHDhQy5cv144dO7Ro0SKHcfPy8rRy5UrNmTOnzD7T0tK0detW3XrrrfLw8FBaWpomTJighx56SA0bNrz6Bw0AAKo1ywPS4MGDdfToUU2ZMkVZWVnq2rWrkpOT7ROxDx06JGfn3y503XTTTVq2bJkmT56sSZMmqXXr1lqzZo06duzoMO7y5ctlGIaGDh1aZp82m03Lly/XtGnTVFhYqBYtWmjChAkOc4wAAMDvl+UBSZLi4uIUFxdX7rqNGzeWaXvggQf0wAMPXHDMRx55RI888ki567p3764tW7ZUuk4AAPD7YPkHRQIAAFQ3BCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJjUsboAAACuVNDEtVaXIEk6OHOg1SWginAFCQAAwISABAAAYEJAAgAAMCEgAQAAmFSLgLRgwQIFBQXJzc1NoaGh2rZt2wX7r1y5Um3btpWbm5s6deqkTz75xGH9iBEj5OTk5LD079/foc+JEyc0bNgweXp6ytvbW6NGjdLp06er/NgAAEDNY3lAWrFiheLj4zV16lRlZGSoS5cuioyMVE5OTrn9N2/erKFDh2rUqFH66quvFBUVpaioKO3atcuhX//+/XXkyBH78s9//tNh/bBhw/TNN98oJSVFH3/8sT7//HM98sgjV+04AQBAzWF5QJo7d65Gjx6t2NhYtW/fXgsXLlS9evW0ePHicvvPmzdP/fv319NPP6127dppxowZ6t69u+bPn+/Qz2azKSAgwL40bNjQvm737t1KTk7W3/72N4WGhqpPnz567bXXtHz5cmVmZl7V4wUAANWfpQGpqKhI6enpioiIsLc5OzsrIiJCaWlp5W6Tlpbm0F+SIiMjy/TfuHGj/Pz8dOONN+rxxx/X8ePHHcbw9vZWSEiIvS0iIkLOzs7aunVrufstLCxUXl6ewwIAAGonSwPSsWPHVFxcLH9/f4d2f39/ZWVllbtNVlbWRfv3799f7777rlJTU/XSSy9p06ZNGjBggIqLi+1j+Pn5OYxRp04d+fj4VLjfxMREeXl52ZdmzZpV+ngBAEDNUCs/SXvIkCH2nzt16qTOnTurVatW2rhxo/r163dZYyYkJCg+Pt7+OC8vj5AEAEAtZekVJF9fX7m4uCg7O9uhPTs7WwEBAeVuExAQUKn+ktSyZUv5+vrqu+++s49hngR+7tw5nThxosJxbDabPD09HRYAAFA7WRqQXF1dFRwcrNTUVHtbSUmJUlNTFRYWVu42YWFhDv0lKSUlpcL+kvTjjz/q+PHjatKkiX2MkydPKj093d5n/fr1KikpUWho6JUcEgAAqAUsfxdbfHy8/vrXv+qdd97R7t279fjjjys/P1+xsbGSpOHDhyshIcHef9y4cUpOTtacOXO0Z88eTZs2TTt27FBcXJwk6fTp03r66ae1ZcsWHTx4UKmpqbrnnnt0ww03KDIyUpLUrl079e/fX6NHj9a2bdv05ZdfKi4uTkOGDFFgYOC1PwkAAKBasXwO0uDBg3X06FFNmTJFWVlZ6tq1q5KTk+0TsQ8dOiRn599y3E033aRly5Zp8uTJmjRpklq3bq01a9aoY8eOkiQXFxd9/fXXeuedd3Ty5EkFBgbqjjvu0IwZM2Sz2ezjLF26VHFxcerXr5+cnZ0VHR2tV1999doePAAAqJYsD0iSFBcXZ78CZLZx48YybQ888IAeeOCBcvu7u7vr008/veg+fXx8tGzZskrVCQAAfh8sv8UGAABQ3RCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAm1eK72FAzBU1ca3UJOjhzoNUlAABqIa4gAQAAmBCQAAAATAhIAAAAJgQkAAAAEwISAACACQEJAADAhIAEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMKkWAWnBggUKCgqSm5ubQkNDtW3btgv2X7lypdq2bSs3Nzd16tRJn3zyiX3d2bNn9cwzz6hTp06qX7++AgMDNXz4cGVmZjqMERQUJCcnJ4dl5syZV+X4AABAzWJ5QFqxYoXi4+M1depUZWRkqEuXLoqMjFROTk65/Tdv3qyhQ4dq1KhR+uqrrxQVFaWoqCjt2rVLklRQUKCMjAw999xzysjI0KpVq7R371794Q9/KDPW888/ryNHjtiXJ5544qoeKwAAqBksD0hz587V6NGjFRsbq/bt22vhwoWqV6+eFi9eXG7/efPmqX///nr66afVrl07zZgxQ927d9f8+fMlSV5eXkpJSdGgQYN04403qlevXpo/f77S09N16NAhh7E8PDwUEBBgX+rXr3/VjxcAAFR/lgakoqIipaenKyIiwt7m7OysiIgIpaWllbtNWlqaQ39JioyMrLC/JOXm5srJyUne3t4O7TNnzlSjRo3UrVs3zZo1S+fOnbv8gwEAALVGHSt3fuzYMRUXF8vf39+h3d/fX3v27Cl3m6ysrHL7Z2Vlldv/zJkzeuaZZzR06FB5enra25988kl1795dPj4+2rx5sxISEnTkyBHNnTu33HEKCwtVWFhof5yXl3dJxwgAAGoeSwPS1Xb27FkNGjRIhmHojTfecFgXHx9v/7lz585ydXXVo48+qsTERNlstjJjJSYmavr06Ve9ZgAAYD1Lb7H5+vrKxcVF2dnZDu3Z2dkKCAgod5uAgIBL6l8ajn744QelpKQ4XD0qT2hoqM6dO6eDBw+Wuz4hIUG5ubn25fDhwxc5OgAAUFNZGpBcXV0VHBys1NRUe1tJSYlSU1MVFhZW7jZhYWEO/SUpJSXFoX9pONq3b5/WrVunRo0aXbSWnTt3ytnZWX5+fuWut9ls8vT0dFgAAEDtZPkttvj4eMXExCgkJEQ9e/ZUUlKS8vPzFRsbK0kaPny4mjZtqsTEREnSuHHjFB4erjlz5mjgwIFavny5duzYoUWLFkn6NRzdf//9ysjI0Mcff6zi4mL7/CQfHx+5uroqLS1NW7du1a233ioPDw+lpaVpwoQJeuihh9SwYUNrTgQAAKg2LA9IgwcP1tGjRzVlyhRlZWWpa9euSk5Otk/EPnTokJydf7vQddNNN2nZsmWaPHmyJk2apNatW2vNmjXq2LGjJOmnn37Shx9+KEnq2rWrw742bNigvn37ymazafny5Zo2bZoKCwvVokULTZgwwWFeEgAA+P2yPCBJUlxcnOLi4spdt3HjxjJtDzzwgB544IFy+wcFBckwjAvur3v37tqyZUul6wQAAL8Pln9QJAAAQHVDQAIAADCpFrfYAAD4PQiauNbqEnRw5kCrS6gRuIIEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABMCEgAAgAkBCQAAwISABAAAYEJAAgAAMCEgAQAAmNSxugCUFTRxrdUlSJIOzhxodQkAAFiCK0gAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEwISAAAACYEJAAAABO+agQAADioDl95ZfXXXXEFCQAAwISABAAAYFItAtKCBQsUFBQkNzc3hYaGatu2bRfsv3LlSrVt21Zubm7q1KmTPvnkE4f1hmFoypQpatKkidzd3RUREaF9+/Y59Dlx4oSGDRsmT09PeXt7a9SoUTp9+nSVHxsAAKh5LA9IK1asUHx8vKZOnaqMjAx16dJFkZGRysnJKbf/5s2bNXToUI0aNUpfffWVoqKiFBUVpV27dtn7vPzyy3r11Ve1cOFCbd26VfXr11dkZKTOnDlj7zNs2DB98803SklJ0ccff6zPP/9cjzzyyFU/XgAAUP1ZHpDmzp2r0aNHKzY2Vu3bt9fChQtVr149LV68uNz+8+bNU//+/fX000+rXbt2mjFjhrp376758+dL+vXqUVJSkiZPnqx77rlHnTt31rvvvqvMzEytWbNGkrR7924lJyfrb3/7m0JDQ9WnTx+99tprWr58uTIzM6/VoQMAgGrK0oBUVFSk9PR0RURE2NucnZ0VERGhtLS0crdJS0tz6C9JkZGR9v4HDhxQVlaWQx8vLy+Fhoba+6Slpcnb21shISH2PhEREXJ2dtbWrVur7PgAAEDNZOnb/I8dO6bi4mL5+/s7tPv7+2vPnj3lbpOVlVVu/6ysLPv60rYL9fHz83NYX6dOHfn4+Nj7mBUWFqqwsND+ODc3V5KUl5d3wWO8HCWFBVU+5uW42LFVhzov5fxT56WrCc+5VDPqrC3PuVQz6qwONUo1o87a8pxf6biGYVywH5+DdIkSExM1ffr0Mu3NmjWzoJprwyvJ6gouribUKFFnVasJddaEGiXqrGo1oc6aUKN09es8deqUvLy8KlxvaUDy9fWVi4uLsrOzHdqzs7MVEBBQ7jYBAQEX7F/63+zsbDVp0sShT9euXe19zJPAz507pxMnTlS434SEBMXHx9sfl5SU6MSJE2rUqJGcnJwu4Wivnby8PDVr1kyHDx+Wp6en1eXUeJzPqsO5rFqcz6rDuaxa1fl8GoahU6dOKTAw8IL9LA1Irq6uCg4OVmpqqqKioiT9GjxSU1MVFxdX7jZhYWFKTU3V+PHj7W0pKSkKCwuTJLVo0UIBAQFKTU21B6K8vDxt3bpVjz/+uH2MkydPKj09XcHBwZKk9evXq6SkRKGhoeXu12azyWazObR5e3tf5pFfG56entXuF7Mm43xWHc5l1eJ8Vh3OZdWqrufzQleOSll+iy0+Pl4xMTEKCQlRz549lZSUpPz8fMXGxkqShg8frqZNmyoxMVGSNG7cOIWHh2vOnDkaOHCgli9frh07dmjRokWSJCcnJ40fP14vvPCCWrdurRYtWui5555TYGCgPYS1a9dO/fv31+jRo7Vw4UKdPXtWcXFxGjJkyEUTJQAAqP0sD0iDBw/W0aNHNWXKFGVlZalr165KTk62T7I+dOiQnJ1/e7PdTTfdpGXLlmny5MmaNGmSWrdurTVr1qhjx472Pn/+85+Vn5+vRx55RCdPnlSfPn2UnJwsNzc3e5+lS5cqLi5O/fr1k7Ozs6Kjo/Xqq69euwMHAADVlpNxsWncqHEKCwuVmJiohISEMrcFUXmcz6rDuaxanM+qw7msWrXhfBKQAAAATCz/JG0AAIDqhoAEAABgQkACAAAwISABAACYEJBqoQULFigoKEhubm4KDQ3Vtm3brC6pxklMTFSPHj3k4eEhPz8/RUVFae/evVaXVSvMnDnT/nlluDw//fSTHnroITVq1Eju7u7q1KmTduzYYXVZNVJxcbGee+45tWjRQu7u7mrVqpVmzJhx0e/pgvT555/r7rvvVmBgoJycnLRmzRqH9YZhaMqUKWrSpInc3d0VERGhffv2WVPsZSAg1TIrVqxQfHy8pk6dqoyMDHXp0kWRkZFlvloFF7Zp0yaNHTtWW7ZsUUpKis6ePas77rhD+fn5VpdWo23fvl1vvvmmOnfubHUpNdbPP/+s3r17q27duvr3v/+tb7/9VnPmzFHDhg2tLq1Geumll/TGG29o/vz52r17t1566SW9/PLLeu2116wurdrLz89Xly5dtGDBgnLXv/zyy3r11Ve1cOFCbd26VfXr11dkZKTOnDlzjSu9TAZqlZ49expjx461Py4uLjYCAwONxMREC6uq+XJycgxJxqZNm6wupcY6deqU0bp1ayMlJcUIDw83xo0bZ3VJNdIzzzxj9OnTx+oyao2BAwcaI0eOdGi77777jGHDhllUUc0kyVi9erX9cUlJiREQEGDMmjXL3nby5EnDZrMZ//znPy2osPK4glSLFBUVKT09XREREfY2Z2dnRUREKC0tzcLKar7c3FxJko+Pj8WV1Fxjx47VwIEDHX4/UXkffvihQkJC9MADD8jPz0/dunXTX//6V6vLqrFuuukmpaam6n//+58k6b///a+++OILDRgwwOLKarYDBw4oKyvL4e/dy8tLoaGhNeb1yPKvGkHVOXbsmIqLi+1f01LK399fe/bssaiqmq+kpETjx49X7969Hb7SBpdu+fLlysjI0Pbt260upcb7/vvv9cYbbyg+Pl6TJk3S9u3b9eSTT8rV1VUxMTFWl1fjTJw4UXl5eWrbtq1cXFxUXFysF198UcOGDbO6tBotKytLksp9PSpdV90RkICLGDt2rHbt2qUvvvjC6lJqpMOHD2vcuHFKSUlx+D5EXJ6SkhKFhIToL3/5iySpW7du2rVrlxYuXEhAugzvvfeeli5dqmXLlqlDhw7auXOnxo8fr8DAQM7n7xy32GoRX19fubi4KDs726E9OztbAQEBFlVVs8XFxenjjz/Whg0bdN1111ldTo2Unp6unJwcde/eXXXq1FGdOnW0adMmvfrqq6pTp46Ki4utLrFGadKkidq3b+/Q1q5dOx06dMiiimq2p59+WhMnTtSQIUPUqVMn/fGPf9SECROUmJhodWk1WulrTk1+PSIg1SKurq4KDg5Wamqqva2kpESpqakKCwuzsLKaxzAMxcXFafXq1Vq/fr1atGhhdUk1Vr9+/fR///d/2rlzp30JCQnRsGHDtHPnTrm4uFhdYo3Su3fvMh858b///U/Nmze3qKKaraCgQM7Oji+FLi4uKikpsaii2qFFixYKCAhweD3Ky8vT1q1ba8zrEbfYapn4+HjFxMQoJCREPXv2VFJSkvLz8xUbG2t1aTXK2LFjtWzZMn3wwQfy8PCw3zP38vKSu7u7xdXVLB4eHmXmbtWvX1+NGjViTtdlmDBhgm666Sb95S9/0aBBg7Rt2zYtWrRIixYtsrq0Gunuu+/Wiy++qOuvv14dOnTQV199pblz52rkyJFWl1btnT59Wt9995398YEDB7Rz5075+Pjo+uuv1/jx4/XCCy+odevWatGihZ577jkFBgYqKirKuqIrw+q30aHqvfbaa8b1119vuLq6Gj179jS2bNlidUk1jqRylyVLllhdWq3A2/yvzEcffWR07NjRsNlsRtu2bY1FixZZXVKNlZeXZ4wbN864/vrrDTc3N6Nly5bGs88+axQWFlpdWrW3YcOGcv+djImJMQzj17f6P/fcc4a/v79hs9mMfv36GXv37rW26EpwMgw+LhQAAOB8zEECAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQA/1/fvn01fvx4q8sAUA0QkAAAAEwISAAAACYEJACowNq1a+Xl5aWlS5daXQqAa6yO1QUAQHW0bNkyPfbYY1q2bJnuuusuq8sBcI1xBQkATBYsWKAxY8boo48+IhwBv1NcQQKA87z//vvKycnRl19+qR49elhdDgCLcAUJAM7TrVs3NW7cWIsXL5ZhGFaXA8AiBCQAOE+rVq20YcMGffDBB3riiSesLgeARbjFBgAmbdq00YYNG9S3b1/VqVNHSUlJVpcE4BojIAFAOW688UatX79effv2lYuLi+bMmWN1SQCuISeDm+wAAAAOmIMEAABgQkACAAAwISABAACYEJAAAABMCEgAAAAmBCQAAAATAhIAAIAJAQkAAMCEgAQAAGBCQAIAADAhIAEAAJgQkAAAAEz+H07lB8XZuMUPAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.bar(ks[:n+1], post_pred_k[:n+1])\n", + "\n", + "plt.xlabel('k')\n", + "plt.ylabel('PMF')\n", + "plt.title('Posterior predictive distribution of k');" + ] + }, + { + "cell_type": "markdown", + "id": "c941a2cf", + "metadata": {}, + "source": [ + "A beta mixture of binomials is a beta-binomial distribution, and it has a PMF we can compute analytically." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "578e47ac", + "metadata": {}, + "outputs": [], + "source": [ + "from scipy.stats import betabinom\n", + "\n", + "post_pred_bb = betabinom.pmf(ks, n, a+k, b+n-k)" + ] + }, + { + "cell_type": "markdown", + "id": "24c67390", + "metadata": {}, + "source": [ + "So we can confirm that the all-knowing cube was correct." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "f799f7b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(post_pred_k, post_pred_bb)" + ] + }, + { + "cell_type": "markdown", + "id": "9f69bbc1", + "metadata": {}, + "source": [ + "## The other posterior predictive\n", + "\n", + "We can also use the cube to compute the posterior predictive distribution of $n$ given a required number of successes, $k$.\n", + "\n", + "We start by selecting the $(n, p)$ plane from the cube, which is a collection of negative binomials distributions, except that we have to correct them by dividing through by $n/k$, as we did above.\n", + "\n", + "Actually, we only have to divide by $n$ because $k$ is a constant that will get normalized away." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "b841fa39", + "metadata": {}, + "outputs": [], + "source": [ + "plane = cube[k, :, :] / ns[:, None]\n", + "plane[0] = 0" + ] + }, + { + "cell_type": "markdown", + "id": "f8c8bcbe", + "metadata": {}, + "source": [ + "Now we can compute a weighted sum as in the previous example, multiplying by the posterior and summing away the $p$ axis." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "07b4ea99", + "metadata": {}, + "outputs": [], + "source": [ + "post_pred_n = (plane * posterior).sum(axis=1)\n", + "post_pred_n /= post_pred_n.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "1c1fb4c2", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "ecc53a89", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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+98BAFdffTX279+P5cuXIzk5Webo1OPjjz/GRx99hFWrVqF3797Yt28fZsyYgcjISJ5nL8MhMDcIDQ2FTqerNysmJycHERERMkWlHtOmTcMXX3yBLVu2oEOHDtL2iIgIWK1WFBQUOLXneW+ezMxM5Obm4pprroFer4der8e2bdvw5ptvQq/XIzw8nOfZBdq3b49evXo5bevZsydOnjwJANK55N8jV2bmzJmYNWsWxo8fj759++L+++/HX/7yF6SmpgLgeW4tTTmvERER9SYGVVVV4fz5861y7pkAuYHRaMSAAQOQnp4ubbPb7UhPT0d8fLyMkSmbEALTpk3D+vXr8c0336BTp05Ozw8YMAAGg8HpvB86dAgnT57keW+GG2+8Eb/88gv27dsnPQYOHIiJEydKX/M8X7nhw4fXW8bh999/R0xMDACgU6dOiIiIcDrPRUVF2LFjB89zM5SVlUGrdb706XQ62O12ADzPraUp5zU+Ph4FBQXIzMyU2nzzzTew2+0YMmSI64NyeVk1NWj16tXCZDKJlStXigMHDohHHnlEBAcHi+zsbLlDU6zHH39cBAUFia1bt4qzZ89Kj7KyMqnNY489Jjp27Ci++eYbsXv3bhEfHy/i4+NljFod6s4CE4Ln2RV27twp9Hq9eOmll8Thw4fFRx99JHx9fcW///1vqc3LL78sgoODxX//+1/x888/i9tvv1106tRJlJeXyxi5siQnJ4uoqCjxxRdfiGPHjol169aJ0NBQ8cwzz0hteJ5bpri4WOzdu1fs3btXABCvv/662Lt3rzhx4oQQomnndfTo0eLqq68WO3bsEN9//73o2rWrmDBhQqvEywTIjZYsWSI6duwojEajGDx4sNi+fbvcISkagAYf77//vtSmvLxcTJkyRbRp00b4+vqKO+64Q5w9e1a+oFXi4gSI59k1Pv/8c9GnTx9hMplEjx49xIoVK5yet9vt4vnnnxfh4eHCZDKJG2+8URw6dEimaJWpqKhITJ8+XXTs2FGYzWbRuXNn8eyzzwqLxSK14XlumS1btjT4d3JycrIQomnn9dy5c2LChAnC399fBAYGismTJ4vi4uJWiVcjRJ3lL4mIiIi8AGuAiIiIyOswASIiIiKvwwSIiIiIvA4TICIiIvI6TICIiIjI6zABIiIiIq/DBIiIiIi8DhMgIiIi8jpMgIiIiMjrMAEiIiIir6OXOwAiIncYOXIk+vXrB7PZjH/84x8wGo147LHHMH/+fLlDIyIZsAeIiLzGBx98AD8/P+zYsQOvvPIKXnzxRaSlpckdFhHJgDdDJSKvMHLkSNhsNnz33XfStsGDB+OGG27Ayy+/LGNkRCQH9gARkdfo16+f0/ft27dHbm6uTNEQkZyYABGR1zAYDE7fazQa2O12maIhIjkxASIiIiKvwwSIiIiIvA4TICIiIvI6nAVGREREXoc9QEREROR1mAARERGR12ECRERERF6HCRARERF5HSZARERE5HWYABEREZHXYQJEREREXocJEBEREXkdJkBERETkdZgAERERkddhAkRERERehwkQEREReZ3/D1/ExzxNYOCFAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(ns, post_pred_n)\n", + "\n", + "plt.xlabel('n')\n", + "plt.ylabel('PMF')\n", + "plt.title('Posterior predictive distribution of n');" + ] + }, + { + "cell_type": "markdown", + "id": "eee755c8", + "metadata": {}, + "source": [ + "A beta-weighted mixture of negative binomials is a beta-negative binomial distribution, and it has a PMF we can compute analytically.\n", + "SciPy doesn't have a function to do it, but we can write our own using functions in `scipy.special`." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "a809f9c5", + "metadata": {}, + "outputs": [], + "source": [ + "import scipy.special as sps\n", + "\n", + "def betanegbinom_pmf(n, r, a, b):\n", + " \"\"\"Compute the PMF of the beta-negative binomial distribution.\n", + " \n", + " Generated by ChatGPT, revised based on\n", + " https://en.wikipedia.org/wiki/Beta_negative_binomial_distribution\n", + "\n", + " Parameters:\n", + " - n: Number of trials before stopping.\n", + " - r: Number of successes required.\n", + " - a: Shape parameter of the beta distribution.\n", + " - b: Shape parameter of the beta distribution.\n", + "\n", + " Returns:\n", + " - PMF value for the given parameters.\n", + " \"\"\"\n", + " k = n - r\n", + " binomial_coefficient = sps.comb(r + k - 1, k)\n", + " beta_num = sps.beta(a + r, b + k)\n", + " beta_den = sps.beta(a, b)\n", + "\n", + " pmf = binomial_coefficient * (beta_num / beta_den)\n", + " return pmf" + ] + }, + { + "cell_type": "markdown", + "id": "6b2edd2f", + "metadata": {}, + "source": [ + "The conventional parameterization of the beta-negative binomial uses $k$ for the number of failures and $r$ for the number of required successes, so we have to change some variables to get a distribution over $n$. " + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "b95c23eb", + "metadata": {}, + "outputs": [], + "source": [ + "post_pred_bnb = betanegbinom_pmf(ns, k, a+k, b+n-k)\n", + "post_pred_bnb /= post_pred_bnb.sum()" + ] + }, + { + "cell_type": "markdown", + "id": "4cb5368c", + "metadata": {}, + "source": [ + "But we can confirm that the result from the cube is consistent with the analytic PMF." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "4afe58dc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.allclose(post_pred_n, post_pred_bnb)" + ] + }, + { + "cell_type": "markdown", + "id": "4c27c68d", + "metadata": {}, + "source": [ + "In conclusion, the all-knowing cube of probability contains the past (the prior distributions), the present (the posterior distributions), and the future (the posterior predictive distributions)." + ] + }, + { + "cell_type": "markdown", + "id": "002acd95", + "metadata": {}, + "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": null, + "id": "bb266f18", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}