{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MCMC" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:57.828409Z", "iopub.status.busy": "2021-04-16T19:40:57.827951Z", "iopub.status.idle": "2021-04-16T19:40:57.830329Z", "shell.execute_reply": "2021-04-16T19:40:57.829814Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# If we're running on Colab, install libraries\n", "\n", "import sys\n", "IN_COLAB = 'google.colab' in sys.modules\n", "\n", "if IN_COLAB:\n", " !pip install empiricaldist" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:57.835008Z", "iopub.status.busy": "2021-04-16T19:40:57.833918Z", "iopub.status.idle": "2021-04-16T19:40:57.836443Z", "shell.execute_reply": "2021-04-16T19:40:57.837069Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Get utils.py\n", "\n", "from os.path import basename, exists\n", "\n", "def download(url):\n", " filename = basename(url)\n", " if not exists(filename):\n", " from urllib.request import urlretrieve\n", " local, _ = urlretrieve(url, filename)\n", " print('Downloaded ' + local)\n", " \n", "download('https://github.com/AllenDowney/ThinkBayes2/raw/master/soln/utils.py')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:57.842270Z", "iopub.status.busy": "2021-04-16T19:40:57.841230Z", "iopub.status.idle": "2021-04-16T19:40:58.518519Z", "shell.execute_reply": "2021-04-16T19:40:58.517820Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from utils import set_pyplot_params\n", "set_pyplot_params()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For most of this book we've been using grid methods to approximate posterior distributions.\n", "For models with one or two parameters, grid algorithms are fast and the results are precise enough for most practical purposes.\n", "With three parameters, they start to be slow, and with more than three they are usually not practical.\n", "\n", "In the previous chapter we saw that we can solve some problems using conjugate priors.\n", "But the problems we can solve this way tend to be the same ones we can solve with grid algorithms.\n", "\n", "For problems with more than a few parameters, the most powerful tool we have is MCMC, which stands for \"Markov chain Monte Carlo\".\n", "In this context, \"Monte Carlo\" refers to methods that generate random samples from a distribution.\n", "Unlike grid methods, MCMC methods don't try to compute the posterior distribution; they sample from it instead.\n", "\n", "It might seem strange that you can generate a sample without ever computing the distribution, but that's the magic of MCMC.\n", "\n", "To demonstrate, we'll start by solving the World Cup problem.\n", "Yes, again.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The World Cup Problem\n", "\n", "In <<_PoissonProcesses>> we modeled goal scoring in football (soccer) as a Poisson process characterized by a goal-scoring rate, denoted $\\lambda$.\n", "\n", "We used a gamma distribution to represent the prior distribution of $\\lambda$, then we used the outcome of the game to compute the posterior distribution for both teams.\n", "\n", "To answer the first question, we used the posterior distributions to compute the \"probability of superiority\" for France.\n", "\n", "To answer the second question, we computed the posterior predictive distributions for each team, that is, the distribution of goals we expect in a rematch.\n", "\n", "In this chapter we'll solve this problem again using PyMC3, which is a library that provide implementations of several MCMC methods.\n", "But we'll start by reviewing the grid approximation of the prior and the prior predictive distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Grid Approximation\n", "\n", "As we did in <<_TheGammaDistribution>> we'll use a gamma distribution with parameter $\\alpha=1.4$ to represent the prior." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.522840Z", "iopub.status.busy": "2021-04-16T19:40:58.522336Z", "iopub.status.idle": "2021-04-16T19:40:58.524833Z", "shell.execute_reply": "2021-04-16T19:40:58.524280Z" } }, "outputs": [], "source": [ "from scipy.stats import gamma\n", "\n", "alpha = 1.4\n", "prior_dist = gamma(alpha)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll use `linspace` to generate possible values for $\\lambda$, and `pmf_from_dist` to compute a discrete approximation of the prior." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.530316Z", "iopub.status.busy": "2021-04-16T19:40:58.529152Z", "iopub.status.idle": "2021-04-16T19:40:58.536917Z", "shell.execute_reply": "2021-04-16T19:40:58.537517Z" } }, "outputs": [], "source": [ "import numpy as np\n", "from utils import pmf_from_dist\n", "\n", "lams = np.linspace(0, 10, 101)\n", "prior_pmf = pmf_from_dist(prior_dist, lams)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the Poisson distribution to compute the likelihood of the data; as an example, we'll use 4 goals." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.542627Z", "iopub.status.busy": "2021-04-16T19:40:58.541642Z", "iopub.status.idle": "2021-04-16T19:40:58.544536Z", "shell.execute_reply": "2021-04-16T19:40:58.543934Z" } }, "outputs": [], "source": [ "from scipy.stats import poisson\n", "\n", "data = 4\n", "likelihood = poisson.pmf(data, lams)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can do the update in the usual way." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.551782Z", "iopub.status.busy": "2021-04-16T19:40:58.551285Z", "iopub.status.idle": "2021-04-16T19:40:58.553598Z", "shell.execute_reply": "2021-04-16T19:40:58.553975Z" } }, "outputs": [ { "data": { "text/plain": [ "0.05015532557804499" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "posterior = prior_pmf * likelihood\n", "posterior.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Soon we will solve the same problem with PyMC3, but first it will be useful to introduce something new: the prior predictive distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prior Predictive Distribution\n", "\n", "We have seen the posterior predictive distribution in previous chapters; the prior predictive distribution is similar except that (as you might have guessed) it is based on the prior.\n", "\n", "To estimate the prior predictive distribution, we'll start by drawing a sample from the prior." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.557520Z", "iopub.status.busy": "2021-04-16T19:40:58.556939Z", "iopub.status.idle": "2021-04-16T19:40:58.559446Z", "shell.execute_reply": "2021-04-16T19:40:58.558925Z" } }, "outputs": [], "source": [ "sample_prior = prior_dist.rvs(1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is an array of possible values for the goal-scoring rate, $\\lambda$.\n", "For each value in `sample_prior`, I'll generate one value from a Poisson distribution." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.563762Z", "iopub.status.busy": "2021-04-16T19:40:58.563104Z", "iopub.status.idle": "2021-04-16T19:40:58.566161Z", "shell.execute_reply": "2021-04-16T19:40:58.565628Z" } }, "outputs": [], "source": [ "from scipy.stats import poisson\n", "\n", "sample_prior_pred = poisson.rvs(sample_prior)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sample_prior_pred` is a sample from the prior predictive distribution.\n", "To see what it looks like, we'll compute the PMF of the sample." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.571692Z", "iopub.status.busy": "2021-04-16T19:40:58.570985Z", "iopub.status.idle": "2021-04-16T19:40:58.573549Z", "shell.execute_reply": "2021-04-16T19:40:58.572993Z" } }, "outputs": [], "source": [ "from empiricaldist import Pmf\n", "\n", "pmf_prior_pred = Pmf.from_seq(sample_prior_pred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.577871Z", "iopub.status.busy": "2021-04-16T19:40:58.577249Z", "iopub.status.idle": "2021-04-16T19:40:58.774734Z", "shell.execute_reply": "2021-04-16T19:40:58.774256Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from utils import decorate\n", "\n", "pmf_prior_pred.bar()\n", "decorate(xlabel='Number of goals',\n", " ylabel='PMF',\n", " title='Prior Predictive Distribution')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One reason to compute the prior predictive distribution is to check whether our model of the system seems reasonable.\n", "In this case, the distribution of goals seems consistent with what we know about World Cup football.\n", "\n", "But in this chapter we have another reason: computing the prior predictive distribution is a first step toward using MCMC." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducing PyMC3\n", "\n", "PyMC3 is a Python library that provides several MCMC methods.\n", "To use PyMC3, we have to specify a model of the process that generates the data.\n", "In this example, the model has two steps:\n", "\n", "* First we draw a goal-scoring rate from the prior distribution,\n", "\n", "* Then we draw a number of goals from a Poisson distribution.\n", "\n", "Here's how we specify this model in PyMC3:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:40:58.778444Z", "iopub.status.busy": "2021-04-16T19:40:58.777838Z", "iopub.status.idle": "2021-04-16T19:41:00.953859Z", "shell.execute_reply": "2021-04-16T19:41:00.954208Z" } }, "outputs": [], "source": [ "import pymc3 as pm\n", "\n", "with pm.Model() as model:\n", " lam = pm.Gamma('lam', alpha=1.4, beta=1.0)\n", " goals = pm.Poisson('goals', lam)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After importing `pymc3`, we create a `Model` object named `model`.\n", "\n", "If you are not familiar with the `with` statement in Python, it is a way to associate a block of statements with an object.\n", "In this example, the two indented statements are associated with the new `Model` object. As a result, when we create the distribution objects, `Gamma` and `Poisson`, they are added to the `Model`.\n", "\n", "Inside the `with` statement:\n", "\n", "* The first line creates the prior, which is a gamma distribution with the given parameters.\n", "\n", "* The second line creates the prior predictive, which is a Poisson distribution with the parameter `lam`.\n", "\n", "The first parameter of `Gamma` and `Poisson` is a string variable name." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "PyMC3 provides a function that generates a visual representation of the model." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:00.957698Z", "iopub.status.busy": "2021-04-16T19:41:00.957214Z", "iopub.status.idle": "2021-04-16T19:41:01.379401Z", "shell.execute_reply": "2021-04-16T19:41:01.379760Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "lam\n", "\n", "lam\n", "~\n", "Gamma\n", "\n", "\n", "\n", "goals\n", "\n", "goals\n", "~\n", "Poisson\n", "\n", "\n", "\n", "lam->goals\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pm.model_to_graphviz(model)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "In this visualization, the ovals show that `lam` is drawn from a gamma distribution and `goals` is drawn from a Poisson distribution.\n", "The arrow shows that the values of `lam` are used as parameters for the distribution of `goals`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling the Prior\n", "\n", "PyMC3 provides a function that generates samples from the prior and prior predictive distributions.\n", "We can use a `with` statement to run this function in the context of the model." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.385816Z", "iopub.status.busy": "2021-04-16T19:41:01.385296Z", "iopub.status.idle": "2021-04-16T19:41:01.391249Z", "shell.execute_reply": "2021-04-16T19:41:01.390881Z" } }, "outputs": [], "source": [ "with model:\n", " trace = pm.sample_prior_predictive(1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a dictionary-like object that maps from the variables, `lam` and `goals`, to the samples.\n", "We can extract the sample of `lam` like this:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.394627Z", "iopub.status.busy": "2021-04-16T19:41:01.394223Z", "iopub.status.idle": "2021-04-16T19:41:01.398265Z", "shell.execute_reply": "2021-04-16T19:41:01.397755Z" } }, "outputs": [ { "data": { "text/plain": [ "(1000,)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_prior_pymc = trace['lam']\n", "sample_prior_pymc.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure compares the CDF of this sample to the CDF of the sample we generated using the `gamma` object from SciPy." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.401875Z", "iopub.status.busy": "2021-04-16T19:41:01.401445Z", "iopub.status.idle": "2021-04-16T19:41:01.403133Z", "shell.execute_reply": "2021-04-16T19:41:01.403491Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from empiricaldist import Cdf\n", "\n", "def plot_cdf(sample, **options):\n", " \"\"\"Plot the CDF of a sample.\n", " \n", " sample: sequence of quantities\n", " \"\"\"\n", " Cdf.from_seq(sample).plot(**options)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.407672Z", "iopub.status.busy": "2021-04-16T19:41:01.407023Z", "iopub.status.idle": "2021-04-16T19:41:01.777287Z", "shell.execute_reply": "2021-04-16T19:41:01.776638Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_cdf(sample_prior, \n", " label='SciPy sample',\n", " color='C5')\n", "plot_cdf(sample_prior_pymc, \n", " label='PyMC3 sample',\n", " color='C0')\n", "decorate(xlabel=r'Goals per game ($\\lambda$)',\n", " ylabel='CDF',\n", " title='Prior distribution')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are similar, which confirms that the specification of the model is correct and the sampler works as advertised.\n", "\n", "From the trace we can also extract `goals`, which is a sample from the prior predictive distribution." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.781338Z", "iopub.status.busy": "2021-04-16T19:41:01.780658Z", "iopub.status.idle": "2021-04-16T19:41:01.783489Z", "shell.execute_reply": "2021-04-16T19:41:01.783901Z" } }, "outputs": [ { "data": { "text/plain": [ "(1000,)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_prior_pred_pymc = trace['goals']\n", "sample_prior_pred_pymc.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can compare it to the sample we generated using the `poisson` object from SciPy.\n", "\n", "Because the quantities in the posterior predictive distribution are discrete (number of goals) I'll plot the CDFs as step functions." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.787812Z", "iopub.status.busy": "2021-04-16T19:41:01.787094Z", "iopub.status.idle": "2021-04-16T19:41:01.791170Z", "shell.execute_reply": "2021-04-16T19:41:01.791710Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "def plot_pred(sample, **options):\n", " Cdf.from_seq(sample).step(**options)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:01.822726Z", "iopub.status.busy": "2021-04-16T19:41:01.820731Z", "iopub.status.idle": "2021-04-16T19:41:01.989979Z", "shell.execute_reply": "2021-04-16T19:41:01.989620Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnLklEQVR4nO3deXhV5bn+8e9NCEMdUJmsoARnQQQ1oNYJxaMoKurPFrXOWmtPtWpbPagHa61Ue4k9HuuAVK1yCopa61SsHi0RJ2SwFAFFEVGiFEGrIjLz/P7YKzk7m5CAZrNWyP25Li72Gva7nizCvvOutfK+igjMzMyyplnaBZiZmdXGAWVmZpnkgDIzs0xyQJmZWSY5oMzMLJMcUGZmlkkOKMsESV9K2jHtOuojqa+kyrzlGZL6fo12DpY0qyFrS+vYkp6WdFby+mxJLzVg29+X9GxDtWeNiwPKikLSXElLk+BZIOkPkjZf1/4RsXlEzGmgY18raWVy7M8kvSLpgIZou1BEdI+IivWoKSTtnPe+FyNit4auJ+9rX5z8eVvSbZK+vaHHTtr6Y337RcTREXF/A9Relpyn5nltj4qII79p29Y4OaCsmI6LiM2BfYDewH8W7pD/YfR11PH+Mcmx2wMvAY9KUi3vL/kmx8+oMRGxBbANcCKwLTAlP6QagnL8GWJF428uK7qI+BB4GtgTqnsTP5b0DvBO3rqdk9dtJI2UtFDS+5L+s+qDMLmE9LKk/5L0KXBtPcdeCdxP7kO6raT7JN0paaykJcBhkraT9KfkeO9J+knV+yW1Tt7zL0kzyQUtedvnSjoieV0i6SpJ7ya9lymStpc0Ptn9H0mvblD+pUJJgyU9UtDuf0u6Ne983CNpvqQPJV2/PsEaESsjYgYwCFgI/Cxpr/Ay5X8k7S6WNEtSP0n9gauAQUnN/0j2rZA0VNLLwFfAjsm682uWr99J+lzSW5L61Xa+kuX8XlrVefosOeYBhZcMJX1H0qSk7UmSvpO3rULSr5Lvj8WSnpXUrr7zZNnlgLKik7Q9cAzw97zVJwD7Ad1qecvvgDbAjsChwJnAOXnb9wPmAB2AofUcuyVwNlAZEYuS1acl79sCeAV4EvgH0AnoB1wq6ahk318AOyV/jgLOquNwPwVOTb7WLYFzga8i4pBke8/kUuaYgvc9ABwjacuk5hLge8DoZPv9wCpgZ2Bv4EjgfNZTRKwGHgcOLtwmaTfgIqB30us6CpgbEX8Ffk3SE42InnlvOwO4gNz5e7+WQ1b9+7Qjd/4elbTNepRadZ62So75akGt2wB/AW4F2gK/Bf4iqW3ebqeR+17pALQAfr4ex7WMckBZMT0m6TNyl9heIPeBV+WGiPg0IpbmvyH5cB4EXBkRiyNiLnAzuQ/FKh9FxO8iYlXh+/N8Lzn2PGBfcoFY5fGIeDki1gA9gPYRcV1ErEjug/0eOKWqHWBoUus8ch+O63I+8J8RMSty/hERn9SxPwAR8T7wel6Nh5MLtgmSOgJHA5dGxJKI+Bj4r7z61tdH5C75FVoNtAS6SSqNiLkR8W49bd0XETOS87+ylu0fA7ckPbgxwCxgwAbWW5sBwDsR8T/JsR8A3gKOy9vnDxHxdvJ98RDQqwGOayn5Rtf/zepxQkQ8t45t89axvh25n3zzfzJ/n1zvpr735nsoIk5fj2N3AbZLwqxKCfBi8nq7gv1r6zFU2R6o78N9XUaT632NJNcLqOo9dQFKgfl5t9CasX7nIF8n4NPClRExW9Kl5C6Vdpf0DPDTiPiojrbqO/aHUXMU6vfJncdvajvWPv+F3xv/zHv9FbDOB3Ms+9yDsrSsaxj9RcBKch/MVXYAPlyP936dY88D3ouIrfL+bBERxyTb55MLnvxa1mUeuUuBX8fDQF9Jnck92FAVUPOA5UC7vPq2jIju69twcv/uOP4vdGuIiNERcRC5cx7Ab6o2raPJ+s5/p4IHUnYg14MDWAJ8K2/bthvQ7kfU/L6oavvDWva1TYADyjIluV/yEDBU0haSupC7t1Pv485f00Tgi+RBgdbJgw57Sqp6GOIh4EpJWyfhcXEdbd0N/ErSLsrZK+/+yAJy99RqFRELgQrgD+QC881k/XzgWeBmSVtKaiZpJ0mH1veFSSqVtAe5e1zbkrtnU7jPbpIOT+7VLQOWkrvsV1VzmTb8Sb0OwE+S438X2AMYm2ybCpySbCsHTs5730JgDes+T2OBXSWdJqm5pEHk7mE+tYH1WSPhgLIsupjcT9pzyN2/Gg3cW4wDJYF4HLl7Fe+R68HdTe4hDYBfkruM9B65oPifOpr7LblAexb4ArgHaJ1suxa4X7nfy/reOt4/GjiC/+s9VTmT3GXPmcC/gEeAuh4ZHyTpS+Az4AngE2DfdVy2awncSO7r/ie5cLkq2fZw8vcnkl6v43iFXgN2SdocCpycdy9uCLle5r/IndvqrzUivkr2fzk5T/vnN5q0cSy5pxE/Aa4Ajs17+MU2MfKEhWZmlkXuQZmZWSY5oMzMLJMcUGZmlkkOKDMzy6RG94u67dq1i7KysrTLMDOzBjJlypRFEdG+cH2jC6iysjImT56cdhlmZtZAJNU6Qosv8ZmZWSY5oMzMLJMcUGZmlkmN7h5UbVauXEllZSXLli1LuxRbD61ataJz586UlpamXYqZZdgmEVCVlZVsscUWlJWVobVn9bYMiQg++eQTKisr6dq1a9rlmFmGFe0Sn6R7JX0safo6tkvSrZJmS5omaZ+ve6xly5bRtm1bh1MjIIm2bdu6t2tm9SrmPaj7gP51bD+a3IjHu5CbPvrOb3Iwh1Pj4X8rM1sfRbvEFxHjJZXVsctAYGQy8+YESVtJ+nYy/42ZmWXcd356QvXrV377WIO3n+Y9qE7UnDq6Mlm3VkBJuoBcL4sddqhrQtP0DB06lNGjR1NSUkKzZs2466672G+//Wrdd/LkyYwcOZJbb72V++67j8svv5xOnTqxYsUKLrvsMn7wgx9s5OrrN3fuXI499limT6/1iq1ZUc2bN4+5c+eyevXq+nduAl6cPYXnZ01gxeqVaZdSVGkGVG3XeWqdnCoiRgAjAMrLyzM3gdWrr77KU089xeuvv07Lli1ZtGgRK1asWOf+5eXllJeXVy8PGjSI2267jY8//pju3btz/PHH07Fjx41RulmjkJVwairBsKFaNm9RlHbTDKhKYPu85c5AbTN+Zt78+fNp164dLVu2BKBdu3bV2yZNmsQll1zCkiVLaNmyJc8//zxTpkxh2LBhPPVUzZmqO3TowE477cT777/PQQcdxCuvvEL79u1Zs2YNu+66KxMmTKjR9gsvvMAll1wC5O7rjB8/HkkMHDiQf/3rX6xcuZLrr7+egQMHMnfuXPr3789BBx3EhAkT6NmzJ+eccw6/+MUv+Pjjjxk1ahR9+vTh2muv5d133+XDDz9k3rx5XHHFFWv16FavXs3gwYOpqKhg+fLl/PjHP+aHP/xhsU6vpSgrPRcHQ3a1bN6C0w4ZWJS20wyoJ4CLJD0I7Ad83hD3nyoqKr5pE+vUt2/fWtcfeeSRXHfddey6664cccQRDBo0iEMPPZQVK1YwaNAgxowZQ+/evfniiy9o3bp1rW0AzJkzhzlz5rDzzjtz+umnM2rUKC699FKee+45evbsWSOcAIYNG8btt9/OgQceyJdffkmrVq0A+POf/8yWW27JokWL2H///Tn++OMBmD17Ng8//DAjRoygd+/ejB49mpdeeoknnniCX//61zz22GMATJs2jQkTJrBkyRL23ntvBgwYUOO499xzD23atGHSpEksX76cAw88kCOPPNKPjW+CshBOQHU4SWKbbbZJu5xMaFXaktMOGciJ+x+VdilFU7SAkvQA0BdoJ6kS+AVQChARw4GxwDHAbOAr4Jxi1VJsm2++OVOmTOHFF19k3LhxDBo0iBtvvJF9992Xb3/72/Tu3RuALbfcstb3jxkzhpdeeomWLVty1113sc0223DuuecycOBALr30Uu69917OOWft03PggQfy05/+lO9///ucdNJJdO7cmZUrV3LVVVcxfvx4mjVrxocffsiCBQsA6Nq1Kz169ACge/fu9OvXD0n06NGDuXPnVrc7cOBAWrduTevWrTnssMOYOHEivXr1qt7+7LPPMm3aNB555BEAPv/8c9555x0H1CaoYtbEzPRcJNG69bfSLqNJBENWFPMpvlPr2R7Aj4t1/I2tpKSEvn370rdvX3r06MH999/PPvvss16PVFfdg8q3/fbb07FjR/72t7/x2muvMWrUqLXeN3jwYAYMGMDYsWPZf//9ee6555gwYQILFy5kypQplJaWUlZWVv07R1WXIAGaNWtWvdysWTNWrVpVva2w5sLliOB3v/sdRx3l/6Cbuvxwatu2bcrV5MLh4SvuSLsM20g2iZEk8q3rMlwxzZo1i2bNmrHLLrsAMHXqVLp06cLuu+/ORx99xKRJk+jduzeLFy+u8xJfofPPP5/TTz+dM844g5KSkrW2v/vuu/To0YMePXrw6quv8tZbb/H555/ToUMHSktLGTduHO+/X+so9nV6/PHHufLKK1myZAkVFRXceOONNR76OOqoo7jzzjs5/PDDKS0t5e2336ZTp05sttlmG3wsy7Ys9JyqVPVcrOnY5AIqDV9++SUXX3wxn332Gc2bN2fnnXdmxIgRtGjRgjFjxnDxxRezdOlSWrduzXPPPbfe7R5//PGcc845tV7eA7jlllsYN24cJSUldOvWjaOPPprFixdz3HHHUV5eTq9evdh99903+Ovp06cPAwYM4IMPPmDIkCFst912NS4Bnn/++cydO5d99tmHiKB9+/bV96+sYWTl4YR8T159T9olWBOj3JW2xqO8vDwKJyx888032WOPPVKqqHgmT57MZZddxosvvrjRjnnttdey+eab8/Of/7yox9lU/80aytB7/4v/ffOVzPRgJPHyzX9OuwzbREmaEhHlhevdg8qoG2+8kTvvvLPWe0+26ctaOG215VZpl2FNkAMqowYPHszgwYM3+nGvvfbajX5MW1t+OKX9cILv/VhaHFBmGed7P9ZUeUZdMzPLJAeUmZllki/xmeX584RnGD3+cZatXJ52KWZNnntQDaSkpIRevXqx55578t3vfpevvvpqnfvOnTsXSQwZMqR63aJFiygtLeWiiy6qXjdy5Ej23HNPunfvTrdu3Rg2bBgAQ4YMYa+99qJXr14ceeSRfPRR+mPslpWVsWjRorTL+MayFk4tSkrTLsEsNQ6oBtK6dWumTp3K9OnTadGiBcOHD69z/x133LHGaOYPP/ww3bt3r15++umnueWWW3j22WeZMWMGr7/+Om3atAHg8ssvZ9q0aUydOpVjjz2W6667rjhfVBOUtXDqt9v+aZdhlhpf4iuCgw8+mGnTpjFkyBDatWtXPSXG1VdfTceOHTn++ONp3bo1e+yxB5MnT6a8vJwxY8bwve99r7o3dMMNNzBs2DC22247AFq1alU97UX+oLNLliypdby/+fPnM2jQIL744gtWrVrFnXfeycEHH8yPfvQjJk2axNKlSzn55JP55S9/CeR6QKeddhrjxo1j5cqVjBgxgiuvvJLZs2dz+eWXc+GFF1JRUcE111xD27ZtmTVrFocccgh33HEHzZrV/Dnnj3/8I7feeisrVqxgv/3244477qh1qKasS/PpuWKOym/WWGxyAXXc0POK1vb6fGCtWrWKp59+mv79+3P00Udz0kkncckll7BmzRoefPBBJk6cyOLFiwE45ZRTePDBB9l2220pKSlhu+22qw6o6dOns++++67zOFdffTUjR46kTZs2jBs3bq3to0eP5qijjuLqq69m9erV1Zcchw4dyjbbbMPq1avp168f06ZNY6+99gJyA9S++uqrXHbZZZx99tm8/PLLLFu2jO7du3PhhRcCMHHiRGbOnEmXLl3o378/jz76KCeffHL1cd98803GjBnDyy+/TGlpKf/+7//OqFGj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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_pred(sample_prior_pred, \n", " label='SciPy sample', \n", " color='C5')\n", "plot_pred(sample_prior_pred_pymc, \n", " label='PyMC3 sample', \n", " color='C13')\n", "decorate(xlabel='Number of goals',\n", " ylabel='PMF',\n", " title='Prior Predictive Distribution')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the results are similar, so we have some confidence we are using PyMC3 right." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When Do We Get to Inference?\n", "\n", "Finally, we are ready for actual inference. We just have to make one small change.\n", "Here is the model we used to generate the prior predictive distribution:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:02.063426Z", "iopub.status.busy": "2021-04-16T19:41:02.027745Z", "iopub.status.idle": "2021-04-16T19:41:02.188439Z", "shell.execute_reply": "2021-04-16T19:41:02.188864Z" } }, "outputs": [], "source": [ "with pm.Model() as model:\n", " lam = pm.Gamma('lam', alpha=1.4, beta=1.0)\n", " goals = pm.Poisson('goals', lam)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here is the model we'll use to compute the posterior distribution." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:02.242432Z", "iopub.status.busy": "2021-04-16T19:41:02.206543Z", "iopub.status.idle": "2021-04-16T19:41:02.796228Z", "shell.execute_reply": "2021-04-16T19:41:02.796642Z" } }, "outputs": [], "source": [ "with pm.Model() as model2:\n", " lam = pm.Gamma('lam', alpha=1.4, beta=1.0)\n", " goals = pm.Poisson('goals', lam, observed=4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The difference is that we mark goals as `observed` and provide the observed data, `4`.\n", "\n", "And instead of calling `sample_prior_predictive`, we'll call `sample`, which is understood to sample from the posterior distribution of `lam`." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:02.802159Z", "iopub.status.busy": "2021-04-16T19:41:02.801689Z", "iopub.status.idle": "2021-04-16T19:41:05.675467Z", "shell.execute_reply": "2021-04-16T19:41:05.675832Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [lam]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3000/3000 00:01<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 500 draw iterations (2_000 + 1_000 draws total) took 1 seconds.\n" ] } ], "source": [ "options = dict(return_inferencedata=False)\n", "\n", "with model2:\n", " trace2 = pm.sample(500, **options)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although the specification of these models is similar, the sampling process is very different.\n", "I won't go into the details of how PyMC3 works, but here are a few things you should be aware of:\n", "\n", "* Depending on the model, PyMC3 uses one of several MCMC methods; in this example, it uses the [No U-Turn Sampler](https://en.wikipedia.org/wiki/Hamiltonian_Monte_Carlo#No_U-Turn_Sampler) (NUTS), which is one of the most efficient and reliable methods we have.\n", "\n", "* When the sampler starts, the first values it generates are usually not a representative sample from the posterior distribution, so these values are discarded. This process is called \"tuning\".\n", "\n", "* Instead of using a single Markov chain, PyMC3 uses multiple chains. Then we can compare results from multiple chains to make sure they are consistent.\n", "\n", "Although we asked for a sample of 500, PyMC3 generated two samples of 1000, discarded half of each, and returned the remaining 1000.\n", "From `trace2` we can extract a sample from the posterior distribution, like this:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:05.679251Z", "iopub.status.busy": "2021-04-16T19:41:05.678795Z", "iopub.status.idle": "2021-04-16T19:41:05.680963Z", "shell.execute_reply": "2021-04-16T19:41:05.680587Z" } }, "outputs": [], "source": [ "sample_post_pymc = trace2['lam']" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:05.684868Z", "iopub.status.busy": "2021-04-16T19:41:05.684026Z", "iopub.status.idle": "2021-04-16T19:41:05.687100Z", "shell.execute_reply": "2021-04-16T19:41:05.687569Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "(1000,)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_post_pymc.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can compare the CDF of this sample to the posterior we computed by grid approximation:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:05.714538Z", "iopub.status.busy": "2021-04-16T19:41:05.698613Z", "iopub.status.idle": "2021-04-16T19:41:05.894399Z", "shell.execute_reply": "2021-04-16T19:41:05.894029Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7LElEQVR4nO3deXyU9bn//9c1WyYbYZedgIBsImBQEUUoLqio1Zaj1irUqnWrtra1Vutpe6rHc37Vb1vrVo91q1qX1lpcaK37LvsWJBAgkISQfd8zc/3+mMk4CYEAZrgnyfV8PPLI3Mvcc80kmXc+9/2Zz0dUFWOMMSbeuJwuwBhjjOmIBZQxxpi4ZAFljDEmLllAGWOMiUsWUMYYY+KSBZQxxpi4ZAFlzGEQkctE5M0YHv9JEbkrfPtUEcnqwmMvF5El4dtLReSjLjx2TF8X07tYQJm4JyI5IlIvIjUiUigiT4hIylc43i9F5JmvUpOqPquqZ36VYxzCY32oqsd0tt/BPi9VPVtVn/qqdYlIuoioiHiijn3EXhfT81lAme7iPFVNAWYCs4CfO1VI9BvyYdxXRMSRvzsnH9uYw2G/rKZbUdV8YDkwFUBEzheRTBGpEJH3RGRS674i8lMRyReRahHJEpEFIrIQuB24ONwiWx/eN01E/iQiBeH73CUi7vC2pSLysYj8VkTKgF+2PzUmIieLyEoRqQx/Pzlq23sicreIfAzUAWPbPy8RmSEia8K1vgD4o7bNE5G8w3xe+zx2eN1VbR9e/hCufYuILIjakCMip0ctR7fSPgh/rwg/5uzDeF1+HX5tq0XkTREZuJ8fvemFLKBMtyIiI4FzgLUiMgH4C/ADYBDwBvCqiPhE5BjgRmCWqqYCZwE5qvpP4L+BF1Q1RVWPCx/6KaAFGAfMAM4Eot/ETwR2AIOBu9vV1B94HbgfGAD8P+B1ERkQtdvlwDVAKrCr3f19wCvAn4H+wEvAN/bz/A/1eR3wsds9t4HAL4CXw8+pM3PD3/uGH/PTdrUezOvyLeA7hF5XH/Djg3hc00tYQJnu4hURqQA+At4n9GZ8MfC6qv5bVZuBe4FE4GQgACQAk0XEq6o5qrq9owOLyFHA2cAPVLVWVYuA3wKXRO22R1X/oKotqlrf7hDnAttU9c/h7X8BtgDnRe3zpKpmhrc3t7v/SYAX+J2qNqvqX4GV+3kdDvp5HeRjAxRFPfYLQFb4OX1VB/O6PKGqW8Ov6YvA9C54XNNDWECZ7uLrqtpXVUer6vXhN7RhRLUIVDUI5ALDVTWbUMvql0CRiDwvIsP2c+zRhAKiIHyqsAL4I6H/6lvlHqC2NnWE7QKGH8L987XtyM0dtXQ4xOd1MI/Nfh67s2MejIN5XfZG3a4DDrvzi+l5LKBMd7aHULgAoQspwEggH0BVn1PVU8L7KPC/4V3bD+GfCzQCA8Mh2FdV+6jqlKh9DjTsf5s6wka11nEQ9y8Ahofrj75/hw7heR3MY7Ofx94Tvl0LJEVtG3IIxz2Y18WY/bKAMt3Zi8C54U4CXuBHhILmExE5RkS+JiIJQANQT+j0GEAhkN7ao01VC4A3gftEpI+IuETkaBE57SDreAOYICLfEhGPiFwMTAZeO8j7f0ro+tdN4ftfBJzQ0Y6H8rwOweDwY3tFZDEwKfycANYBl4S3ZQDfjLpfMRCkg04fYV/1dTG9nAWU6bZUNQv4NvAHoITQtY3zVLWJ0HWa/wmv30voTfj28F1fCn8vFZE14dtXELpIvxkoB/4KDD3IOkqBRYQCshS4FVikqiUHef8m4CJgafixLwZe3s/uh/q8DsbnwPjwMe8Gvhl+TgB3AkeH6/oV8FxU3XXh/T8Onxo9qd3z+kqvizFiExYaY4yJR9aCMsYYE5csoIwxxsQlCyhjjDFxyQLKGGNMXDrsQS+dMnDgQE1PT3e6DGOMMV1k9erVJao6qP36bhdQ6enprFq1yukyjDHGdBER6XDkFDvFZ4wxJi5ZQBljjIlLFlDGGGPiUre7BtWR5uZm8vLyaGhocLoUcxD8fj8jRozA6/U6XYoxJo71iIDKy8sjNTWV9PR02g7KbOKNqlJaWkpeXh5jxoxxuhxjTByL2Sk+EXlcRIpEZNN+touI3C8i2SKyQURmHu5jNTQ0MGDAAAunbkBEGDBggLV2jTGdimUL6kngAeDp/Ww/m9AIyuMJTTn9cPj7YbFw6j7sZ9VzqSqqSjCgBAJBggFFg0owqATDy9HrA4FgaHtg39tf3jd0e9z0IfiTfAddR3Q9+7sdPVh29LYDfW9/+3CW97fuULYfjCM1GHi/fv1wu91dftyYBZSqfiAi6QfY5QLg6fBMnp+JSF8RGRqem8cYE2daWgI01bfQ1NjCi/d9QlFuJYGWUHi0hk8wGEQVVIPhAIgOBm2zLrQMqKKtt9usi1pGuejWafQZnNAmXA70ZY6ck046qXsF1EEYTtupqPPC6/YJKBG5BrgGYNSo/U402u298sorTJgwgcmTJx/S/ZYtW8bmzZu57bbbYlTZl6666ipuueWWfWp88sknWbVqFQ888EDMazBdr7Ghmd1bSqgqraO5MUBjfTMN9U1s+mQ3VaW11FY1EmgJEAzql+ETVILaPpBiFwzVNTV4UgKd72h6DCcDqqPzPB3+dqvqo8CjABkZGT32X6NXXnmFRYsWHVJAtbS0cP7553P++ecf0n08nkP/0QcCAR577LFDvp+JL4FAgIaGBoryy/l8+Tay1+2laHdVqDUUDIZbQcHDfwARXC4QlyAiuNyh2y6XIK7QKV5xCS53aDm0/sttreujb7tcgsd36JfMRSRySrn97QNtj96n/f7tt3W0fCjrDmf9V923q7lcsenO4GRA5QEjo5ZHAHscquUrycnJYeHChZx44omsXbuWCRMm8PTTT5OUlMTbb7/Nj3/8Y1paWpg1axYPP/wwCQkJ3HbbbSxbtgyPx8OZZ57JRRddxLJly3j//fe56667+Nvf/gbADTfcQHFxMUlJSfzf//0fEydOZOnSpfTv35+1a9cyc+ZMjj322EjrZdeuXVx55ZUUFxczaNAgnnjiCUaNGrXPfe67775I/XV1dSxdupQtW7YwadIkcnJyePDBB8nIyCAlJYVbbrmFf/3rX9x33338/Oc/59577yUjI4MnnniCe+65h6FDhzJhwgQSEhKc+hGYdgKBAHV1ddTV1VFfX099fT0leyvZ8tkeinbXUFPaSGle3SEdU8Ih4fG5SEjy0HeInynzB5OU5g2HTihI3G43brcbj8eD2+3G5XJF1rUut64TkTbrXC5XKJj2c7t1ufV2Z1+me3MyoJYBN4rI84Q6R1R2xfWn995776seYr/mzZu3321ZWVn86U9/Ys6cOVx55ZU89NBD3HjjjSxdupS3336bCRMmcMUVV/Dwww9zxRVX8Pe//50tW7YgIlRUVNC3b1/OP/98Fi1axDe/+U0AFixYwCOPPML48eP5/PPPuf7663nnnXcA2Lp1K2+99RZut5snn3wyUseNN97IFVdcwZIlS3j88ce56aabeOWVV/a5T7SHHnqIfv36sWHDBjZt2sT06dMj22pra5k6dSr/9V//1eY+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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "posterior.make_cdf().plot(label='posterior grid', \n", " color='C5')\n", "plot_cdf(sample_post_pymc, \n", " label='PyMC3 sample',\n", " color='C4')\n", "\n", "decorate(xlabel=r'Goals per game ($\\lambda$)',\n", " ylabel='CDF',\n", " title='Posterior distribution')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results from PyMC3 are consistent with the results from the grid approximation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Posterior Predictive Distribution\n", "\n", "Finally, to sample from the posterior predictive distribution, we can use `sample_posterior_predictive`:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:05.898318Z", "iopub.status.busy": "2021-04-16T19:41:05.897656Z", "iopub.status.idle": "2021-04-16T19:41:06.230240Z", "shell.execute_reply": "2021-04-16T19:41:06.229840Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [1000/1000 00:00<00:00]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with model2:\n", " post_pred = pm.sample_posterior_predictive(trace2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a dictionary that contains a sample of `goals`." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.233351Z", "iopub.status.busy": "2021-04-16T19:41:06.232879Z", "iopub.status.idle": "2021-04-16T19:41:06.235150Z", "shell.execute_reply": "2021-04-16T19:41:06.234700Z" } }, "outputs": [], "source": [ "sample_post_pred_pymc = post_pred['goals']" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.239228Z", "iopub.status.busy": "2021-04-16T19:41:06.238417Z", "iopub.status.idle": "2021-04-16T19:41:06.241964Z", "shell.execute_reply": "2021-04-16T19:41:06.241391Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "(1000,)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample_post_pred_pymc.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll also generate a sample from the posterior distribution we computed by grid approximation." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.248078Z", "iopub.status.busy": "2021-04-16T19:41:06.247489Z", "iopub.status.idle": "2021-04-16T19:41:06.250383Z", "shell.execute_reply": "2021-04-16T19:41:06.249716Z" } }, "outputs": [], "source": [ "sample_post = posterior.sample(1000)\n", "sample_post_pred = poisson(sample_post).rvs()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can compare the two samples." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.297071Z", "iopub.status.busy": "2021-04-16T19:41:06.291526Z", "iopub.status.idle": "2021-04-16T19:41:06.436262Z", "shell.execute_reply": "2021-04-16T19:41:06.435875Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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06dzxRVX0LFjRzbeeGNuuukmBg4cyC677MLgwYPZaqut2GOPPda55t13351zzz2XZ599tumCiUKDBg3ikksuYb/99mPlypV07NiR6667zgHVVlWoy83dbbY2aql7Km/q6uqieMDC+fPns/3221eoosSHH37IxhtvzEcffcTw4cOZOHEiu+76me/elKnp06czfvx4pkyZUrEa8vA7s394+JR/fMgpV0A1drf1HH5YyytbmyZpdkTUFc93C6pETj31VObNm8eyZcs47rjjchtOVh0q8T2hRu5ys7xwQJXIbbfdVukSWm3kyJEVOVdnrVepcPJ9Ei1PPGChWQ5VKpw6d+lS9v2arYlbUGY5FPNnNF24UJZzQmX+LpJZa7gFZZZHFbjLAviqOssXB5RZHlUonPwlVssTd/GVSE1NDTvuuCMNDQ1sv/323HjjjXRZQ3/+woULGThwID/60Y+4+OKLAXj77bf5/Oc/z2mnnca1114LwE033cQvfvELIoKI4MQTT+T73/8+F154Iffeey8dOnRg8803Z9KkSfTu3btsx9ocD9ORHV9VZ+2VA6pEOnfuzDPPPAPA0UcfzYQJE/je9763xvW32morpkyZ0hRQd911F4MHD25aPm3aNK666ioefPBBevfuzbJly7j55psBOOecc5qed8011/Czn/2s6U7llo1KXvZt1l65iy8De+21FwsWLODCCy/k6quvbpp/wQUXcM011wBJoG2//fY0fun4jjvu4Bvf+EbTupdddhnjx49vahnV1tY23T5pk002aVpv6dKlzV4a7GE6SsuXfZuVX5trQRUOe1xqrelqaWhoYNq0aYwaNYoDDjiAww8/nDPPPJOVK1cyefJkZs6cyQcffADAkUceyeTJk9liiy2oqamhd+/evP56MiTWc889t8qQHcUuuOACbrrpJrp168bDDz+82nIP01FavuzbrPzaXEBVyscff9w0FMZee+3FSSedRKdOnejRowdPP/00b775Jrvssgs9evRoCqhRo0Zx4YUX0qtXr2aH5FibSy+9lEsvvZTLLruMa6+9lp/+9KerLPcwHdkpx5ec5zzgy77NHFAlUngOqtDJJ5/MpEmTeOONNzjxxBNXWdapUyd22203rrzySubOncsf//jHpmWDBw9m9uzZfPWrX13rfo866igOOuig1QLKw3SYWbVrcwGVtyue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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_pred(sample_post_pred, \n", " label='grid sample',\n", " color='C5')\n", "plot_pred(sample_post_pred_pymc, \n", " label='PyMC3 sample',\n", " color='C12')\n", "\n", "decorate(xlabel='Number of goals',\n", " ylabel='PMF',\n", " title='Posterior Predictive Distribution')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, the results are consistent.\n", "So we've established that we can compute the same results using a grid approximation or PyMC3.\n", "\n", "But it might not be clear why.\n", "In this example, the grid algorithm requires less computation than MCMC, and the result is a pretty good approximation of the posterior distribution, rather than a sample.\n", "\n", "However, this is a simple model with just one parameter.\n", "In fact, we could have solved it with even less computation, using a conjugate prior.\n", "The power of PyMC3 will be clearer with a more complex model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Happiness\n", "\n", "Recently I read [\"Happiness and Life Satisfaction\"](https://ourworldindata.org/happiness-and-life-satisfaction)\n", "by Esteban Ortiz-Ospina and Max Roser, which discusses (among many other things) the relationship between income and happiness, both between countries, within countries, and over time.\n", "\n", "It cites the [\"World Happiness Report\"](https://worldhappiness.report/), which includes [results of a multiple regression analysis](https://worldhappiness.report/ed/2020/social-environments-for-world-happiness/) that explores the relationship between happiness and six potentially predictive factors:\n", "\n", "* Income as represented by per capita GDP\n", "\n", "* Social support\n", "\n", "* Healthy life expectancy at birth\n", "\n", "* Freedom to make life choices\n", "\n", "* Generosity\n", "\n", "* Perceptions of corruption\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The dependent variable is the national average of responses to the \"Cantril ladder question\" used by the [Gallup World Poll](https://news.gallup.com/poll/122453/understanding-gallup-uses-cantril-scale.aspx):\n", "\n", "> Please imagine a ladder with steps numbered from zero at the bottom to 10 at the top. The top of the ladder represents the best possible life for you and the bottom of the ladder represents the worst possible life for you. On which step of the ladder would you say you personally feel you stand at this time?\n", "\n", "I'll refer to the responses as \"happiness\", but it might be more precise to think of them as a measure of satisfaction with quality of life.\n", "\n", "In the next few sections we'll replicate the analysis in this report using Bayesian regression." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "The data from this report can be [downloaded from here](https://happiness-report.s3.amazonaws.com/2020/WHR20_DataForFigure2.1.xls)." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.440323Z", "iopub.status.busy": "2021-04-16T19:41:06.439795Z", "iopub.status.idle": "2021-04-16T19:41:06.441446Z", "shell.execute_reply": "2021-04-16T19:41:06.441799Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# Get the data file\n", "\n", "download('https://happiness-report.s3.amazonaws.com/2020/WHR20_DataForFigure2.1.xls')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use Pandas to read the data into a `DataFrame`." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.445302Z", "iopub.status.busy": "2021-04-16T19:41:06.444699Z", "iopub.status.idle": "2021-04-16T19:41:06.467314Z", "shell.execute_reply": "2021-04-16T19:41:06.466802Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "\n", "filename = 'WHR20_DataForFigure2.1.xls'\n", "df = pd.read_excel(filename)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.470988Z", "iopub.status.busy": "2021-04-16T19:41:06.470564Z", "iopub.status.idle": "2021-04-16T19:41:06.487892Z", "shell.execute_reply": "2021-04-16T19:41:06.488317Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Country nameRegional indicatorLadder scoreStandard error of ladder scoreupperwhiskerlowerwhiskerLogged GDP per capitaSocial supportHealthy life expectancyFreedom to make life choicesGenerosityPerceptions of corruptionLadder score in DystopiaExplained by: Log GDP per capitaExplained by: Social supportExplained by: Healthy life expectancyExplained by: Freedom to make life choicesExplained by: GenerosityExplained by: Perceptions of corruptionDystopia + residual
0FinlandWestern Europe7.80870.0311567.8697667.74763410.6392670.95433071.9008260.949172-0.0594820.1954451.9723171.2851901.4995260.9612710.6623170.1596700.4778572.762835
1DenmarkWestern Europe7.64560.0334927.7112457.57995510.7740010.95599172.4025040.9514440.0662020.1684891.9723171.3269491.5034490.9793330.6650400.2427930.4952602.432741
2SwitzerlandWestern Europe7.55990.0350147.6285287.49127210.9799330.94284774.1024480.9213370.1059110.3037281.9723171.3907741.4724031.0405330.6289540.2690560.4079462.350267
\n", "
" ], "text/plain": [ " Country name Regional indicator Ladder score \\\n", "0 Finland Western Europe 7.8087 \n", "1 Denmark Western Europe 7.6456 \n", "2 Switzerland Western Europe 7.5599 \n", "\n", " Standard error of ladder score upperwhisker lowerwhisker \\\n", "0 0.031156 7.869766 7.747634 \n", "1 0.033492 7.711245 7.579955 \n", "2 0.035014 7.628528 7.491272 \n", "\n", " Logged GDP per capita Social support Healthy life expectancy \\\n", "0 10.639267 0.954330 71.900826 \n", "1 10.774001 0.955991 72.402504 \n", "2 10.979933 0.942847 74.102448 \n", "\n", " Freedom to make life choices Generosity Perceptions of corruption \\\n", "0 0.949172 -0.059482 0.195445 \n", "1 0.951444 0.066202 0.168489 \n", "2 0.921337 0.105911 0.303728 \n", "\n", " Ladder score in Dystopia Explained by: Log GDP per capita \\\n", "0 1.972317 1.285190 \n", "1 1.972317 1.326949 \n", "2 1.972317 1.390774 \n", "\n", " Explained by: Social support Explained by: Healthy life expectancy \\\n", "0 1.499526 0.961271 \n", "1 1.503449 0.979333 \n", "2 1.472403 1.040533 \n", "\n", " Explained by: Freedom to make life choices Explained by: Generosity \\\n", "0 0.662317 0.159670 \n", "1 0.665040 0.242793 \n", "2 0.628954 0.269056 \n", "\n", " Explained by: Perceptions of corruption Dystopia + residual \n", "0 0.477857 2.762835 \n", "1 0.495260 2.432741 \n", "2 0.407946 2.350267 " ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head(3)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.493716Z", "iopub.status.busy": "2021-04-16T19:41:06.493151Z", "iopub.status.idle": "2021-04-16T19:41:06.497428Z", "shell.execute_reply": "2021-04-16T19:41:06.496945Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "(153, 20)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `DataFrame` has one row for each of 153 countries and one column for each of 20 variables.\n", "\n", "The column called `'Ladder score'` contains the measurements of happiness we will try to predict." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.502090Z", "iopub.status.busy": "2021-04-16T19:41:06.501638Z", "iopub.status.idle": "2021-04-16T19:41:06.504464Z", "shell.execute_reply": "2021-04-16T19:41:06.503904Z" } }, "outputs": [], "source": [ "score = df['Ladder score']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simple Regression\n", "\n", "To get started, let's look at the relationship between happiness and income as represented by gross domestic product (GDP) per person.\n", "\n", "The column named `'Logged GDP per capita'` represents the natural logarithm of GDP for each country, divided by population, corrected for [purchasing power parity](https://en.wikipedia.org/wiki/Purchasing_power_parity) (PPP)." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.507842Z", "iopub.status.busy": "2021-04-16T19:41:06.507415Z", "iopub.status.idle": "2021-04-16T19:41:06.509570Z", "shell.execute_reply": "2021-04-16T19:41:06.509076Z" } }, "outputs": [], "source": [ "log_gdp = df['Logged GDP per capita']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following figure is a scatter plot of `score` versus `log_gdp`, with one marker for each country." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.540094Z", "iopub.status.busy": "2021-04-16T19:41:06.539604Z", "iopub.status.idle": "2021-04-16T19:41:06.660297Z", "shell.execute_reply": "2021-04-16T19:41:06.659541Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAm1UlEQVR4nO3df5xcdX3v8ddns1lCQkI0BEuqe5OgJm2jgm6ENlZEEbFYENFbreEWtaZcW0W9cC+55VGql15t8eHDXu/FGotAScFf/OqVXgwPhGgRMJvIjyDZ+iALCwTJsgY32SXZ3ezn/jFnwrCZ2T0zc86c7znzfj4ePLJ7dubM58wM53O+n/M532PujoiISGg6sg5ARESkGiUoEREJkhKUiIgESQlKRESCpAQlIiJBUoISEZEgpZqgzOwzZvaImW03sxvMbE6aryciIsVhaV0HZWa/Cfwb8Nvu/oKZfQf4V3e/ptZzjjnmGF+6dGkq8YiISJi2bt36nLsvnrq8M+XX7QSONLNxYC6wa7oHL126lN7e3pRDEhGRkJjZE9WWp1bic/engS8BA8AzwK/dfVNaryciIsWSWoIys5cBZwPLgCXAPDNbW+Vx68ys18x6BwcH0wpHRERyJs0midOAfncfdPdx4Cbg96Y+yN03uHuPu/csXnxYCVJERNpUmglqADjZzOaamQHvAB5N8fVERKRA0jwHdT/wPWAb8HD0WhvSej0RESmWVLv43P0y4LI0X0NERIpJM0mIiCSsb2CIGzfvoG9gKOtQci3t66BERNpK38AQ6664jbGJSbo6O9hw8Zms6F6UdVi5pBGUiEiCtvcPMjYxyZJjjmJsYpLt/bp8plFKUCIiCVq1bDFdnR3sem4fXZ0drFqmy2capRKfiEiCVnQvYsPFZ7K9f5BVyxarvNcEJSgRkYSt6F6kxJQAlfhERCRISlAiIhlRO/r0VOITEcmA2tFnphGUiEgG1I4+MyUoEZEMNNOO3i6lQZX4REQy0Gg7ejuVBpWgREQy0kg7emVpcNdz+9jeP1jYBKUSn4hIRhop1cUpDRalBKgRlIhIBhot1c1UGixSCVAjKBGRDFSW6oZHx7jqtgdij3hWdC/i3FNWVk08ReoOVIISEclAuVS3c9fzPLl7mDt6+1l3xW1Nl+WKNFmtSnwiIhkol+quuu0B7ujtZ/mShYk0PRRpslolKBGRjKzoXsTHzjyB+3/+dKIjnqJMVqsEJSKSgb6BoUOjnKKMeJKmBCUi0mLVOu3OPWVl1mEFR00SIiIxJXF9Ud/AEFfd9gDDo2OF6LRLk0ZQIiIxJHF9UXkdw6NjPLl7GIAFc7ty3WmXJiUoEZEYkphiqLyO5UsWYsBpPcv42Jkn6LxTDUpQIiIxNDv7+Pb+QfbsfYF9owfYuWuCBXO7cp2cKps80toGJSgRkRianX28XNY79mXz8IlJ1q9dk+vk1IrplJSgRERiamb28SOP6GRy0ll41BG4w8j+8ZSiTF+rZlRXF5+ISAJqdfiVS4MvHJigo8PYf2Ai91MQtWo6JXP3VFbciJ6eHu/t7c06DBGpQyvORWShnu2aqeRVXte8ObMZ2T9eiPcqyc/dzLa6e8/U5SrxiUjDinRrh0r1btdMJa8Qph5K+kCiFdukEp+INKxIt3aoVO921VPyyuJmguWE+6Vv3ZfIjOmtohGUiDSsSLd2qFTvdsXt8MtqxJnX28SnlqDMbAXw7YpFy4G/cvevpPWaItJaRbq1Q6VGtitOySurRJHXA4nUEpS79wEnAJjZLOBp4Oa0Xk9EshHC+ZU0pLFdWSWKvB5ItKrE9w7gMXd/okWvJyISnCwTRR4PJFqVoD4I3FDtD2a2DlgH0N3d3aJwRESykcdEkZXUu/jMrAs4C/hutb+7+wZ373H3nsWL81EXFRFppSw6/0LQihHUu4Ft7v5sC15LRKRpIV18XNRrzeJoRYL6EDXKeyIioQktIeS1RTwJqZb4zGwu8E7gpjRfR0QkKUlffNxseS6vLeJJSHUE5e6jQHukehEphCQTQhKjsby2iCdBM0mIiFRIMiEkVZ5r184/JSgRkSniJIQ4jRRZludCavRolBKUiEid4pbusirPhdbo0SjNZi4iUqd6GilWdC/i3FNWtjRBFGWWeSUoEZE6hd5ZF3p8cemOuiIiDQj9HE/o8VXSHXVFRBJU2UgRYjIoQuefEpSISBOK0pAQIp2DEhFpQlEaEkKkBCUi0oSiNCSESCU+EZEmtPNURGmLlaDM7C3Aa9z9ajNbDBzl7v3phiYikg9FaEgI0YwlPjO7DPhvwPpo0WxgY5pBiYiIxDkHdQ6lO+KOALj7LmB+mkGJiIjESVBjXrqa1wHMbF66IYlIEbXrbcuno/dkenHOQX3HzL4OLDSzjwMfBb6RblgiUiT1XisU4oWvSdP1UzObNkGZmQHfBlYCw8AK4K/c/Y4WxCYiBVHPfZHaZcddfk8WzOti4NlhNm3ZWcjtbMa0Ccrd3cxucfc3AUpKIglphxFCpXquFUrqJn9J6hsYYtOWnQCcvnp5IvGsWraYgwcn6d3xS8C5btPDia07DVl8Z+OU+O4zs9XuviX1aETaQF5HCM3soOq5VijrC1+nbmffwBDnXX4rj+16nnIiue4vz276M1vRvYjz3vU6rrxlK92vWMDwyFgQybiarL6zcRLUqcAFZvY4pU4+ozS4en2agYkU1aYtO9n9/GjwO6VKSeyg4l4rlOWFr9W2c3v/IHtfGKNzlgHG3tHkPrPTVy/ne3c/yvDIWNCzUGQ1qo2ToN6dehQibaJvYIjrNj3M7j0j7N4zyvFLFja9U2pF6aXVO6haySztba22nauWLWb+kV3s3jMKOPPndiWWSPIyC0VWo9oZE5S7P2FmbwB+P1r0Y3d/MN2wRIppe/8gszo66Fl5HAPPDnPeu17X1E6pVaWXrMtukO62lhPfvDmzD9vOFd2LuO7SsxM/B1WWh1koskqkMyYoM7sQ+DhwU7Roo5ltcPevphqZSE7Uc1Rf3tEPj4xx7MK5nL56eVOv3aqRTQhH+mlt69TEt37tGkb2j79kO/OQRNKWxXsQp8T3MeAkdx8BMLO/Be4FlKCk7dV7VJ/0jr6VI5usd9JpbevUxDeyf5xzT1mZyLqlOXESlAEHK34/GC0TaXuNHNUnuaMPYWTTKiu6F7F+7Rp+uO1x3v7GpYlt67w5s9k3eoCduyZYkOD5pbJ2u6QgSXES1NXA/WZ2c/T7e4GrUotIJEdCODeT9cimVfoGhvjCxnsYm5jk/p8/zbLjFta93bff/9ihBHfGSccfWmdn5yzGJyZZv3ZNou9lXi8pCEWcJokvm9ndwFsojZw+4u4/SzswkTwo6ggmxKP+Zs9B3X7/Y6y9/FYmJ51v/uuDbLz0bEb2jzM2McnyJQsPlfcgue0P8aLjPInTJHEy8Ii7b4t+n29mJ7n7/alHJ5KipHZCRRvBhHrU3+xo9YfbHmdystQmvnd0jB9ue5yPnXnCYetMcvtDGGHnWZwS39eAN1b8PlJlmUiuhLoTDkGoR/21RqtxDzTe/salfPNfH2Tv6BgdHXboPNbUdd64eUdi21/UEXarxGqSiG63AYC7T5qZbhUvuRbqTjgEIRz110o6U0er9RxonHHS8Wy89OyXnIOqts6ktz+LEXaIJdpGxEk0O83sU5RGTQCfAHamF5JI+kLYCYcq66P+epLO9v5BhkfHOPKIToZjTEF0xknHH0pMtWS9/c0qUnUgToK6APhfwKWUblp4J7AuzsrNbCHwj8Cq6Lkfdfd7G4pUJEF53wmlLcvzavWMbufNmc2Tu4eZnHQ6Oox5c2YnEkOezysWqToQp4tvN/DBBtf/98Dt7v5+M+sC5ja4HpHE5XknVGT1jG5H9o/zqmMXcOQRnew/MHGoC68eRSmHlRWpOhCni+/vgMuBF4DbgTcAn3b3jTM8bwHwVuB8AHcfA8aajFeksIq2o2x0e+q9NceCuV2MTUzOOIlrtXiKVA4rK1J1IE6J73R3/69mdg7wFPAB4C5g2gQFLAcGgaujyWa3AheWp0wSkRcVbUdZa3viJq2kb81RK54ilcMqFaU60BHjMeWi7h8AN7j7r2Kuu5NSK/rX3P1ESu3pl0x9kJmtM7NeM+sdHByMuWqR+vUNDHHj5h30DQxlHcphKneUYxOTbO/P9/8L1bannCS+9K37WHfFbYl9Diu6F3HuKSsP6+6r/Kxrvb9FKocVUZwR1P81sx2USnyfMLPFwP4Yz3sKeKrigt7vUSVBufsGYANAT0+PT/27SBJCH6EktaMMpUxYbXtaNVqp9lmX49m563kmJg4eaqYoUjmsiOI0SVwSzWA+7O4HzWwUODvG835pZk+a2Qp37wPeAfy8+ZBF6hd6Kae8oyzfc6gRISXhWjv+VoxWqn3W556ykvVr13DRlXcyu3MWX9h4z6G5/IpSDiuiWBfcuvueip9HKJXr4vgk8M9RB99O4CN1RyiSgLyUcr5396OMTUzyvbsfrTvBhJaEp+74WzVaqfVZj+wfZ/7crqbfn1rNFhqFJS/VGSHc/QGgJ83XEIkjD6WcZhNMHpJwK0YrtT7rJN6faqNUIJiRa9FMm6DMzIBXuvuTLYpHJDWhl3Ka3YHmIQm3SrXPOon3p9pBBBDUyLVIpk1Q7u5mdgvwptaEI9K+ktiBNpOE26FM1exBSq2DiNBHrnllFfPAVn+A2f8BrnH3LWkH09PT4729vWm/jIhMkUSDRTskONA5qDSY2VZ3P+x0UJxzUKcCF5jZ45SaI4zS4Or1yYYoUkx52Hk1e/4rpA7CtNUqHxZ1e7MUJ0G9O/UoRAoqLzvuZs9/hdZBKMUQ5zqoJ8zsLcBr3P3q6ELdo9IPTSRdrRjZhLrjnrrtzZ7/mjdnNvtGD7Bz1wQLZpgTTySuOJPFXkapVXwFcDWlqY82AmvSDU0kPa0a2YTY+p30tvcNDPGFjffQ2TmL8YlJ1q9dE0QSlvyLU+I7BzgR2Abg7rvMbH6qUYmkrFUjmxBbv2u1SjeatMrrW75kIbue29fQLS9EqomToMaidnMHMLN5KcckkrpWjmxCO4Ge9Dx5IY4SpRjiJKjvmNnXgYVm9nHgo8A30g1LJF1pjGzy0K0Hyc+TF+IoUYphxuugAMzsncDplFrMf+Dud6QRjK6DkrzKS7fedPKSYKV4mrkOiighpZKUpH3NtEPM0w4z1G69eqRRiix/hvPmzGZk/3hqn2WevisSX80EZWZ7gZrDK3dfkEpE0hZmGnHkbUSi8zCHK3+Gw6NjPLl7mFcdu4AFc7sS/ywrX2di4iBXfOI0zjjp+KbXqYSXvZoJyt3nA5jZ54FfAtdRKvF9GFAXnzRlphFH3kYkOg9zuPJneOQRnUxOOkce0XnobrbNvj+VCWR7/yDDo2P88lf7ODB2kIuuvPPQvZ4aXXeIB0ftmDTjlPje5e4nVfz+NTO7H/i7lGKSNjDTiCOPI5LQuvWyVv4Mh0fH6Ogwfr3vAB3GobvZNmpqAlm/dg0TEwc5MHaQI2bPoquzo6kkGOLBUahJM21xEtRBM/sw8C1KJb8PAQdTjUoKb6YRh0YkrZHmUXnlZ7hn7wt85btb6OzseMndbBsxNYGM7B/nik+cxkVX3klXZwfzm5zJIsSDoxCTZivESVB/DPx99J8D90TLRJoy04hDI5J0teKovPwZ3rh5RyJ3s4XqCWRF9yKWHbcwkWQb4sFRiEmzFeLMxfc4cHb6oYhIK7XyqDzJHWytBJLkAU1oB0chJs1WmK6L76tM38X3qVQiEpGWaPVsGknuYBtNIHluNAgtabbCdCOo8hWza4DfBr4d/f4BYGuaQYnkXR52hK0+Ks96B9uujQZ5Nl2b+bUAZnY+cKq7j0e//wOwqSXRieRQnnaEWSeNVmrXRoM864jxmCW89Lqno6JlIlJF5Y6wfN2PZK9dGw3yLE4X3xeBn5nZXdHvpwB/nVpEIjkX+o4wD+XHNLRro0GexZ0s9jeA8sW697v7L9MIRpPFSlGEmgTyVH6U9tHUZLHAAeAZYA7wWjN7rbv/KMkAReIKdedfKdRzOzoPI3kS55bvfwpcCLwSeAA4GbgXeHuqkUmmQk0CaY4AQt3mJNVbfmyH90TCFWcEdSGwGrjP3U81s5XA59INS7IUchkorRFAyNucpHrOw7TLeyLhitPFt9/d9wOY2RHuvgNYkW5YkqWQu9DijAD6Boa4cfMO+gaGYq835G1O2oruRZx7ysoZk82mLTvZ/fwoC+Z1xXpPGnnfRaYTZwT1lJktBG4B7jCzPcCuNIOSbCXZhZZ0iWimEUCjR/2hd961Wt/AENdtepjde0bYvWeU45csnPY96RsY4rzLb2XvC2PMP7KL6y49u6WjLZUiiynOXHznRD/+ddRqfjRwe6pRSaaSasdNq0Q0XQNCoyVAtSC/1Pb+QWZ1dNCz8jgGnh3mvHe9btr3ZNOWnTy263k6Zxm794yyactOVnQvasldk1WKLK7p5uJ7eZXFD0f/HgX8KpWIJAhJdKE1miya2Wk1MxJqdeddyEf9h+7lNDLGsQvncvrq5TGe5ZTuaVq6dKVVd01WZ2JxTTeC2sqL37iyym9gnG+stLFGkkWzO628jISq3XRvZP94MDHX+z6evno51216mL2jY8yf28Xpq5e37K7JKs8W13Rz8S1rduVm9jiwl9INDieqXYglxdVIskhipxXqNUiVKrdz567nuejKO5k/tyuoElU97+OK7kVc95dnH/ZZt+KuyXk5KJH6xb1QtxmnuvtzLXgdCVC9yaJdjoYrt3Ni4iCzO2cFW6KKW4qc+lm38q7JeTgokfq1IkGJxLaiexHr167hh9se5+1vXFrYnU7lznnenNl8YeM9QSblJEquumuyNCrtBOXAJjNz4OvuvmHqA8xsHbAOoLu7O+VwpBmtOKnfNzDEFzbew9jEJPf//GmWHbewsDuwyp1zUrcrT5oaECRLcaY6Oh54yt0PmNnbgNcD/+Tuz8dY/xp332Vmx1K6hmrH1Dn8oqS1AUqTxdYZv7RIq1p523WHGOpIol1KrhKmODNJ3AgcNLNXA1cBy4Dr46zc3XdF/+4Gbgbe3GCcwWjXq+VbNdOCdohhKZciL/rgycE0b0j7iFPim3T3CTM7B/iKu3/VzH4205PMbB7Q4e57o59PBz7fZLyZaucLAluVOIrQkRXy9U1TxYk11NGdFF+cBDVuZh8C/gT4w2jZ7BjPewVws5mVX+d6d8/1DBTtWn6C1iaOPO8Q83QQk6dYpT3FSVAfAS4A/sbd+81sGbBxpie5+07gDU3GF5R2Lz+FlDgqj/yBYEYseTqISTrWPI0cJR/izMX3c+BTAGb2MmC+u38x7cBCVITyUxFUHvkfPDgJBrM6OoIYBeTpIGbenNnsGz3Azl0TLJjb1fSkwBqNSdLidPHdDZwVPfYBYNDMNrv7Z9MNLUwhjSLaVeWR/88fL10D/ttLjwlixJKXg5hyO39n5yzGJyZZv3ZNU7GWb83R/YoFDI+MZf45SDHEKfEd7e7D0Z11r3b3y8zsobQDk2QUsexSOUqZf2QXGEGNWEI+iCl/H3Y9t5exiUmWL1nIruf2MbJ/vKl11nNrDpG44iSoTjM7DviPwF+mHI/EEDfp1Ft2yUsymzpKgXDOQYXsJaXRyUnwZBJ7vbfmEIkrToL6PPAD4B5332Jmy4FfpBuW1FJP0qnnJHjeziFUm/ctKXlJ1PWa+n3449N+hyXHzG96Oxu7NYfIzOI0SXwX+G7F7zuBc9MMSmqrJ+nUc8I+T91nacpboq7H1O/D6auXJ3YDyTycd5P8idMk8Vrga8Ar3H2Vmb0eOMvdL089OjlMPUmnnh1HnrrP0hRqoo4zqpvpMWkmkrjn3Yo6OpV0mPv009+Z2WbgYkqTvZ4YLdvu7quSDqanp8d7e3uTXm3hpPU/uXYeYYygpn4OcWIKIe6Z5CFGyYaZba12v8A456DmuvtPoxkhyiYSi6yNJJUA0uoSC7n7rFWyLldV24nHGdWFOvKrlIcYJSxxEtRz0YzmDmBm7weeSTWqAtLR4+FCHbFlmair7cTjlF/zUKLNQ4wSljgJ6s8p3Q5jpZk9DfQDa1ONqoB0IeNLKWFXV212h5lGdeVEv37tGkb2jweX8MuyHp1K/sTp4tsJnFY5O3n6YRWLLmQ8XKvKPaGO0qqZbnaHWqO6vCV6lZGlHnG6+I6g1Fa+lNJFuwC4e65vndFKupDxcK0o9+Rt511O2vXM7qDzOlJkcUp8twK/BrYCB9INp5h0IePhWlHuydvOu5GkrfM6UmRx2sxTaSmvpsht5nkqNRVF3kZQ0Nj3RN8tybtabeZxEtQG4Kvu/nBawZUVOUFlrV13Yu263SJ50sx1UG8BzjezfkolPgPc3V+fcIySsPLOed6c2Xxh4z25GkkkRSflRfIrToJ6d+pRSOIqy1t7R8eY3dlx6OR76OdiJFkaRUpe1UxQZrbA3YcBtZXnUGWDQP+u5xmfOFiYE+na4caXx/NwImXTjaCuB95DqXvPKZX2yhxQK1rAXnJTv7ldwV/EGZd2uPXJWyejSKWaCcrd3xP9u6x14WSjiEfkRb1qP4Qdbijflzhx1GpDD2UbRKYT5xwUZvY+Ss0SDvzY3W9JM6hWKvIReasaBFq5s8v6up9Qvi9x46h2oBLKNojMJM5MElcCrwZuiBZdYGbvdPc/TzWyFgnhiDzPWr2zy3pkGMr3pZ44ph6ohLINIjOJM4I6BVjl0QVTZnYtkPo1Ua2S9RF53mWxs8uydTyU70szcYSyDSIziZOg+oBu4Ino91cBD6UWUYtlfUSed+22swvl+9JMHKFsg8hM4t5RdzXw02jRauBeYBTA3c9KKhjNJFG/uOd/0jxPpBPuItKMZmaS+KsU4pE6VUsCcc//pH2eSLM1iEga4twParOZ/QbwZkpdfFvc/ZepRyaH1Eowcc//6KR4e9MIV/KqY6YHmNmfUirvvQ94P3CfmX007cDkRZUJZmxiku39g0D88z/tdp5IXlQ+uPnSt+5j3RW30TcwlHVIIrHFKfFdDJzo7kMAZrYI+AnwzTQDkxfVSjBxT3brpHj70uhZ8ixOgnqKl87Htxd4Mp1wpJrpEkzc8z86T9SeNHqWPIvTxfdPwOso3VnXgbMplfz+HcDdv5xUMOriE0mezkFJ6Jrp4nss+q/s1ujf+TFfeBbQCzxdnt9PRFpHo2fJqzhdfJ9r8jUuBB4FFjS5HhERaSNx5uJbDPxX4HeAOeXl7v72GM99JXAm8DfAZxsPU0RE2s2MbebAPwM7gGXA54DHgS0x1/8VSsltstYDzGydmfWaWe/g4GDM1YqISNHFSVCL3P0qYNzdN7v7R4GTZ3qSmb0H2O3uW6d7nLtvcPced+9ZvFgdRtX0DQxx4+YduoZFRNpKnCaJ8ejfZ8zsTGAX8MoYz1sDnGVmf0CpNLjAzDa6+9rGQm1PunePiLSrOCOoy83saOC/ABcB/wh8ZqYnuft6d3+luy8FPgj8UMmpfrVmkRARKbo4XXzfj378NXBquuHIVLrQUkTaVc0Ldc3sq5QuzK3K3T+VdDC6ULc6XWgpIkXWyIW6lZnic8BliUclsehCSxFpRzUTlLtfW/7ZzD5d+XuoNNIQESmOOF18ME2pLxTqdmsfOhARaQ9xE1TwdFuBkqLvvHUgItI+aiYoM9vLiyOnuWY2XP4T4O4e1Nx66nZrj523DkRE2sd056BizVYeCt2Urz123joQEWkfhSnxgbrdQt55J1V61IGISPuY8YaFraTroJoX4jmodig9ikjjmrlhoeRIiKPIdig9ikjy4szFJ9KUkEuPraDZ6EUaoxGUpK6dzxupvCnSOCWoFgrx/FC9Gt2GEEuPraDypkjjlKBapAhH0kXYhlZr9/KmSDPaLkFlNYopwpF0s9tQhBFkvdqxvNmOn7Oko60SVJYjgCIcSTezDe08+mqn8mY7f86SvLZKUFmOYopwJN3MNhRhBCkz0+csSWqrBJX1KKYIR9KNbkPW7720hj5nSVLbzSSh+nh29N63B33OUq9aM0m0XYISEZGw1EpQmklCRESCpAQliU3Foyl9RCRJbdUkIYdLqi1Y7cUikjSNoNpcZVvw2MQk2/sHM12PiEiZElSbS6otWO3FIpI0dfFJYm3Bai8WkUbohoVSU1IXEBfhQmQRCYdKfCIiEiQlKBERCZISlIiIBEkJSkREgqQEJSIiQUotQZnZHDP7qZk9aGaPmNnn0notEREpnjTbzA8Ab3f3fWY2G/g3M/t/7n5fiq8pIiIFkVqC8tIVwPuiX2dH/4VzVbCIiAQt1XNQZjbLzB4AdgN3uPv9ab6eiIgUR6oJyt0PuvsJwCuBN5vZqqmPMbN1ZtZrZr2Dg5pgVERESlrSxefuzwN3A2dU+dsGd+9x957FizXBqIiIlKTZxbfYzBZGPx8JnAbsSOv1RESkWNLs4jsOuNbMZlFKhN9x9++n+HoiIlIgaXbxPQScmNb6RUSk2DSTRMH0DQxx4+Yd9A0MZR2KiEhTdD+oAukbGGLdFbcxNjFJV2cHGy4+U/dnEpHc0giqQLb3DzI2McmSY45ibGKS7f1q2xeR/FKCKpBVyxbT1dnBruf20dXZwaplatsXkfxSia9AVnQvYsPFZ7K9f5BVyxarvCciuaYEVTAruhcpMYlIIajEJyIiQVKCEhGRIClBiYhIkJSgREQkSEpQBaZZJUQkz9TFV1CaVUJE8k4jqILSrBIikndKUAWlWSVEJO9U4isozSohInmnBFVgmlVCRPJMJT4REQmSEpSIiARJCUpERIKkBCUiIkFSghIRkSApQYmISJCUoEREJEjm7lnHcIiZDQJPZB1Hwo4Bnss6iADpfalO70t1el9qK8J78x/c/bDpboJKUEVkZr3u3pN1HKHR+1Kd3pfq9L7UVuT3RiU+EREJkhKUiIgESQkqfRuyDiBQel+q0/tSnd6X2gr73ugclIiIBEkjKBERCZISVArMbIWZPVDx37CZfTrruEJgZp8xs0fMbLuZ3WBmc7KOKRRmdmH0vjzSzt8XM/umme02s+0Vy15uZneY2S+if1+WZYxZqPG+fCD6vkyaWeE6+ZSgUuDufe5+grufALwJGAVuzjaq7JnZbwKfAnrcfRUwC/hgtlGFwcxWAR8H3gy8AXiPmb0m26gycw1wxpRllwB3uvtrgDuj39vNNRz+vmwH3gf8qOXRtIASVPreATzm7kW7ALlRncCRZtYJzAV2ZRxPKH4LuM/dR919AtgMnJNxTJlw9x8Bv5qy+Gzg2ujna4H3tjKmEFR7X9z9UXfvyyik1ClBpe+DwA1ZBxECd38a+BIwADwD/NrdN2UbVTC2A281s0VmNhf4A+BVGccUkle4+zMA0b/HZhyPtIASVIrMrAs4C/hu1rGEIDpvcDawDFgCzDOztdlGFQZ3fxT4W+AO4HbgQWAi06BEMqYEla53A9vc/dmsAwnEaUC/uw+6+zhwE/B7GccUDHe/yt3f6O5vpVTK+UXWMQXkWTM7DiD6d3fG8UgLKEGl60OovFdpADjZzOaamVE6P/doxjEFw8yOjf7tpnTiW9+dF/0L8CfRz38C3JphLNIiulA3JdF5hCeB5e7+66zjCYWZfQ74I0rlq58Bf+ruB7KNKgxm9mNgETAOfNbd78w4pEyY2Q3A2yjN0v0scBlwC/AdoJvSgc4H3H1qI0Wh1XhffgV8FVgMPA884O7vyijExClBiYhIkFTiExGRIClBiYhIkJSgREQkSEpQIiISJCUoEREJkhKUBMHM9qWwzteY2ffN7DEz22pmd5nZW6O/nW9mg2b2s2iG7B+Y2e9VPPcaM+uPZqPfZma/m3R8aTGzn0T/LjWzP05wvf99mr89bmYPm9mDZrbJzH6jkeUilZSgpJCi23jcBmxw9+Pd/U3AJ4HlFQ/7trufGM2Q/UXgJjP7rYq/XxzNSH8J8PWE45uV5PoquXs50S4FEktQQM0EFTnV3d8A9E55bL3LRQAlKAmYmZ1gZveZ2UNmdnP5HkBmtjpadq+ZXVF5f5wKHwbudfd/KS9w9+3ufk2113L3uyjdOntdlT//CHh1lfiuMbN/MLMfm9m/m9l7ouWzori2RHH+WbT8bdEo7nrg4SrrOyMarT1oZndGy95sZj+JRno/MbMV0fLzzexWM7vdzPrM7LKK9ZRHo18Efj8aBX4mGlH9OHqNbZUjxilx3BKNOB8xs3XRsi9SmoX+ATP752rPm+n9amC5tLnOrAMQmcY/AZ90981m9nlKV85/GrgaWOfuP4l2nNX8DrCtztfbBvxZleV/SJWEElkKnAIcD9xlZq8G/hOlmdpXm9kRwD1mVp61/c3AKnfvr1yJmS0GvgG81d37zezl0Z92RMsmzOw04H8C51aui9L9xraY2W3u3lux2kuAi9y9nDjnAu909/3RvaZuAKrd5O6j7v4rMzsyWu+N7n6Jmf1FNKKcyXuo/n7Vu1zanBKUBMnMjgYWuvvmaNG1wHfNbCEw391/Ei2/ntIObqb13Qy8Bvh3d39frYdN+f0KM7sUGAQ+VuM533H3SeAXZrYTWAmcDrzezN4fPebo6LXHgJ9OTU6Rk4Eflf9WMY3P0cC1UUJxYHbFc+5w96Fo+24C3kKpXFbLbOB/m9kJwEHgtTUe9ykzK9+L6lVR7EPTrLfsLjM7CDwEXNrEchFACUryZ2oSqeUR4K3lX9z9HCvdEvtL0zznRF46ee3F7v69GV5n6lxhHsX4SXf/QeUfzOxtwEiN9ViVdQH8D+CuKP6lwN0zvPZ0PkNpDrc3UCrv7z8siFKMpwG/6+6jZnY3MGeG9Zad6u7PJbBcBNA5KAlUNMHuHjP7/WjRecBmd98D7DWzk6PltW4Zfz2wxszOqlg2t9brmdkplM4/faPOUD9gZh1mdjylBow+4AfAfzaz2dG6X2tm82ZYz73AKWa2LHpOucR3NPB09PP5U57zTjN7eVSKey9wz5S/7wXmV/x+NPBMNOI7D6jWqHE0sCdKTispjezKxsvbJNIKGkFJKOaa2VMVv3+Z0m0V/iE6d7IT+Ej0t48B3zCzEUojisNmi3f3F6KmhS+b2VcojRz2ApdXPOyPzOwtlBJXP3BudOPAevRRuj37K4ALovM7/0jp3NQ2MzNKJcL3TrcSdx+MGhJuMrMOSvc7eifwd5RKfJ8Ffjjlaf8GXEepweD6KeefoFQ6mzCzB4FrgCuBG83sA8BdVB/N3Q5cYGYPRdt2X8XfNgAPmdk2d//wdNsjkgTNZi65Y2ZHufu+6OdLgOPc/cIM4rgG+H6MMmAar30+0OPuf9Hq1xZpFY2gJI/ONLP1lL6/T3B46UtECkAjKBERCZKaJEREJEhKUCIiEiQlKBERCZISlIiIBEkJSkREgqQEJSIiQfr/q6K+j261LJgAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot(log_gdp, score, '.')\n", "\n", "decorate(xlabel='Log GDP per capita at PPP',\n", " ylabel='Happiness ladder score')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's clear that there is a relationship between these variables: people in countries with higher GDP generally report higher levels of happiness.\n", "\n", "We can use `linregress` from SciPy to compute a simple regression of these variables." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.665805Z", "iopub.status.busy": "2021-04-16T19:41:06.665013Z", "iopub.status.idle": "2021-04-16T19:41:06.667050Z", "shell.execute_reply": "2021-04-16T19:41:06.667407Z" } }, "outputs": [], "source": [ "from scipy.stats import linregress\n", "\n", "result = linregress(log_gdp, score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here are the results." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.674538Z", "iopub.status.busy": "2021-04-16T19:41:06.673896Z", "iopub.status.idle": "2021-04-16T19:41:06.676890Z", "shell.execute_reply": "2021-04-16T19:41:06.676435Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Slope0.717738
Intercept-1.198646
\n", "
" ], "text/plain": [ " \n", "Slope 0.717738\n", "Intercept -1.198646" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame([result.slope, result.intercept],\n", " index=['Slope', 'Intercept'],\n", " columns=[''])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The estimated slope is about 0.72, which suggests that an increase of one unit in log-GDP, which is a factor of $e \\approx 2.7$ in GDP, is associated with an increase of 0.72 units on the happiness ladder.\n", "\n", "Now let's estimate the same parameters using PyMC3.\n", "We'll use the same regression model as in Section <<_RegressionModel>>:\n", "\n", "$$y = a x + b + \\epsilon$$\n", "\n", "where $y$ is the dependent variable (ladder score), $x$ is the predictive variable (log GDP) and $\\epsilon$ is a series of values from a normal distribution with standard deviation $\\sigma$.\n", "\n", "$a$ and $b$ are the slope and intercept of the regression line.\n", "They are unknown parameters, so we will use the data to estimate them.\n", "\n", "The following is the PyMC3 specification of this model." ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:06.684220Z", "iopub.status.busy": "2021-04-16T19:41:06.683776Z", "iopub.status.idle": "2021-04-16T19:41:07.363472Z", "shell.execute_reply": "2021-04-16T19:41:07.363009Z" } }, "outputs": [], "source": [ "x_data = log_gdp\n", "y_data = score\n", "\n", "with pm.Model() as model3:\n", " a = pm.Uniform('a', 0, 4)\n", " b = pm.Uniform('b', -4, 4)\n", " sigma = pm.Uniform('sigma', 0, 2)\n", "\n", " y_est = a * x_data + b\n", " y = pm.Normal('y', \n", " mu=y_est, sd=sigma, \n", " observed=y_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The prior distributions for the parameters `a`, `b`, and `sigma` are uniform with ranges that are wide enough to cover the posterior distributions.\n", "\n", "`y_est` is the estimated value of the dependent variable, based on the regression equation.\n", "And `y` is a normal distribution with mean `y_est` and standard deviation `sigma`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how the data are included in the model:\n", "\n", "* The values of the predictive variable, `x_data`, are used to compute `y_est`.\n", "\n", "* The values of the dependent variable, `y_data`, are provided as the observed values of `y`.\n", "\n", "Now we can use this model to generate a sample from the posterior distribution." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:07.367187Z", "iopub.status.busy": "2021-04-16T19:41:07.366757Z", "iopub.status.idle": "2021-04-16T19:41:15.020714Z", "shell.execute_reply": "2021-04-16T19:41:15.020271Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [sigma, b, a]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3000/3000 00:04<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 500 draw iterations (2_000 + 1_000 draws total) took 5 seconds.\n", "The number of effective samples is smaller than 25% for some parameters.\n" ] } ], "source": [ "with model3:\n", " trace3 = pm.sample(500, **options)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When you run the sampler, you might get warning messages about \"divergences\" and the \"acceptance probability\".\n", "You can ignore them for now.\n", "\n", "The result is an object that contains samples from the joint posterior distribution of `a`, `b`, and `sigma`." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.024568Z", "iopub.status.busy": "2021-04-16T19:41:15.023959Z", "iopub.status.idle": "2021-04-16T19:41:15.026783Z", "shell.execute_reply": "2021-04-16T19:41:15.026342Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trace3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ArviZ provides `plot_posterior`, which we can use to plot the posterior distributions of the parameters.\n", "Here are the posterior distributions of slope, `a`, and intercept, `b`." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.030443Z", "iopub.status.busy": "2021-04-16T19:41:15.029834Z", "iopub.status.idle": "2021-04-16T19:41:15.579861Z", "shell.execute_reply": "2021-04-16T19:41:15.579358Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import arviz as az\n", "\n", "with model3:\n", " az.plot_posterior(trace3, var_names=['a', 'b']);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The graphs show the distributions of the samples, estimated by KDE, and 94% credible intervals. In the figure, \"HDI\" stands for [\"highest-density interval\"](https://www.sciencedirect.com/topics/mathematics/highest-density-interval).\n", "\n", "The means of these samples are consistent with the parameters we estimated with `linregress`." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.583372Z", "iopub.status.busy": "2021-04-16T19:41:15.582956Z", "iopub.status.idle": "2021-04-16T19:41:15.587444Z", "shell.execute_reply": "2021-04-16T19:41:15.587099Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sample mean: 0.715698157714354\n", "Regression slope: 0.717738495630452\n" ] } ], "source": [ "print('Sample mean:', trace3['a'].mean())\n", "print('Regression slope:', result.slope)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.590879Z", "iopub.status.busy": "2021-04-16T19:41:15.590413Z", "iopub.status.idle": "2021-04-16T19:41:15.594593Z", "shell.execute_reply": "2021-04-16T19:41:15.594966Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sample mean: -1.174412246262264\n", "Regression intercept: -1.1986460618088843\n" ] } ], "source": [ "print('Sample mean:', trace3['b'].mean())\n", "print('Regression intercept:', result.intercept)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Finally, we can check the marginal posterior distribution of `sigma`" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.613846Z", "iopub.status.busy": "2021-04-16T19:41:15.609720Z", "iopub.status.idle": "2021-04-16T19:41:15.763792Z", "shell.execute_reply": "2021-04-16T19:41:15.764315Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "az.plot_posterior(trace3['sigma']);" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "The values in the posterior distribution of `sigma` seem plausible." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simple regression model has only three parameters, so we could have used a grid algorithm.\n", "But the regression model in the happiness report has six predictive variables, so it has eight parameters in total, including the intercept and `sigma`.\n", "\n", "It is not practical to compute a grid approximation for a model with eight parameters.\n", "Even a coarse grid, with 20 points along each dimension, would have more than 25 billion points.\n", "And with 153 countries, we would have to compute almost 4 trillion likelihoods.\n", "\n", "But PyMC3 can handle a model with eight parameters comfortably, as we'll see in the next section." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.768514Z", "iopub.status.busy": "2021-04-16T19:41:15.767885Z", "iopub.status.idle": "2021-04-16T19:41:15.773083Z", "shell.execute_reply": "2021-04-16T19:41:15.773624Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "25.6" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "20 ** 8 / 1e9" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.777533Z", "iopub.status.busy": "2021-04-16T19:41:15.776895Z", "iopub.status.idle": "2021-04-16T19:41:15.780315Z", "shell.execute_reply": "2021-04-16T19:41:15.780960Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "3.9168" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "153 * 20 ** 8 / 1e12" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple Regression\n", "\n", "Before we implement the multiple regression model, I'll select the columns we need from the `DataFrame`." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.786510Z", "iopub.status.busy": "2021-04-16T19:41:15.785684Z", "iopub.status.idle": "2021-04-16T19:41:15.789253Z", "shell.execute_reply": "2021-04-16T19:41:15.789857Z" } }, "outputs": [], "source": [ "columns = ['Ladder score',\n", " 'Logged GDP per capita',\n", " 'Social support',\n", " 'Healthy life expectancy',\n", " 'Freedom to make life choices',\n", " 'Generosity',\n", " 'Perceptions of corruption']\n", "\n", "subset = df[columns]" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.802047Z", "iopub.status.busy": "2021-04-16T19:41:15.801366Z", "iopub.status.idle": "2021-04-16T19:41:15.805038Z", "shell.execute_reply": "2021-04-16T19:41:15.804531Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Ladder scoreLogged GDP per capitaSocial supportHealthy life expectancyFreedom to make life choicesGenerosityPerceptions of corruption
07.808710.6392670.95433071.9008260.949172-0.0594820.195445
17.645610.7740010.95599172.4025040.9514440.0662020.168489
27.559910.9799330.94284774.1024480.9213370.1059110.303728
\n", "
" ], "text/plain": [ " Ladder score Logged GDP per capita Social support \\\n", "0 7.8087 10.639267 0.954330 \n", "1 7.6456 10.774001 0.955991 \n", "2 7.5599 10.979933 0.942847 \n", "\n", " Healthy life expectancy Freedom to make life choices Generosity \\\n", "0 71.900826 0.949172 -0.059482 \n", "1 72.402504 0.951444 0.066202 \n", "2 74.102448 0.921337 0.105911 \n", "\n", " Perceptions of corruption \n", "0 0.195445 \n", "1 0.168489 \n", "2 0.303728 " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The predictive variables have different units: log-GDP is in log-dollars, life expectancy is in years, and the other variables are on arbitrary scales.\n", "To make these factors comparable, I'll standardize the data so that each variable has mean 0 and standard deviation 1." ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.811549Z", "iopub.status.busy": "2021-04-16T19:41:15.811070Z", "iopub.status.idle": "2021-04-16T19:41:15.814510Z", "shell.execute_reply": "2021-04-16T19:41:15.814081Z" } }, "outputs": [], "source": [ "standardized = (subset - subset.mean()) / subset.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's build the model.\n", "I'll extract the dependent variable." ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.817882Z", "iopub.status.busy": "2021-04-16T19:41:15.817327Z", "iopub.status.idle": "2021-04-16T19:41:15.819820Z", "shell.execute_reply": "2021-04-16T19:41:15.819299Z" } }, "outputs": [], "source": [ "y_data = standardized['Ladder score']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the dependent variables." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:15.823853Z", "iopub.status.busy": "2021-04-16T19:41:15.823309Z", "iopub.status.idle": "2021-04-16T19:41:15.825155Z", "shell.execute_reply": "2021-04-16T19:41:15.825583Z" } }, "outputs": [], "source": [ "x1 = standardized[columns[1]]\n", "x2 = standardized[columns[2]]\n", "x3 = standardized[columns[3]]\n", "x4 = standardized[columns[4]]\n", "x5 = standardized[columns[5]]\n", "x6 = standardized[columns[6]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the model. `b0` is the intercept; `b1` through `b6` are the parameters associated with the predictive variables." ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:16.041184Z", "iopub.status.busy": "2021-04-16T19:41:16.005365Z", "iopub.status.idle": "2021-04-16T19:41:16.685422Z", "shell.execute_reply": "2021-04-16T19:41:16.684886Z" } }, "outputs": [], "source": [ "with pm.Model() as model4:\n", " b0 = pm.Uniform('b0', -4, 4)\n", " b1 = pm.Uniform('b1', -4, 4)\n", " b2 = pm.Uniform('b2', -4, 4)\n", " b3 = pm.Uniform('b3', -4, 4)\n", " b4 = pm.Uniform('b4', -4, 4)\n", " b5 = pm.Uniform('b5', -4, 4)\n", " b6 = pm.Uniform('b6', -4, 4)\n", " sigma = pm.Uniform('sigma', 0, 2)\n", "\n", " y_est = b0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6\n", " y = pm.Normal('y', \n", " mu=y_est, sd=sigma, \n", " observed=y_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could express this model more concisely using a vector of predictive variables and a vector of parameters, but I decided to keep it simple.\n", "\n", "Now we can sample from the joint posterior distribution." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:16.688589Z", "iopub.status.busy": "2021-04-16T19:41:16.688165Z", "iopub.status.idle": "2021-04-16T19:41:27.081040Z", "shell.execute_reply": "2021-04-16T19:41:27.080524Z" }, "tags": [ "hide-output" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [sigma, b6, b5, b4, b3, b2, b1, b0]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3000/3000 00:04<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 500 draw iterations (2_000 + 1_000 draws total) took 4 seconds.\n" ] } ], "source": [ "with model4:\n", " trace4 = pm.sample(500, **options)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Because we standardized the data, we expect the intercept to be 0, and in fact the posterior mean of `b0` is close to 0." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.085454Z", "iopub.status.busy": "2021-04-16T19:41:27.084839Z", "iopub.status.idle": "2021-04-16T19:41:27.087318Z", "shell.execute_reply": "2021-04-16T19:41:27.087694Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "-0.0009400028402880869" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trace4['b0'].mean()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "We can also check the posterior mean of `sigma`:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.091318Z", "iopub.status.busy": "2021-04-16T19:41:27.090756Z", "iopub.status.idle": "2021-04-16T19:41:27.093519Z", "shell.execute_reply": "2021-04-16T19:41:27.093939Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "0.5157546237813752" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trace4['sigma'].mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From `trace4` we can extract samples from the posterior distributions of the parameters and compute their means." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.098653Z", "iopub.status.busy": "2021-04-16T19:41:27.097926Z", "iopub.status.idle": "2021-04-16T19:41:27.099882Z", "shell.execute_reply": "2021-04-16T19:41:27.100306Z" } }, "outputs": [], "source": [ "param_names = ['b1', 'b3', 'b3', 'b4', 'b5', 'b6']\n", "\n", "means = [trace4[name].mean() \n", " for name in param_names]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also compute 94% credible intervals (between the 3rd and 97th percentiles)." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.105382Z", "iopub.status.busy": "2021-04-16T19:41:27.104682Z", "iopub.status.idle": "2021-04-16T19:41:27.107505Z", "shell.execute_reply": "2021-04-16T19:41:27.107872Z" } }, "outputs": [], "source": [ "def credible_interval(sample):\n", " \"\"\"Compute 94% credible interval.\"\"\"\n", " ci = np.percentile(sample, [3, 97])\n", " return np.round(ci, 3)\n", "\n", "cis = [credible_interval(trace4[name])\n", " for name in param_names]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following table summarizes the results." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.118557Z", "iopub.status.busy": "2021-04-16T19:41:27.118072Z", "iopub.status.idle": "2021-04-16T19:41:27.120981Z", "shell.execute_reply": "2021-04-16T19:41:27.120550Z" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Posterior mean94% CI
Logged GDP per capita0.244[0.085, 0.41]
Social support0.225[0.081, 0.377]
Healthy life expectancy0.225[0.081, 0.377]
Freedom to make life choices0.187[0.087, 0.289]
Generosity0.054[-0.039, 0.14]
Perceptions of corruption-0.100[-0.197, 0.002]
\n", "
" ], "text/plain": [ " Posterior mean 94% CI\n", "Logged GDP per capita 0.244 [0.085, 0.41]\n", "Social support 0.225 [0.081, 0.377]\n", "Healthy life expectancy 0.225 [0.081, 0.377]\n", "Freedom to make life choices 0.187 [0.087, 0.289]\n", "Generosity 0.054 [-0.039, 0.14]\n", "Perceptions of corruption -0.100 [-0.197, 0.002]" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index = columns[1:]\n", "table = pd.DataFrame(index=index)\n", "table['Posterior mean'] = np.round(means, 3)\n", "table['94% CI'] = cis\n", "table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks like GDP has the strongest association with happiness (or satisfaction), followed by social support, life expectancy, and freedom.\n", "\n", "After controlling for those other factors, the parameters of the other factors are substantially smaller, and since the CI for generosity includes 0, it is plausible that generosity is not substantially related to happiness, at least as they were measured in this study.\n", "\n", "This example demonstrates the power of MCMC to handle models with more than a few parameters.\n", "But it does not really demonstrate the power of Bayesian regression.\n", "\n", "If the goal of a regression model is to estimate parameters, there is no great advantage to Bayesian regression compared to conventional least squares regression.\n", "\n", "Bayesian methods are more useful if we plan to use the posterior distribution of the parameters as part of a decision analysis process." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "In this chapter we used PyMC3 to implement two models we've seen before: a Poisson model of goal-scoring in soccer and a simple regression model.\n", "Then we implemented a multiple regression model that would not have been possible to compute with a grid approximation.\n", "\n", "MCMC is more powerful than grid methods, but that power comes with some disadvantages:\n", "\n", "* MCMC algorithms are fiddly. The same model might behave well with some priors and less well with others. And the sampling process often produces warnings about tuning steps, divergences, \"r-hat statistics\", acceptance rates, and effective samples. It takes some expertise to diagnose and correct these issues.\n", "\n", "* I find it easier to develop models incrementally using grid algorithms, checking intermediate results along the way. With PyMC3, it is not as easy to be confident that you have specified a model correctly.\n", "\n", "For these reasons, I recommend a model development process that starts with grid algorithms and resorts to MCMC if necessary.\n", "As we saw in the previous chapters, you can solve a lot of real-world problems with grid methods.\n", "But when you need MCMC, it is useful to have a grid algorithm to compare to (even if it is based on a simpler model).\n", "\n", "All of the models in this book can be implemented in PyMC3, but some of them are easier to translate than others.\n", "In the exercises, you will have a chance to practice." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** As a warmup, let's use PyMC3 to solve the Euro problem.\n", "Suppose we spin a coin 250 times and it comes up heads 140 times.\n", "What is the posterior distribution of $x$, the probability of heads?\n", "\n", "For the prior, use a beta distribution with parameters $\\alpha=1$ and $\\beta=1$.\n", "\n", "See [the PyMC3 documentation](https://docs.pymc.io/api/distributions/continuous.html) for the list of continuous distributions." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:27.133262Z", "iopub.status.busy": "2021-04-16T19:41:27.132650Z", "iopub.status.idle": "2021-04-16T19:41:30.707962Z", "shell.execute_reply": "2021-04-16T19:41:30.708574Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [x]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3000/3000 00:00<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 500 draw iterations (2_000 + 1_000 draws total) took 1 seconds.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "n = 250\n", "k_obs = 140\n", "\n", "with pm.Model() as model5:\n", " x = pm.Beta('x', alpha=1, beta=1)\n", " k = pm.Binomial('k', n=n, p=x, observed=k_obs)\n", " trace5 = pm.sample(500, **options)\n", " az.plot_posterior(trace5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Now let's use PyMC3 to replicate the solution to the Grizzly Bear problem in <<_TheGrizzlyBearProblem>>, which is based on the hypergeometric distribution.\n", "\n", "I'll present the problem with slightly different notation, to make it consistent with PyMC3.\n", "\n", "Suppose that during the first session, `k=23` bears are tagged. During the second session, `n=19` bears are identified, of which `x=4` had been tagged.\n", "\n", "Estimate the posterior distribution of `N`, the number of bears in the environment.\n", "\n", "For the prior, use a discrete uniform distribution from 50 to 500.\n", "\n", "See [the PyMC3 documentation](https://docs.pymc.io/api/distributions/discrete.html) for the list of discrete distributions.\n", "\n", "Note: `HyperGeometric` was added to PyMC3 after version 3.8, so you might need to update your installation to do this exercise." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:30.711903Z", "iopub.status.busy": "2021-04-16T19:41:30.711230Z", "iopub.status.idle": "2021-04-16T19:41:32.224305Z", "shell.execute_reply": "2021-04-16T19:41:32.224808Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Multiprocess sampling (2 chains in 2 jobs)\n", "Metropolis: [N]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [4000/4000 00:00<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 1 seconds.\n", "The number of effective samples is smaller than 25% for some parameters.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbgAAAEoCAYAAAAqrOTwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAcbklEQVR4nO3deXxU1d3H8c8hIHugbAVERUFRUAtKFUVAEJEWsaW1GqVV3LWKe13qQkSeylO1rohKrSIVQUV9lEVQEaWorQutRRQLIq1IQbAKCAgh9/ljwjQJSwiQzOT4eb9e95XMOWfu/d0Dr/nOXWYSkiRBkqTYVMt0AZIkVQQDTpIUJQNOkhQlA06SFCUDTpIUJQNOkhQlA07KoBDCoBBCEkL4MoTwnVJ91Yv68jNUnlSlGXBSdmgAXJ3pIqSYGHBSdpgGDA4hNM90IVIsDDgpOwwr+nldRquQImLASdlhCXAvcG4IYa9MFyPFwICTssf/AmuBIZkuRIqBASdliSRJvgBuB04LIbTLdD1SVWfASdnlDuALYGimC5GqOgNOyiJJkqwGbgF+BnTMbDVS1WbASdnnPmAx/72zUtIOMOCkLJMkyTekTlEel+lapKrMgJOy08PAPzJdhFSVhSRJMl2DJEm7nEdwkqQoGXCSpCgZcJKkKBlwkqQoGXCSpChVr4RteJumJKmihK11eAQnSYqSASdJipIBJ0mKkgEnSYqSASdJipIBJ0mKkgEnSYqSASdJipIBJ0mKkgEnSYpSZXxVVzTGT5+b6RIAOLlX+0yXIElZzyM4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhJUpQMOElSlAw4SVKUDDhlzM0330zv3r3Jzc0lhMAnn3yy2ZgkSbj33nvp0KEDderUoXXr1gwePJgvv/wyPWbevHlceOGFHHDAAdSpU4d99tmHSy65pMQYSd8+Bpwy5oEHHqCgoICePXtudcw999zDxRdfzIknnsikSZO49tprGTt2LKeffnp6zIsvvsisWbO44IILmDx5Mtdffz1PPvkkffr0obCwsDJ2RVIWCkmSVPQ2KnwDlWX89LmZLgGAk3u1z3QJu0RhYSHVqlVj4sSJ9O/fn4ULF9K6desSY7p06cLuu+/OhAkT0m133303l112GStXrqRu3bqsWLGCRo0aEUJIj5k2bRrHHXccM2bMoEePHpW1S5IqX9hah0dwWe6+//01v77gJN5981WuOKM/p/3wUPr168cXX3zB/Pnz6dmzJ3Xr1qVz586899576ecVFhYyfPhw2rZtS82aNdlvv/0YPXp0iXVPmjSJY489lmbNmpGbm0uXLl2YNm1aiTH5+fk0adKE2bNn06VLF+rUqUOnTp2YOXPmTu9btWpl//fbsGEDDRo0KNHWsGFDkiRh05uzxo0blwg3gE6dOgGwbNmyna5TUtVkwFUBy5ct4clH7uXkMy/mnMvyef311zn33HPJy8sjLy+Pp556ioKCAvLy8tIv+oMHD2bYsGGce+65TJo0iQEDBnDmmWcyceLE9HoXLlxI//79GTNmDBMmTODII4/kBz/4AbNmzSqx/TVr1nD66adz3nnnMWHCBGrWrMmAAQNYs2ZNekxhYSEFBQXbXDZu3FjufT/77LN54oknmDx5MqtWrWL27NkMHz6cQYMGUa9eva0+7/XXXwegffs4jnYllV/1TBegsq1e+RVD73mM5i33BKDOxhXceuutjB49mtNOOw1I3YzRr18/PvzwQ2rUqMHIkSN5+OGH09eqevfuzZIlS7jppps4/vjjAbjooovS2ygsLKRnz568//77PPTQQ3Tt2jXdt3btWu6880569eoFQIsWLejUqROvvfYaffv2BeDMM8/c7AixtB49ejBjxoxy7fsFF1zAqlWr6N+/f/p62o9//GMeeOCBrT5nzZo1XHPNNfTo0YMOHTqUa3uS4mHAVQFNm7dMhxtA27ZtAdKBU7xt8eLFLFiwgGrVqjFgwAAKCgrSY4455hgef/xxNm7cSE5ODp9++inXXXcdL730EkuWLEkf/RUPN4AaNWpw9NFHpx9vOir69NNP0235+fklAnNL6tevX57dBuDxxx9n6NChDBs2jK5du7JgwQJuuOEGzjrrLB599NHNxidJwllnncWyZcuYNGlSubcnKR4GXBVQt15uice77bYbkLoWVbpt3bp1LF++nI0bN2527WqTJUuW0LJlS0444QRWrVrF0KFDadu2LXXr1uXGG2/c7LpVbm5uietlxbe1yZ577kmrVq22uR+lr5OVpbCw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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "k = 23\n", "n = 19\n", "x = 4\n", "\n", "with pm.Model() as model6:\n", " N = pm.DiscreteUniform('N', 50, 500)\n", " y = pm.HyperGeometric('y', N=N, k=k, n=n, observed=x)\n", " trace6 = pm.sample(1000, **options)\n", " az.plot_posterior(trace6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** In <<_TheWeibullDistribution>> we generated a sample from a Weibull distribution with $\\lambda=3$ and $k=0.8$.\n", "Then we used the data to compute a grid approximation of the posterior distribution of those parameters.\n", "\n", "Now let's do the same with PyMC3.\n", "\n", "For the priors, you can use uniform distributions as we did in <<_SurvivalAnalysis>>, or you could use `HalfNormal` distributions provided by PyMC3.\n", "\n", "Note: The `Weibull` class in PyMC3 uses different parameters than SciPy. The parameter `alpha` in PyMC3 corresponds to $k$, and `beta` corresponds to $\\lambda$." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Here's the data again:" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:32.228096Z", "iopub.status.busy": "2021-04-16T19:41:32.227685Z", "iopub.status.idle": "2021-04-16T19:41:32.230867Z", "shell.execute_reply": "2021-04-16T19:41:32.230365Z" }, "tags": [ "hide-celll" ] }, "outputs": [], "source": [ "data = [0.80497283, 2.11577082, 0.43308797, 0.10862644, 5.17334866,\n", " 3.25745053, 3.05555883, 2.47401062, 0.05340806, 1.08386395]" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:32.301762Z", "iopub.status.busy": "2021-04-16T19:41:32.266235Z", "iopub.status.idle": "2021-04-16T19:41:37.508294Z", "shell.execute_reply": "2021-04-16T19:41:37.508668Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [k, lam]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [4000/4000 00:01<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 2 seconds.\n", "The acceptance probability does not match the target. It is 0.8819724175144361, but should be close to 0.8. Try to increase the number of tuning steps.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAFTCAYAAABF801FAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAB4wElEQVR4nO3dd3gc1dUG8PfuarXqXbKa1SXLvcm9F1xowaYZQjGE0EKHD5LQDCEhoSRAgBBaICSxAVMMrti4927Zli1ZsiTLKlbvK2nLfH+sNNq1ZXVptry/59HjvbPtjNarmTP33nOFJEkgIiIiIiIiIuWplA6AiIiIiIiIiMyYpBMRERERERHZCCbpRERERERERDaCSToRERERERGRjWCSTkRERERERGQjmKQTERERERER2Qgm6UQ2TgixTAjBtRKJiIgIQOu5gRDCRelYiKj3MUknIiIiIiIishFM0omIiIiIiIhsBJN0IjsjhHhICLFHCFEuhKgUQuwVQlx10WNimofB3S+EeFUIUSSEqBFC/EcI4SGESBBCbBBC1AohMoUQdyq1P0RERNRzQogFzcf1d4UQPMcnsmP8AhPZnxgAHwO4EcDNAA4CWC2EWNjGY38HIBzAnQBeaH78BwC+A7AGwCIAqQD+JYQY2ueRExERUa8TQtwB4AcAf5Ek6SFJkkxKx0RE3cdiE0R2RpKkp1puN18p/xlAEoD7Aay76OFZkiS19JJvEEJMA3A7gNslSfpP82scBHAtgBsAnOzj8ImIiKgXCSGeBvBHAA9IkvSx0vEQUc8xSSeyM0KIsQBeAjAOQDAA0XxXehsPvzhpP93874aWDZIkVQghigEM7OVQiYiIqG/9DcA9AG6QJGmV0sEQUe/gcHciOyKEGAhzz3kAgIcBTIY5WV8PwK2Np1Rc1G5qZ3tbzyciIiLbdQvMo+A2KR0IEfUe9qQT2ZcFAHwB3CRJ0vmWjUIID+VCIiIiIoXMAfATgHVCiCslSapVOiAi6jn2pBPZl5ZkXN+yQQiRBGCKMuEQERGRgk4CmAkgEcB6IYS3suEQUW9gkk5kXzYBMAD4txBiXvPSaT8BOKdsWERERKQESZJOwZyox4GJOpFDYJJOZEckSToJ4JcAomFeauVpAL8FsF3JuIiIiEg5kiSlA5gB8/nBT0IIH4VDIqIeEJIkKR0DEREREREREYE96UREREREREQ2g0k6ERERERERkY1gkk5ERERERERkI5ikExEREREREdkIJulERERERERENsKlg/tZ+p2IiKh/CYXel8d8IiKi/tXmMZ896UREREREREQ2gkk6ERERERERkY1gkk5ERERERERkI5ikExEREREREdkIJulERERERERENoJJOhEREREREZGNYJJOREREREREZCOYpBMRERERERHZCCbpRERERERERDaCSToRERERERGRjXBROgDqHVV1jdh48CyOZRajsqYBAT7uGDsoFFOHD0SAj7vS4RERERHJJElCWk4p9p3KR05hFarqGqF1VSMs0Asj4kIwYUgEvNxdlQ6TiEgRQpKk9u5v906yDduO5uKfPxxBo95wyX0qlQpXTYzHrXOHwVWjViA6IiLqIqHQ+/KYT31OkiQcTC/EfzeeRF5x1WUfp1arMC8lDjfOGgxfT20/RkhE1K/aPOYzSbdjJpOEj9ccxYb9WR0+Ni7cH8/ePgV+Xm79EBkREfUAk3RySHW6Jry/6jD2njzf6ee4azV48LqxmDwssg8jIyJSDJN0R/P5+lT8sCtDbocFeuHGmYMRE+qHzPxybDyYjTPny+X7I4N98Kdfz4Qnh48REdkyJunkcIrKa/GHz3eiqLxW3qbVuGD6yCikJIch2NcDtbomZOZXYPuxc8gpqrR6/i+mJOH2+cMhhFJfDyKiPsEk3ZFsOpiNf6w6JLcnDY3EbxaNhbtWI2+TJAnr9mXh0zXHIDV/lCPiQ/Ds7VPhombNQCIiG8UknRxKWbUOv/vnZpRV6+Rtc8fG4tYrhrU5lL1lSPy/1h7DhYo6efus0TF48LqxUKmYqBORw2CS7ijyS2vwxLubYDAaAQDjksPx9C2TLnvQ2n7sHN5euV9uzx8fj19fPYpXo4mIbBOTdHIYukY9nvt4m9wzrnFR4+Hrx2FKJ4av1+ma8PbKAziUUShvmz4yCo9cP47nMETkKNr8Y8buVDsjSRL+ueqwnKBHDfDFYzeOb/eq8vSRUbhp1hC5vWF/FjYezO7zWImIiMh5SZKEt1cekBN0lUqFZ26d1KkEHQA83V3x219OxuwxMfK27cfOYcXmtD6IlojIdjBJtzNbjuTiZE4JAEAlBB65fhzcXDteSe+mWYMxZfhAuf2vdceQX1rTZ3ESERGRc1u9JxMHThfI7fuvHY3RiaFdeg2VSuDB68ZizthYedvKraew/di5XouTiMjWMEm3I41NBvx34wm5fc3kRMSG+XXquUIIPLQoBQODfQAATXoj3ll5AEajqS9CJSIiIieWXViJL346LrevnpRolWh3hRAC910zGqMSBsjb3v/+EHKLLr+EGxGRPWOSbkfW7M1EZW0DAMDf2x03zx7SwTOsuWrUePTG8VA3F43LzC/HN9tP93qcRERE5LyMRhP+/u1BuSMgLtwft88f3qPXVKtVePLmiYgI8gYA6A1GvLZ8D+ob9D2Ol4jI1jBJtxM19Y34bke63L5p1mBoOzHM/WKxYX5YYpHcf73lFHIKK3sjRCIiIiKs2ZuJXItCcU/cNKFXVpXxcNPg/26ZBK3GfP5TVF6Lz9en9vh1iYhsDZN0O7FuX5Z8tTgs0MuqiEpXXTd1EJKjggAAJknCBz8chsnEor5ERETUM6VV9Vjxc2tht5tmDUZYoFevvf7AEB888IsxcnvToWwczbzQa69PRGQLmKTbgSa9Eev2ZcntG2cO7tEVaZVK4IHrxsjD3s+cL8dPB872OE4iIiJybst/PolGvQEAMDDYB9dOSer195g6YiAmDomQ2+9/dxB1uqZefx8iIqUwSbcDO1LPobquEQAQ6ONuVaW9uyKDfbB4erLc/s/GEyiv1vX4dYmIiMg55RZVYduR1qrrv7p6VK8Mc7+YEAL3XjsG3h5aAEBZtQ7/3nC8g2cREdkPJuk2TpIk/LDrjNy+cmJCrx3wFk8bhPBAcwEWXaMen6w91iuvS0RERM7ni5+OQ4J5+tzoxFAMjwvps/fy9dTi19eMlts/H8pB5vnyPns/IqL+xCTdxqXllOJ8STUAQKtxwRUp3Vu+pC2uGjXuvbb1ALf35HkcTC/stdcnIiIi55CRV4YjZ4oAAAICt8/rWTX3zpgyLBJjk8IAABIkfLzmKCSJNXaIyP4xSbdxmw5ly7enj4yCp7trr77+8LgQzBwdLbc/Xn0EjU2GXn0PIiIicmwrt7Yu6Tp1xEBEh/r2y/vedeVIqxo7246e6+AZRES2j0m6DavTNWHPyXy53Zu96JbunD8CXs3Jf0llPb7ZxrXTiYiIqHOyCytxKMM8Ek9A4PoZyR08o/eEBXrhFxbF6b746TjXTiciu8ck3YbtSM2D3mAEAMSE+iEu3K9P3sfHU4vbrhgmt7/flYH80po+eS8iIiJyLJYX9ycOjcDAEJ9+ff/rZyTD39sdAFBZ24BVuzL69f2JiHobk3QbtvlIjnx7bkoshBB99l5zU2KRGBkAADAaTfjoxyOc10VERETtKq2qx7601lF//dmL3sLN1QW3z2vtbPhx1xlUNa+KQ0Rkj5ik26gLFXXIyq8AAKjVKkwdHtmn7yeEwH3XjoGA+ULA8bPF2HX8fJ++JxEREdm39fuyYGq+qD8sNgSxYX6KxDFtRBQGhpjnwTfqDfiWU/eIyI4xSbdRu0+0Jsij4gfIa4H2pdgwP1w5KV5u/2vdMc7rIiIiojY1Nhmw8WBrgdurJiUoFotKJXDr3KFye/3+syitqlcsHiKinmCSbqMsk/TJw/q2F93SktlDreZ1fbk5rd/em4iIiOzHjtQ81OqaAAAhfp5IGRSmaDzjksOQEGGeumcwGvH1llOKxkNE1F1M0m1QYVktzha0DnUfl9x/Bz0PNw2WLhght9fuzURuUVW/vT8RERHZPkmSsHpPptxeODEeKlXf1c7pDCEEfmlRCHfzkVyUVLI3nYjsD5N0G7TnZGsv+uiEAb2+NnpHpgyPxLDYEACASZLw0WoWkSMiIqJWaTmlyCs2X8TXalwwZ0yMsgE1GxEfgiExwQAAk8mEH1jpnYjsEJN0G2RZsK0/h7q3EELgnqtHQaUy//c4lVuK7cfO9XscREREZJs2HWqdiz5jVFS/dyi0Z/H0QfLtjQezWemdiOwOk3QbU1Bag5yiSgCAi1qNccnhisQxMMQH11gUgPl8/XHUNc87IyIiIudVp2vCnpOty67NHRurYDSXGpUwQK4yrzcYsXr3GWUDIiLqIibpNmb/qQL59ujEAfBw0ygWy42zBiOguYhcVV0DvtzCInJERETObveJ89AbjACAqAG+iAv3UzagiwghrNZrX7cvix0NRGRXmKTbmEMZRfLt8YOV6UVv4a7VYOmVI+X22j1ZyCmsVC4gIiIiUtzPh3Pk23PGxEAIZQvGtWXikAhEBHkDAHSNeqzff1bhiIiIOo9Jug2p1TXhdG6p3B6dGKpgNGaTh0ZgeJy5iJwECR+yiBwREZHTyiuuxpnz5QDMK9BMHxmlcERtE0Jg0bTWuemr95xBY5NBwYiIiDqPSboNOXrmAkzNCXB8hD/8vd0Ujqi1iJxabf6vkn6uDFuP5CocFRERESlhs0Uv+rhBYfDx1CoXTAemjYxCkK8HAKC6rhGbDuUoGxARUScxSbchhzIK5dspg/pvbfSORAb74NrJiXL73z+xiBwREZGzMZkkq9VeZtvIsmuX46JW4RdTk+T2qp3pMBhNCkZERNQ5TNJthMkk4bDFfPSxSbaTpAPADTMHI9DHXESuuq4Ry3/uvSJy6enp+M1vfoPBgwfDw8MDcXFxePTRR1FZWdnhc++//34kJyfDy8sL/v7+mD59OjZt2tRrsREREZHZ8bPFqKxtAAD4erphVMIAhSPq2NyxsXJvf1m1DrtPnO/gGWaNjY148sknERISAk9PT1x11VXIycnp1POeeOIJhIaGwsPDA9OmTcPBgwetHrN06VIIIdr8Wb58eZf3kYgcD5N0G5GRV4ba5t5pf293m6uU6ubqgrssisit35eF7F4qIrdx40bs2rULDzzwANauXYvnnnsOX3/9NebNmweTqf0r3jqdDg899BC+++47/Oc//0FQUBAWLlyIvXv39kpsREREZLbzeJ58e8rwSHkqnC1z1ahx5cTWJWV/3H2mU7V1HnnkEXz22Wd44403sHLlSpSWluKKK65AQ0NDh8/75JNPsGzZMnzzzTfw8vLC3LlzkZvbOlXw+eefx549e6x+7rjjDri4uGDu3Lnd31kichiigz9UrBDWT/678QS+3X4agHn42G8WpSgc0aUkScIfPt+JY1kXAADDYkOw7K5pPa7qWlZWhoCAAKvX+emnnzB//nxs3boVM2bM6PRrGY1GxMbG4rrrrsM777zTo7iIiBSiVKlsHvPpsvQGI+7+y2rUN+gBAK/eOwtJAwMVjqpzquoacd8ba+Vl4165ZyYGRwdd9vHnz59HTEwMPv30U9xxxx0AgPz8fMTGxuL999/HPffc0+7zPvzwQ9x9990AzD3rcXFxWLRoEd59993LvufQoUMRFRWFdevWdXc3icg+tXnMt/1LoE7iYHrH89GXLl2KlJQUrFmzBkOGDIGHhweuuuoqlJeXIzMzE7NmzYKnpydSUlKQmpoqP89kMuHPf/4zEhISoNVqkZSUhM8//9zqtdesWYMrrrgCISEh8PHxwcSJE/HTTz9ZPeall17CW09eh6qibGz51+/xx/uuwOChI7Bjx44e7XtgYOAlif7o0aMBAMXFxV16LbVaDT8/PzQ1cc48ERFRbzmcUSQn6CF+nkiMDFD8vGTZsmUICgrCkSNHMHHiRHh4eGD06NGXnJf4emqtqtCv3n2m3X1teZ/FixfL2yIiIjB16tR2k+jjx4/DaDRa9YZrtVpMmzYNa9asuezzUlNTkZaWhltuuaXduIjIeTBJtwEVNQ04d6EKgHk5k5HtzPE6d+4cXnjhBbzyyiv48MMPsXv3btx7771YsmQJlixZgpUrV8JgMGDJkiXycK6HH34Yr7zyCu69916sWbMGixYtwt13343Vq1fLr5udnY1rrrkGX3zxBb755htMnjwZCxcuxK5du6zev0Gnw+mNHyJ29BWYcMNTqNIZsGjRItTX18uPMZlMMBgM7f4YjcZ2fye7d+8GAAwZMqTD358kSTAYDCgrK8Pf/vY3nDlzRr6CTURERD23I7V1qPu0EQPli+tKn5fU19fjzjvvxH333YdvvvkGWq22zfOSBeNjYTIZYTIZsedEHvJLqi57XnL69GlERkbCy8vL6r0GDx6M06dPX/Z31DIU3tXV1Wq7VqtFbm6uVUyWVqxYATc3N1x33XWXfW0icjKSJLX3Q/1g+9FcafFzX0uLn/taeu7jrZd93J133imp1WopMzNT3vZ///d/EgDp888/l7etWbNGAiClpaVJZ86ckYQQ0meffWb1WrfffruUkpLS5vsYjUZJr9dL8+bNk+666y55+4svvigBkL77Ya1087JvpcXPfS3Nvuc1CYC0bt06qzhhHjZ52Z8ZM2Zcdj/r6uqk5OTkdh9jafny5fLrenp6SqtWrerU84iIbFRHx+a++iFqU31Dk3zcX/zc11JOUaUkSbZzXvLzzz/L244cOdLj85J77rlHGjly5CVxPPvss1JYWNhlf0+pqakSAOmHH36Qt5lMJmnw4MESACk/P7/N58XFxUmLFy++7OsSkUNr85js0j+XAqg9x7Jah3QPjwtu97ExMTGIj4+X2wkJ5mIos2fPvmRbfn4+srKyoFKpsGjRIhgMBvkxc+bMwfLly2E0GqFWq3H+/Hk8++yz2LRpEwoLC+Wr3VOmTLF6f41Gg2uvmo9a7Ul8tyMdPsGRAIC8vNYr7MuWLcNDDz3U7n54e3u3uV2SJPzqV79CcXFxu0PDLM2fPx8HDhxAaWkp/vvf/2LJkiVYu3YtZs6c2annExER0eXtP1Ugz+eOGuCL6AG+8n22cF5iebxvGYF3/nxrFfeW85LTuaX4dO0xAOaCcs/dPhVuWvOp8MXnJW3V25Ekqd06PMOHD8eUKVPw1FNPITw8HFFRUfjrX/+KjIwMAOYpeRfbt28fzp49i7/85S+XfV0icj5M0hUmSRJSmwuxAcDI+PaXM/Hz87Nqtwypstzesq2hoQGlpaUwGo3w9fVFWwoLCxEeHo5rr70WNTU1ePnll5GQkABPT0+88MILl8wJ9/HxgUqlwjVTkrB6Tyb0zdvPnGt9XFRUFCIjI9vdj8sd5J555hl899132LhxI+Li4tp9jRb+/v5ISTEX2luwYAEKCgrwwgsvYPv27Z16PhEREV3exUPdLdnKeUlb79Wi5bxk5EgJe3NNyC+rAQCUGn1x9ahEANbnJf7+/m0uA1tZWXnJ/l7ss88+w4033iiflwwdOhSPPvoo/v73vyMgIOCSx69YsQLe3t646qqr2n1dInIuTNIVVlhWi7JqHQDzMmcJEf69+voBAQFwcXHBrl27rA5iLUJCQpCZmYkjR45g3bp1WLBggXyfTqe77Ov6emoxf1wcVu8xF185cuaCfIX57rvvvqQAzMVmzJiBrVu3Wm3729/+hjfeeAMrVqzAtGnTurCX1kaPHo0VK1Z0+/lERERkVlXXiGOZrZ0JU4cPbOfRHeur85L2XO685Ps/td62PC9JTk5GXl4e6urq4OnpKT/m9OnTSE5Obve9EhIScOTIEZw9exZ6vR5JSUl4+OGHMWbMGGg0GqvHmkwmfP3117juuuvg7u7erX0jIsfEJF1hqRZD3YfFBvf6mqOzZ8+G0WhEVVUVrrjiijYf03LQ02q18rbc3Fzs2rULI0aMuOxrXzs1Cev2ZwEASirrcCK7BMPjQro13P1///sfnnzySbz55pu46aabOrVvbZEkCXv27EFsbGy3X4OIiIjM9qflw9Q81DxpYCBC/D07eEb7+vK85HIsz0ua9Ab88Ytd0DWah9rfNm8YRsQPsDovmTdvHgDgu+++w2233QYAKCgowI4dO/D+++936j1bRgOWlpbiq6++wh//+MdLHrN9+3bk5+ezqjsRXYJJusKOn21N0kd0MNS9OwYNGoT7778fS5YswdNPP42UlBQ0NDTg5MmTyMjIwMcff4zk5GRERkbiySefxB/+8AfU1NTgxRdfRERERLuvHejjjtmjY/B1c/ubbacxPC4EMTExiImJ6XSM27Ztw9KlSzFv3jxMmjQJe/fule+LjIyUh86//PLLePnll+U5bDt27MCbb76JxYsXIyoqCmVlZfj888+xd+9e/Pjjj136PREREdGl9p0qkG9PHtb+VLbO6Mvzksu5+Lzk1lovfLvdXKX9bI0n7m4emt4iMjISv/rVr/DYY49BkiQEBwdj2bJliI6OlpN24NLzEgB45513EBgYiIiICJw5cwavvvoqhg8fjl/96leXxLVixQoEBgZe9mIFETkvJukKMpkkHD9bIreHx4f0yfu89957SEpKwkcffYQXXngBPj4+GDJkiHzA0Gq1+Pbbb/Gb3/wGN9xwAyIjI/Hss89i69atOHHiRLuvvWj6IDzQfPv42WLkFlUhOrTteWaXs2XLFuj1emzYsAEbNmywuu/FF1/EsmXLAJiHhVkukTJw4EC4uLjg97//PUpKShAcHIxRo0Zh586dmDRpUpdiICIiImt1uiakWnQmTBgc3iuv25fnJZ2xYEI8vt+ZAZPJhFO5pcjKr0D8RdMN33nnHXh6euKJJ55AfX09ZsyYgeXLl8PNzU1+zMXnJYB5FMBzzz2HgoIChISE4NZbb8WLL754ydB+g8GAb775BjfccANcXHg6TkTWREu1zMto907qmczz5Xjmn5sBAH5ebvj46avarRpqq15fsRd7T5qrqM4eE4PfLErp4BlERNQOpQ4EPOaTlR3HzuGtlfsBALFhfnjjwbkKR9R73vp6P3akngMATBsRhcduHK9wRETkpNo85vfuBGjqkuPZrb3oI+JD7DJBB4CrJyXIt3ek5qG6rlHBaIiIiKg37E3Ll29PHNq9oea2yvLcZdeJ83IRXyIiW8AkXUGnc0vl28Ni218f3ZYlRwUiLtw8TExvMOKng2cVjoiIiIh6orHJgMNniuT2hMGOlaQnRAYgOSoIgHnY+rq9mQpHRETUikm6QiRJwulzZXI7OTpIwWh6RghhdUV6w76zMBhNCkZEREREPXE08wKa9Ob51hFB3hgY4qNwRL3v2imJ8u0NB85C16hXMBoiolZM0hWSV1KDWl0TAMDHU4vwQC+FI+qZycMi4etpLqZSXqOzqgZLRERE9sVqqPsQx+pFbzEuORxhzedf9Q16/HwoR9mAiIiaMUlXiOVQ98FRQXY7H72FxkWNeePj5PYmDnknIiKySwajCQfTC+X2BAdN0lUqgWsmt/amr95zBkaOBCQiG8AkXSGnLJL05OhABSPpPXPHxkA0FyhMzSrGhYo6hSMiIiKirjqZXYL6BvPQ7yBfD8SF+ykbUB+aOSoaXu6uAICSynrssRhBQESkFCbpCrFM0gfb8Xx0S0G+HhiVOEBubz6co1wwRERE1C0XD3W399F+7dG6umDBhHi5/cOuDHSwPDERUZ9jkq6A0qp6lFTWAwBcNWrEhvkpG1AvmjM2Rr69+VAOTCYe6IiIiOyFJEk4eLp1qPv4weEKRtM/rpyYABe1GgCQlV+BtJzSDp5BRNS3mKQr4HRua1X3pMhAuKgd52MYlxwOH08tAHMBuSMWy7cQERGRbcspqkJ5jXnNcE83VyRHOcaUvPb4emoxc1SU3P5x9xkFoyEiYpKuCEecj97CRa3CzFHRcpuVUomIiOzHoYzWXvRRiQOgdqCOhPZcY7Ec24HTBcgvrVEwGiJyds7xl9fGnLJYH32Ig8xHt2Q55P1AeiGq6xqVC4aIiIg6zXKo+7hBYQpG0r8ig32QYrG/321PVzAaInJ2TNL7WZ2uCeeKqgAAAgJJAwMUjqj3RQb7IGmgeYSAyWTCrhPnFY6IiIiIOlJV14jM8xUAzOcolsVgncGiaYPk29uOnUMxV6khIoUwSe9n6XnlkGAuphYb7gd3rUbhiPrGjJGtc7u2Hc1VMBIiIiLqjMPphfI5SnJ0ILw9tApH1L+So4MwNCYYgLmT4Vv2phORQpik97PTVkuvOdZ8dEtThkdCpTL/9zpzvhwFnNtFRERk0w5mtBZ7HetEQ90t3ThrsHx785EclFbVKxgNETkrJun9zHI+enKU481Hb+HtocXYpFC5vT01T8FoiIiIqD0GowlHLVZkSXHSJH1YbLA8Zc9oNGHVzgyFIyIiZ8QkvR8ZjCacOV8utx19WZPpFkPedxw7B0nimulERES2KC2nFA1NBgBAsJ8HIoO9FY5IGUII3DiztTd948FsVNY2KBgRETkjJun96NyFKugNRgBAkK8HAnzcFY6ob6UMCpPn3BeV1yIjr7yDZxAREZESDqW3VnVPGRQOIYSC0ShrdOIAxIX7AwD0BiN+YG86EfUzJun9yDJJTYx0vKruF3PVqDFpaITc3n7snILREBER0eVYro8+dlBoO490fEII3DAjWW6v3ZeF8mqdghERkbNhkt6PzuS3JumOuPRaWyyHvO9Ny4fJxCHvREREtiS/tAaFZbUAAK3GRa5w7szGDw5HTKgfAHNv+ldbTikbEBE5FSbp/eiMRU96khP0pAPA0Jhg+Hial3CprG3AKYvq9kRERKQ8y6HuI+ND4KpRKxiNbRBC4Pb5w+X2z4eykc+VaoionzBJ7yd1uib5j7tKpZLnOjk6lUpg0tBIub37xHkFoyEiIqKLHUq3qOqe7JxV3dsyMj4Ew+NCAAAmScL/Np5QOCIichZM0vtJZn6FfDt6gI9TXaWePKw1Sd9zkkPeiYiIbEWdrglpFqPcRic693x0S0II3HbFMLm9Ny0f6RZL6RIR9RUm6f0k47zlfHTHXnrtYkOig+Dr6QYAqKprsDoZICIiIuUczSqGyWQCAMSF+zv8yjNdlRAZYDUi8MMfj7CzgYj6HJP0fuKM89FbmIe8t1Z555B3IiIi22A5H33sIA51b8sd84dD42IeAZlTVIn1+7MUjoiIHB2T9H4gSZJVT3qik1R2t2Q95P08r0ITEREpzGSScDjDYj56Eoe6tyXE3xM3zGxdkm35zydRWdugYERE5OiYpPeDCxV1qKlvBAB4uGkQHuilcET9b3B0EPy8zEPeq+sacTKnROGIiIiInNuZ8+Xy+YmflxviI5yjqG13/GJKEsKaz9/qG/T4fH2qwhERkSNjkt4PMs+3Fo1LjAiAEELBaJTBKu9ERES2xXKo+5ikUKc8P+ksjYsa91w9Wm5vP3YO+08VKBgRETkyJun9IKvAIkl3svnoliYPa52XvjctH0ajScFoiIiInNsBiyQ9hfPROzQqYQCmjhgotz9YdVgeiUBE1JuYpPeDswWV8u3YcD/F4lDa4Ogg+Hubq8ZW1zWyyjsREZFCSirrce5CFQBArVZhZMIAhSOyD/dcNUqevldV14C/f3MQksQ6O0TUu5ik9zFJknC2sLUnPS7MT7lgFCaEdZX3Xcc55J2IiEgJlkPdh8UEw83VRcFo7Ie3hxYPXDdWbh/KKMTXW08pGBEROSIm6X2spLIe9Q16AICnmyuC/TwUjkhZllXe953KZ5V3IiIiBRzK4NJr3ZUyKAzXTkmS219tPmV10YOIqKeYpPcxy/noceF+Tl+UJTkqEL6erVXeM/LKFI6IiIjIuTQ2GXD8bOsqK2MHcem1rrrtimEYFhsCAJAg4a2V+1FYVqtwVETkKJik97Fsy/noTjzUvYUQAuMHh8vtfayMSkRE1K+OZ5dAbzACACKDfRAa4HxLw/aUWq3CEzdPQKCPudZOfYMef/nfHtTqmhSOjIgcAZP0PpZdVCnfjg/n+qMArJL0/acKWHCFiIioHx08zaruvcHXU4unb5kEtdp8Op1XXIU/frELDU0GhSMjInvHJL2PWVZ2jwnzVS4QGzI8rrVATVF5Lc5dqFY4IiIiIucgSZLV/GkOde+ZhMgAPLQoRW5n5JXhT0zUiaiHmKT3ofJqHSprGwAAWo0LwgO9FY7INmhc1BiT1Hrlft+pfAWjISIich45RVUor9EBMBe0HTQwUOGI7N/0kVG4+8pRcvtkTgle+mwH6jj0nYi6iUl6H8ourJRvx4T5QqVy7qJxliYMsZiXnsZ56URERP3hoEUv+qjEAfJQbeqZqyYl4LZ5w+V2Rl4ZXvzXdlTUNCgYFRHZK/5l7kOW89Hjwjgf3dKYxFD5xCCnqBLFFXUKR0REROT4LIe6j+N89F61aNogqx717MJK/Pafm5F7oUq5oIjILjFJ70PWld05H92Sh5sGI+JC5PZ+VnknIiLqU1V1jcg8b14aVkBgVOIAhSNyPFdNSsCD142FgHn0ZGlVPX7/4RYczihSODIisidM0vuQZdG4OFZ2v8TFVd6JiIio7xxKL4QE84oqydGB8PbQKhyRY5ozNha/v30KtBpzkdyGJgP+9MUurNmTyRVtiKhTmKT3kVpdE4orzUO41WoVBob4KByR7RmXHC5faU7LKUV1XaPCERERETkuLr3Wf8YkheLVe2fJ66hLkPDp2qP4YNVhGIwmhaMjIlvHJL2PWBaNiwrxgQsLs1zC39sNSVEBAMwHL8t5ckRERNR7mvRGHMlsHXKdkswkva9Fh/riL/fPQXxE62jKTYey8eKn21HFjgkiagczxz5y1mo+up9icdi6CYMj5Nv7OOSdiIioT5zILkGT3ggACAv0QkQQl4XtD/7ebnjlVzMxbUSUvO30uVI888HPKCyrVTAyIrJlTNL7iGVPejzno1/WOIsr+UczL6ChyaBgNERERI7Jcum1lEFhEILLwvYXV40aj94wDrfNGy5P8yuprMezH221Ol8kImrBJL2PWP7RZU/65YUHeSMy2DxfX28w4vjZYoUjIiIiciySJOHg6dbRainJ4e08mvqCEAKLpg3C07dOgsZFDQCoqmvA859sQ/q5MoWjIyJbwyS9DzQ0GZBfUgPAvMRJdCiXX2uPZW/6oXQuUUJERNSbcoqqUFatA2BeAjU5KlDhiJzX+MHheHHpNHi4aQAAukY9XvliJ3vUicgKk/Q+kFtUJS9xEhHsDTdXF4Ujsm1jLSrMHkwv5PIkREREveiARS/66MRQFrNV2ODoILzyq5nw8TQvgVffoMfLn+9AfmmNwpERka3gX+k+wKHuXTNoYCC83F0BABU1Ol5NJiIi6kWW89HHc6i7TYgO9cULd7b2qFfXNeKlf21HRU2DwpERkS1gkt4Hsgoq5NtM0jumUgmMSQqV2we5FBsREVGvKK/WISvffF6iUqkwOnGAwhFRi9gwPzx72xS4asxz1MuqdXht+R7oDUaFIyMipTFJ7wOWPcFx4X6KxWFPLh7yTkRERD13yOKYOiQ6CJ7NI9fINiRHB+H/lkySq75n5JXhwx+PcOofkZNjkt7LDEYTzhVXy+049qR3yuiEAVCpzP8ds/IrONyLiIioF1gtvWZRqJVsx5ikUNw+f7jc3nw4B+v3n1UwIiJSGpP0XpZXXA2j0QQACPHz5BXrTvJ0d8WQ6CC5fTiDvelEREQ90aQ34lhW69KmKYOYpNuqa6ckYvrIKLn92bpU5F6oUjAiIlISk/RedtZiPjqHunfN2EEW89JPM0knIiLqidSzxfL85oggb4QFeikcEV2OEAIP/GIsYkL9AAAGoxFvrzzA+elETopJei87W1Ap345lkt4llvPSj2UVo0nPAxMREVF3WV7wHseq7jbPVaPGozeOh4vaXEgut6gSK35OUzgqIlICk/Rell1UKd+OC/NXLhA7ZHmVv1FvwMmcEoUjIiIisk+SJHE+uh2KCvHBHRbz01ftzMDp3FIFIyIiJTBJ70Umk8Q10ntobJJFlXcOeSciIuoWcxFWHQDAy90VgwYGKhwRddaVE+MxIj4EACBBwgc/HIGhud4RETkHJum9qKCsRh6i7e/tDn9vN4Ujsj+WV/oPZRRyCRIiIqJu2JuWL99OSQ6DSiUUjIa6omV+esv66XnFVVi9+4zCURFRf2KS3ouyLeejh/kqF4gdGxwdBHetBgBQUllvtZwdERERdUySJOw52ZqkTxwSoWA01B0h/p64edYQuf3lljQUV9QpGBER9Scm6b3orMVQd85H7x4XtQqjEgbI7UPpHPJORETUFecuVKOovBYAoNW4YGT8gA6eQbbo6smJiBpg7vRp0hvx6dpjCkdERP2FSXovsqzsHsOe9G4bZzHk/SCTdCIioi6xHOo+dlCYPGya7IuLWoX7rx0jtw+cLsDxs8XtPIOIHAWT9F4iSdZF4+LD2ZPeXaMTQyFgnjuXca4c1XWNCkdERERkPyyT9IlDOdTdng2KCsTM0dFy+7N1qTCZWK+HyNExSe8lJZX1qGtoAgB4urki2M9D4Yjsl4+nFklRAQDMVU2PnClSOCIiIiL7UFBag3MXqgAALmo1xiaFKhwR9dStc4dB42IeDZFTVIltR3MVjoiI+hqT9F5y9qKl14RgFdWeSBnUOuT9AJdiIyIi6hTLXvTRiQPg5uqiYDTUGwJ93PGLqUly+8staVySjcjBMUnvJZaV3ePC/RSLw1GMtUjSj2Ze4MGIiIioE/alFci3WdXdcVw3NQle7q4AzKM3Nx/OUTYgIupTTNJ7SbZVZXc/xeJwFFEhPvKUAV2jHqdySxWOiIiIyLaVVtUjM78cAKBSqZBiUYiV7Ju7VoNF0wbJ7ZVbT6FJb1QwIiLqS0zSe4nlcPcYJuk9JoRAyqBwuX2QQ96JiIjatddibfThscFyzys5hoUT4uHr6QYAKKvWYePBbIUjIqK+wiS9F1TUNKCiRgcAcNWoERHkrXBEjmHsoNZiN4cymKQTERG1Z9eJ8/JtVnV3PFpXF1w/I1luf7PtNBqbDApGRER9hUl6L7Ac6h4T6geVikXjesOw2GBoNeaCN4VltcgvrVE4IiIiItt0oaIOGXllAMxD3Tkf3TFdkRKLQB93AEBVXQPW7ctSOCIi6gtM0nvB2cIK+Tbno/cejYsaI+JD5PbhDC7FRkRE1JadqXny7VEJIfDx1CoYDfUVV40aN8wcLLe/35mBBvamEzkcJum9gJXd+47l+q6H0jnknYiIqC07j7cm6VOHD1QwEuprs8fEyMV1a+obsYlz04kcDpP0XnDWKkn3Vy4QBzTGYim2tNxS1DfoFYyGiIjI9uReqMK5C1UAzKPQxg8O7+AZZM9c1CpcN7W10vsPuzK4VC2Rg2GS3kO1uiYUV9YBANRqFQaG+CgckWMJ9HFHTKgfAMBoNOFY1gVlAyIiIrIxuyyGuqcMCoO7VqNgNNQfZo+Jkac0lFXrsO1orsIREVFvYpLeQ5ZF4wYG+8BFzV9pb0ux6E0/lM556URERC0kSbIa6j5tBIe6OwNXjRrXTE6U29/vyIDJJCkYERH1JmaUPWSZpHM+et+wXIrtcEYRJIkHISIiIgA4c74cFyrMI/o83DQYY1HLhRzbgvHx8HAzj5ooKKvBnrR8hSMiot7CJL2HOB+97yVEBMDbwzykq6quAVn5FR08g4iIyDnssBjqPmFwBDQuagWjof7k4abBwvHxcvvbbafZkUHkIJik95BlT3psqK9ygTgwlUpY9Qwc5FJsREREMJkk7D5xXm5zqLvzuWpyonxhJqeoEkczWbuHyBEwSe+BxiYD8ktqAAACAjFcI73PjLWYl344g0uxERERncguQWVtAwDA19MNw+NCFI6I+puvpxZXpMTK7e93ZCgYDRH1FibpPZB7oQoSzMOKwoO84ObqonBEjmtUfAhUQgAAsvIrUFHToHBEREREytqRek6+PWV4JFQqoWA0pJRrJifK50gnsouReb5c4YiIqKeYpPeA5Xz0WBaN61Oe7q4YHB0kt9mbTkREzqyxyWA11H3qcA51d1Yh/p6YYvH5f7+TvelE9o5Jeg+ctazsHsaicX3Nesg756UTEZHz2puWj4YmAwAgLNALSQMDFI6IlLRo2iD59t6T+Sgsq1UwGiLqKSbpPXC2oLXKOJdf63uWxeOOZl6AwWhSMBoiIiLlbD6cK9+eOToaQnCouzOLDvXF6ETzeZIECT/sYm86kT1jkt5NBqMJ54qr5XYsi8b1uchgb4T4eQIAGpoMSMspVTgiIiKi/ldcUYcT2cUAzIVrZ46KVjgisgW/mJok3958OFcuKkhE9odJejflFVfD2NyTG+znAS93V4UjcnxCCKQktw55P5TOeelEROR8thxp7UUfmRCCIF8PBaMhWzEsNhjxEebplwajEWv3ZCocERF1F5P0brJcHz0+nPPR+4vlkPdDLB5HRERORpIkbDmSI7dnjYlRLBayLUIIXDe1dW76uv1Z0DXqFYyIiLqLSXo3WVZ25/ro/WdoTDBcNWoAQGFZLfJLaxSOiIiIqP+cyC5BSWU9AMDDTYPxyeEKR0S2ZOKQCIQGeAEA6hv02HQoR9mAiKhbmKR309lCi6JxTNL7jatGjZHxA+Q2q7wTEZEz2Xw4R749bUSUfOGaCABUKmE1N/3HXRkstEtkh5ikd4PJJCGnsEpus2hc/xprOeSd89KJiMhJ1Dfosedkvtyew6Hu1IaZo6Lh46kFAJRV67AzNU/hiIioq5ikd0NBWQ0a9ea1Sf283BDg465wRM5ljMV66Wm5pZxvRURETmH3ifPQG4wAgKgBvlz+ldrkqlHjqkkJcvv7HemQJEnBiIioq5ikdwN70ZUV6OOOmFA/AIDRaMLRzAvKBkRERNQPNlsUjJs9JoZro9NlLRgfD63GBQCQV1KNQ5weSGRXmKR3Q1YB56MrzXLI+0EOeSciIgd3rrga6efKAAAqlQrTR0YpHBHZMi93V8wbFyu3V+3MUDAaIuoqJundYFnZPZZDzRRhuV76wdOF8pr1REREjmjDviz59vjkMPg2zzkmupyrJydCpTKf6qfllCAjr0zhiIios5ikd5EkSVaV3blGujISIwMQ4G2uBVCra0JabqnCEREREfWNhiYDth7NldsLJsQrGA3ZiyBfD0wfOVBuf7+DvelE9oJJehddqKhDfYO5UJmXuyuC/TwUjsg5CSEwYUiE3N5rUe2WiIjIkWw/dg4NTeaCteGB3hgWG6xwRGQvrp3Suhzb/lMFyC+tUTAaIuosJuldZDnUPS7cj0VbFDRxaGuSvu9UASuXEhGRw5EkCesshrovmBDPcw/qtOgBvhibZJ4iKEHi3HQiO8EkvYvOWhWN41B3JQ2OCoS3h3lOXkWNDhl55QpHRERE1LvSz5Xh3AXzqjKuGjVmjmLBOOqa66a19qZvPZqL8mqdgtEQUWcwSe8iq570CCbpSlKrVRhnUUBubxqHvBMRkWNZt7+1F336iCh4ursqGA3Zo8HRQUiMDABgXrp27d5MhSMioo4wSe8Cc9G4SrnN5deUN9FiXvq+tHwOeSciIodRVdeIPRY1V1gwjrpDCIFF0wbJ7fX7z8r1lYjINjFJ74Kyah1q6hsBAO5aDUIDPBWOiEbEh8BdqwFgLuqXU1SlcERERES9Y9PBbHmJ0aSBgYhl5wB10/jB4QgP9AYA6Br1+OnAWYUjIqL2MEnvAqv10cNYNM4WaFzUSBnUOuR9Z2qegtEQERH1DpNJskqkFoyPUzAasndCCKu56av3ZEJvMCoYERG1h0l6F2RZFY3zUy4QsjJ1ROsaoDuP53HIOxER2b1DGYUoraoHAHh7aDFpaKTCEZG9mz4yCn5ebgDMBXe3HzuncEREdDlM0rsg26InPZ5F42zGqIQB8HQzF9IprapH+rkyhSMiIiLqmQ37W3vR546NgatGrWA05Ag0LmpcNSlBbq/amcGODSIbxSS9CyyLxnFemO1wUaus1kzfdeK8gtEQERH1TGFZLY6cKQIACAhcMY5D3al3zB8XBzdXFwBAfmkNDpwuVDgiImoLk/ROKq/WoaLGvK6kq0aNiCBvhSMiS1OHtw5533X8PEwmXhkmIiL7ZDkXfUxSKAb4s1At9Q5Pd1fMt7jo8/3OdAWjIaLLYZLeSRf3oqtULBpnS4bFBsPX0zzPqqquASeySxSOiIiIqOua9EZsPpwjt+ezYBz1sqsnJ0KtNqcA6efKcCq3VOGIiOhiTNI76axF0bj4cM5HtzUqlcCU4a1FdXakshgKERHZn13H81CrawIAhPh5YnRiqMIRkaMJ8HHHjJFRcvu77exNJ7I1TNI7ybJoHCu72ybLIe+7T5xHY5NBwWiIiIi6br1Fwbh54+M4co/6xLVTWpdjO5RRiByLEaNEpDwm6Z1kOdw9jj3pNilpYADCAr0AAA1NBuxNy1c4IiIios7LPF+OzPxyAICLWo05Y2KUDYgc1sAQH0wc0lp09+utpxSMhoguxiS9E6rrGuW1Sl3UakQEs2icLRJCYNboGLm9+XCucsEQERF10QaLgnGTh0XAx1OrYDTk6G6cOVi+vTctH7lFVQpGQ0SWmKR3gmUvenSoD1zU/LXZqpmjoyFgHhp4IrsYFyrqFI6IiIioY7W6JuxIzZPbCyfEKxgNOYOYMD+MTw6X21+xN53IZjDb7AQWjbMfgT7uGJU4QG5vOcLedCIisn1bjuRCbzACAGJC/ZAYGaBwROQMbpo9RL699+R55F5gbzqRLWCS3glZ+a1JOovG2b5ZFnP4th7JgSRxzXQiIrJdkiRhw/4sub1wQjyEYME46nuxYX4YZ9Gb/vUW9qYT2QIm6Z1w5ny5fJtXtm3f+OQweLm7AgBKKuuRmlWscERERESXl5pVjMKyWgCAh5sGU0cM7OAZRL3Ham76yXycK65WMBoiApikd6i8Woeyah0AQOOixsAQH4Ujoo5oXNSYbrH+508WhXiIiIhszfp9rb3oM0dFw83VRcFoyNnER/hjbFIYAECChBWbTiocERExSe+AZS96fLg/1CwaZxfmjYuTb+8/VSBfaCEiIrIlpVX1OHC6UG7PHx/XzqOJ+saSOa1z0/edyrc6/yWi/seMswOZFvPRkwZyqLu9GBjig6ExwQAAkyRh48FshSMiIiK61MYD2ZBgrp0yLDYEkcEcsUf9Ly7cH5OGRsrt//x0gjV9iBTEJL0DllcSEzgf3a7Mt1i+ZtPBbBiMJgWjISIismYwmqwuIi+YwF50Us4tc4dCJVqXsWVNHyLlMElvhyRJVj3piRFcfs2eTBgcDj8vNwBARY0OB04XKBwRERFRq71p+aiqawAA+Hu7W1XZJupvEUHemDM2Vm7/ZyN704mUwiS9HedLaqBr1AMAfDy1CPbzUDgi6goXtQpzLQ426/exgBwREdmODftbj0tXpMTChXVvSGE3zhoMjYsaAHC2oAJ7TuYrHBGRc+LRoB2ZFkPdkyIDuGapHbpiXCwEWodunS2o6OAZREREfS+3qAppOSUAAJUQuCIltoNnEPW9QB93XGkxXfC/G09AbzAqGBGRc2KS3o4zFkPdOR/dPgX5emDSsNZCKKt2ZSgYDRERkdn6/a3Lrk0YEoEAH3cFoyFqtWj6IHi4aQAAReW1WLs3q4NnEFFvY5LeDsuicYlM0u3WdVOT5Nu7j59HcUWdgtEQEZGzq9M1YdvRc3J7oUXPJZHSvD20uGlW65JsX289haq6RgUjInI+TNIvo0lvRE5RldxOYNE4uxUf4Y9hsSEAzMuxrdmTqXBERETkzLYePYdGvQEAMDDEF0NighSOiMjawgnxCA/0BgDoGvVY8fNJhSMici5M0i8ju7ASJpN5ya7wQG94ubsqHBH1xLVTEuXbGw9mo1bXpGA0RETkrCRJwvp9rcOHF06IY80bsjkuahXuXDhCbm88kI1ci84rIupbTNIvw3p9dPai27sxSaEYGOwDAGjUG7B2L3vTiYio/6VmFaOgrAYA4K7VYMaoaIUjImrb2KRQjIwfAACQIOFf645xSTaifsIk/TIyHHA++vfff48RI0ZAq9UiNjYWf/3rX9t9/GOPPQYhBJ566imr7adPn8aECRPg6+uLJUuWoLa21ur+7du3IyIi4pLtbfnss88ghGjzscuWLUNQUOsQwJycHAgh5B9PT0/Ex8fjl7/8JXbs2HHJ85cuXYqUlBQAgBAC100bJN/34+4z7E0nIqJ+t86iF33W6Gi4ubooGI1tcebzFFskhMDSK0fKq+QcP1uM3VySjahfMEm/jCyLyu6OkKTv2rULixcvxvjx4/Hjjz/i7rvvxjPPPIO33nqrzcenpaXh008/hY+PzyX3LV26FAkJCfjqq6+QlpaGP/3pT/J9JpMJjz32GF599VV4eXn1yb688cYb2LNnD9auXYvnn38eZWVlmD59Ol566aV2nzdtxEB5flV9gx4/7j7TJ/ERERG1pbiiDgdPF8rtBSwYJ+N5im2KCvGx+n/6r7XHUMdODqI+xyS9DVV1jSgqN18xVatViAn1VTiinnv55ZcxdepUfPzxx5g3bx6ef/55PPzww3j55ZfR1HTpH9tHHnkEjz76KPz9rYf619bWYt++fXjrrbcwf/58PPvss9i4caN8/yeffAKNRoPbb7+9z/Zl0KBBmDhxImbMmIGlS5di/fr1eP7557Fs2TJs3br1ss9Tq1W4adZgub169xnU1LNaKRER9Y+fDpyFBPNw4RHxIYgI8lY4ItvB8xTbdcucIfDzcgMAVNTosPznNIUjInJ8TNLbcDq3VL6dEOEPjYtawWh6x9GjRzF37lyrbfPmzUNFRQX27NljtX3lypU4deoUfvvb317yOi0HSnd383quHh4e8rbq6mo8//zzePvtt/u9CM6LL76I8PBwfPDBB+0+bsrwgYhsnpve0GTAqp1cN52IiPpek96IjQez5fbCCQkKRmN7eJ5iuzzdXXHXlSPl9vp9Wci0mBZKRL2PSXobTp8rk28nDwxUMJLe09DQAFdX6wr1Wq0WAHDq1Cl5m06nw5NPPok///nP8PT0vOR1AgICEBsbi7///e8oLy/Hhx9+KM+n+sMf/oC5c+di4sSJXY7PaDTCYDBY/bRU1+8MtVqN2bNnY+/eve0+TqUSuGl269qfa/Zmcu1PIiLqc7tPnJdroQT5eiBlUJjCEdkWnqfYtinDIjEqobWI3D9WHYbR2Pn9J6KuYbWSNpyy6ElPjnaMtUsTEhJw4MABq2379+8HAJSXt14NffXVVxEWFobbbrvtsq/13nvv4cYbb8Tvf/97JCYm4r333kNmZiY++eQTpKamdis+Pz+/NrcHBnb+IklkZCQuXLjQ4eMmD43AygG+OHehCk16I77bfhpLF47s8HlERETdZVkwbv74OKhUXHbNEs9TbJsQAr++ZjQe+/tG6A1G5BRVYvWeTPxiapLSoRE5JPakX6RJb8TZwkq5nRzlGD3p999/P1atWoWPPvoIFRUV2LBhA958800A5qu7AJCdnY033ngDb731VrvDwBYuXIji4mKkp6fj1KlTiIqKwhNPPIHHH38ckZGReO+99xAVFYWoqCi8//77nYpv+/btOHDggNXPr3/96y7tY2eXBRFC4JY5Q+X22n1ZuFBR16X3IiIi6qzM8+XIzDcnmmq1CnPGxiocke3heYrtCw3wwo0zW2v7/G/TSeQVVysYEZHjYk/6Rc6cL5eH74QHesPHU6twRL3j7rvvxrFjx/DAAw/g3nvvhYeHB/7yl7/g4YcfxoAB5uFLv/3tb7Fw4UIkJyejsrISgLkKamNjIyorK+Hr6ysfFD08PJCUZL56umnTJhw7dgxffvkljh07hueffx67d+8GAEyaNAlTp07FiBEj2o1v9OjRl1RZXb16dZf2MT8/X96XjoxLDkNiZID8ef/npxN48uYJXXo/IiKizli3v7UXferwgfB1kHOL3sTzFPvwi6lJ2H3iPHKKKmEwGvH2yv34832z4aJmvx9Rb+I36iJW89GjHaMXHTBfhX733XdRUlKC1NRUXLhwQZ6T1fJveno6vv32W/j7+8s/eXl5ePfdd+Hv74/8/EvXxjQYDHjsscfw2muvwd3dHVu3bsXs2bORnJyM5ORkzJkzB9u2bevz/TMYDNi8eTMmTZrUqccLIbB0QesBefeJPKRbfPZERES9obquETtTz8vthVx2rU08T7EPLmoVHr1xPFxaRjcUVmLlttMKR0XkeNiTfpHT51rnow92kPnolloOagDw/vvvY/LkyUhOTgYAfPzxx6itrbV6/JIlSzBjxgw88MADCA4OvuT1PvjgA/j7++Pmm2+Wt9XX18u36+rq+mV418svv4yCggLcf//9nX5OcnQQJg6NxN6T5pOnD388gtfunw01rwYTEVEv2XQoGwajEQAQH+GPxMgAhSOybTxPsX1RIT64de5Q/HuDeX7/N1tPISUpFAn8v03Ua5ikW5AkyaonfZCDzEcHgL1792Lnzp0YNWoUqqursXz5cmzYsAE7d+6UH9NS/dSSm5sbBg4ciJkzZ15yX0VFBV566SVs2LBB3jZ9+nQ8/fTT+PTTTwEAmzdvxp///Ode3Zf09HQEBQWhqakJ2dnZWLFiBdavX49ly5ZhxowZXXqtO+YPx6H0QrkIytp9WbhmcmKvxktERM7JZJLw04GzcnvhePaiXw7PU+zLNZMTceB0AU7llsIkSXh75QG8/uAcuLkytSDqDfwmWcgrqUF9gx4A4OOpRXigVwfPsB8ajQZffvklli1bBpVKhWnTpmHXrl0YPnx4t1/zxRdfxLXXXosxY8bI20aPHo3XXnsNzz77LADgjTfewMiRvVs5/amnngJgPjCHhYVh0qRJ2L59O6ZNm9bl1xrg74mbZg3GfzeeAAAs33QSk4ZGIMjXo1djJiIi53MwvRAlleZeWy93V0wZPlDhiGwXz1Psi0ol8NDiFDzx7iY06g0oKKvBx6uP4qHFl15IIaKuEx0M8bHvMpRd9NOBs/jnD4cBAOOTw/HMLycrHBH1B4PRhKfe24S8EnOF0nHJ4Xjm1kntVo4lIupDSv3xcapjfn94+bMdOJZlXnJr0bRBuG1e9xNOIlu05XAO3v3uoNx+9IbxmD4ySsGIiOxOm8d8Tr61kJbjeOujU8dc1Crc/4vWq+wHThdg65FcBSMiIiJ7l19aIyfoAgLzxsUpHBFR75s5OtoqKf9g1WEUlNYoGBGRY2CS3kySJJzILpHbQ2OYpDuT5OggqxOoj1Yf5UGGiIi6bYPFsmspyWEI8fdUMBqiviGEwL3XjEZY8xTRRr0Bb365D016o8KREdk3JunNCstqUVGjAwC4azWIDfNTNiDqd3cuGIHwQG8A5oPMWyv3w2A0KRwVERHZm4YmA7ZYjMhawGXXyIG5azV48uaJ8uo4OUWV+PDHI/1SNZ/IUTFJb2bZiz4kOojLcDkhN1cXPHHzBPmzz8qvwOfrUxWOioiI7M3WI7lyIdqwQC+MjA9ROCKivhUb5oe7FrYW4NtyJAdr9mQqGBGRfWMm2swySR8Wd+k6m+QcYsP88Mu5w+T22r2ZWL8vq51nEBERtZIkySo5WTghgYVIySksGB+HmaOj5fbn61NxLPOCghER2S8m6TAfUE9aJumxTNKd2bVTEjFxSITc/mTNURzlQYaIiDrhUEYRCsrMNU3ctRrMHhPdwTOIHIMQAvddMwaJkQEAAJMk4c0v96GwrFbhyIjsD5N0AAVltaisbQAAeLhpEBPqp2xApCghBB65fhziI/wBmA8yb6zYi8zz5QpHRkREtm717jPy7StSYuGu1SgYDVH/ctWo8fQtk+Dv7Q4AqGtowp++2IWqukaFIyOyL0zSAZw4WyzfHhoTDJWKw9KcndbVBb+9dTICfcwHGV2jHi9/vhO5RVUKR0ZERLYqt6gKx5vPKQQEFrJgHDmhAB93/PbWSXBRqwEABWU1+NMXu9DQZFA4MiL7wSQdwIns1vXRh3KoOzUL8HHHs7dPhZe7KwDz1eAXPt3GHnUiImrTjxa96BOHRnDZNXJaCZEBeOzGcRAwd3xl5pfjjRV7uWoOUSc5fZLO+ejUnuhQX7xw5zR5uGKtrgkvfLrdqtAgERFRRU0Dtqeek9vXTE5UMBoi5U0aGol7rh4lt4+cKcI/Vh3i0mxEneD0Sfq54mpU1Znno3u6uSIm1FfhiMjWxEf4Y9nSaXKPeqPegFf+vRMH0wsVjoyIiGzF+v1ZMDb3EiZGBmBQVKDCEREpb8GEeNwwc7Dc3nokF//56QQTdaIOOH2SfvRMa9XuEfEhXCaF2pQQGYA/3DNTLoSiNxjxl//twc7jeQpHRkRESmvSG/HTgbNy+2r2ohPJlswegjljY+X29zvT8fXWUwpGRGT7mKRnFsm3RycOUDASsnVRIT545Z4ZCPEzzzE0mUx466v92HQwW+HIiIhISTtSz6G6uXp1kK8HJlks40nk7MxLs43GuORweduXm9PwzbbTCkZFZNucOklvaDLgZE5r0biRCUzSqX2hAV545dczERnsAwCQIOEfqw5h/b4shSMjIiIlSJKEH3e1Foy7cmIC1GqnPr0iuoRarcITN03AKItz7f9tOoFVOzMUjIrIdjn1UeRkdok8f2xgsA+CfD0UjojsQaCPO/7wqxmIC/eXt320+gjW7MlUMCoiIlJCalYx8kqqAQBajQvmjo1RNiAiG+WqUeOZWydjeFyIvO3fG1J5/kTUBqdO0o9mts5HH50UqmAkZG98PLVYtnQaEiMD5G2frj2KdexRJyJyKt9uT5dvzxkbA8/mIqNEdClXjRq/++VkDIlpXU3p07VHOSKR6CLOnaRbFI0bxaHu1EWe7q544c5pVhV8P1l9FDtTWUyOiMgZZOSV4UR2MQBAJQSXXSPqBK2rC569fYrV+dNHq49g9e4z7TyLyLk4bZJ+oaIOBWU1AACNixqDo4MUjojskYebBi/c2dqjLkHC298cwOGMog6eSURE9s6yF33qiIEI8fdUMBoi++Hm6oLnbp9qNSLxX+uO4dvtLCZHBDhxkn70TGsSNSw2GK4atYLRkD1za74i3FJMzmQy4Y0Ve5FTWKlsYERE1GdyL1ThwOkCub1oerKC0RDZHw83DZ6/Y6pVj/p/N57A8p9Pch11cnpOm6Qf4VB36kXeHlq8sHQagv3MxQcb9Qb86T+7UFnboHBkRETUF77f0dqLPj45HFEhPgpGQ2SfWqYODottLSa3cusp/HvDcSbq5NScMklvbDJYFY0bw6Jx1AsCfdzx7O1T4a7VAADKqnX4y//2oElvVDgyIiLqTRcq6qzqjyyewV50ou5qGZE4OrH1fPyHXRn4aPVRJurktJwyST+WVQy9wZw4RQb7IDzIW+GIyFEMDPHBEzdNgIAAYC4q9M8fD/MgQ0TkQFbtzICp+e/68LgQq3m1RNR15uXZJmHC4Ah524b9Wfjb1/thaF4umciZOGWSbjmHbFxymIKRkCMakxSKOxeOkNtbj+RyaTYiIgdRXFGHTYey5fZizkUn6hUaFzWevHkCpo4YKG/bdTwPf/piFxqaDApGRtT/nC5JlyQJB9ML5fa45HAFoyFHdfWkBMwcHS23/7UuFSezSxSMiIiIesPXW0/B2NyzNygqEMPjgjt4BhF1llqtwqPXj8eC8fHytmNZF/Dip9tRXdeoYGRE/cvpkvSMvHL5S+7jqeUQNeoTQgjcd80YxEf4A2iu+P7lXpRW1SscGRERdVdBaQ22HsmV27fMGQohhIIRETkelUrgnqtH4ebZQ+RtmfnlePajrSip5HkUOQenS9Ith7qnDAqDSsWDK/UNV40aT98yCT6eWgBAdV0jXlvOQnJERPbqyy1pVnPRh8eFdPAMIuoOIQRumjUE914zWq7zU1BWg99/uAV5xdUKR0fU95wwSedQd+o/Qb4eeOrmiVCpzF+1rPwKFpIjIrJDuReqsCv1vNy+Zc5QBaMhcg7zx8fjiZsnQK02n0eV1+jw7EdbcYJTCMnBOVWSXlhWi/Ml5qtvGhc1RsbzCjj1vaGxwbiLheSIiOzalz+nQYL5AuvYpDAMigpUOCIi5zB5WCSev2MqtBoXAEBdQxNe+mwHfrYo4EjkaJwqSd99ovUK+KiEAdC6uigYDTmThRPiWUiOiMhOZeSVYd+pfLl9y1z2ohP1p+FxIXjlnhnw93YHYK718/73h/DFhuMcnUgOyWmT9CnDIhWMhJwNC8kREdknSZLw8Zqjcnvi0EjEhvkpFg+Rs4oL98ef75uFmFA/edv3O9Px+vK9XKKNHI7TJOn5pTXIKaoEALio1Ujh+ujUz1hIjojI/mw9kous/AoA5vOH2+cNUzgiIucV5OuBP/56JlIGtZ7H7zuVj+c+3oriijoFIyPqXU6TpFv2oo9NCoW7VqNgNOSsWEiOiMh+1Dfo8cVPJ+T2L6YkIjTAS8GIiMjN1QXP3DoZ10xOlLdlF1biqfd/xsH0wnaeSWQ/nDJJn8yh7qSgtgrJrd9/VsGIiIioLV9vPYWqugYAQIC3OxbPSFY4IiICzGupL104EvddO0bu+KhraMKr/9mF/208AZOJnR9k35wiSc8rrsa5C1UAzFXdOdSdlHZxIblP1x5jITkiIhuSX1qDNXsz5fYd84fDjQVniWzKvHFxeOVXMxDo4y5v+2b7abz02Q6UV+sUjIyoZ5wiSd9z0nqoOw+ypDQWkiMisl2SJOHj1UdgNJoAAIOiAjF1xECFoyKitgyKCsTrD87FCIullU9kF+Oxv2/EztQ8Tikku+TwSbokSdiZmie3Jw/nQZZsAwvJERHZpi1HcpGaVQwAEBC456pREEIoHBURXY6vpxbP3zENN84aAgHzd7WuoQl/+3of3vxyH6rrGhWOkKhrHD5Jz8qvQH5pDQBAq3HB2KRQhSMiatVWIbm3vznAuVRERAqpqGnAv9Ydk9tXT05AXLi/ghERUWeoVAJLZg/BsrunI9jPQ96+5+R5PPz2Bmw5nMNedbIbDp+kbz16Tr49aVgEh7qTzRkaG4ylC1oLye09eR4f/MCK70RESvh4zVHUN+gBACF+nlgyZ6jCERFRVwyLDcZff3MF5oyNlbfV6prw7ncH8cKn23G+pFrB6Ig6x6GTdIPRhB2prUn6zFHR7TyaSDlXTozH1ZNalxL5+VA2vthwnIk6EVE/2nHsHPZa1LG5/xdjeHGfyA55uGnw4HVj8eztUxHk29qrnpZTgife24T/bjyBxiaDghEStc+hk/TDGUWo1TUBAAJ93DEsNljhiIjaJoTA0oUjrCq+r9qVgc/WpTJRJyLqBxcq6vDPH4/I7dljYjAyYYCCERFRT41JCsXbj8zDtVOSoGquK2E0mvDt9tN45J2fsC8tn+dZZJMcOknfdjRXvj1zVDSLvpBNE0LgwV+MxbjkcHnb6j1n8MGqw5yjTkTUh4xGE976ej90jeZh7gP8PXH3lSMVjoqIeoObqwvuXDACrz8wB0kDA+XtpVX1eG35HvzpP7tQVF6rYIREl3LYJL2mvhEH0gvl9vRRUQpGQ9Q5arUKTy2ZiIlDI+Vtmw5l47Xle+Q5kkRE1Lu+2nIKGXllAACVEHjsxvFw12oUjoqIelNMmB/+9OuZePC6sfByd5W3H84owqPvbMRXW9K4wg7ZDIdN0nek5snrmyZEBCAy2EfhiIg6x0WtwhM3jrca+n7gdAF+9+EWZJ4vVzAyIiLHs/9UAVZuOyW3b54zxKq3jYgchxACc8bG4t3H5uOKlDh5uTaD0YgvN6fhyfc28VyLbILoYB6GXY6xlSQJT7y3CecuVAEAfn31aCyYEK9wVERdI0kS/r3hOH7YlSFvExC4dkoibp49BFoWMyJyVErNzbLLY35PnC+pxjMfbEZDcwGp4XEheOHOaVCpOD2OyBmcOV+OD388grMFFfI2lUqFm2cPxuJpyfxbQP2hzf9kDpmkZ+SV4XcfbgEAuGrU+OTpq+HhxmFrZJ+2Hc3FP1Ydht7QOgTLz8sN100bhJmjouDtoVUwOiLqA0zS+0Gdrgm/+3AL8ktrAADBfh54/YE5/JtK5GRMJgk/HTiLL346Ll+wA4DkqCA8ftN4q+rwRH3AeZL09747iM2HcwCYq7P+ZlGKsgER9VBhWS0+WHUYJ7KLrbar1SoMiwlGUlQgIgK9EOjrDl8vN7i5ukCrUUOrUcNFrWLRRCL7wiS9j+kNRrz8+U6k5ZQAADQuarx67yzEhvkpGxgRKeZCRR3eXrkf6efK5G2+nm545tZJGBTFKTDUZ5wjSa/TNeGe19fIhR9evXcW55aRQ5AkCZsP52D5z2moqNF1+nkqIeCqUUOrcYGPpxYRQV6IDffD0JhgJET4Q+Oi7sOoiagbmKT3IUmS8OaX+7DHYj30x2+cgKkjBioYFRHZAqPRhG+2n8bXW07B1JwjqdUq3H/tGMweE6NscOSonCNJX78vCx+tNq9zGjXAF3/9zVz2IpJDadIbsflwDrYcyUVmfs+Km7hq1BiTFIZJQyOQMigMbpznTmQLmKT3EUmS8OnaY1i7N1Pe9ssrhmHx9GQFoyIiW3MyuwSvLd+DWl2TvO3aKUm4Y/5w5hXU2xw/SZckCU++/zNyiyoBAHdfOQpXTUpQNiiiPlRcUYfT58qQlV+B0qp6lFTVo7a+CU0GExr1BjTqjfIqBx1x12owa3Q05o2Lw8AQroZApCAm6X2grWKcCyck4FdXjeRJNxFd4kJFHf78391yIWrAPI32gV+MZUE56k2On6SfzC7BC59uA2CeX/bx01dZrYNI5IwMRhOa9EY0NBlQVq1DXnE1TuWWIi2nFEXltW0+Z0xSKK6fnozk6KB+jpaIwCS910mShOWbTuKb7aflbZOGRuKJmybwZJuILquhyYC3v96P/acL5G2Thw3EozeMg4vaYVeypv7V5kGox/+70tLSMGfOHHh4eCA8PBwvvPACjEZjh887ePAg5s2bh8DAQAQEBGDu3LnYt2+ffL/RaMRf/vIXTJs2DYGBgQgMDMS8efNw4MCBy76m5fC1maOimaATwbzuuoebBgE+7kiMDJCLKb73+AK89fA83Dx7CMIDva2eczijCM9+vBU3PfQKhBBISem4+GJmZibuu+8+jBw5Emq1GjNnzuyjPSIiR9edc4ucnBwIIS75WbJkCf694bicoKdt+xK7PnsGL987D76+PkhJScGXX37ZH7tFRDZo48aNuOWWWxATEwMhBJYtWybf5+bqgv+7ZRJmjo6Wt+0+kYfXl+/Bx5982ubfnA8++ECBvSBH06MJqBUVFZg7dy6GDBmCVatWISsrC08++SRMJhNeeeWVyz4vLy8Pc+fOxZgxY/Dvf/8bAPD6669j3rx5SE1NRXR0NHQ6Hf785z/jrrvuwu9+9zsIIfDuu+9i6tSp2L17N8aOHWv1msUVddiX1nqV60oOcyfq0MAQHwwMGYIbZw7G8bMlWLc3EwdOF0KCBKOhCev/+3doPX1xvqQGh9ILMSYp9LLDQk+ePIm1a9di4sSJaGpqavMxREQd6e65RYs33ngDU6ZMAWBeWmlTarHVEPcADxXufuQBDBs2FGq1GitXrsSSJUugVqtxww039Nl+EZFtWr9+PVJTUzFnzhysWLHikvtVKoGHFqXA3VWDdfvMHYIH0wthLDwDANi8eTPc3d3lx8fFxfVP4OTQejTc/dVXX8Vrr72G3Nxc+PiY57C+9tprWLZsGYqKiuRtF/vggw/wm9/8BmVlZfDz8wNgPigHBQXh3XffxQMPPACj0Yjq6mr4+/vLz2tqakJSUhJmzZqFf/3rX1av+e/1qVjVfBAeER+CF5dO72DXiagt50uq8d2OdHzwzpu4cPYYPP0HoLokD7N/9RfER/jjpllDMLaNZN1kMkGlMg/OueGGG1BaWoqtW7cqsAdEds+ph7t399wiJycHsbGx+PHHH3H11VejSW/Eu98dxK7jefJjxiWH44mbJsBVY72qxZQpUxAYGIgffvih73aMiGyS5flLUFAQHnroIave9BaSJOG/G0/gux3pAIDcY1tw6Mf3UVZeiQB/3/4MmRxL7w93X7duHebPn291wFyyZAl0Oh22bdt22efp9Xq4uLjAy8tL3ubl5QUXFxdI8nIHaqsEHQBcXV0xdOhQFBdbrxXd0GTAxkPZcvuqSYk92S0ipxYZ7INfpAxA7qE1uP+J56ESrX8msvIr8Op/duHpDzZj/6kCWF7kaznAERH1RHfPLSxV1zXipc92WCXo00dG4aklEy9J0AEgMDCQI4CInFRnz1+EELht3nDcMneo1fY3vtwjL/1M1Ft6dFZ9+vRpJCdbL1sSFRUFDw8PnD59+jLPAq6//np4eHjgySefRHFxMYqLi/H444/D398fN95442Wf19jYiEOHDmHIkCFW27ccyUV9gx4AEBrghbFJoT3YKyJ68skncfNNN+GVx27FxKER8PXUWq2nfragAn/532489f7P2JuWjw5G5BARdVp3zy1a3Ll0Kfy8PfDmE4uQuvEzGPWNWDA+Ho9cb13oyWAwoLKyEv/973/x008/4f777+/1fSEix3PDjMFWifpfn1oCdzctkpIG4Z///KeCkZEj6fGc9Jbh6pb8/f1RUVFx2eeFh4djy5YtuPrqq/HOO+8AAMLCwrBhwwYEBwdf9nl//OMfUVFRgXvuuUfeZjCasGpnuty+cmICl1Ih6oEtW7Zgw4YNyMgwTx/RatQI8vXA+48vwKqdGdhw4Cz0BvMV45yiSry+fA+iBvjiplmDMXFIBL9/RNQj3T230Gq1uP6WO1EiwiGptCjJPYmMPasQoNHhnlc3Wf1t2rt3LyZNmgQAcHFxwbvvvovrrruut3eFiBzUDTMG48i+UdBVL4F/eAIkyYS6c4dw//33o76+Ho8//rjSIZKd61GSDqDNE3JJkto9US8sLMQNN9yAsWPH4uOPPwYAvPfee7jqqquwe/duREVFXfKcNWvW4I9//CPefPNNDBo0SN6+MzUPJZX1AABvDy3mjo3p4R4ROS+DwYBHHnkEzz33HEJDrUekBPi4464rR+K6aYOwamc61u9vTdbPXajCGyv2ImqAL26YOViJ0InIgXT13MJkkrDlRBmk+KvRsnBkeMIIXD1jFN545VkcO3YMo0aNkh8/fPhwHDhwAJWVlVizZg0eeugh+Pj44JZbbumDvSEiR/THp3+NESlT8NWWNPOGhNEwGfR45ZVX8Oijj3IaIPVIj5J0f39/VFZWXrK9qqqqzavgLV5//XUYDAasXLkSGo0GADB79mwkJibijTfekHvXWxw4cAA333wz7rvvPjz22GPydkmS5OINAHD15ARoXXt83YHIaX300UeorKzEnXfeKX+3m5qaYDQaUVlZCU9PT/h7u2HpwpFYND0Zq3akY93+LHku1rkLVfjrl3uRmnkBXhoDTCaJaxATUZd09dyivFqHv397AKlZrfVqQvw88cytk+DpMhVvvPIsDh8+bJWke3p6yktLzp07F1VVVXjmmWeYpBNRl9w8ewhMkoSVW08BANwjR6F8/2ZkZp1FUiJXmqLu69ElnuTk5Evmh+Xl5aGuru6S+WSWTp8+jaFDh8oJOtBaFC4rK8vqsRkZGbjqqqswZ84c/P3vf7e6b9+pApwvqQZgXsdw4fj4nuwOkdNLT0/H+fPnERoaCn9/f/j7+2P58uU4evQo/P39rdYS9vXU4o4FI/DBk1di0bRB0GpaL5DVN+pxvrgaj7+7ETtT82Aycc46EXVOV84tDmcU4cn3N1kl6KMTQ/HaA7MRE+Yn97x3NA1nzJgxyMvLg16v76W9ICJnsWT2EFw/3fpv08erj8JgNCkUETmCHiXpCxcuxIYNG1BTUyNv+/LLL+Hu7o4ZM2Zc9nnR0dE4ceKEVSXVxsZGnDhxAjExMfK2wsJCzJ8/H/Hx8Vi+fDnU6tbCVZIk4ZttrQfxhRPi4enu2pPdIXJ6Dz30ELZs2WL1M3/+fCQlJWHLli244oorLnmOr6cWt80bjg+eXIjF05OtkvXzJdX429f78Njff8KOY+eYrBNRhzpzbmEwmvD5+lT88YudqK5rBAAICNwwczB+f9sUeHtoAQArV64EAIwdO7bd99y1axciIyOtOg+IiDpDCIFb5g7FommDUHB6L1w9vJFZZsJfv9zHRJ26rUdjw++//3688847WLx4MZ555hmcPXsWy5YtwxNPPGG1dEpCQgJmzJiBTz75BABwzz334OOPP8aiRYvw4IMPQpIkvPfeeygsLMS9994LANDpdFi4cCEqKirw7rvvIjU1VX49rVaLek0wzhaYC8hoXNS4ejKXXSPqqYSEBCQkWA/P+uyzz1BaWoqZM2fK23JzcxEfH49PP/0Ud9xxBwDARRihrTqNhfF6HBA61OlqkH9qDwDAkDAGb63cj6+2nMINM5MxdfhAqNWcq0VEl+ro3KKwrBZ/+3of3v/9LxEUNQRjr3kQ/t7u0ORvxcG1u6GtmgIfHx9s374dr7/+OhYvXowRI0YAMP/tuuuuu3DrrbciLi4OtbW1+O6777BixQr84x//UHjPiUgJubm5OHDgAADzFL+0tDSsXLkSnp6eWLhwofyYi897rr/+eowfPx4jRoyA0WjEhi+/xPm03Rg5/24IocK+U/n421f78PhNE6xWliDqjB7PSf/555/x0EMP4ZprroGfnx8ef/xxLFu2zOpxBoMBRmPr+oFjx47F+vXr8dJLL+H2228HYC7isnHjRowcORIAcOHCBRw7dgwAcPXVV1u9XnR0NK569AO5feWEePh5ufVkV4ioCyRJgtFohMnUeoW4uLj4kiUU933zVwDA/Ifeg4tfCArKavDONwfw9dZTuHHmYCbrRHSJy51bvPDCi/hx9xn8d+MJ6A1GSCYTJMmEMUmheGjxOKz7sQZvvPEGPv74Y+h0OkRFReH//u//8Oyzz8qv7efnh/DwcLzyyisoKiqCn58fhgwZgjVr1uDKK69UcK+JSClbtmzBXXfdJbe//vprfP3114iOjkZOTg6Ats97Bg0ahE8//RR5eXmQJAlDhgzB559/DilkFH7YZV4hZ29aPt76ej8eu3E8E3XqEtHB+sY2OTZ1/b4sfLT6CADAw02D9x9fIA9tIyLbUqtrwo+7z2DNnkzoGq3ne4YGeOGGGcmYPjKKyTpRK6WqLdrkMR8A8oqr8d53B3HmfLm8Ta1W4fZ5w3H1JC69SkS2Q5IkfLYuFav3nJG3jUoYgKeWTIS7llNq6BJtHsDsLklvaDLgwb+uR1VdAwDg9nnDcd20QR08i4iUVqtrwuo9mViz5wzqG5isE7WDSXqzJr0R3+9Mx8ptp2G0mNsZNcAXDy9OQVy4v4LRERG1TZIkfLr2GNbuzZS3RYf64fe3TUaQr4eCkZENcowk/X8bT+Cb7eaCcYE+7nj3sQVw1ag7eBYR2Yq65mR9dRvJ+gB/Tyyebk7W+b0mJ+b0SbokSdh1/Dy++Ok4Sqvq5e1qtQo3zEjG4unJHDpKRDZNkiSs2JwmL88GAH5ebnjipgkYGhusYGRkY+w/ST9XXI2n3t8kX01/aFEKZo2JUTYoIuqWOl0T1uzNxI+7L03WvT20mD8uDvPHxyHAx12hCIkU49RJekZeGT5de8xqaDsAJEQE4MFFYxE9wFehyIiIum7z4Rz8Y9VheT67gLka/OLpgzhVhwB7T9IlScJzH2/D6XOlAIBBUYH44z0z+Z+byM7V6Zqwdl8Wftx1BnUNTVb3qYTA8LgQTBkeiZTkcPh6dr32hCRJqNU1obRKh7JqHRr1RhiNJkiSBFeNGlqNC/y93RDk6w4vd1f+TSFb4HRJuiRJOJFdgu+2p+NY1gWr+7w9tFgyewjmjYuDSsXvJxHZn+Nni/HXr/bJS0YCQHJUEB5cNBYRQd4KRkY2wL6T9FU7M/DvDeZl2FQqFd54cA6vphM5kPoGPX46cBbr9mVZDW+1FB3qh/hwP0QN8MUAf094uGngplGjyWBEQ5MRVbUNKKmqR0llPUqr6lFaqUNJVT30BmObr3cxrcYFMWG+iA31Q2yYH5KiAjEw2JuJO/U3p0nSa+obsf1YHjYdysa5C1VW96nVKlw9MQHXz0iGp7trf4dGRNSryqp1+OuX++QORwBwUatx/YxBuHZKEtxce7ToFtkv+03Sswsr8cw/N8vD3K+fnoxbrximcFRE1BeMRhP2nSrA2r2ZOJVb2vET+piPpxZDY4IxIj4EYweFIZDD76nvOWyS3qQ34tyFKpzMKcXhjCKcOldqVRAOMA8FnTQsErfOHYqwQK++DomIqN8YjCZ8vfUUvt2ebrWcm5+XG26cORhzxsZA48KaPE7GPpP0mvpG/PafW1BUXgsAiI/wx59+PYsFY4icQEllPfacPI+9afk4k1cOU/t/ry5Lq3FBiJ8HAn3d4ebqAhcX898Pvd4EXZMeFdUNKK6sR6Pe0OFrxUf4Y1xyOMYnhyNqgA972akvOESSnpZTgp8P56C2vgk1uiZU1TbiQnkdpMu8jcZFjVmjo3HtlCQm50Tk0HKLqvDe9weRlV9htd3HU4t54+Iwb1wcOwWch/0l6XqDES9/vhNpOSUAzCfabzw4B+Gcu0HkdOob9MjMr8C5C1U4V1yNypoG6JoM0DXq4apRw93VBZ7urgjx80CQrweC/DwQ7OuBIF93eLhpOkymJUlCRU0DsgsrkV1UibP5lTiZU4JaXdNlnxMZ7IMZo6IwfWQUl1Sh3uQQSfq2o7l455sDHT4uPsIfc8bEYOrwgRzWTkROw2g0YevRXKz4OQ3lNTqr+wQEhsYGY+rwSIwdFMYiuo7NvpJ0g9GEv365D/tO5cvbnloyEZOGRioVEhE5GUmSkFtUhePZJTiUXoiTOaVWw9NatBxMZ46KwqRhkZxXRj3lEEn6wfRCvPqfXVbbBATCAr0QE+aHUQkhGJUYyt4iInJqTXoj1u3Lwpo9Z1BWrWvzMZHBPhiZEIIhMcFIjAzg303HYj9JekOTAX/7ah8OphfK2355xTAsnp7c4XM59JSoczr47lMb6nRNOHLmAvadKsDB9AI06S8tSOeqUWPikAjMHBWN4XEhrEZN3eEQSXpZtQ5HMorg5eEKb3dXeHtqEeLnYZcXsXhuQWT/bP28p6Umz4b9Z3Eyu+SyU4MA8xz28CBvhAZ4YkCAJ0IDvODv5QZfLy18PbVcrca+2EeSXlhWi9eW77Gq8nrtlCTcMX94p/6z8T8kUefY+sHK1jU0GbAvLR9bj+bieFbbB9NAH3dMHxmFmaOjERns0+cxSZKE6vomlFfr0KQ3Qm80QW8wQq1Swc1VDXetBoE+5uH/ZNMcIkl3JDy3ILJ/9nTeU16tw64T53HwdGGbBTY7ohICbloXaDUu0GrUzUvOquHqoobWVQ2NWg0XFxU0Lipo1Ormf1XQuDRvb74tb9eo4emmgZe7q9W/atYI6w22naTXN+jxw+4z+H5HutVySYumDcIvrxjW6QMkD6REnWNPBytbV1atw/Zj57DtSC7ySqrbfEx4oDfGJIViVOIADIkOgrYbvYktSXhxRR2KK+tRXFGHEot/L1TUdWq5OQ83DYL9PBEe6IXYMPNyc/ER/t1ah576BJN0G8NzCyL7Z6/nPY1NBqTlluLE2RJknC9HVn5Fpwrd9gcfTy0CvN0R6OOOAB93BPi4ITTAC2GB5h8v1hnpDNtL0mt1TcjIK8eB0wXYdvSc1X84tVqFe68ejbkpsV16TR5IiTrHXg9WtkySJJwtqMTWo7nYkZqHmvrGNh8nIBAR7I3oUF8E+3rA39sNnm4aaFzUUKkEGpsMqG80oKq2AWU1OpRX61Be3dDpJLy7wgO9kRwdiKExwRgcE4QQPw/+TVUGk3Qbw+8Bkf1zlPMek0nChYo6FJXX4kJ5HQrLalFcUYeq+kZU1Taiur4R9Q16pcMEAHi5u8oJe0SwN8IDvRER5I2wQC+4amxrqTlJklDfoEdptQ619U3QNRnQ0GguUNxkMMEkSYgL88PQ2ODefmvlk/Rvtp3GzuN5aGg0oK5Bj7qGtqsmx4b54f5rxyAhMqDL78EDKVHnOMrBylYZjCYczijCtqO5OJRR1KfJtSV3rQZBvh5wc1Wbh62pBUwmQNekR51Oj9IqHQzGzsUS6OOO5OggDIkOQtLAAEQN8OXyl/2DSbqN4bkFkf1zpvMevcGIhiYDGvVGNLX8GIxo1Jt/9AYjDAaTPC1Ob3G7dXvzfUYTGvVG1Dc0oVanR53O/G99g77defPtERAI9vMwJ+5BXogI8kZ4kDmB9/d265O/uQ1NBpRU1qOsWoeyqnqUVJn/LavSoaxah5JOLMV77ZQk3LlgRG+HpnyS/smao1i7N/Oy90cG++DaKYmYNTqm28WWeCAl6hxnOlgprUlvxMmcEhw9cwFHMy8gv6Sm2wc2d60GIf6eCPHzQIi/B4L9Wm6b/+1oCStJklBV14jiijrkFlUhu6gKZwsqkF1Y1WHyrnFRIy7cD4kRAYgMbj6gBnvD11PbL397TSYJdQ2tJwe1uibUNuiha9CjvlEPXfMVb12jeSSCrlEPvcEEo8kEg9EEo0mCwWiCySTBaDJBksy/D0kCJEhyGwBMzR/P5e83//vw4nEYPzi8t3eVSbqN4bkFkf3jeU/vMhpNqKhtQHm1Ocktr25AaVU9ispqUVhWi6Jujv5zc3VBeJA3An3c4ddcDM/fyzziUOvqAnetC1zUKphM5jMpU/Ox3dzzrUddgx5VtY0or9GhoqYBFTUNKK/R9crogqsnJeKuK0f2+HUu0uYBpl9LrLpfNAdT46JGeJA3RsQFY1xyOIbEBPX4QMgvIBHZGleNGqMTQzE6MRSA+WpublEVzpdUNx/gGqBr1MNglGAymcwHIVcXeHm4yvO8An3cO5WEd0QIAT8vN/h5uSFpYKC8vUlvRGZ+OdJyS3EqpxSncssuuaKsNxiRfq4M6efKrLZ7uGkQ6OMBf28t/Lzc4OOhhZurC7Suari5usDVRY2L/7QLIWAySc1X9a2v9jfqjdA16lGrMyfidQ1NqGvQQ9dg6PbFjb6i72IxH7JPPLcgIrKmVqsQ5OuBIF+PNu+XJAmlVToUltWisKwGBaW1yC+tQX5JDUoq6y97PG9oMuBsQQXOFlT0Zfht0rioEezrAW9PV3hoNXBrvijg6qKGi1qFwTFB/RZLv/akl1bVo7a+CVpXF3i4aeDjweUBiIhskdFoQk5RFdJyS5F+rgyZ+eUoqaxXOiyb88TNEzFlWGRvvyx70omIyGE16Y0oLK9FQWmNnLgXlNaioKymz+bTq9UqBPm4I9DXA0G+7gjy9UCgjzsCm28H+bortXSd8sPdiYjIflXUNODM+XLkFFUiv7T5qnhJTb9WmXXXauDlroGnW+syMB5uGni4ucDdVQN3rfkisLurC9wsrn6rVcL8r1oFVfNtAXOPvhDN/za/R8t0q5Ztlo8BgJbZWEIIuLm69MU8fSbpRETkdFqm5BWV1aKitgFVtY2oqG1AZU2DXMitockAg8kElRAQQkAlBNQqAXc3DTy05p7vlqrz/t5uCPB2h5+3my13DjNJJyKi3iVJEiprG1HZPC+tsrYBdQ16c8GaJiN0TQZ5TlrL4aZliJtKCGg1LnB1UcHV1UVew9XNVQ2tqwu83F3h5aaBp7srvNw18NA6zZqsTNKJiIicA5N0IiIiO8AknYiIyDm0ecx3ii4JIiIiIiIiInvAJJ2IiIiIiIjIRjBJJyIiIiIiIrIRTNKJiIiIiIiIbASTdCIiIiIiIiIbwSSdiIiIiIiIyEYwSSciIiIiIiKyEUzSiYiIiIiIiGwEk3QiIiIiIiIiG8EknYiIiIiIiMhGCEmSLnvnSy+9tB5AUP+F0+/CARQoHYRCuO/OyVn33Vn3G+C+2+O+l7744osL+vtNm4/5I2Cfv7PeYq//Z3qDM+874Nz778z7Djj3/jvzvgO2sf9tH/MlSXLan2XLlklKx8B9575z37nf3Hfuu638OPvvzJn335n33dn335n33dn335n33db3n8PdiYiIiIiIiGyEsyfpLykdgIK4787JWffdWfcb4L5T1zj778yZ99+Z9x1w7v135n0HnHv/nXnfARve/3bnpBMRERERERFR/3H2nnQiIiIiIiIim8EknYiIiIiIiMhGMEknIiIiIiIishFOmaQLIaYLIX4QQuQLISQhxFKlY+oPQojfCSEOCCGqhRAlQogfhRDDlI6rPwghfiOESG3e92ohxB4hxFVKx9XfhBC/b/4//67SsfQ1IcSy5n21/ClSOq7+IoQIE0J83vxdbxBCpAkhZigdV18TQuS08blLQog1SsfW34QQDwohsps//0NCiGntPHamEGKVEKJQCFHf/Pfy7jYe09bvNrnv96brurj/MZfZtwUXPW5G82s1CCHOCiHu7/s96Z4u7n9bfy9bfkKaH2MXn393zvGEEMOFENuEELrm570ghBAXPcbmP/uu7rujfe+7sf8O873vxr470ne+W/mNrX/vnTJJB+AF4ASARwHoFI6lP80E8D6AyQBmAzAA2CSECFAyqH5yHsAzAMYASAGwGcD3QogRikbVj4QQEwH8GkCq0rH0o3QAYRY/w5UNp38IIfwA7AIgAFwFYDCAhwEUKxhWfxkH6898DAAJwFdKBtXfhBA3A3gbwJ8AjAawG8A6IUTUZZ4yGcBxADcAGAbgHwA+FELc2sZjh8L6d3ymd6PvuW7sf4sFsN63zRavGQtgbfNrjQbwKoC/CyGu7/Ud6KFu7P8bsN7vMADbAGyVJOnivxu2/vl36RxPCOEDYCOACzD//XgEwP8BeMLiMfby2Xf1/Nahvvfo/vm9I3zvu7rvjvSdn4ku5jd28b1XeqF2pX8A1AJYqnQcCu27FwAjgGuUjkWh/S8HcJ/ScfTTvvoCyIL5j9dWAO8qHVM/7PMyACeUjkOhff8TgF1Kx2ELPwCeBVAJwEPpWPp5v/cB+OiibWcAvNqF1/gKwDcW7ZkwX/AIUnr/env/AcQ071tKO6/5FwBnLtr2MYA9Su9vb3/+AAY2nx/cao+fv0XMHZ7jAXgAQDUAd4ttzwHIR+sqSHbz2Xdl3y/zPLv93nfjs3eo731PPntH+c43x91hfmMP33tn7UknM2+YR1NUKB1IfxJCqIUQS2D+Eu9WOp5+8iGAlZIkbe7wkY4lrnkIU7YQYoUQIk7pgPrJdQD2CSG+FEIUCyGOCiEeungYl6Nr3t9fAfiPJEn1SsfTX4QQrgDGAvjport+grmnobN80Pbx4WDz8NifhRCzuhlmn+nh/n/b/J3ZJYS44aL7JrXxmhsApAghNN0OuJf10uf/K5gvbn3Txn02/fl3wyQAOyRJsux93AAgHOYkruUxNv/Z9xK7/N73kN1/73uBI33nO5Pf2Pz3nkm6c3sbwFEAexSOo180zz2pBdAI4AMAiyRJOq5wWH1OCPFrAAkAnlc6ln62D8BSAAthHuYfCmC3ECJQyaD6SRyABwGcBTAf5u/6nwH8RsmgFHAFgFiYr3w7kyAAapiH8Vm6APP3oENCiKsBzIH5Al+LQph7H64HsBjm6SQ/CyGm9zTgXtad/a8F8BSAmwBcCeBnAF8KIW6zeEzoZV7Tpfk9bUWPPn8hhArA3QD+LUlSo8Vd9vL5d9XlPteW+9p7jK199j1i59/77nCk7323OeB3vjP5jc1/7136+g3INgkh/gpgKoCpkiQZlY6nn6QDGAXAD+Y/OJ8LIWZKknRCyaD6khBiEMxDn6dJktSkdDz9SZKkdZZtIcRemJPWOwH8VZGg+o8KwEFJkn7X3D4ihEiEOUl3+KKBFn4N4IAkSUeVDkQh0kVt0ca2SwghpgD4H4BHJEnaL7+YJKXD/He0xR4hRAzMJ7nbexxt7+v0/kuSVArgTYtNB4UQQQCeBvCfDl6zre22oFufP8wXNgfiootbdvj5d0VnPld7+uy7zIG+953moN/77nCY73wX8xub/t6zJ90JCSH+BuAWALMlSTqrdDz9RZKkJkmSMiVJaklejgJ4XOGw+tokmK/2nRBCGIQQBgAzADzY3NYqG17/kSSpFsBJAIlKx9IPCgGkXbTtFICOimY5jObqtL8A8JHSsSigFOb5eBf3mobg0l4BK0KIqQDWAXhBkqR/dOK99sH2vlPd3v+LXLxvRZd5TQOAsi7G2Jd6uv/3AtgtSdLJTjzWFj//rrrc5wq0/r7s5bPvFgf53vcWe/3e94RDfOe7mN/Y/PeeSbqTEUK8DeBWmP8Dn1Y6HoWpADh6kvo9zBXNR1n8HASwovm20/SuCyHcACTDnMA6ul0ABl20LQlArgKxKGUpzFNbVigcR79rHjVzCObh/pauQDt1OJqHMK4D8JIkSW918u1Gwca+U93d/zaMgvW+7QEwt43XPChJkr6LYfaZnuy/ECIc5hUhOntxaxRs7PPvhj0ApjUfI1pcAaAAQI7FY2z+s+8OR/ne96JRsMPvfXc5yne+G/mN7X/vla7Ap8QPzAXDRjX/1AN4ofl2lNKx9fF+vwdzJcPZMF8ZavnxUjq2ftj3PwOYBnMxiOEwL6NgArBQ6dgU+F1shXNUd38D5lEDsQAmAFjd/P8/WunY+mHfxwHQw1zZPAHAjQCqAPxG6dj6af8FgAxcVN3amX4A3AzzRbh7YF6C722Y519GN9//KoCfLR4/E0AdgNcvOj4EWzzmMZiLEibCvCTPqzAP+Vus9P72wv7fCfMJ3mCYL3A91fz8xy0eE9v8O3qr+XH3ND/meqX3t6f7b/G855r/VlyyGoK9fP7o4Byvjc/eF+YesxUwL0O2uPlY8aS9ffbd2HdH+953df8d5nvf1X23eJ4jfOc7zG/s8Xuv+C9WoQ9zZvN/sot/PlM6tj7e77b2WQKwTOnY+mHfP4O5F7ER5rWiNwGYr3RcCv0utsI5kvQVMF8RbYJ5SY1vAAxROq5+3P+rABwD0ABzwvoImpcVcfQfALOa/7aNVzoWhX8PD8LcI9AIc8/qdIv7PgOQc1G7reOD5WOeBpAJ8xq85QB2ALhS6f3spf2/E+YpInXNJ2oHAdzWxmvOAHC4+TWzAdyv9H72xv43bxPN+/T+ZV7PLj7/js7xLrPvw2GeY9sAcy/hixf/vbSHz76r++5o3/tu7L/DfO+7+f/eUb7zHeY39vi9b1kHjoiIiIiIiIgUxjnpRERERERERDaCSToRERERERGRjWCSTkRERERERGQjmKQTERERERER2Qgm6UREREREREQ2gkk6ERERERERkY1gkk5ERERERERkI5ikExEREREREdkIJulERERERERENuL/AUdP/00BEsNRAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "with pm.Model() as model7:\n", " lam = pm.Uniform('lam', 0.1, 10.1)\n", " k = pm.Uniform('k', 0.1, 5.1)\n", " y = pm.Weibull('y', alpha=k, beta=lam, observed=data)\n", " trace7 = pm.sample(1000, **options)\n", " az.plot_posterior(trace7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** In <<_ImprovingReadingAbility>> we used data from a reading test to estimate the parameters of a normal distribution.\n", "\n", "Make a model that defines uniform prior distributions for `mu` and `sigma` and uses the data to estimate their posterior distributions." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "Here's the data again." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:37.512718Z", "iopub.status.busy": "2021-04-16T19:41:37.512209Z", "iopub.status.idle": "2021-04-16T19:41:37.514759Z", "shell.execute_reply": "2021-04-16T19:41:37.514134Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "download('https://github.com/AllenDowney/ThinkBayes2/raw/master/data/drp_scores.csv')" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:37.518571Z", "iopub.status.busy": "2021-04-16T19:41:37.518135Z", "iopub.status.idle": "2021-04-16T19:41:37.527057Z", "shell.execute_reply": "2021-04-16T19:41:37.526638Z" }, "tags": [ "remove-cell" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TreatmentResponse
0Treated24
1Treated43
2Treated58
3Treated71
4Treated43
\n", "
" ], "text/plain": [ " Treatment Response\n", "0 Treated 24\n", "1 Treated 43\n", "2 Treated 58\n", "3 Treated 71\n", "4 Treated 43" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv('drp_scores.csv', skiprows=21, delimiter='\\t')\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "I'll use `groupby` to separate the treated group from the control group." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:37.532174Z", "iopub.status.busy": "2021-04-16T19:41:37.531673Z", "iopub.status.idle": "2021-04-16T19:41:37.533335Z", "shell.execute_reply": "2021-04-16T19:41:37.533679Z" }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "grouped = df.groupby('Treatment')\n", "responses = {}\n", "\n", "for name, group in grouped:\n", " responses[name] = group['Response']" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "Now estimate the parameters for the treated group." ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:37.537069Z", "iopub.status.busy": "2021-04-16T19:41:37.536501Z", "iopub.status.idle": "2021-04-16T19:41:37.538674Z", "shell.execute_reply": "2021-04-16T19:41:37.539148Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "data = responses['Treated']" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:37.761659Z", "iopub.status.busy": "2021-04-16T19:41:37.582037Z", "iopub.status.idle": "2021-04-16T19:41:41.394038Z", "shell.execute_reply": "2021-04-16T19:41:41.394468Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Auto-assigning NUTS sampler...\n", "Initializing NUTS using jitter+adapt_diag...\n", "Multiprocess sampling (2 chains in 2 jobs)\n", "NUTS: [sigma, mu]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [3000/3000 00:01<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 500 draw iterations (2_000 + 1_000 draws total) took 2 seconds.\n" ] } ], "source": [ "# Solution\n", "\n", "with pm.Model() as model8:\n", " mu = pm.Uniform('mu', 20, 80)\n", " sigma = pm.Uniform('sigma', 5, 30)\n", " y = pm.Normal('y', mu, sigma, observed=data)\n", " trace8 = pm.sample(500, **options)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:41.403790Z", "iopub.status.busy": "2021-04-16T19:41:41.397823Z", "iopub.status.idle": "2021-04-16T19:41:41.871273Z", "shell.execute_reply": "2021-04-16T19:41:41.871849Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAFTCAYAAABF801FAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAB0y0lEQVR4nO3dd3hUVfoH8O+ZSe8hvSckkAAhEAi9NwEVlVVXLKvoqmtdXXd1iz8VV3ctq667q659ddeCihVUEEF6h0AggQQSUknvfTIz9/fHDTcTSiDJzNwp38/zzMOcO+2dYTL3vvec8x4hSRKIiIiIiIiISH0atQMgIiIiIiIiIhmTdCIiIiIiIiIbwSSdiIiIiIiIyEYwSSciIiIiIiKyEUzSiYiIiIiIiGwEk3QiIiIiIiIiG8EknYiIiIjIioQQs4UQkhBittqxEJHtEVwnnYiIiIjIeoQQfgBGAsiRJKlJ7XiIyLYwSSciIiIiIiKyERzuTmSnhBAruofKpQgh1gkhWoUQxUKIW7tv/4UQ4pgQokUI8ZMQItHksZIQYsUZzxffvX25dd8JERGR4xFCDBdCfCmEqBJCdHTvoz8TQrica7i7EEIrhHhaCFEuhGgTQmzs3sf32mcPZv/fffuy7ueu7r5PphDiFit9LER0EVzUDoCIBu0zAG8BeAHAPQDeFUIMAzAbwB8AuAL4B4CPAExSKUYiIiJnswZAA4C7AdQAiAJwKc7fSfYkgD8B+BuAHwGMA/BNH88/0P3/UACrADwLwAhgJoC3hRCekiS93s/3SEQWwCSdyP79TZKk/wKAEGIfgCUAfgUg4fQ8NyFEBIB/CCHiJEkqUi9UIiIixyeECAYwDMCVkiSZJtofdd9+5v0DATwI4HVJkn7fvXm9EKILwIvneZkB7f8lSfqryetqAGwCEAH5ZAKTdCIbwOHuRPbv+9NXJEmqB1AFYNcZhWiOdf8bY83AiIiInFQtgAIAzwoh7uju4e7LaADekHvHTa3q4zED2v8LIYYJIT4WQpQB6Oq+3A4g+QIxEpGVMEknsn/1Z7R159kGAB6WD4eIiMi5SXJl5gUA9gF4BkCeEKJACHH3eR4S0f1v1RnbK/t4mX7v/4UQPgDWAxgDeUj8DAATALwLwL2P1yIiK+JwdyLn1AnA7YxtQWoEQkRE5IgkSSoAcLOQx7aPAXAfgNeEEIUA2s+4e3n3v6EAsk22h5k5rCkA4gDMkCRp2+mNQgjmBEQ2hD3pRM6pCEDqGdsuUyMQIiIiRybJDgJ4qHvTmftfADgMoBXAtWdsP7M9WF7d/3ad3tA9H/5KM78OEQ0Cz5oROaeVAP5PCPEogF2Qh7tdr25IREREjkEIkQa5svonAE4A0AJYDkAPYCMAX9P7S5JUL4R4GcCfhBDN6Knu/svuuxjNFNoOAE0AXhVCPAF5Hvz/Qa4+72+m1yCiQWJPOpFzegbAK5CH3n0FYASAX6gZEBERkQOpAFAMuff8GwAfA4gEcLkkSfvP85gnIO+fb+l+zGLIiT0ANJojKEmSqgEshXzSYFX3670N4ANzPD8RmYeQ61oQEREREZEtEUJcC+BTADMlSdqqdjxEZB1M0omIiIiIVCaEmAS5PsxuAB0AxkOuwJ4LYKrEg3Yip8E56URERERE6msBMBPAvQD8IC/H9imAPzJBJ3Iu7EknIiIiIiIishEsHEdERERERERkI5ikExEREREREdmIC81J51h4IiIi2yEG+Xju14mIiGzHOffr7EknIiIiIiIishFM0omIiIiIiIhsBJN0IiIiIiIiIhvBJJ2IiIiIiIjIRjBJJyIiIiIiIrIRTNKJiIiIiIiIbASTdCIiIiIiIiIbwSSdiIiIiIiIyEYwSSciIiIiIiKyEUzSiYiIiIiIiGyEi9oBENHgNLV2Yl9uOQ6eqERVfSta2nXwdHdFiL8XUoeGYEJKJEICvNQOk4iIbIgkSSiraUZheSNOljegoq4FDS2daGrthFargZ+XG0IDvREZ7IMRccFIigqEq4tW7bCJiJyCkCSpr9v7vJGI1FNV34ovtuRiY2YhDAbjee+n0Wgwe2wsrps7EsH+TNaJ7JwY5OO5X3di9c0dOHi8Aofyq3C4oAoNLR0X/VgPNxfMSIvFoolDER8RYLkgiYicyzn360zSieyMJElYs/MEPvjhCPQGw0U/zsvDFff/bAImjoi0YHREZGFM0qlfOnR67M4pw+aDxcjKr4Jkhq/AtNExuGlBKkIDvc0QIRGRU2OSTmTvWtt1ePGT3TiUX9lre2JUIKaOisaw6CHw83ZHe2cXCk41YPuRUuQUVve67w3zU3H1rBRrhk1E5sMknS5KUWUj1u89iU0Hi9De2XXO+/h4umF4zBAkhAcgNswfAb4e8PN2h9FgRH1LByrrWpF/qh6HC6pQ3dDW67FurlpcP28ULpucBK2WJY6IiAaISTqRPauqb8Vf/rcdpdVNyra48ADcujgNqQkhEOLcx+6HC6rwyhf7UNPYc4B10yWjsXRGssVjJiKzY5JO5yVJEjKPV+LLrblnnaA9bWR8CNKHhWFMYhgSIgKg0Vz4KyVJEo4W1eCb7cex99ipXrelJoTioesmwd/b3SzvgYjIyTBJJ7JXVfWteOydzb0S7aUzkrFs3ii4XEQPRnNbJ15YuRtHTlYp2+5bmoE54+ItES4RWQ6TdDqnk+UNeGtNJnKLa8+6LSLIB3PHxWNGWuygC4keLarBm6szUVzZqGwb4uuJh6+fjOExQYN6biIiJ8Qkncge1TW14//e3oTK+lYAgFarwa9/NgHT02L69TydOj3++sEOJVF3ddHiuV/NRVy4v9ljJiKLYZJOvbS06/Dxj9lYt6eg13xzjUaDSSMisXDi0D5HWw2E3mDEZ5uO4vNNx5TX1Go1eOjnkzB5ZJTZXoeIyAkwSSeyNx06PR59axMKKxoAyAdBf7xxKtKHhQ/4+X7/+kZlyHxkkC9euGce3N24GiORnWCSTop9ueV49ct9aGrtVLZptRosnDAUV0wbbvHlNw/kVeDlz/agtUMHANAIgXuXZmB2epxFX5eIyIEwSSeyJ5Ik4bmPdirz/zQaDX5/wxRkJEcM6nlLqprwyOsboOuSK8NfM2sErp8/atDxEpFVMEkn6A1GfLj+CL7Zntdr+5jEMPzy8rGICva1WiyV9a146v2tKK9tUbbduSQdCycmWi0GIiI7ds79OstxEtmoMwv0/GpJ+qATdACICfXDrYvHKO0vt+XiVE3zoJ+XiIgsr7G1E4+/u7lXgj7E1xO/WzYZj90y3aoJOgCEBXrj6dtnIzasZ+rUW6sPYltWiVXjICJyJEzSiWxQflk9PvzxiNK+YtpwzM9IMNvzL8hIwLDoIQAAg8GId787ZLbnJiIiyyiracaf3vypV3G48cMj8OK98zFlVLRZ5533R4CPB5765SwkRcn7FQkS/vnFXhw6UXmBRxIR0bkwSSeyMR06Pf7+2W4YDEYAQFLUENy4INWsryGEwJ1L0iG6R9hkHq/A0aIas74GERGZT15JLf74xk+oqJOHlQsI3HTJaPzxpqnws4Hlz3w83fB/N09DdIgfAPkE8HMf7UR+Wb3KkRER2R8m6UQ25r3vs5S5fe6uLnjw2okXtcxafw2NDMSs9Fil/elPOWZ/DSIiGryCU/V46r/blAJtri5aPHLDFCydkaxa7/m5+Hq547FbpiPIzxMA0NmlxzMf7ui1fCgREV0Yk3QiG5JTWI31+wqU9p1L0hER5GOx17tm1ghoug/wsvKr2JtORGRjiqua8OR7W9HW0QUA8PN2x9O/nIWJIyJVjuzcgv298NgtM+Dl4QoAqG9ux18/2IFOnV7lyIiI7AeTdCIboTcY8cY3mUp7QkokZo2N7eMRgxcR5IOZJq/x5ZZci74eERFdvJrGNvz5va1oaZd70L093LBi+UwkddcUsVUxoX545Pop0Gjkw8yiiga8/e1BdYMiIrIjTNKJbMRX23KV9cvdXV1w++VjrTKM8WczU5TrB/Iqei2jQ0RE6tB1GfDcRztR39wOQN4vPHbLdMSF+1/gkbZh9NBQ3HH5WKW98UAhNh8sUi8gIiI7wiSdyAaU17Zg1aZjSvv6+aMQ7O9lldeOCvZF+rBwAHJF3nV78q3yukREdH6vf3MABafkomsajQZ/vGmqsiqHvViQkYAZaT2jtd74JlM5GU1EROfHJJ3IBnyw/gi69AYAQEJEAC6dlGjV1790cpJyfcOBQnRw7iARkWq2HCru1et826VjMHpoqIoRDYwQAr+6Ih2RQfLa7Z1derywcjfnpxMRXQCTdCKV5RbXYld2qdK+c0k6tBao5t6X9GFhSoG6to4ubD9cYtXXJyIiWVV9K95c3VOfZHZ6HBZNHKpiRIPj6e6K3y2bDFcXLQCgpKoR//k+S+WoiIhsG5N0IhVJkoT31/UcrEwZFY3hMUFWj0MIgUsm9BwEbjzAeYNERNZmNEr45+d70d4pV3IPH+KD2y+zTn0SS4oL98dtl45R2uv3FWBfbrmKERER2TYm6UQq2pVThtziWgCAVqvBTZekqhbLrLFxSiXeY8U1LCBHRGRlq3ccV5bC1AiBB66ZAE93V5WjMo8FGQmYPDJKab/25X40tnaqGBERke1ikk6kEoPBiA/XH1HaiycmInyI5dZEvxB/b3eMGxamtDexCi8RkdXUNLZh5cZspX3tnBGqjKyyFHl++jgE+HgAABpbO/Dvr/ZDkiSVIyMisj1M0olUsvlQsdJb7eXhimtmp1zgEZY3Oz1Oub75YBEPnoiIrOQ/3x2CrksuIBob5o+rZ6q/TzA3P2933Ls0Q2nvPXYKmzJ5QpiI6ExM0olUoDcY8dlPR5X2ldOHw9fLXcWIZBnJEfDxdAMAVDe0KUPxiYjIcvbnlmNXTpnSVqOAqLWMGx6OhRN7VjB59/tDqGtqVzEiIiLb45h7ACIbtymzCFUNrQAAH083XGayBJqaXF20veYM7jCpOk9EROan6zLgnW8PKu056fEYEResXkBWcPPC0QgN8AYgryjy+tcHOHKLiMgEk3QiK9MbjPhsU+9edFsqDDQ1NVq5vuNIGQ+ciIgsaN3eAlTWyydtvT3c8IuFo1WOyPI83Fxw7896hr3vzyvH5oPFKkZERGRbmKQTWdnGA4WoaWwDIM/Pu9RGetFPS00IUYa81ze3c8g7EZGFtHV0YZXJSdvr5o6Ev7f6U5+sITUhBItMhr3/5/tDrPZORNSNSTqRFRmNEr7elqe0r5qeDA83FxUjOptWq+GQdyIiK/hmx3G0tOsAACEBXrhkQoLKEVnXLxaORkiAFwCgpV2H/67LUjkiIiLbwCSdyIr2HjuFirqeiu4LJw5VOaJzMx3yviubQ96JiMytsbUT35ictL1+3ii4umhVjMj6PNxccMfl6Up7U2YRsk9WqxgREZFtYJJOZEXfbD+uXF84YajN9aKflpoQAi8PeZ58bVM7CisaVY6IiMixfLH5GDq79ACAmBA/zEiLVTkidYxPjug1euvN1ZnQG4wqRkREpD4m6URWcry0DseKawAAGo0Gi21sLroprVaDccPDlfbeY6dUjIaIyLE0tXZi3d4CpX3DglRoNELFiNR166Vj4O4qn7QurW7CN9vzLvAIIiLHxiSdyEpMe9Gnj45GkJ+nitFc2ITkSOX6vtxyFSMhInIsa/fko0tvAADEhwdgQkqEyhGpK9jfC9fPH6W0P/3pqFLxnojIGTFJJ7KCqvpW7DIpwHbltOEqRnM2IcRZl4duvwYajfwTkV9Wjw2btmH58uVITk6GRqPB8uXL1Q2aiMgOder0+G5XvtJeOiMZQjhvL/ppl05KRFx4AACgS2/A22sy+1UP5amnnsL8+fPh5+cHIQQKCwvPus8bb7yBBQsWICwsDP7+/pg2bRp++OEHM70DIiLzYZJOZAXf7jwBY/fBxuihoYiPCFA3oHP47W9/i507dyqX//znXYyMC1ZuX7V6HbZt24YJEyYgPDy8j2ciIqLz+SmzCM1t8lJjIQFemDIq6gKPcA5arQZ3XZEOAfmExYG8CuzPq7jox7/xxhvQ6/WYM2fOee/zl7/8BQkJCXjjjTewatUqJCUlYdGiRfjmm28GHT8RkTnZZtUqIgfS2q7Dj/tPKu0lU4epGM35xcfHY/Lkyb22ZTQex5GTVQCAmLELceLFp+TtGRlWj4+IyN4ZDMZe862XTB0OrZb9JacNjwnC/IwErN8nz9d/7/tDGJsUBpeL+IyKi4uh0WiwZs2a8ybdBw4cQHBwz8nnBQsW4Pjx4/j73/+OK664wjxvgojIDLhnILpIy5cvR0ZGBr799luMHDkSXl5euOyyy1BXV4cTJ05gzpw58Pb2RkZGBrKyetZ6/WFvAQ799BnWvXofvnrmBly/ZBbef//9Xs/97bffYsGCBQgNDYWfnx8mT5581hC8FStWIDg4GJmZmZg8eTK8vLyQnp6OrVu3Wuw9mxaPyy6sYcVdIqJB2H30lDLX2sfTDfPGx1v19Qe6HzMajXj22WeRlJQEd3d3DB8+3GL7sevnj1JWFymvbcF3u05c1Hs7PT2rL6YJ+mnp6emoqqq6qNcgIrIWJulE/VBcXIzHH38cTz/9NN58803s2LEDd955J5YtW4Zly5Zh1apV0Ov1WLZsGSRJgtEo4f/+8Dsc2/Y5EtIX4Jl/vIOlS5fitttuw5o1a5TnPXnyJJYsWYL//e9/+PzzzzF16lQsXrwY27dv7/X6bW1tuOWWW/CrX/0Kn3/+Odzd3bF06VK0tbUp9zEajdDr9X1eDAbDWe9txYoVcHFxQXBwMG677TbU1dUhMsgHIQFeAIAOnR65xbUW+mSJiBzf97t75qIvmpioyjKc/d2PAcD999+Pp59+GnfeeSe+/fZbi+7H/L3dcc2sFBiNBhiNBnyy4QhqG1svaj82EDt37sTIkSPN8lxERObC4e5E/VBXV4edO3ciMTERAJCVlYW//e1veP/993HzzTcDACRJwmWXXYZjx47haHEdcnZ+h/FL7kHqlIV48M5L4eaqRXl5OZ588klcfvnlAID77rtPeQ2j0Yg5c+YgOzsb77zzDqZNm6bc1t7ejpdffhlz584FAERERCA9PR1btmzBokWLAAC33XbbWT0cZ5o1axY2bdqktG+55RYsWbIEISEh2LdvH5566ikcOnQIe/bswdikcGXo4aETlRiVEDLIT5GIyPkUVTYip7AaAKARApdMHKpKHP3dj7m6uuLf//43/vOf/+CWW24BAMyfP9+i+7HP3/orvvrvf5XHfPTE2e/jzP3YQLz77rvIzMzEiy++OKjnISIyNybpRP0QHx+vHNgAQFKSvNb56YMN021lZWV4f+U6CCEQmTIRs8dEQyMk6PV6zJs3Dx9//DEMBgO0Wi1KS0vx6KOP4scff0R5ebnSe2F6YAMArq6umD17ttI+ffa/tLSncvyKFSt6HSydi6+vb6/2e++9p1yfOXMmRowYgUsvvRSrV6/GmGEZSpKeeaISNyxI7fO5iYjobOv29KyLPnFklGrLcPZ3P5afnw+NRoOlS5dCr9cr97HkfuzPTz6J+Uuux3vfHwIACAH8dtlkhAZ4K/c5cz/WX/v378f999+PBx54oM9ic0REamCSTtQPAQEBvdpubm5nbT+9rbymAfmFZZAkI1b/7Ras/htw6xnPV15ejsjISFxxxRVobm7Gn//8ZyQlJcHb2xuPP/74WfPk/Pz8es27O/1aHR0dyrbY2FhER0f3+T4utNzPokWL4OPjgwMHDuD3Cy+FRggYJQknTzWgsbWzz8cSEVFvbR1d2JRZpLQXT0rs496W1Z/9WEdHB2pqamAwGODv73/O57PUfuz6qCicaHDD4ZPy6IOsCg1+N3uscp/BLFtXUFCAyy67DPPmzWMvOhHZJCbpRBZyMK8Crp7eEBot7vy/13D7knFn3Sc0NBQnTpxAZmYmvv/+e2WoHyAPCRyIgQx3P9Ppgx8hBLw93TAsZghyi2shQULWicoBxUVE5Kw2HSxCZ5fcCx0T4odR8WcXMLNVQ4YMgYuLC7Zv337O4mzW2o99BeCPv+hpD3S4e1VVFRYuXIi4uDisXLkSWq12QDESEVkSk3QiCzmUX4WQ+FRIRiNGxfqdd9my0wcx7u7uyraioiJs374daWlp/X7dgQx3P9PatWvR0tKC8ePHAwDGJoUpReMymaQTEV00SZJ6DXVfNClxUL3A1jZ37lwYDAY0NjZiwYIF57yPJfdjH/xwBFn58n4nPiIAd185DkKIAQ13b2lpwaWXXgoAWLNmDby8vPr9HERE1sAknchC2jq7EBEbhRFTFmPFI/eiraYIGRkZ6OjoQHZ2NvLy8vD2228jJSUF0dHR+O1vf4unnnoKzc3NeOKJJxAVFTWg142Pj0d8fPxF3//NN9/Evn37MH/+fAQHB+PAgQN4+umnMXHiRFx22WUAgPRh4fjv6p2oKc7BVyf3o76+HkVFRVi1ahUA4JprrhlQrEREji6vpA6l1U0AAHdXF8waG6tyRP2TnJyMu+66C8uWLcMjjzxi9f1YVEIKfv3PH2A0GtEIQPhFIyM54qzHbN68GdXV1di/fz8A4Pvvv0dISAhGjhypzHv/2c9+hqysLLz33nvIz89Hfn5Ptf3JkycPKFYiIktgkk5kYU88/TzKs9bjrbfewuOPPw4/Pz+MHDkSv/zlLwHIPQ9ffPEF7r33XlxzzTWIjo7Go48+ik2bNuHIkSMWjy8xMRHvv/8+Pv/8czQ1NSE8PBw333wznnrqKWUYYGJkILqaKrD785eUxxUUFChDDU8XCCIiot42HihUrk8bHQ1Pd1f1ghmgV199FcOHD1dlPxYR5IOFE4bi+93yeukfrDuMccPCodH0Ho3wxBNPYPPmzUr7nnvuUbavWLECALB+/XoAwI033njW63A/RkS2RFzgR4m/WET9VFzVhN/86wcAgEajwRu/XYwhKlXxNacXVu7Czmy5+u4ti9JwxbThKkdE5JQGO06a+3Ur6tTp8cvnv0V7ZxcA4C+3z0ZKnP3MR7cVja2duPvF75V5/fcuzcDccfHqBkVEZB7n3K+fXQGEiAblB9NldkZEOkSCDsjz0k/Lyq/q455ERAQAu4+eUhL0iCAfJMcGqRyRffL3dsdVM3pODK/ckA1dl0HFiIiILItJOpEZdej02HSwZ5mdhROGqhiNeaUlhirXswuroTcYVYyGiMj2mQ51n50eZ1cF42zNFdOGw9/bAwBQ29SOH/efVDkiIiLLYZJOZEY7j5QqvSaRQb4YPTRE5YjMJzTQG+FDfAAAui6DUu2diIjOVlXfiiMF8hrfAgKzx8apHJF983BzwdWzUpT2F1ty2ZtORA6LSTqRGW3M7OlFnzc+3uF6TUYP7elN55B3IqLz23SwCFJ3CYAxSaEI9udyX4O1ICMBgb7yFLL6ZvamE5HjYpJOZCbltS3IKZR7TTRCYJYD9pqYDnk/lM/10omIzkWSJGw9VKK056THqxeMA3Fz1WLpjGSlzd50InJUTNKJzGSTSS96+rBwBPp6qBiNZYweGgLRXYTyRGk9Wtt1KkdERGR7TpY34FRtMwB5bfQJKWev600Dw950InIGTNKJzMBolPBTZqHSnjPO8XrRAcDXyx0JkQEAAAkSsgtr1A2IiMgGbc3q6UWfNDIS7m4uKkbjWNibTkTOgEk6kRkcLqhCbVM7ADmRnZASqXJEljMmkfPSiYjOx2iUeiXpM9JiVYzGMbE3nYgcHZN0IjPYYLLMzswxMXDROu6fVu/icZyXTkRkKqeoBvXNPSdtTWt5kHmwN52IHJ3jZhJEVtLSrsPunFNKe66DFwgaERcMVxctAKCsphk1jW0qR0REZDu2HCpWrk9NjXbok7ZqOrM33fRkORGRveOeg2iQtmWVQG+Qz+AnRAQgPiJA3YAszM1VixFxQUr7MIe8ExEBALr0BuzMLlXaM9NiVIzGsZ3Zm/7V1lzoDUYVIyIiMh8m6USDtNGkYNzccfGqxWFNpkPeDzFJJyICIP8etnV0AQBCAryQHBt0gUfQYMwfHw8/b3cAQE1jG7aajGIgIrJnTNKJBqG4qgn5ZfUAAK1WgxlO0msyJjFMuZ6VXwVJklSMhojINpj2ok8dFQ0hhIrROD53NxdcNiVJaX+5NZf7IyJyCEzSiQbhJ5M5cBNTIuHr5a5eMFaUEBEAH083AEBjaweKq5pUjoiISF16gxF7jvbUJ5mSGq1iNM5j8cREeLq7ApDrpOzKKVM5IiKiwWOSTjRAeoMRmw4WKW1nGeoOABqNQOpQLsVGRHTa4YKeoe5Bfp5IigpUOSLn4O3phsWTEpX2F1vYm05E9o9JOtEAHcirQFNrJwAg0NcTY5PCLvAIx2K6XjqLxxGRs9uZ3dODO4VD3a3q8qnDlFVHCk7Vs1YKEdk9JulEA7TRZKj77LGx0Gic64DMtHjckZPVrKpLRE7LYDBid45pkh6lYjTOx9/bHfPHJyjtzzcfUzEaIqLBY5JONACNrZ3Yn1ehtOc40VD308KHeCMkwAsA0Nmlx/HSOpUjIiJSR3ZhDVradQDkkVWs6m59V0wbBo1GPqzNKaxGXkmtyhEREQ0ck3SiAdh8sAhGo9xznBwbhKhgX5Ujsj4hRK8q7wdPVKoYDRGRekyruk8ZFcWh7ioIDfTutcLKl1tyVYyGiGhwmKQT9ZMkSdh4wKRgXHq8esGoLM1kHv7hAs4BJCLnI0kS9h4rV9qTR3Kou1qumpGsXN97rByl1Vx5hIjsE5N0on7KL6tHSVUjAMDVRYupTrzMzuiEEOX68ZI6pbIxEZGzyC+rR31zOwDAx9MNKRzqrprYUD+MHx4BAJAg4etteSpHREQ0MEzSifppY2ZPL/rU1Gh4ebiqGI26/LzdER8eAAAwShKyC6vVDYiIyMr25vb0oo8bHg6tlodWalo6s6c3ffOhYtQ2tasYDRHRwHBPQtQPui4DtmYVK21nWhv9fEyXYuN66UTkbPaZDHXPSIlUMRICgBFxwUrhPoPBiDU7jqscERFR/zFJJ+qHPUdPKUO6QwO8MSo+WOWI1Gc6L51JOhE5k5rGNhRWNAAAtFoN0k1+D0k9S03mpq/bU6BU3icishdM0on6YcOBk8r1OePiWMEXwIjYIGV4Z2l1E+o4tJCInMR+k6Huo+KDnXr6ky3JSI5AdIgfAHmJ0LV78lWOiIiof5ikE12kqvpWHM6X51wLCMxx4qruptzdXDAitmdEAau8E5Gz2GeSpGckc6i7rRBC4Krpw5X2tztPQNdlUDEiIqL+YZJOdJE2HSyCBAkAkJYYipAAL5Ujsh2jE3uqvB/ikHcicgIdOj2y8nuKZWakRKgYDZ1pxphYBPl5AgCaWjux8UChugEREfUDk3SiiyCvjV6otOeOj1ctFls0NrH3vHRJklSMhojI8g6dqITeIPfOxoT4ISzQW+WIyJSLVoMl03p607/ZngeDwahiREREF49JOtFFOHKyGtUNbQAAbw83TGQF316GRgYqczHrm9tRWt2sckRERJbVa6g7e9Ft0oKMBPh4ugEAKutbsTO7TOWIiIguDpN0oouwYX+hcn3W2Fi4uWrVC8YGaTQCaUO5FBsROQdJkrA/t0JpZyQzSbdFHm4uWDw5SWl/vuUYR3oRkV1gkk50Aa3tOuzK6Tn7zrXRz220SZJ+6ESlipEQEVnWibJ6NLZ2AAD8vN0xPCZI5YjofC6bnAh3VxcAQHFlI/bnVVzgEURE6mOSTnQBW7NK0KWX5x3GhwcgISJA3YBsVFpiT5J++GQVK+kSkcPKPN6T6I1NCoNGw+U4bZWvlzsumZCgtD/fzN50IrJ9TNKJLmBjZqFyfR4Lxp1XZLAvIoN8AQC6LgOXYiMih5V5vGe00PjhHOpu65ZMGw6tVj7kzSupRU5hjcoRERH1jUk6UR+KKhqRX1YPANBqNZiRFqNyRLbNtHjS3mPlfdyTiMg+Nbd14nhJHQBAQPQaRUS2KcjPE3PT45X255uPqRcMEdFFYJJO1If1+04q1yemRMLXy13FaGyfafGkfbnlHFJIRA4nq6AaEuTftsSoQPh5c79gD66cPhwC8rSEQ/mVygl4IiJbxCSd6Dw6dHpsOliktBdOHKpiNPYhJTZIWe6mvrkdBaca1A2IiMjMMk0Kj40dFqZiJNQfEUE+mDo6Wml/sYW96URku5ikE53H9sMlaO/sAiDv3FMTQlSOyPZptRqMGx6utPccO6ViNERE5iVJEg6arF4xblh4H/cmW3P1zBTl+u6cUyipalIxGiKi82OSTnQeP+ztGeq+IGMohGD13ouRkRKpXN/HeelE5ECKK5tQ39wOAPD2cENSVKDKEVF/xIX7K4X+JEj4bNNRlSMiIjo3JulE53CyvAEnyuTCQFqtBnPS41SOyH6kJ4UpVXQLKxpQ09imckREROZhuvRaWmKo8ltH9uPnc0Yo13ccLkVRRaOK0RARnRv3LkTnsG5PgXJ9yqgoFgbqBy8PV6TG90wN2J3DIe9E5BhMl14zndpD9iMpeohS5FSChE825qgcERHR2ZikE52hraMLWw4VK+2FE1gwrr8mjugZ8r7jSKmKkRARmUeHTo+jxT3ra49NYtE4e7Vs3ijl+u6jZSg4xUrvRGRbmKQTnWHTwSJ0dukBANEhfhgRF6xyRPZnSmq0stTNseIaDnknIrt3uKAKBoMRABAb5o8hfp4qR0QDlRARgMmjeiq9f7whW8VoiIjOxiSdyIQkSVi7O19pL56UyIJxA+Dv7Y7RiT1D3ndml6kYDRHR4JkOdU9nL7rdu27uSOVk8oG8CmSfrFY5IiKiHkzSiUwcLqhGWU0zAMDDzQWzxsaqHJH9mj46Rrm+/XCJipEQEQ3e4fwq5fpYLr1m92JD/TDTZB///rosSJKkYkRERD2YpBOZ+H7XCeX6nPR4eLq7qhiNfZs4IhIajfwTc7y0DpX1rSpHREQ0MDWNbThVK5/AddFqkRIbpHJEZA7XzxsFF60WAJBfVo/trKFCRDaCSTpRt+qGNuw1Wdd70SQWjBsMXy93jE0KVdrsTScie2Xai54SGwQ3V62K0ZC5hAR4YcnUJKX94Q9H0KU3qBgREZGMSTpRt/V7CyBBHuo2emgookP8VI7I/vUe8s4eCiKyT1kFPUm6ab0Nsn9LZyTDx9MNAFDV0IrvduVf4BFERJbHJJ0IQJfegPX7TyrtRZMSVYzGcUxIiVSGEhZWNKCwvEHdgIiI+kmSJBwu6CkqljY0tI97k73x9nTDtbNHKO1Pf8pBXVO7ihERETFJJwIgr+Xd1NoJAAjy88SE5AiVI3IMXh6umDSyZ8309ftO9nFvIiLbU1bTjPpmOWnzdHdFYmSgyhGRuS2alKiMnuvQ6fHe2iyVIyIiZ8cknZyeJEn41qRg3CUTh0Kr5Z+GuSzISFCub8kqRqdOr2I0RET9c8SkFz01IYT7BwfkotXgjiXpSnv74RJkmdQhICKyNu5pyOkdL61Dflk9ALlq74IMFowzp9SEEIQP8QEAtHV0YQer5xKRHTlsOh+dQ90dVmpCCKan9dRReXtNJovIEZFqmKST01uzs6cXfUZaDPy93VWMxvEIITDfpDfddO4/EZEtMxp7z0cfncgk3ZHdsjANHm4uAORpDp/9dFTliIjIWTFJJ6dW19SOndllSvuyKUl93JsGau64eGWIaG5xLYqrmlSOiIjowk6WN6C1QwcA8Pf2QEyIr8oRkSUN8fPETZeMVtpfbMnFidI6FSMiImfFJJ2c2rq9BTAajQCAEXHBSIgIUDcgB+Xv7Y4JKT0F5Nbt5hI3RGT7TJdeSx0aAiGEitGQNSyaOBSj4uVl9iRI+NcX+6Dr4rB3IrIuJunktLr0Bvywt0BpXzqZveiWtHBCz1z/DQcKlWr6RES26rBJ8bAxHOruFIQQuPdnGXB3lYe9l1Y34dOfclSOioicDZN0clrbD/dedm3SiMgLPIIGY/TQEMSHBwCQT5Cs3cPedCKyXV16A3KKapQ2i8Y5j7BAb9y8sGfY+1db85BXUqtiRETkbJikk1M6c9m1hRMTuayOhQkhsHRGstL+blc+l2MjIpuVV1KnVPcOC/RGaKC3yhGRNS2cOBSpCfKJGQkSXv5sD9o6ulSOioicBbMSckp5JXUoOGW67FrCBR5B5jBlVBRCArwAAM1tnfgps0jliIiIzi2LS685NSEE7l06Hp7urgCAyvpWvP7NAUiSpHJkROQMmKSTUzLtRZ85JgZ+XHbNKrRaDZZMHa60v96WB4PBqGJERETn1mt9dM5Hd0qhgd6464pxSnv74RKeXCYiq2CSTk6n9oxl11gwzrrmjY+Hj6cbAKCqoRVbs0pUjoiIqLcOnR7HS+uVNnvSndf0tBjMHRevtN9ak4miikb1AiIip8AknZzOD3t6ll0bGR/CZdeszMPNpdd69J9tOgo9e9OJyIZkn6xW9hOxYf7w52grp/bLy8YiKtgXAKDrMuCZD7dzhRIisigm6eRUdF0G/LCvZ9m1xZMSVYzGeV0+ZRi8PeTe9Iq6Fmw+yOGDRGQ7TIe6p7EX3el5uLng4eunKMuyVTe04YWVu3iCmYgshkk6OZXth0u47JoN8PJwxZXTe+amszediGzJ4YJq5TrnoxMAxIT64cFrJ0JAAACyC6vx7neHVI6KiBwVk3RyGpIkYc3OnoJxiyZx2TU1XTYlCb5e8hDS6oY2bNh/UuWIiIjklSdOzznWCIGRccEqR0S2YuKISCybP1Jpr9uTjx/2FvTxCCKigWGGQk4jt7gWhRUNAABXFy3mj+eya2rycHPptW76Z5uOQddlUDEiIiLgaFEtJMjLbCVEBsDLw1XliMiWXD0zBVNTY5T2W2sOIvtkdR+PICLqPybp5DTWm/TUTh/NZddswaKJQxHg4wEAqG9ux/e781WOiIicnWnCNSo+RMVIyBYJIXDf0vGIDw8AABiNRvxt5S5U1beqGxgRORQm6eQUWtt12H64VGlfMoG96LbA3c0F184eobS/2HIMre06FSMiImeXXWiSpCcwSaezubu54I83TVVO9je3deKZD3egQ6dXOTIichRM0skpbM0qQZdeHkodG+aPYdFDVI6ITpufkYDQAG8AQEu7Dt/sOK5yRETkrFrbdSgsl+ejCwiMiA1SOSKyVcH+Xvj99VOU2jbFlY34x2d7IEmSypERkSNgkk5OYf2+nqHu88cnQAihYjRkykWrwbJ5PYV4Vm8/jkauP0tEKjha3Hs+urenm8oRkS1LiQvGXVeMU9p7jp3Cyg05KkZERI6CSTo5vPyy+l4F42aNjVU3IDrLjLRYxIT6AwA6u/T4fPNRlSMiImfUez46q7rThc0dF4/LpwxT2qs2H8W2wyUqRkREjoBJOjk80170KaOi4MOeEZuj0QjcuGCU0l67p4BFeIjI6jgfnQbi5oWjMTYpTGm/8sU+FJyqVzEiIrJ3TNLJoXXo9NiaVay0ueya7cpIjsDwGHn+p8FgxCc/ccggEVlPW0cXCsoaAMjz0bk+Ol0srVaDh34+CZFBvgCALr0Bz364A/XNHSpHRkT2ikk6ObTth0uUaquRQb4YyeGLNksIgZsWpCrtzZnFKKlqUjEiInImR4tqlPnoceH+nI9O/eLt6YY/3DQVXh6uAIDapnY899EO6LoMKkdGRPaISTo5tF4F4zJYMM7WjUoIUYYMSpCwckO2yhERkbPIKaxRrqdyqDsNQFSwL3573WQIyMcax0vr8Po3B1jxnYj6jUk6OayiykYcL60DIA9Fm50ep3JEdDFuNOlN35VThhPd/4dERJZ05CTno9PgjU0Kwy2L05T25oNF+GY7lxYlov5hkk4Oa+P+QuX6xJRI+Hu7qxcMXbShkYGYMipaaX/44xEVoyEiZ9De2aUU+hIQGBHH9dFp4C6fkoQ56fFK+3/rDuNAXoV6ARGR3WGSTg7JYDBii2nBuAwWjLMn188fBU331ISs/CocLqhSOSIicmTHimth7B6SHBPmB18vntSlgRNC4FdXpCM5Vj7ZI0HCS5/uZp0VIrpoTNLJIR08UYmm1k4AQKCvJ9KGhqocEfVHVLBvr+kJH3NuOhFZkOn66JyPTubg6qLFI9dPQZCfJwB5tMbzH+1EZ3cxWyKivjBJJ4e0+VBPL/rMtBhoNCwYZ2+umzsSWq38E5VbXIsck/WLiYjMKdukaBxXASFzCfDxwB9vmgY3Vy0A4FRtM95bm6VyVERkD5ikk8Npbddhz9FTSnvWWBaMs0fB/l6YNSZWaX+xJVfFaIjIUXXo9DhRVq+0R8WzJ53MJyEiALdfNlZp/7C3oNcxChHRuTBJJ4ezK6cMXXp5XdK48ADEhfurHBEN1FUzkpWlbDKPV+BkeYO6ARGRw8ktroXRaAQAxIT6w49FRsnM5o6Lx2STgqivfbUfdU3tKkZERLaOSTo5nM0He4a6m/bEkv2JCvbF5FFRSnv1Di5jQ0TmxfnoZGlCCNx1RTqG+Mrz05vbOvHKF/u4fjoRnReTdHIoNY1tyO6euywgMCMtRuWIaLCumj5cub7tcAkaWjpUjIaIHM0Rk3oXnI9OluLr5Y5fXzNBGR12KL8Sa/cUqBwVEdkqJunkUHZmlynXRyeGYEh3VVWyX0nRQzAseggAeWm9H/byoIaIzKPzzPno7EknCxo9NBRXTBumtP+37jAq61tVjIiIbBWTdHIoO7NLlevTR7MX3VFcPqXnoOaHvSehNxhVjIaIHEVuSR0M3b8n0SF+8Od8dLKw6+ePQnSIHwCgs0uP177cz2HvRHQWJunkMGoa25BbXAsA0AiBCSmRKkdE5jJ5VBQCu+fy1Te3Y5fJiAkiooHKNhnqzl50sgZXFy3u+1mGMuz9yMkqrN93UuWoiMjWMEknh7E7p2dJk9ShIazQ60BctBpcMiFBaa/ZyQJyRDR4OSbrozNJJ2sZFj0EV5rUW3nv+yxUcdg7EZlgkk4Ow3So+xSTpU7IMVwyYSi0Wvkn63hpHQq5HBsRDYKuy4DcklqlPTKORePIeq6bOxJRwb4A5GHvb3xzgMPeiUjBJJ0cQl1TO44VyQdbAgKTRkZd4BFkbwJ8PDDZ5P/1x/2F6gVDRHYvr7RnPnpUsC8CfT1UjoiciZurFvcu7Rn2fvBEJbYfLr3Ao4jIWTBJJ4ew5+gpSJDPQI9KCGHxHwe1IKNnyPvmQ0XQdRlUjIaI7NmRk6ZLr3GoO1lfcmwQFk9OVNrvfncIre06FSMiIlvBJJ0cwo4jpkPd2YvuqFITQhA+xAcA0NbR1WuKAxFRf+SYJOmpnI9OKrl+3iilMGpjawc+/DFb5YiIyBYwSSe719DSoRT/ERCYOIJV3R2VEAJzx8UrbQ55J6KBkOej1yntkfGcj07q8PJwxW2XjlHaP+wpQJ5JrQQick5M0snumQ51T4kLwhA/T5UjIkuakx4HjZDn8OUUVqOsplnliIjI3hwvrYPeIE+XiQzy5X6DVDVlVBTGDQ8HAEiQ8O+vD0DfXS+BiJwTk3Sye6zq7lyG+HlifHKE0t7I3nQi6ifT9dHZi05qE0LgjsvT4eqiBQAUVzbi250nVI6KiNTEJJ3sWlNrJ44U9BxsTeZ8dKcw36SA3JZDxVy2hoj6Jftkz/ronI9OtiA00BvXzR2ptFduzEZ1Q5uKERGRmpikk13bc/QUjN0JWnJsEII4ZNEpjE0Kg6+XXMG/rrm9V5VmIqK+dOnPWB+dSTrZiCVThyE2zB+AXDfhP98dUjkiIlILk3Syaxzq7pxctBpMS+35/95yqFjFaIjInpwoq0eXXp6PHj7Ehyd3yWa4aDX41ZJ0pb37aBn255arGBERqYVJOtmt5rZOZJkOdR/Joe7OZNbYWOX6zuwyrplORBel9/ronI9OtiUlLhhz0uOV9jvfHuT+jcgJMUknu7XvWDmMRrn66bDoIQgJ8FI5IrKmYdFDlDXT2zu7sI+9DUR0EXIKuT462bZfLBwNbw83AEBlfSu+2JqrckREZG1M0slu7eBQd6cmhMD0tBilvZVD3onoAvQGI44W9cxHH8UknWyQv7c7brokVWl/uSUX5bUtKkZERNbGJJ3sUmu7Dofyq5Q2q7o7p5ljeoa87z9egea2ThWjISJbd6K0TpmPHhbojWB/jsAi2zR/fAISowIBAHqDAW+vyeRKJkROhEk62aV9ueUwGOSh7kMjAxEW6K1yRKSGqGBf5SDGYDBiZ3aZyhERkS070mt9dPaik+3SaAR+tWQcBAQA4OCJSuzK4T6OyFkwSSe7ZJqMTWEvulObNSZOuc4q70TUlxyuj052JDEqEAsnDlXa//nuEDp0ehUjIiJrYZJOdqetowuZxyuVNuejO7dpo6OhEXJPw9GiGlTVt6ocERHZIr3BiGPFJuujs7I72YEb5o+Cn7c7AKC2qR0f/XhE5YiIyBqYpJPd2Z9bDr1BnlMYHx6AiCAflSMiNQX4eCAtMVRp7zhS2se9ichZFZyqR2eX3AsZEuCFUE6TIjvg7emG5YvSlPZ3O/ORV1LbxyOIyBEwSSe702uoeyqHuhMwfbRJlfesEhUjISJbZbo+Oqu6kz2ZOSYWY5PCAAASJLz25X7ou+vyEJFjYpJOdqVDp8eB4xVKm0PdCQAmjoiEViv/nBVWNKCsplnliIjI1uQUmsxHZ9E4siNCCPzqinFwd3UBAJRUN+HzzcdUjoqILIlJOtmV/XkVyvI5MaH+iAr2VTkisgXenm4YPyxcaW9jbzoRmTAYjL2S9JHsSSc7ExrojRsX9Kyd/vmWYyiualIxIiKyJCbpZFd2msw3nsqh7mRiusma6dsPl3A9WSJSFJQ3KPPRg/29EBrA9dHJ/iyelIhh0UMAyCeeXvtyH4xG7uuIHBGTdLIbnTo99ueVK20OdSdTGcPDlaGAZTXNKKpoVDkiIrIVpvPRR8YHQ3SvCEFkTzQagXuWZijTu46X1uH73fkqR0VElsAknezGgeMV0HXJQ92jQ/wQE+qnckRkS9zdXDBhRITS3naYQ96JSJZT2JOkc310smexoX742cwUpf3h+iNcepTIATFJJ7thWtV98igOdaezmVZ538Yh70SEc8xHZ9E4snNXz0xGdIjcUdHZpce/vuCwdyJHwySd7IKuy4B9x3qGuk/lUHc6h/Rh4fDycAUAVDe0Ia+kTuWIiEht+afq0aGT56MH+XkifAjXRyf75uqixb1Lx0NAnraRU1iNb7bnqRwVEZkTk3SyCwdPVCpFfyKDfBEbxqHudDYXrQaTR/aMsuCQdyLKKqhSro9ODOV8dHIIw2OCcPXsnmHvH23IxsnyBvUCIiKzYpJOdmGHSVX3KaOieJBF52U65H3HkVIOASRycofze+ajpw0NVTESIvO6dvYIJEYFApCndbz82R6ldg8R2Tcm6WTzdF0G7Dl6SmlPSeVQdzq/0UND4e/tAQBoaOlAtknBKCJyLrouA44V1yrt0UzSyYG4aDV44JqJcHPVAgBKq5vwvx8OqxwVEZkDk3SyeZnHK5Sh7hFBPogP91c5IrJlGo3AVJMTOduyOOSdyFkdLaqB3iD3LEYF+2KIn6fKERGZV1SwL25dPEZpf7frRK+ODSKyT0zSyeZtNxnqPnVUNIe60wVNH92TpO/MLoPeYFQxGiJSy2HT+ejsRScHtSAjARNSIpX2q1/uQ01jm4oREdFgMUknm3ZWVXcOdaeLkBwbhGB/LwBAa4cOB09UqhwREanhzKJxRI5ICIF7l45HUPdIkZZ2HV76dDcMPEFNZLeYpJNN259X3quqexyHutNFEEL0XjOdQ96JnE5ruw4FZQ0AAAGB1ASuj06Oy9fLHb/5+SRoukcb5hbX4sP1R1SOiogGikk62bQdR8qU61NTOdSdLt70tJ4kfc/RU+jsXieZiJxDdmENJMirOwyNCoCPp5vKERFZ1oi4YFw3b6TS/np7Hk9SE9kpJulkszp1euzL7Sl+wqHu1B/x4f6IDPIFAHR26bE/r0LliIjImkzno3PpNXIWV89MwfjhEUr7lS/3cf10IjvEJJ1s1v68CmW9z6hgX8SG+akcEdkTIQSmmfSmbz/M3gQiZ5KV35OkpzJJJychhMAD10xQTlJ36Q149sMdaGztVDkyIuoPJulks3aYVHWfwqHuNACmVd735VagraNLxWiIyFrqmtpRWt0EANBqNRgRG6RyRETW4+3phj/cNBWe7q4AgJrGNrywchdXOiGyI0zSySZ16PTYl9tT1X2aSREwW/TVV18hLS0N7u7uSEhIwEsvvdTn/R988EEIIfC73/2u1/Zjx45h0qRJ8Pf3x7Jly9DS0tLr9i1btiAqKuqs7efy3nvvQQhxzvuuWLECwcHBSruwsBBCCOXi7e2NxMRE3Hjjjdi6detZj1++fDkyMjIuGIPaokP8EB8eAADQGwxcO5bISRw5Wa1cT44Jgrubi4rR2C/u2+xXVLAvHrx2IgTkDo6cwmq8+90hSJKkcmREdDGYpJNN2p1Thi69PNQ9OsQPsaG2O9R9+/bt+NnPfoaJEydi9erVuO222/D73/8eL7/88jnvn5OTg3fffRd+fme/p+XLlyMpKQmffvopcnJy8Ne//lW5zWg04sEHH8QzzzwDHx8fi7yXF154ATt37sR3332Hxx57DLW1tZg5cyaefPJJi7yeNUwz6U3fxiHvRE6h9/rorOo+ENy32b+M5Agsm99TSG7dnnys2XlCxYiI6GLx1DLZpC2HipXrM8fEqhjJhf35z3/G9OnT8fbbbwMALrnkEtTX1+PPf/4z7rnnHri59a4o/Otf/xoPPPAA/ve///Xa3tLSgt27d2P16tUICQlBQ0MDXnjhBeVg5p133oGrqyt+8YtfWOy9JCcnY/LkyQCAWbNmYfny5Xj88cexYsUKzJo1C7Nnz7bYa1vK9NExyjI0h/Kr0NTaCT9vd5WjIiJLkSSJRePMgPs2x3D1zBQUVzYpdVne/z4Lwf6emDKKxXiJbBl70snm1DW149CJngMsW0/SDx48iPnz5/fadvpgZufOnb22r1q1CkePHsUf/vCHs55Hp9MBADw9PQEAXl5eyrampiY89thj+Mc//mH1uflPPPEEIiMj8frrr1v1dc0lNNAbw2Pk+ahGoxG7csou8AgismcVda2obmgDALi7uiApeojKEdkn7tscgxAC9y3NQHJ3XQYJEv6xai/ySmpVjoyI+sIknWzO9iOlytq2I+NDEBLgpXJEfevo6DirR8HdXe6pPXr0qLKtvb0dv/3tb/Hss8/C29v7rOcZMmQIEhIS8K9//Qt1dXV48803lblxTz31FObPn6/0BPSHwWCAXq/vdTEaL754jFarxdy5c7Fr165+v7atmG5S04BrxhI5tkMnKpXroxKC4aLloc5AcN/mONxctfjDDVMRESRPJ+jSG/DXD3agvPbCNQCISB0c7k42Z/PBIuX6LBvvRQeApKQk7N27t9e2PXv2AADq6uqUbc888wwiIiJw0003nfe5Xn31VVx77bX405/+hGHDhuHVV1/FiRMn8M477yArK2tA8QUEBJxze1DQxVc7jo6ORmVl5YXvaKOmpkbjP98dggQJOYU1qG1qR5Cfp9phEZEFHDRJ0scmhasYiX3jvs2x+Hm749FfTMcf3/wJzW2daG7rxNP/3YZn7pzDKWBENoinl8mmlFQ14WR5AwDARavFlFFR6gZ0Ee666y58/fXXeOutt1BfX49169bhxRdfBCCfqQeAkydP4oUXXsDLL7/c55C+xYsXo6qqCrm5uTh69ChiY2Px0EMP4Te/+Q2io6Px6quvIjY2FrGxsXjttdcuKr4tW7Zg7969vS533HFHv96jvVeDDfT1QGp38SgJUq/l/YjIcXTpDb3WR08fFqZiNPaN+zbHExHkgz/eOBWuLvL/X0VdC575cAd0XQaVIyOiM7EnnWyKacG4jJQIeHu69XFv23Dbbbfh0KFDuPvuu3HnnXfCy8sLzz33HO6//36EhckHiH/4wx+wePFipKSkoKGhAYA8P7qzsxMNDQ3w9/dXDnC8vLwwfPhwAMCPP/6IQ4cO4ZNPPsGhQ4fw2GOPYceOHQCAKVOmYPr06UhLS+szvvT09LMq5q5Zs6Zf77GsrEx5L/Zq+ugYpZjUxgOFuHxKktXnQBKRZR0rrkVnlx4AED7EB5HBvipHZL+4b3NMybFBePDaiXjh412QICGvpBb/WLUHv71uMjQa7hOJbAV70slmGAxG/JRpX0PdAblH4ZVXXkF1dTWysrJQWVmpzK87/W9ubi6++OILBAYGKpeSkhK88sorCAwMRFnZ2cXM9Ho9HnzwQTz//PPw9PTEpk2bMHfuXKSkpCAlJQXz5s3D5s2bLf7+9Ho9Nm7ciClTplj8tSxpyqgopfeguLIRBaca1A2IiMwuM69CuT42ybmSL3Pjvs1xTR4ZhVsvHaO0d+WU4f21A5t2QESWwZ50shmZJypR39wOAPD39sC44fY1l/D0AQoAvPbaa5g6dSpSUlIAAG+//TZaWnoXaFm2bBlmzZqFu+++GyEhZ6/j+/rrryMwMBDXXXedsq2trU253traapWhen/+859x6tQp3HXXXRZ/LUvy9nTD1NRopebBhgOFSIwKVDkqIjKnTJP56Ol2tg+xVdy3OabLpiShqr4Va3YeBwCs2XkcwQFeWDJ1mMqRERHAJJ1syI/7TirX546Ls5uKvLt27cK2bdswduxYNDU14eOPP8a6deuwbds25T6nK9ma8vDwQExMzDnXZ62vr8eTTz6JdevWKdtmzpyJRx55BO+++y4AYOPGjXj22WfN+l5yc3MRHBwMnU6HkydPYuXKlVi7dq2ylqy9mzcuXknSt2YVY/miNLi5alWOiojMoaaxDcWVjQAArVaD1ISzE0S6eNy3Ob7li9NQ09imLE3KNdSJbAeTdLIJdU3t2J9brrTnjotXL5h+cnV1xSeffIIVK1ZAo9FgxowZ2L59O0aPHj3g53ziiSdwxRVXYNy4ccq29PR0PP/883j00UcBAC+88ALGjBlzvqcYkN/97ncA5IOsiIgITJkyBVu2bMGMGTPM+jpqGRkfjPAhPqioa0FbRxd255Rhhp1MqyCivvVaei0+GB5uPMQZDO7bHJ8QAg9cMxH1721BbnGtsoZ6oI8HUuKC1Q6PyKmJCwwpcq6yl6SaL7Ycw4frjwCQ10Z/6pfOe2abLGvV5qP4+MdsAMDooaFYcetMlSMi6pfBVnZy2P3631buwq5seeWGmxem4crpw1WOiMg+NLV24k9v/aSsm+7j6YZnfzVXWVediCzqnPt1+xhPTA5NkiRs2F+otOePj1ctFnJ8s8fGQXT/Hh4uqFIOSojIfhkMRmTlcz460UCcXkP99HrpLe06PPvhDrR1dKkcGZHzYpJOqjtcUI2KOjlR8vJwxeSRtr82OtmvYH8vjDVZO/mHvQUqRkNE5nC8tE5JKIL8PBETwqXXiPrj9BrqLlq5TktpdRNe/mwPjEaHHXxDZNOYpJPqvtt1Qrk+My0W7pxHSBa2aFKicn3D/kJ06vQqRkNEg3XAZOm19GHhytrcRHTxhscE4Z6reuoF7M8rx/9+OKxiRETOi0k6qaqqvhX7jvUUjFs8ObGPexOZx7hh4QgL9AYAtHbosO1wicoREdFg7DddH30Y10cnGqhZY+OwdEay0v5mex42ZRapGBGRc2KSTqpauzsfUncdo7TEUESH+KkcETkDjUZg4cSeE0Lf7cq3yrq8RGR+NY1tKKxoACAvvTYmkUk60WDcuCAVE1Iilfbr3xxAUUWjihEROR8m6aSaTp0eP5oUjLt0cpJ6wZDTmTsuDq4u8ty7wooG5BbXqhwREQ2E6Wis1PgQeHm4qhgNkf2Tl2aboHScdOkN+NvKnSwkR2RFTNJJNVuzStDaoQMAhAZ4Y/zwCJUjImfi6+WOmSZrpK/ZeaKPexORrdp77JRyfcKIyD7uSUQXy9PdFb9bNhnurnKdoPLaFrz61X6OOiOyEibppApJknolRYsmJUKjYaEfsq5LTQrI7couQ2V9q4rREFF/tXV04fDJaqWdkcyTvUTmEhPqh3uuGq+0d2WX4rtd+SpGROQ8mKSTKvbllqOkSp7f5O7qgnlcG51UEB8RgLTEUACABAmrtx9XOSIi6o+DJyphMBgBAHHhAQgJ8FI5IiLHMj0tplcNl/fWZiGvhNPDiCyNSTpZnSRJ+HzzMaW9cOJQ+Hi6qRgRObOrpvdUsf1x/0k0tXaqGA0R9ce+3J756BNS2ItOZAm3Lk5DYlQgAMBoNOKFlbu4rySyMCbpZHVHTlbjeGkdALkS75Kpw1SOiJxZWmIo4sMDAMjFcb7bzaF8RPbAYDBiv2mSzqHuRBbh6qLF766bDG8PuUOltqkd//x8L+enE1kQk3Syui+29PSiz02PxxA/TxWjIWcnhOi1Juz3u06gQ6dXMSIiuhjHimvR0i4XHw309VR6+ojI/EIDvfHrayYo7czjFfiWBVeJLIZJOlnV8dI6ZOVXAQAEBK6aMVzliIiAKaOilLmsLe06rN93UuWIiOhCdh8tU65nJEdACBYfJbKkjOQIXDmt57jtvz8cRmF5g3oBETkwJulkVZ9szFGuT0uLRvgQHxWjIZJptZpec9O/3JKLTvamE9ksSZKwK7snSZ8yKkrFaIicxw0LUpEQEQBAnnLy98/2cH9JZAFM0slqjhbVIPN4BQC5F/2aWSNUjoiox9xx8RjiK0+9aGztwLq9BSpHRETnc7y0DrVN7QAAbw83jEoIUTkiIufgotXgNz+fBDdXLQCgtLoJ763NUjkqIsfDJJ2sQpIkfPRjttKeOTYWMaF+KkZE1JubqxZXz0pR2l9uZW86ka0y7UWfOCISLloezhBZS1SwL26/bKzS/mFvAXbnlJ3/AUTUb9yrkVUcLqhGTmE1AECj0eDa2exFJ9szb3w8groLGTa1dmLtHvamE9kaSZKw0yRJn8yh7kRWN3dcPKaMilbar321HzWNbSpGRORYmKSTxcm96EeU9rxx8YgI4lx0sj2uLmf3prd1dKkYERGdqbCiEVUNrQAAT3dXjEkMVTkiIucjhMBdV45TTmy3tOvwr8/3wWjksmxE5sAknSxuy6HiXuuiXzM75QKPIFLPvPEJSqX35rZOfLU1V+WIiMjUziOlyvWM5Ai4umhVjIbIefl4uuHBaydCQF5Z4cjJKny1jftMInNgkk4W1dquw/trDyvtJVOGIdjfS8WIiPrmotXghvmpSvubHcc5hI/IRnCoO5FtGRkfgqtNOl8+3pCjdMwQ0cAxSSeL+vSno2hs7QAABPp64to5nItOtm9GWgyGRgYCALr0Bny8IfsCjyAiayg41YBTtc0AAHdXF6QnhakcERH9fPYIDI8JAgAYjUa8/NketHdyqhjRYDBJJ4sprmrCd7tOKO3li9Lg4eaiYkREF0cIgVsWpSntzZnFOFneoF5ARARAnj512qSRkXDnPoVIdVqtBg9eO1E5xquoa8Hb3x5UNygiO8cknSxCkiS8s+YgjJJcQGRkfAimjY6+wKOIbEdqQggykiMAABIkvPd9FiSJBXGI1GIwGLHtcInSnjU2TsVoiMhUWKA37rpinNLelFmEbVklfTyCiPrCJJ0sYltWCY6crAIAaITA7ZePhRBC5aiI+uemS0ZDI3oK4uzPq1A5IiLndfhkNRpa5OlT/t4eGJ0QonJERGRqxphYzBwTq7Rf/+YAqupbVYyIyH4xSSeza2jp6DXMafHkRMSF+asXENEAxYT6YX5GgtJ+99uD0HUZVIyIyHmZDnWfkRYDrZaHMES25o7L0xEW6A0AaO/swsur9sBgMKocFZH94R6OzO6tNQfR0q4DAAT7e+H6eaNUjoho4JbNGwVvDzcAQGV9K5eXIVJBp06PXSZV3U1764jIdnh5uOLBaycqo9Byi2vx2eZjKkdFZH+YpJNZ7ThSil3ZPWvY3n3VeHi6u6oYEdHg+Hu744b5PSeavtiSi0oO3yOyqr3HytHZpQcARAb5YmhkgLoBEdF5DY8JwnXzRirtVT8dxdGiGhUjIrI/TNLJbOqbO/DWmkylPXdcPMZyeRxyAJdMGIqEiAAA8pJs//nukLoBETmZDQdOKtdnjIlhjRMiG/ezGSkYGS/XjZAg4eXP9qC1e5QlEV0Yk3QyC0mS8K/P96KptRMAMMTXE8tNlrAismcajcCdS9KV9t5jp7Avt1zFiIicR2V9K7Ly5UKkAgJzx8WrGxARXZBGI/DANROU6WI1jW3499cHuEoK0UVikk5m8fW2PBzKrwQgH0Tdf/UEeHu6qRwVkfkMjwnqlRywiByRdWzY19OLPnZYGIL9vVSMhoguVrC/F+6+qmdZtp3Zpdh4oFC9gIjsCJN0GrQTpXX48Mdspb10ZjLSEkNVjIjIMm66ZDS8POQaC5X1rfhyK4vIEVmSwWDExswipW262gIR2b4po6Ixf3zP3+0bqzORV1KrYkRE9oFJOg1KW0cX/v7ZHhiN8vIaw6KH4Lq5Iy/wKCL75O/tjhvnpyrtz7ccQ0lVk4oRETm2/XkVqG9uByCvjZ6RHKFyRETUX7deOgYxofJSvAaDEc99tBM1jW0qR0Vk25ik04CdnodeUdcCAPB0d8Vvfj4JLly7lhzYJROGYlj0EADywcarX+6D0cg5dkSWsGF/z1D3uePiuH8hskMebi74401T4dM9DbKhpQPPfbQTHTq9ypER2S7u7WjAVm7MwZ5jp5T2XVeMQ1igt4oREVmeRiNw91Xjoe1OFo6X1uG7XSdUjorI8VQ3tGF/boXSnjeeQ92J7FVYoDcevn4KNBp531lwqh7Pf7QTXXrWdiE6FybpNCDbj5Ri1aajSnvJ1GGYnhajYkRE1hMX5o+rZ6Yo7Q9/PMK104nM7LtdJyBBHqUyemgoIoJ8VI6IiAYjNSEEd1w+Vmkfyq/Ey5/tgcFgVC8oIhvFJJ36La+kFv/6fK/SHpMYhl9cMlrFiIis7+pZKcocO12XAa9/vZ9LyxCZSXtnF9abVHW/fOowFaMhInO5ZMLQXrWLduWU4ZUv9zFRJzoDk3Tql1M1zfjrBzuU4UkRQT546LpJytBfImfhotXg3qXjISAAAFn5VVi3p0DlqIgcw4b9hWjv7AIARAb5YvzwcJUjIiJzuXb2CCwxOfG25VAxXvxkN4e+E5lgZkUXrbG1E3/533Y0t3UCAHw83fDHm6YphUCInM2w6CFYMq3nQOP9dVkoq2lWMSIi+2c0Svh2Z0+dh8umJEEIoWJERGROQgjcsigNCzKGKtt2Hy3DXz/YrpycI3J2TNLponTo9PjL/7YpldxdXbR49BfTEBXsq3JkROq6ft4oxIT4AZCHvf9z1V4O2yMahN1Hy1DVINd48PF0w+z0OJUjIiJzE0LgV1ek44ppw5VtWflV+NNbm1DFGi9ETNLpwjp1ejzzwQ7kl9UDAAQEHvr5JAyPCVI5MiL1ublq8cC1E5UpHyfK6vD5lmMqR0VknyRJwpdbc5X2JROGwsPNRcWIiMhShBC4eeFoLJs3StlWXNmIh/+9AdsOl6gYGZH6mKRTnzp1evz1gx04crJK2Xb75WMxcUSkilER2ZaEiAAsMymE89lPR3GitE7FiIjs0/68CuWEsItWi8WTElWOiIgsSQiBa2ePwH1LM5ST3S3tOvz90914YeUuNLZ2qhwhkTqYpNN56boMeObD3gn6jQtSsYgHTURnuWp6MpJj5dElRknCP1btRadOr3JURPZDkiSs3JCttBdOTMAQP08VIyIia5kzLh5/vnUmgv29lG07s0txz0vf47NNR9HB/Sk5GSbpdE5ygr4dhwt6EvQb5qfiZyZrQxNRD41G4NdXT4C7qzw091RtM97+9qC6QRHZkb3HynGyvAGAXPdk6Qzub4icSUpcMF66dz7mjotXtnXo9Fi5IRt3v/Q9Pv4xGzWNbeoFSGRF4gLr+nLRXyfUodPj2Q939ErQr58/CtfMGqFiVET2YcP+k3jtq/1K+56rxmPe+AQVIyIHM9gy5za5X5ckCb99bQOKKhoAAEumDsPyxWPUDYqIVHMgrwLvr81CaXVTr+0aITBxRCRmjolF+rBwuLlqVYqQyGzOuV9nkk69NHUvs3airGc+7XVzR+Lnc0b28SgiOk2SJPzz873YcqgYgDyv9pk7Z2NoZKDKkZGDcMgkfVtWCf7+2W4AcjHGfz+0GAE+HipHRURqMhiM2HSwCJ9szEFtU/tZt7u5ajFueASmjIxC+rAweHNJYLJPTNKpbzWNbXjq/W29zlqyB52o/zp0evzhjZ9QUtUIAAgJ8MJzd82Dv7e7ypGRA3C4JL1Tp8f9/1inHIQvnZGMmy4ZrXJURGQr9AYj9h47hbW7C3rVSTKl1WowOiEEk0ZGISM5gvUsyJ4wSafzK6tpxp/f26rM9REQuP3ysSwSRzRAZTXNeOTfG5RiNymxwVhx6wy4unBoHg2KwyXpn2zMwac/5QAA/Lzd8coDC9kjRkTnVFLVhK2HirEzuwynapvPe79h0UMwaWQUJo6IRFSwrxUjJOo3Jul0bnkltfjrBzvQ3CYvc6HVavDrqydg+ugYlSMjsm97jp7C8x/thNT9UzonPR73Lh0PIQabZ5ETc6gk/VRNMx569Ud06Q0AgLuuGIcFE4aqHBUR2TpJklBa3Yyd2aXYc/SUUnTyXOLDA7Bw4lDMSIuBp7ur9YIkujhM0ulse4+dwouf7FYOkNxctXjk+ilIHxaucmREjuHLrbn44IfDSvuG+am4eharVtOAOUySLkkSHntnM44W1QCQD6T/dvc8aDQ8iUVE/VNV34q9x8qx5+gp5BRWw3iO/Mbd1QUzx8Ri4cShSIgIsH6QROfGJJ16+2FvAd78JlPp5fPxdMOfbpqmrPVMRIMnSRJe+XIfNmUWKdvYW0iD4DBJ+rc7T+Dd7w4CADQaDZ6/ay4PnIlo0JrbOrGvO2HPPFGpdESZGhkfgsunJGFCSiRPDJLazvkF5DrpDq6srAw+Pj4QQqClpQWAnDR8tP4I3vjmABqqCrFj5TNY88It+PyvN+IX1yzG/v37L/CsRHSxhBC464pxyN/4Dr54+lp88fS1uGRiIoQQEELg2LFjyn1XrFihbD/z8swzz6j4Loj6Nnv27PN+d3fu3HnW/SvqWvDBenmESVN1CXK/fQGjEiMRHByMu+++W9lfEZHzWb9+Pa6//nrEx8dDCIEVK1ac975ffPEFJkyYAE9PTwQFBWHRokXQSHrMGReP3984FW89fCluXTwG0SF+vR6XU1iN5z/eid+8sh47jpTiAp2WRFbnonYAZFkPP/wwfHx80NraCkCukPnql/uw5VAxGipOYst/H8ewsdPwr+c/ho+nG/bu3Yv29rOXuSCigXN10SJ1aAhK8mORtvhXAACNVoMb5o9CfHy8cr/bb78dixYt6vXYr776Cs899xwWL15szZCJ+uW1115DU1Pv9Ywff/xxZGZmYsKECb22d+kNeOnT3dB1GdDV0YrtH/0Z49JS8cknn6C2thaPPPIIysvL8dVXX1nxHRCRrVi7di2ysrIwb948rFy58rz3e/vtt3HffffhkUcewd/+9jfU19dj48aN0Ov1yn18vdxx+dRhuGxKEo4W1WDtngLszC6D0WgEAJRWN+HFT3YhISIAN8xPRfqwMNaNIZvA4e4ObOvWrbjyyivxpz/9CQ8//DAqqmrx+rdHkJUvL1/x03/+hJiYOOze/D083Hi+hsiSli9fjkNZhzH95r8qFWk1Gg0e+vlETBkVfd7HXXbZZSgoKMDRo0etFSrZNrsY7q7T6RAeHo7rrrsO//73v3vd9ubqTKzbkw8AyNvxFU7u+RqlJSUICAgAAHzzzTe48sorsXfvXmRkZFgjXCKyIUajERqNPNg3ODgY991331m96TU1NUhISMBLL72EO+64o1/PX9PYhrW787F2TwHaO7t63ZYcG4Qb56diVELIoN4DUT9wuLszMRgMuP/++/H4448jODgYAPDke1uVBL2pugT1Zcfx6t9WMEEnshKtRuCJW2cgfIgPAPlA5KVPdmPb4ZJz3r+urk4Z9kdkT9auXYv6+vqzvrs/7C1QEnQACEAdJk6YoCToAHDJJZdACIFvv/3WWuESkQ05naD35dNPPwUA3HLLLf1+/mB/L9x0yWj8+6FFuGp6cq+lUXOLa/H4u5vx5HtbcKK0rt/PTWQuTNId1Ouvv46Ojg7ce++9qKyT5/aV1fQMRUzyk9dDb2pqxJgxY+Di4oLExES88847qsRL5AxycnIwNCYcb//hSuz88AlUF2XDKEl4+dM9WLs7/6z7r1q1Cl1dXVi2bJkK0RIN3MqVKxEVFYUZM2Yo2/bnluPNbzKV9pRR0Rji4wo3t95roru4uECj0XD0CBGd1+7du5GcnIx33nkH0dHRcHV1xaRJk7Bjx46Lfg5fL3f8YuFovPabRVg0MRFabU9alJVfhd+/sRHPf7QTxVVNfTwLkWUwSXdAtbW1eOyxx/DSSy9hX14lvtiSq9x2eg302ED5v/7mm2/GjTfeiPXr12PRokW4/fbb8d1336kVOpHDSk9Px4svvojVq1fjww8/RFSwD7Z/9DTqyo5DgoS31mTi4w3ZvYrXrFy5EuPGjcPw4cNVjJyof9ra2rB69Wpcd911ytzOgycq8beVu5TVRIZGBuK+n2UgKSkJhw4dQldXz5DT/fv3w2AwoK6OvVhEdG4VFRXIzc3F008/jeeeew6rV6+Gt7c3Fi1ahMrKyn491xA/T9yxJB2vPLAQc9LjIUxGH+8+WoaH/rUe/1i1B+W1LGhJ1sMk3QE9+uijmDRpErr8kvDiyt0wdBfH8PZwwxO3zMCssXFKwYzbb78djzzyCObMmYNXX30Vc+bMYRVpIgt44IEHcPfdd2PWrFm45pprsGXzJkRHR6HswBrlPqs2HcU/Vu2FrsuA8vJybN68mUPdye6sXr0aLS0tynd3Z3Yp/vrBdmUZpJAAL/zppmnwcHPBHXfcgerqatx///2oqKhAdnY27rnnHmi1Wmi12r5ehoicmNFoREtLC9555x3ceOONWLRoEb766itotVq88sorA3rO0EBv3PezDLz86wW9asVIkLDlUDF+/c8f8MY3B1DbxALLZHlM0h1MdnY23n33XYyeswxvf70TnR0t0HfpAAAPXTMWQ8PlubBDhgwBAMyZM6fX4+fOnYucnBzrBk3khDw9PXH5ZZehva4EY5PClO1bs4rxf+9swnv//RCSJOG6665TMUqi/lu5ciWSkpIwNn0cPlx/BC+s3AWDQT4xHOzvhSeWz0SgrwcAICUlBW+++SY+/vhjREREIC0tDRMnTsTYsWMRFhbW18sQkRM7fRw7e/ZsZZufnx/Gjx8/6OPY6BA//G7ZZLxwz3yMGx6ubDcajfhhbwHu/ftavL82C02tnYN6HaK+sGKYgzmYlY2uri787ffLz7ptQloKfvnLX+Ltt9/GiBEjzvl4SZIuqmAHEZmHRgj88aZpeGt1Jn7cfxIAkF9Wj63/fRvjJ0xGTEyMyhESXbzGxkZ8//33uPXOe/HwvzeguLJRuS0s0Bsrbp2J0EDvXo+57bbbcMMNN+D48eMIDQ1FcHAwgoKCcPvtt1s7fCKyEyNGjIAQ4qz1zc15HJsQEYBHfzEdx4pq8OGP2cgprAYgLyP5zfY8rNtTgCXThuHSyUnw93Y3y2sSncZszIHkldRi7TE9Zty0Qrnc88Sr+N3DDwMAvvvuOzzcfX3q1KkIDAzEhg0bej3Hhg0bMGbMGKvHTuRs2tvb8f3332P8+PFw0Wpw15XjcNulY6ERAq0NVaguzoUxeDQ2ZRapHSrRBUmShMr6Vjz90pvo7OzEia6YXgn62KQwPHfX3LMS9NM8PDwwevRohIWF4YMPPoDRaMTPf/5za4VPRHbm8ssvhyRJ+Omnn5RtjY2N2L9/v9mPY1PigvHn22bisVtmYGhkoLK9s0uPVZuO4lcvfIfXvz6A0moWmCPzYU+6g9iw/yTeWJ0Jg9ENIfGjICBww4JRWDojGe+//z4AYMaMGfDxkYe7u7m54fHHH8cjjzyCgIAATJgwAZ9//jm2bNmCzZs3q/lWiBxOY2MjLr/8ctx0001ISkpCTU0N/v73v6OsrExZRkYIgcumJCE6xBe33vMwhEaLiOSJ+NcXe3GsuBa3XToGbq6co0u2Zc2O41i3pwBVDW3QGwzY9tGH8A+Lg1+wPJ/TzVWLZXNHYcnUYdBoBJKSkjBr1ixlJZGmpib85S9/wcyZM+Hi4oKffvoJL774It566y1lOCsROZeioiLs3bsXAKDT6ZCTk4NVq1bB29sbixcvBgBkZGTgyiuvxC9/+Us8++yzCA4OxvPPPw9XV1fce++9Zo9JCIGxSWEYkxiKXTllWLkhR0nKu/QGrN9XgPX7CpCWGIp54xMwaURkr6XdiPqLSbqda23X4e1vD2LLoWJlm7eHG37z84lIHxbexyOBBx98EEajEf/617+wYsUKJCcnY9WqVb2WzCGiwXN3d0dISAiefvppVFVVwcPDA1OmTMHmzZuRkZHR675jksLQWX4QMcPHwt3bHwCwfl8B8k/V43fLJiPsPD2RRGro6NLjVG0zAKCzrQnVhUcwctZ10Go1mJEWg+vmjOzVe67X62EwGJS2VqtFZmYm3nrrLbS3tyM1NRWfffYZrrrqKmu/FSKyET/99BNuvfVWpf3ZZ5/hs88+Q1xcHAoLC5XtH3zwAR5++GE89NBDaGtrw7Rp07Bx40YEBgae41nNQwiBKaOiMWlEFHYcKcXX2/NQcKpeuT0rvwpZ+VXw8XTDzDGxmD8+AXHh/haLhxyXOHMuxxn6vJHUdeRkNf65ak+vKpOxYf545PopiAjyUTEyIhqs9s4uvPbVAew4UqJs8/Zww/1XZ2BCSqSKkZHKxIXv0iez7te3ZZXg75/tBgD4eLphaGQAxiaFY3paDIL8PM35UkRENkeSJOQU1mD1juPYd6xcWWbSVHx4AKamRmNqajSPz+lczrlfZ5Juh1rbdVi5MQff78rv9WMwa2wc7lySDg83DpAgcgSSJOH73fl4b22WUh0bABZOTMQtC0fDnX/rzsimkvTmtk7UNXUgNNALnu6u5nxqIiK7UtPYho0HCrHxQCGqG9rOeZ/48ABMSY3C1FHRiAz2tXKEZKOYpNs7SZKw+WAx/rvuMBpbO5TtPp5u+NUV4zA1NbqPRxORvcorqcULK3f1GjUTGeSLB66ZgKRoztt1MjaVpBMRUW+SJCErvwobDhRid84p6E2m+JiKDfPHhOQIZKREYFj0EAgx2J93slNM0u2VJEnYn1eBj37MRlFFQ6/b0oeF456rxmMIhxUSObSm1k68/vUB7D5apmzTaDT4+ZwRWDojGS5aLtbhJJikExHZibaOLuzLLceOI6XIPF553oTd39sDGSkRyEiOwJjEUI6Ucy5M0u2NJEnIPF6JT3/KwfHSul63DfH1xC2L0zAtNZpn3oichCRJ+CmzCG+vOYjOLr2yPTbMH3dfOQ7DY4JUjI6shEk6EZEdutiE3dVFizGJochIjsC45AjW93B8TNLtRXNbJzYeKMIPewtQUdfS6zZXFy2WTB2Gq2elcO45kZMqr23BPz/fi7ySWmWbgMAlE4fixvmj4O3ppmJ0ZGFM0omI7FyHTo+DJyqx99gpHMirQFNr53nvGxvmj/HDw5E+LBzJsUEcOed4mKTbsgudXdNqNVg4YSh+NjMFgb4eKkVJRLbCYDBi9Y7jWLkxB136nt+LAB8P3LggFbPHxkGj4SgbB8QknYjIgRiNEvJKarEvtxx7j5Ur66+fi5eHK9KGhmLc8HCMHRbOXnbHwCTdlugNRpworcORwmpkn6xGTmHtOYe9eHm4Ym56PJZMG4Zgfy8VIiUiW1ZV34q31mTiQF5Fr+3RIX64cUEqJqREcEqMY2GSTkTkwMprW7AvtxwH8sqRXVjTa3WXM8WG+WPcsHCkDw9HCnvZ7RWTdLVIkoT65g4UlDeg4FQ9jhXV4mhxDXRd556LAgAJEQFYPCkR00fHsHgEEfVJkiTszC7Du98dQn1ze6/bEqMCccW04ZgyMgpa7rwdAZN0IiIn0aHTIyu/CgfyKpB5vAI1jede2g0APNxcMCYxDGOHhWHc8HB27tkPJumW1qHTo7KuFRV1LahQ/m1BYUVjn3NNTju9duKUUdGI4tqJRNRPHTo9vtmeh6+35aFDp+91W7C/Fy6dnITZ6XHw93ZXKUIyAybpREROSJIklFQ3I7M7Yc8p6ruXPSrYF6MSQjAqPgQj44O5EpTtYpI+UJIkoalNh4bmDtQ1t6P+9L9NHWho6UBdcweq6lvR0NJx4SczERLghdSEUKQmhGBUQghCAmz/jBeHzRL17QK/qVbR2NqJLzYfw9o9BWdNo9FoNEhPCsOs9DhMSI6Am6tWpShpgJw+Sed+iMgx2ML+0p516PQ4XFCFzOOVOJBXjuqG8/eyA0BkkC9GxgdjRFwwhkYFIjrYl7VrbAOTdADQdRnQ0q5Da0cXWtt1aDn9b3sXWjt0aG3vQkv3vw0tHahrakdDa2efZ6ouhrurCxIiAjA0MgCJkYEYGR+M0EBvM70r6+HBEVHfbOmgo6GlA2v3FGDdnvxzjuY5vczL+OQIDo2zH0zSuR8icgi2tL+0d5Ik4VRtizwsPq8C2YU1513i7TQ3V62cm0QEIiHCH5HBvogI8oG/tzt/Z61L/SS9tLoJr3yxDy5aDbQaDVy0ovtfDTQaIW/XCrhqtdB2t11d5PtqtQIajYAkyV9EY/e/klGCUZKgNxjRoTOgs0sPXZcBnd2XDp0enTo92jr1aGnX9aqCbG4ajQahAV4IH+KNsCE+CB/ijfAhPogK8UVkkI9DfOEd4T0QWZItHnTougzYmlWMDQcKkVtce977xYT6Y0RcEFJig5ASF4zQAC/+zdseJun8ThI5BFvcXzoKXZcBuSW1yC6sQfbJauSV1F0waT/N090V4UO8EeTniUBfT/j7uGOIrwcCfDzg7ekGD1ctPD1c4eHmIl93d2WP/OCon6TnldTij2/+ZM6ntBovD1cE+ngg0NcTgb4eGOLrgUA/z+5tHgjy90SIv5fDF2biwRFR32z9oKO8tgVbDhVj++ESlNU093nfAB8PxIf7IzbMH3Fh/ogL90dUsC+HyKuLSTr3Q0QOwdb3l45E12XA8dI6ZBdWI7+sHvmnGs4qNDsYAgIarYBWI3fAajVy56pWo4FGQP63O5EXQr6/8ljR87suTm/o+QdCiF47vtP3V27HOe5v8gABAQmSSUev/L0zGru3oafjV7kuoff9uh//hxunIiEiwEyfmkmI59pozST9aFEN/u/tTeZ8yn7TaDTw8XSFj4cbvD1d4e3hCm9PN/h4usFHue4KLw9XBPjIZ42G+Hqwwno3HhwR9c2eDjrKa1uwP7cc+y9imZfTBASC/D0RFuiN0EBvhAZ6ISzQG0P8POHn7Y4AHw/4ero5zVl1SZLQ2WVAU2unfGnToUOnh1GSkBARYIkioEzSuR8icgj2tL90RPXNHSg4VY/8U/UorW5GeW0LTtU0n1V4lno8c+ccDI8JMvfTqp+kt3V0obiyEXqjBIPBCL3BCINRgsFohMEg/6s3nL5I3bd336/7do0QEBoBIQQ0JmdSXDQaeLi5wN1VC7fu4Rfu3f+6ubnAy90FPp5ucHfVcgc/CPzsiPpmrwcdHTo98krqcKy4BseKapFbUjvgHbWAgK+3G/y83OHv7Q4/b3f5RGj3CVAfTzf5hGj3dXmbK7w91E/uDQYjmtt1aGrTobm1E42tnWhuk5NvOQnvTsZbdcr2802jWr54DJZMHWbuEJmkcz9E5BDsdX/pyCRJQmNrJypqW1Df0oGGlk6lcHZjSyfadXq0d3ahU2fodV2y/13LRfnrHXOQHOuASToREdkHo1HCqdpmFFU2obiyEcUVjSiuakJlXatFd8ZeHt0jnDzkEU5e7i5wddXKJ2BdtHBz7b50X3fRaiDQM/xN033iVggBg8GILoMRXXojugwG+eSv3oAuvRFtnV1o6+hCS3sXWtp18vUO+V9zuXlhGq6cPtxsz9fN6ZN0IiKyHaeHhxuM3Z2vBiOM3fXDDCYdskZjz9HD6fzzdBp6epi56R5Kks59f+U6ep/oMb3N9HZJAjQaeVD86Y4A+VhB9Dp2ACB3BJ91v54h94G+HnB1MfuUPybpREQ0OLouA6ob21BZ14qq+u5LQxsau4d7N7R0oKVdp3aYVuWi1cLf2w2+Xu7w83aDl7srhBCYOSYWE0dEmvvlmKQTERE5DibpRERkeXqDEc3dw8MbWjrQ1NqJ1o6e5S1b2uV/Wzu6r3fIy2C2d5qvF3ugBAS8PV3h5yUP0/fzcoOvtzxs39fLrftfebtf91B+K0+jYpJORETkOJikExGR7TIaJSVhb23XobWjC22dXejSG5WlNXV6A3RdBnTp5bbBKCnD2U5XbZVHzEnKEp+u3ct5urho4dK9zKeXuwu8ThcM7S4a6t09R17tefEXwCSdiIjIcTBJJyIisnNM0omIiBzHOffrjr2oNxEREREREZEdYZJOREREREREZCOYpBMRERERERHZCCbpRERERERERDaCSToRERERERGRjWCSTkRERERERGQjmKQTERERERER2Qgm6UREREREREQ2gkk6ERERERERkY1gkk5ERERERERkI4QkSee98cknn1wLIHgAzxsJ4NRAg6JB4+evLn7+6uLnry5+/pZV88QTTywa6IMHsV+3Vc7yfeP7dCx8n46F79NxqPEez71flyTJ7JcVK1ZIlnheXvj528OFnz8/f2e+8PPnxZoXZ/m+8X061oXv07EufJ+Oc7Gl98jh7kREREREREQ2wlJJ+pMWel66OPz81cXPX138/NXFz5+syVm+b3yfjoXv07HwfToOm3mPfc5JJyIiIiIiIiLr4XB3IiIiIiIiIhvBJJ2IiIiIiIjIRjBJJyIiIiIiIrIRZknShRB/EkJIQohXTLYJIcQKIcQpIUS7EGKTEGKUOV6PejvP5/9e9zbTyy4143QU3d/rMz/bCpPb+d23oIv4/PndtzAhRIQQ4n0hRLUQokMIkSOEmGVyO/8GyCKEEFohxFNCiJPd372TQoinhRAuasc2WEKImUKIb4QQZd2/W8vPuN3u/676eo9CCFchxHNCiCwhRKsQolwI8ZEQIlbFkAfkQv+XZ9z3ze77/M6KIZrFxbxPIcRwIcQXQogGIUSbEOKAEGKECuEO2EX8bfoIIf4lhCjt/tvMFUL8RqVwB0wI8UchxF4hRFP3/n21ECL1jPs4wu9Qn+/TVn6LBp2kCyEmA7gDQNYZNz0C4LcA7gcwAUAVgPVCCN/Bvib16OPzB4AfAUSYXC61YmiOLhe9P9vRJrfxu295fX3+AL/7FiOECACwHYAAcBmAEZC/61Umd+PfAFnK7wHcC+DXAFIAPNDd/qOaQZmJD4AjkN9T+zlud4S/q77eoxeAcQD+0v3vlQBiAKy1w5MwF/q/BAAIIa6B/H95ykpxmVuf71MIkQB5f3ESwFwAqQD+D0CLFWM0hwv9f74EeX/4C8j7xL8AeFYI8QurRWgeswG8BmAq5P8vPYAfhRBDTO7jCL9Ds9H3+7SN36LBLLIOwB9Afvcb3ATgle7tAkA5gEdN7usJoBnAr9ReHN5RLuf7/Ltvew/AGrVjdMQLgBUAjpznNn73Vfz8u2/nd9+yn/9fAWzv43b+DfBisQuANQDeP2Pb+472Nw85iVlu0na4v6sz3+N57jMSgARgtNrxmvt9AogDUAY5qSsE8Du1YzX3+wTwEYAP1Y7NCu/zCIAnz9i22fS43B4vkE9OGAAs6W473O/Qud7nee5j9d+iwfakvwlglSRJG8/YngAgHMAPpzdIktQOYAvksxZkHuf7/E+bLoSoEkLkCSHeEkKEWjM4Bze0e9jTSSHESiHE0O7t/O5bx/k+/9P43becqwDsFkJ80v0ZHxRC3CeEEN2382+ALGkbgDlCiBQAEEKMhHyi+jtVo7I8Z/278uv+t17VKMysuzfuYwBPS5J0VO14LEEIoQGwBECOEGJt97DivUKI69SOzQK2AVgihIgBACHEVABjAaxVMygz8IU86vr035+j/g6d+T7Pxeq/RQNO0oUQdwBIAvDYOW4O7/638oztlSa30SBc4PMH5B+GmwHMgzwsZSKAjUIId+tE6NB2A1gOYDHkqQbhAHYIIYLA77419PX5A/zuW9pQAPcAKACwEMA/ADwLecgxwL8BsqznAPwP8oF/F4BsyD3rr6kblsU53d+VEMINwIsAVkuSVKp2PGb2JIBaSZL+rXYgFhQKuYfyT5CTugWQT0x8KIS4XM3ALODXAA4CKO7+XdoM4PeSJK1RNarB+wfk97Wzu+2ov0Nnvs9e1PotGtC4eiFEMuQhjzMkSdL1cVfpzIeeYxv108V8/pIkrTRpHhZC7AdQBHnOzBeWj9JxSZL0vWlbyEXJCgDcAuB0gTJ+9y3kAp//S/zuW5wGwD5Jkk7PAc4UQgyDnKS/YnI//g2QJVwH+STcDZAT9LEA/iGEOClJ0jtqBmYlTvF31d3T/AGAAABXqBuNeQm5yOZyyN9dR3a6I/BrSZJe6r5+UAiRAXl/Ye8JrKn7AUyD/F0tAjATwAtCiEJJkuyyN10I8RKA6QCmS5JkOONmh/kdusD7VPW3aKA96VMABAM4IoTQCyH0AGYBuKf7em33/c48qxKKs8++UP/1+fmfq8dQkqRTAEoBDLNuqI5PkqQWyAeLwwCcrjLO776VnPH5n+t2fvfNqxxAzhnbjgI4XfWUfwNkSX8D8IIkSSslSTosSdL/IBdtcoTCcX1xmr8rk6HgaQDmSZJUe4GH2Js5kAualpscw8UBeE4I4UgjBmogF+Tqa39h94QQngCeAfCIJEmrJUnKkiTpFQArAdhdxX4AEEL8HcD1AOZKklRgcpND/Q718T5P367qb9FAk/SvIFdTHmty2Qf5CzkWQB7k/8gFpx8ghPAAMAPAjgG+JvX4Cn1//mf1rgshggFEQT7AJjPq/m6nQP5sT4Lffas64/M/1+387pvXdgDJZ2wbDrn3AODfAFmWF+QCP6YMMNOSsjbMKf6uhBCuAD6BfFA8R5Kkigs8xB69Bvn9jTW5nALwd8jTtBxC90jPveh7f+EIXLsvDvG7JIT4B+SRSnMlSTp2xs0O8zt0gfdpE79FAxruLklSA4AG021CiFYAdZIkHeluvwzgUSHEMchJ++klFz4aeLgEXPjzF/J6jSsAfA45MYmHfJavCsCX1ozVEQkhXgCwGkAx5LOHjwHwhjwvUuJ337L6+vyFED6Qq7/zu285f4dcA+BRyDuwdMjz8f4EAPwbIAtbDeAPQoiTkEfQpAN4CMB/VY3KDLp/v5K6mxoAsUKIsZD37cWO8HfV13uEnKh+BnlZpyUAJCHE6R67xu4CVXbhQv+X6L1kJbrnMVdIkpRr1UAH6SLe5/MAPhVCbAWwEfIogmWQC5DajYv429wMecm1FsgnIGZBnpbziBrxDpQQ4lXIy8hdBaDe5O+vRZKkFkfZv1/ofXb3oKv/W2TG8vWb0HsJMAH5YLkcQAfkIgqp1ipb72wX9F4CzxPAOsg7AR3kH4z3AMSoHacjXCCPWDjV/dmWQU4IR5rczu++Sp8/v/tW+z+4DMCh7u93HuQkXZjczr8BXixygVyF9+Xuv+12yPUo/grAQ+3YzPDeZkOe13nm5b3u2+3+76qv9wj5pOq5bpNwgaXabO1yof/Lc9y/EHa4BNvFvE/I8+/zuv9eswBcr3bc5n6fkId//6f7mKQdwDHIQ92FmnEP4H2e7+9vhcl9HOF3qM/3aSu/RaI7GCIiIiIiIiJSmd3NlSAiIiIiIiJyVEzSiYiIiIiIiGwEk3QiIiIiIiIiG8EknYiIiIiIiMhGMEknIiIiIiIishFM0omIiIiIiIhsBJN0IiIiIiIiIhvBJJ2IiIiIiIjIRjBJJyIiIiIiIrIR/w/GtlI6qZwzZQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "with model8:\n", " az.plot_posterior(trace8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** In <<_TheLincolnIndexProblem>> we used a grid algorithm to solve the Lincoln Index problem as presented by John D. Cook:\n", "\n", "> \"Suppose you have a tester who finds 20 bugs in your program. You want to estimate how many bugs are really in the program. You know there are at least 20 bugs, and if you have supreme confidence in your tester, you may suppose there are around 20 bugs. But maybe your tester isn't very good. Maybe there are hundreds of bugs. How can you have any idea how many bugs there are? There's no way to know with one tester. But if you have two testers, you can get a good idea, even if you don't know how skilled the testers are.\"\n", "\n", "Suppose the first tester finds 20 bugs, the second finds 15, and they\n", "find 3 in common; use PyMC3 to estimate the number of bugs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: This exercise is more difficult that some of the previous ones. One of the challenges is that the data includes `k00`, which depends on `N`:\n", "\n", "```\n", "k00 = N - num_seen\n", "```\n", "\n", "So we have to construct the data as part of the model.\n", "To do that, we can use `pm.math.stack`, which makes an array:\n", "\n", "```\n", "data = pm.math.stack((k00, k01, k10, k11))\n", "```\n", "\n", "Finally, you might find it helpful to use `pm.Multinomial`." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "I'll use the following notation for the data:\n", "\n", "* k11 is the number of bugs found by both testers,\n", "\n", "* k10 is the number of bugs found by the first tester but not the second,\n", "\n", "* k01 is the number of bugs found by the second tester but not the first, and\n", "\n", "* k00 is the unknown number of undiscovered bugs.\n", "\n", "Here are the values for all but `k00`:" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:41.876696Z", "iopub.status.busy": "2021-04-16T19:41:41.876100Z", "iopub.status.idle": "2021-04-16T19:41:41.879450Z", "shell.execute_reply": "2021-04-16T19:41:41.880294Z" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "k10 = 20 - 3\n", "k01 = 15 - 3\n", "k11 = 3" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "hide-cell" ] }, "source": [ "In total, 32 bugs have been discovered:" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:41.885825Z", "iopub.status.busy": "2021-04-16T19:41:41.882837Z", "iopub.status.idle": "2021-04-16T19:41:41.890562Z", "shell.execute_reply": "2021-04-16T19:41:41.891055Z" }, "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/plain": [ "32" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_seen = k01 + k10 + k11\n", "num_seen" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:41.964715Z", "iopub.status.busy": "2021-04-16T19:41:41.928965Z", "iopub.status.idle": "2021-04-16T19:41:42.965606Z", "shell.execute_reply": "2021-04-16T19:41:42.965954Z" } }, "outputs": [], "source": [ "# Solution\n", "\n", "with pm.Model() as model9:\n", " p0 = pm.Beta('p0', alpha=1, beta=1)\n", " p1 = pm.Beta('p1', alpha=1, beta=1)\n", " N = pm.DiscreteUniform('N', num_seen, 350)\n", " \n", " q0 = 1-p0\n", " q1 = 1-p1\n", " ps = [q0*q1, q0*p1, p0*q1, p0*p1]\n", " \n", " k00 = N - num_seen\n", " data = pm.math.stack((k00, k01, k10, k11))\n", " y = pm.Multinomial('y', n=N, p=ps, observed=data)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:42.969634Z", "iopub.status.busy": "2021-04-16T19:41:42.969200Z", "iopub.status.idle": "2021-04-16T19:41:49.207311Z", "shell.execute_reply": "2021-04-16T19:41:49.206851Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Multiprocess sampling (2 chains in 2 jobs)\n", "CompoundStep\n", ">NUTS: [p1, p0]\n", ">Metropolis: [N]\n" ] }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 100.00% [4000/4000 00:02<00:00 Sampling 2 chains, 0 divergences]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Sampling 2 chains for 1_000 tune and 1_000 draw iterations (2_000 + 2_000 draws total) took 3 seconds.\n", "The acceptance probability does not match the target. It is 0.5430480274605854, but should be close to 0.8. Try to increase the number of tuning steps.\n", "The rhat statistic is larger than 1.05 for some parameters. This indicates slight problems during sampling.\n", "The estimated number of effective samples is smaller than 200 for some parameters.\n" ] } ], "source": [ "# Solution\n", "\n", "with model9:\n", " trace9 = pm.sample(1000, **options)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "execution": { "iopub.execute_input": "2021-04-16T19:41:49.210957Z", "iopub.status.busy": "2021-04-16T19:41:49.210459Z", "iopub.status.idle": "2021-04-16T19:41:49.940432Z", "shell.execute_reply": "2021-04-16T19:41:49.940010Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdoAAAFTCAYAAAAugr49AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACU20lEQVR4nOzdd1xUV/rH8c9l6B0VRUEEFcXee43d9JhkNb1vsmmbutlfqnHTyyabnk3fVBPTTTSx994FUVFQQBSkSK8zvz/QCyhWyqV836+Xr9xz55bnJmbOzDPnPMdwOByIiIiIiIiIiIiIiMi5cbI6ABERERERERERERGRhkyJdhERERERERERERGRalCiXURERERERERERESkGpRoFxERERERERERERGpBiXaRURERERERERERESqQYl2EREREREREREREZFqUKJdpAkzDONGwzAchmFkGoYRcNxrzkdfm25ReCIiIlJDDMNwNwzjZcMwkg3DyDcMY5VhGCOtjktERETAMIznDMP40zCMtKPfw2+0OiYROXtKtIsIgB/wiNVBiIiISK35CLgNeBK4EEgG/jAMo7eVQYmIiAgA9wAewGyrAxGRc6dEu4gA/AncYxhGkNWBiIiISM0yDKMXcDVwv8Ph+MDhcCwA/gLsB2ZYGpyIiIgA+DkcjhHAv6wORETOnRLtIgLwzNF/PmZpFCIiInJWDMOYfnSKeQ/DMBYZhpF3tDzMDMMwjn3WvxgoBmYeO8/hcJQA3wATDcNwsyB0ERGRRu8M+2kcDofdyjhFpGYo0S4iUDZ9/C3gr4ZhtLM6GBERETlrPwHzgUuBr4AnKCsTA9ANiHM4HHnHnRMFuAId6yZEERGRJusnTt5Pi0gj4Wx1ACJSb7wI3A48BdxscSwiIiJydj5wOBwvHN3+0zAMX+BBwzBeB5oBGVWck370n83qID4REZGm7KT9tMPhyLQwLhGpQRrRLiIAOByOdOBV4HrDMDpbHY+IiIiclW+Pa38DeAPdAQNwVHGOUdtBiYiICHDqflpEGgkl2kWkotcoG92mhdFEREQalkMnaQdT1rdXNWo94Og/06t4TURERGrOqfppEWkklGgXEZPD4cgBngeuBHpbG42IiIichVYnaSdRVos93DAMz+OO6QoUAbG1HJuIiEhTd6p+WkQaCSXaReR471DW2T9jdSAiIiJyxv5yXHsakANsB34BXCj7IR0AwzCcganAnw6Ho7CughQREWmiTtVPi0gjocVQRaQSh8NRaBjGDOC/VsciIiIiZ+w2wzCcgHXAROBWYPrRBdY2G4YxE3jdMAwXIA74GxAOXGNRvCIiIk3JqfppDMMYBQQCQUeP728YRg6Aw+GYVffhisi5UKJdRKryCfAwEGF1ICIiInJGLgHeBJ4AjlA2M+1fFV6/CXj26H5/YAswyeFwbKzbMEVERJqk0/XTTwOjKrTvOvoHtHi5SINhOBwOq2MQEREREZFzYBjGdOApwMXhcJRYHI6IiIhUoH5apGlRjXYRERERERERERERkWpQol1EREREREREREREpBpUOkZEREREREREREREpBo0ol1EREREREREREREpBqUaBcRERERERERERERqQbnWr6+6tKIiIjUHsOCe6pvFxERqV3V7d/VV4uIiNSuKvtqjWgXEREREREREREREakGJdpFRERERERERERERKpBiXYRERERERERERERkWpQol1EREREREREREREpBqUaBcRERERERERERERqQYl2kVEREREREREREREqkGJdhERERERERERERGRalCiXURERERERERERESkGpRoFxERERERERERERGpBiXaRURERERERERERESqwdnqAERERESk8SooKmHW4h1s2n0IF2cnekcEccHgDvh4ulkdmoiIiNSgnfvT+HP9XmITM3A4HLRt5ceE/uH06tjK6tBEROqE4XA4avP6tXpxERGRJs6w4J7q2+WMHcktZPonS9l/6Eil/f7e7jw8bTCR7VpYFJmISL1W3f5dfbXUqbyCYj76fTOLN+2r8vWRvUL52yX9cHWx1XFkIiK1psq+ukEl2mcujK7Jy9W4qWO6Wh2CiIg0LUq0S71VUmrnsQ8WE5uUXuXrbi7OTL9pBJ3aNq/jyERE6j0l2qXBSE7LYcany0jJzD3lcd3DW/LEDcNxtqmCsYg0ClX21XqHExEREZEa982CKDPJbmBw/cSe3Hv5ALNkTGFxCc/8bwX7jhvtLiIiIg3D4SN5PP3p0kpJ9iHdQnj21tG8dMdYRvYKNfdvj0vh0zlbrQhTRKTOKNEuIiIiIjUqISWLn5fvMtvXTezBJcM7Map3O565dZSZbM8tKOK5z1eQnpVvVagiIiJyDvILi/nXZ8tJzcwDwMXZxv1XDuKh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fccSBatWraq0f9asWezYsYN//vOfJ1ynqKhscTEPDw8APD09zX1ZWVk88cQT/Oc//6nzRW6feuop2rRpw3vvvVen961N3cIDee620Txxwwh6dWhV6bWd+9N4+etV3POfP1i8aZ8WTRWRaisptfPnuvKyMecP6mhhNPWL+tCGpbmvB0/dOIKrx3XH6ei/yyO5BTz+0RJWRydZHJ2InI6+JYqIiIicQlZuIetiDphtlY2pewUFBSeMuHNzcwNgx44d5r78/HwefPBBXnjhBby8vE64TrNmzQgPD+fNN98kPT2d//73v2YN13/961+MGzfOHCl3NkpLSykpKan059ioyjNhs9kYM2YMq1evPut712eGYdC7YyuevHEE/75rPKP7tMNW4Ueqg+k5vPnDOp78eCkJKVkWRioiDd3q6CRz5pm/tzuDuwVbHFH9oT604XFyMrh8VCTTbxqJl3vZf7viklJe+Xo1SzbvO83ZImIllY4REREROYVlWxPMhagiQpppKroFOnbsyLp16yrtW7t2LQDp6enmvueff57WrVtz7bXXnvRab7/9NldeeSWPPvooERERvP3228TGxvLRRx+xdevWc4rP39+/yv3Nmzc/42uEhIRw6NChc7p/Q9AuyI97pgzgmnHd+X11LH+s20teQTEA0fGpPPjOfC4d1okrRnfB1UWLF4rI2fl9day5PWFAe808q0B9aMPVLTyQ528/j+c+X8HB9BwcOHjz+/U4GQYjeoVaHZ6IVEG9j4iIiMgpLNgYb25rNLs17rjjDn7++Wc++OADMjIy+OOPP3j11VeBspFsAHFxcbzyyiu8/vrrp5y2PnnyZFJSUti5cyc7duwgNDSUBx54gPvvv5+QkBDefvttQkNDCQ0N5Z133jmj+JYuXcq6desq/bntttvO6hmbSvmUZr4eXDuhB/996HwuHd7ZnBZfWmrn+6Ux3Pfmn2zafdDiKEWkIYlLzmTn/rL1IJycnBivRVArUR/asAW38OG5v55HaCs/oGzNk//MWseK7YkWRyYiVdGIdhEREZGTiEvOZN/BTKBskcdh3UOsDaiJuvnmm9myZQt/+9vf+Otf/4qnpycvvvgi99xzD61aldX//uc//8nkyZOJjIwkMzMTALvdTmFhIZmZmfj5+ZnJA09PTzp16gTA/Pnz2bJlCzNnzmTLli088cQTrFy5EoAh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kH6dW9fo/cR6NdnfHn/e3//+90qvX3DBBXTt2pXnnnuOn376iT/X7cXu4k3vSbcS6O/JPbdMwtnmRKtWrbjzzjvZvHkzvXv3PrcHE5F651z6u2NWrlxJXl4ea9euZcaMGbRs7s+/n3yebxdFmwl3u93O0i1ls2S2x6WiEu1SXynRLiIiInUmICCAzMzME/YfOXKkyhF0Fc9LTU09Yf/OuAPYXD0AaOZu59MX/83bb7/NbbfdBsDIkSNxdXXl7rvv5u6776Zly5Y18hwiIqdybCTf8e93x9one7+Liori448/ZunSpeaxeXl5QNn7pM1mw8PD45zjcnIyuG5iD8Jb+/PWj+spLiklr6CY579YydXju3HZiM6qod1I1HR/m5mZecrzPDw8OP/88/n111/JzS/ih6U7zdcuG9EZZ1tZ1dorrriCO++8k40bNyrRLtIInGt/V1Hfvn0BGD58OC1atOCGG27gwQcf5OGrhrD3QAafzNlKdHz5+9K3C6Mp9FzDXy/qjY+nW408h0hNUY12ERERqTORkZEn1HhNSEggNze3ypqwpzrvYHoOe2J34dM8GIDBHTwoLi4+4Yt7nz59KCkpYd++fTXzECIip9GhQwdcXFxOeN+KiYnBycmJTp06VXne7t27KS4uZsiQIQQEBBAQEGDWaQ8JCeGee+6pkfiG92zLc7eNprlvWdLegYMv523n39+upbCopEbuIdaqyf4WTl67/XiGYfDz8l1k55WVgQj092RM37BKr1f8p4g0bOfa353MsaR7XFwcAO3bBDDj5pE8OHUwfl7lSfWV2xN44K357Nh3uJpPIFKzlGgXERGROjN58mT++OMPsrOzzX0zZ87Ew8ODUaNGnfK8gwcPsnz5cnPfc+98S27GIYI69CEipBkXjB4AwMaNGyudu2HDBgDCwsJq8ElERE7Ozc2N8847j++++67S/pkzZzJkyBD8/PyqPG/48OEsWrSo0p9HHnkEgN9//52HH364xmJs3yaAl+8cR9ewQHPfyu0JPPrBYlIycmvsPmKNmuxv169fz969e5k8efJJz8vPz2fOnDn06NmbX1buNvdfM647Ls42sz1r1iwA+vXrd07PJSL1y7n2dyezYsUKAMLDw819hmEwtHsIj1w9tNKx6dn5PPnREr5fEmOWqhGxmkrHiIiISJ254447eOONN5gyZQqPPPIIe/fuZfr06TzwwAP4+vqax3Xs2JFRo0bx0UcfATBkyBAmTpzI9ddfzyuvvEJCShafvPY4zdtG0rJ9T265oDdBQc249NJLeeSRRygoKKBnz55s3ryZ6dOnc+WVVxIYGHiysEREatwTTzzB6NGjue+++7j00kv5/fff+f3335k7d655zL59++jQoQMff/wx119/PS1atGD0cYVn4+PjARgxYgTe3t7m/vXr1xMfH09CQgIAS5Ys4fDhw4SFhdG/f/8zitHPy42nbhzBx79v4Y+1e8rudzCTf7y3kIemDaZ7uN43G6qa6m+dnJx45JFHGD58OOPGjQPKys9ceOGFXHvttXTs2JHDhw/z2muvkZSUxIW3PE5SQSkAyRt/4cfclaQOH46vry9Lly7l5ZdfZsqUKfTs2bPu/6WISK04l/4OYNKkSYwbN45u3bphs9lYsWIFr776KlOnTqVDhw7mucf3d138s9m5Zx1OHs0IaNOBr+ZvJzo+lfuuHKhSMmI5JdpFRESkzgQEBLBgwQLuvvtuLrroIvz9/bn//vuZPn16peNKSkooLS2ttO+bb77h/vvv5+abbya/sJiWHfrQa+LNjOrdjoiQZgB89tlnzJgxgzfeeIMDBw4QHBzM7bffzhNPPFFXjygiApSNTp81axaPP/447777LuHh4Xz11VdMmDDBPMbhcFBaWordbj/r67/11lt89tlnZvvY++gNN9zAp59+esbXcbY58deL+tC+tT//nb2J0lI72XmFPP3JUm6Y1JMLhnRUmY8GqKb6W7vdzoUXXsgbb7xhvu7m5kZgYCDPPPMMKSkpuLu7M2TIEN75bBa/RxWax102cTgz//dfPvroI/Lz8wkNDeXhhx/mscceq9VnF5G6da793YABA/j000+Jj4/H2dmZ9u3b8/zzz3PHHXdUuv7x/d1/33oVgB5DJhLQpiwhvzn2EA+/u4B/XDWE9m0CavNxRU7JOJvpFYZhBAM7AS/Ax+Fw5Bz3eg/geWAE4NShc3fvW+57kvadutVgyCLWmDqmq9UhVGnevHl8/PHHrFq1in379vHUU0+d8AF6+vTpPP3001We/9xzz/F///d/QFnn99xzz/H++++TkpJC165def7555k4cWJtP4aInBsrMh+Wz8v8bVUsH/++GQA3F2feum8izXzPfXFAEREpE7PvMC99vZojuQXmvoGR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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Solution\n", "\n", "with model9:\n", " az.plot_posterior(trace9)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "Think Bayes, Second Edition\n", "\n", "Copyright 2020 Allen B. Downey\n", "\n", "License: [Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }