{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Regression"
]
},
{
"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": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:43.792591Z",
"iopub.status.busy": "2021-04-16T19:38:43.792140Z",
"iopub.status.idle": "2021-04-16T19:38:43.794041Z",
"shell.execute_reply": "2021-04-16T19:38:43.794390Z"
},
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# If we're running on Colab, install empiricaldist\n",
"# https://pypi.org/project/empiricaldist/\n",
"\n",
"import sys\n",
"IN_COLAB = 'google.colab' in sys.modules\n",
"\n",
"if IN_COLAB:\n",
" !pip install empiricaldist"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:43.798000Z",
"iopub.status.busy": "2021-04-16T19:38:43.797535Z",
"iopub.status.idle": "2021-04-16T19:38:43.800051Z",
"shell.execute_reply": "2021-04-16T19:38:43.799576Z"
},
"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": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:43.803533Z",
"iopub.status.busy": "2021-04-16T19:38:43.802836Z",
"iopub.status.idle": "2021-04-16T19:38:44.488550Z",
"shell.execute_reply": "2021-04-16T19:38:44.488120Z"
},
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"from utils import set_pyplot_params\n",
"set_pyplot_params()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the previous chapter we saw several examples of logistic regression, which is based on the assumption that the likelihood of an outcome, expressed in the form of log odds, is a linear function of some quantity (continuous or discrete).\n",
"\n",
"In this chapter we'll work on examples of simple linear regression, which models the relationship between two quantities. Specifically, we'll look at changes over time in snowfall and the marathon world record.\n",
"\n",
"The models we'll use have three parameters, so you might want to review the tools we used for the three-parameter model in <<_MarkandRecapture>>."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## More Snow?\n",
"\n",
"I am under the impression that we don't get as much snow around here as we used to. By \"around here\" I mean Norfolk County, Massachusetts, where I was born, grew up, and currently live. And by \"used to\" I mean compared to when I was young, like in 1978 when we got [27 inches of snow](https://en.wikipedia.org/wiki/Northeastern_United_States_blizzard_of_1978) and I didn't have to go to school for a couple of weeks.\n",
"\n",
"Fortunately, we can test my conjecture with data. Norfolk County happens to be the location of the [Blue Hill Meteorological Observatory](https://en.wikipedia.org/wiki/Blue_Hill_Meteorological_Observatory), which keeps the oldest continuous weather record in North America.\n",
"\n",
"Data from this and many other weather stations is available from the [National Oceanic and Atmospheric Administration](https://www.ncdc.noaa.gov/cdo-web/search) (NOAA). I collected data from the Blue Hill Observatory from May 11, 1967 to May 11, 2020. "
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"remove-cell"
]
},
"source": [
"To get more data, go to [National Oceanic and Atmospheric Administration](https://www.ncdc.noaa.gov/cdo-web/search), select daily summaries, choose a date range, and search for Stations with search term \"Blue Hill Coop\". Add it to the cart.\n",
"\n",
"Open cart and select \"Custom GHCN-Daily CSV\", then continue.\n",
"\n",
"Select all data types (but particularly Precipitation) and continue.\n",
"\n",
"Provide an email address and submit order.\n",
"\n",
"You'll get an email with a download link. Download the CSV file and move it into the current directory."
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The following cell downloads the data as a CSV file."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.492216Z",
"iopub.status.busy": "2021-04-16T19:38:44.491795Z",
"iopub.status.idle": "2021-04-16T19:38:44.493838Z",
"shell.execute_reply": "2021-04-16T19:38:44.493472Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"download('https://github.com/AllenDowney/ThinkBayes2/raw/master/data/2239075.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use Pandas to read the data into `DataFrame`:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.497478Z",
"iopub.status.busy": "2021-04-16T19:38:44.496929Z",
"iopub.status.idle": "2021-04-16T19:38:44.536916Z",
"shell.execute_reply": "2021-04-16T19:38:44.537394Z"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_csv('2239075.csv', parse_dates=[2])"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Here's what the last few rows look like."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.549351Z",
"iopub.status.busy": "2021-04-16T19:38:44.541697Z",
"iopub.status.idle": "2021-04-16T19:38:44.560204Z",
"shell.execute_reply": "2021-04-16T19:38:44.559851Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
STATION
\n",
"
NAME
\n",
"
DATE
\n",
"
PRCP
\n",
"
SNOW
\n",
"
SNWD
\n",
"
TMAX
\n",
"
TMIN
\n",
"
TOBS
\n",
"
WESD
\n",
"
WT01
\n",
"
WT03
\n",
"
WT04
\n",
"
WT05
\n",
"
WT06
\n",
"
WT08
\n",
"
WT09
\n",
"
WT11
\n",
"
WT16
\n",
"
WT18
\n",
"
\n",
" \n",
" \n",
"
\n",
"
20452
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2023-05-09
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
75
\n",
"
45.0
\n",
"
51.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
20453
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2023-05-10
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
60
\n",
"
42.0
\n",
"
51.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
20454
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2023-05-11
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
72
\n",
"
51.0
\n",
"
59.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" STATION NAME DATE PRCP SNOW SNWD TMAX \\\n",
"20452 USC00190736 BLUE HILL COOP, MA US 2023-05-09 0.0 0.0 0.0 75 \n",
"20453 USC00190736 BLUE HILL COOP, MA US 2023-05-10 0.0 0.0 0.0 60 \n",
"20454 USC00190736 BLUE HILL COOP, MA US 2023-05-11 0.0 0.0 0.0 72 \n",
"\n",
" TMIN TOBS WESD WT01 WT03 WT04 WT05 WT06 WT08 WT09 WT11 WT16 \\\n",
"20452 45.0 51.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"20453 42.0 51.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"20454 51.0 59.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
" WT18 \n",
"20452 NaN \n",
"20453 NaN \n",
"20454 NaN "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The columns we'll use are:\n",
"\n",
"* `DATE`, which is the date of each observation,\n",
"\n",
"* `SNOW`, which is the total snowfall in inches.\n",
"\n",
"I'll add a column that contains just the year part of the dates."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.563856Z",
"iopub.status.busy": "2021-04-16T19:38:44.563284Z",
"iopub.status.idle": "2021-04-16T19:38:44.568089Z",
"shell.execute_reply": "2021-04-16T19:38:44.567683Z"
}
},
"outputs": [],
"source": [
"df['YEAR'] = df['DATE'].dt.year"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And use `groupby` to add up the total snowfall in each year."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.572178Z",
"iopub.status.busy": "2021-04-16T19:38:44.571162Z",
"iopub.status.idle": "2021-04-16T19:38:44.574545Z",
"shell.execute_reply": "2021-04-16T19:38:44.574115Z"
}
},
"outputs": [],
"source": [
"snow = df.groupby('YEAR')['SNOW'].sum()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The first and last years are not complete, so I'll drop them."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.578061Z",
"iopub.status.busy": "2021-04-16T19:38:44.577552Z",
"iopub.status.idle": "2021-04-16T19:38:44.579968Z",
"shell.execute_reply": "2021-04-16T19:38:44.580391Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"55"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"snow = snow.iloc[1:-1]\n",
"len(snow)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following figure shows total snowfall during each of the complete years in my lifetime."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.584664Z",
"iopub.status.busy": "2021-04-16T19:38:44.583819Z",
"iopub.status.idle": "2021-04-16T19:38:44.768641Z",
"shell.execute_reply": "2021-04-16T19:38:44.768224Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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gmvXruHEiRP4888/1dvcu3cPvr6+iIuLQ5MmTSrsIyMjAx4eHrh69SpatGihTuy+/vprvP/++7V5OERkpvgolohIC56enpg8eTKCg4MxePBgXL58GREREahTp476JygoCADUj1vj4+MxcuRINGzYEDKZDA0aNAAA3L17V2PfHTp0qNVjISLzZW3oAIiITIW1tTWsrcu+Nh89eoQBAwbgyy+/rLBd+aPUAQMGwN/fHxs2bICPjw9UKhVatGiBoqIije2dnJz0HzwRWQQmdkRE1dCuXTv88ssvaNCggTrZe5xCoUBcXBw2bNiAHj16AABOnjxZ22ESkYXho1giomqYOnUqMjMzMXLkSJw7dw63bt3Cn3/+ifHjx6O0tBR169aFXC7H+vXrkZCQgKNHj2LWrFmGDpuIzBwTOyKiavDx8cGpU6dQWlqKvn37omXLlpgxYwZcXV0hlUohlUqxY8cOXLhwAS1atMDMmTPx1VdfGTpsIjJzHBVLREREZCbYYkdERERkJpjYEREREZkJJnZEREREZoKJHREREZGZYGJHREREZCaY2BERERGZCSZ2RERERGaCiR0RERGRmWBiR0RERGQmmNgRERERmQkmdkRERERmgokdERERkZn4f0U0ZwcYYOAqAAAAAElFTkSuQmCC",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils import decorate\n",
"\n",
"snow.plot(ls='', marker='o', alpha=0.5)\n",
"\n",
"decorate(xlabel='Year',\n",
" ylabel='Total annual snowfall (inches)',\n",
" title='Total annual snowfall in Norfolk County, MA')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking at this plot, it's hard to say whether snowfall is increasing, decreasing, or unchanged. In the last decade, we've had several years with more snow than 1978, including 2015, which was the snowiest winter in the Boston area in modern history, with a total of 141 inches.\n",
"\n",
"This kind of question -- looking at noisy data and wondering whether it is going up or down -- is precisely the question we can answer with Bayesian regression."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.774042Z",
"iopub.status.busy": "2021-04-16T19:38:44.773344Z",
"iopub.status.idle": "2021-04-16T19:38:44.776141Z",
"shell.execute_reply": "2021-04-16T19:38:44.776580Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"YEAR\n",
"1978 100.6\n",
"1996 124.2\n",
"2015 141.1\n",
"Name: SNOW, dtype: float64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"snow.loc[[1978, 1996, 2015]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Regression Model\n",
"\n",
"The foundation of regression (Bayesian or not) is the assumption that a time series like this is the sum of two parts:\n",
"\n",
"1. A linear function of time, and\n",
"\n",
"2. A series of random values drawn from a distribution that is not changing over time.\n",
"\n",
"Mathematically, the regression model is\n",
"\n",
"$$y = a x + b + \\epsilon$$\n",
"\n",
"where $y$ is the series of measurements (snowfall in this example), $x$ is the series of times (years) and $\\epsilon$ is the series of random values.\n",
"\n",
"$a$ and $b$ are the slope and intercept of the line through the data. They are unknown parameters, so we will use the data to estimate them.\n",
"\n",
"We don't know the distribution of $\\epsilon$, so we'll make the additional assumption that it is a normal distribution with mean 0 and unknown standard deviation, $\\sigma$. \n",
"To see whether this assumption is reasonable, I'll plot the distribution of total snowfall and a normal model with the same mean and standard deviation.\n",
"\n",
"Here's a `Pmf` object that represents the distribution of snowfall."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.780474Z",
"iopub.status.busy": "2021-04-16T19:38:44.779794Z",
"iopub.status.idle": "2021-04-16T19:38:44.786003Z",
"shell.execute_reply": "2021-04-16T19:38:44.785532Z"
}
},
"outputs": [],
"source": [
"from empiricaldist import Pmf\n",
"\n",
"pmf_snowfall = Pmf.from_seq(snow)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And here are the mean and standard deviation of the data."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.789914Z",
"iopub.status.busy": "2021-04-16T19:38:44.789309Z",
"iopub.status.idle": "2021-04-16T19:38:44.791963Z",
"shell.execute_reply": "2021-04-16T19:38:44.791602Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(63.62363636363636, 25.851147072396568)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean, std = pmf_snowfall.mean(), pmf_snowfall.std()\n",
"mean, std"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll use the `norm` object from SciPy to compute the CDF of a normal distribution with the same mean and standard deviation."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.796359Z",
"iopub.status.busy": "2021-04-16T19:38:44.795815Z",
"iopub.status.idle": "2021-04-16T19:38:44.797503Z",
"shell.execute_reply": "2021-04-16T19:38:44.797862Z"
}
},
"outputs": [],
"source": [
"from scipy.stats import norm\n",
"\n",
"dist = norm(mean, std)\n",
"qs = pmf_snowfall.qs\n",
"ps = dist.cdf(qs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's what the distribution of the data looks like compared to the normal model."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.821740Z",
"iopub.status.busy": "2021-04-16T19:38:44.812987Z",
"iopub.status.idle": "2021-04-16T19:38:44.975037Z",
"shell.execute_reply": "2021-04-16T19:38:44.974589Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8C0lEQVR4nO3dd3hUVf4G8Hf6TMpMeu8hvQACRkCKK4oNxcqi0nTdXctasAEqyE9XcF0R24plxb6grl1EXZAmVZpCQkJJCKT3mbSZycz5/REzcEkhCZNMyvt5njww57bv3AzJy733nCMTQggQERERUb8nd3UBREREROQcDHZEREREAwSDHREREdEAwWBHRERENEAw2BERERENEAx2RERERAMEgx0RERHRAMFgR0RERDRAMNgRERERDRAMdkQDwMSJEzFx4kRXl3FWs2fPRlRUVLe27Yn3+NxzzyEmJgYKhQLDhg1z6r67qyfe55NPPgmZTObUfXaWTCbDk08+6ZJj9wXvv/8+EhMToVKp4OXl1aVt2/r3MtjPJ50dgx0NCu+88w5kMhm0Wi0KCgpaLZ84cSJSU1NdUBm5yg8//IBHHnkEY8eOxcqVK/HMM8+4uqRzUl9fjyeffBIbNmxwdSn0u0OHDmH27NmIjY3Fm2++iTfeeMPVJdEgoHR1AUS9yWw2Y+nSpXj55ZddXQq52Pr16yGXy/Hvf/8barXa1eU4/PDDD93arr6+HosXLwaAVlf8Hn/8ccybN+9cS+uWhoYGKJWD81fNhg0bYLfb8eKLL2LIkCGuLocGCV6xo0Fl2LBhePPNN1FYWNhjxxBCoKGhocf2T85RWloKnU7XZ0JdfX09AECtVju9JqVSCa1W69R9dpZWqx20wa60tBQAunwLluhcMNjRoLJgwQLYbDYsXbr0rOs2NTXhqaeeQmxsLDQaDaKiorBgwQKYzWbJelFRUbjqqqvw/fffY+TIkdDpdHj99dexYcMGyGQyfPzxx1i8eDFCQ0Ph6emJG264ATU1NTCbzbj//vsREBAADw8PzJkzp9W+V65ciT/84Q8ICAiARqNBcnIyXnvttW6/f5lMhnvuuQeffPIJkpOTodPpMHr0aPz2228AgNdffx1DhgyBVqvFxIkTkZeX12ofn3zyCUaMGAGdTgc/Pz/ceuutbd7e/uKLL5CamgqtVovU1FR8/vnnbdZkt9uxfPlypKSkQKvVIjAwEH/5y19QVVXVrffYme+bTCbDypUrUVdXB5lMBplMhnfeeafN/d1zzz3w8PBwBK/TTZ8+HUFBQbDZbACAL7/8EldeeSVCQkKg0WgQGxuLp556yrG8Rcut/927d2P8+PFwc3PDggULHMtOv+JmsViwcOFCjBgxAgaDAe7u7hg3bhx++uknxzp5eXnw9/cHACxevNjxnlqexWrrGbuufr63bNmC888/H1qtFjExMXjvvfc6+C6ccuYzYS21HDlyBLNnz4aXlxcMBgPmzJnT5jk+0+HDh3H99dcjKCgIWq0WYWFh+OMf/4iamhrJMe+55x7HZ1Cj0SAlJQVr165ttb+9e/fi8ssvh16vh4eHBy6++GJs377dsby6uhoKhQIvvfSSo628vBxyuRy+vr4QQjja77zzTgQFBTnO26JFiwAA/v7+kvPQ2c8JUbcIokFg5cqVAoDYtWuXuO2224RWqxUFBQWO5RMmTBApKSmSbWbNmiUAiBtuuEG8+uqrYubMmQKAmDp1qmS9yMhIMWTIEOHt7S3mzZsnVqxYIX766Sfx008/CQBi2LBhYvTo0eKll14S9957r5DJZOKPf/yjuPnmm8Xll18uXn31VTFjxgwBQCxevFiy71GjRonZs2eLF154Qbz88svi0ksvFQDEK6+8IllvwoQJYsKECWc9DwBEenq6CA8PF0uXLhVLly4VBoNBREREiFdeeUUkJyeL559/Xjz++ONCrVaLiy66qM3zOGrUKPHCCy+IefPmCZ1OJ6KiokRVVZVjve+//17I5XKRmpoqli1bJh577DFhMBhESkqKiIyMlOzzT3/6k1AqleKOO+4QK1asEI8++qhwd3cXo0aNEhaLpcvvsTPft/fff1+MGzdOaDQa8f7774v3339fHD16tM39bdq0SQAQH3/8saS9rq5OuLu7i7vvvtvRNnXqVHHTTTeJ5557Trz22mvixhtvFADEQw89JNl2woQJIigoSPj7+4u//e1v4vXXXxdffPFFm++zrKxMBAcHi7lz54rXXntN/OMf/xAJCQlCpVKJvXv3CiGEqK2tFa+99poAIK699lrHe9q/f78QQohFixaJM3/cd+XznZCQIAIDA8WCBQvEK6+8Is477zwhk8nEgQMHzvr9ACAWLVrkeN1Sy/Dhw8V1110n/vWvf4k//elPAoB4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559/fk7ng4haY7Ajom558cUX8fzzz+Of//wnfv31V0yePBlXX321IyDt3LkTAPC///0PRUVF+OyzzwAAJpMJs2bNwpYtW7B9+3bExcXhiiuukASHjhQVFWH69Om47bbbkJWVhQ0bNuC6666DEMKxzk8//YSjR4/ip59+wrvvvot33nkH77zzjmP57Nmz8csvv+Crr77Ctm3bIITAFVdcAavVCplMhvHjx2PDhg0AmkNKVlYWGhoacOjQIQDAxo0bMWrUKLi5uWHXrl247LLLcNNNN6GoqAgvvvgiAEAul+Oll17CwYMH8e6772L9+vV45JFHun2+KysrkZmZiZEjR5513eeffx4jR47E3r17cdddd+HOO+90XGmtra3FhAkTUFBQgK+++gr79+/HI488Arvd7tj+6NGj+OKLL/DNN9/gm2++wcaNG7F06VLH8iVLluC9997DihUrcPDgQTzwwAO49dZbsXHjRgDNzwFmZmbiu+++Q1ZWFl577TX4+flJajz//POxefPmbp8PImqHICLqhJUrVwqDweB4HRISIv7+979L1hk1apS46667hBBC5ObmCgBi7969He7XZrMJT09P8fXXXzvaAIjPP/+8zfV3794tAIi8vLw2l8+aNUtERkaKpqYmR9uNN94opk2bJoQQIicnRwAQP//8s2N5eXm50Ol04uOPPxZCCPHSSy+JlJQUIYQQX3zxhcjIyBDXXHONeO2114QQQkyaNEksWLDAsf0111wjZs2a1eH7/OSTT4Svr6/j9Znnc9GiRWLo0KHtbr93714BQOTn50vaJ0yYIO677z7H68jISHHrrbc6XtvtdhEQEOCo/fXXXxeenp6ioqKizeMsWrRIuLm5CaPR6Gh7+OGHRUZGhhBCiMbGRuHm5ia2bt0q2e72228X06dPF0IIMWXKFDFnzpx234sQQjzwwANi4sSJHa5DRF3HK3ZE1GVGoxGFhYUYO3aspH3s2LHIysrqcNuSkhLccccdiIuLg8FggF6vR21tLfLz8zt17KFDh+Liiy9GWloabrzxRrz55puoqqqSrJOSkgKFQuF4HRwcjNLSUgBAVlYWlEolMjIyHMt9fX2RkJDgqH3ChAnIzMxEWVkZNm7ciIkTJ2LixInYsGEDrFYrtm7d6ri13J7//e9/uPjiixEaGgpPT0/MmDEDFRUVqK+v79T7PFNDQwMAQKvVnnXd9PR0x99bbp+3vP99+/Zh+PDhHT7bFhUVBU9PT8fr08/fkSNHUF9fj0suuQQeHh6Or/feew9Hjx4FANx5551YtWoVhg0bhkceeQRbt25tdQydTtftc0FE7WOwI6JeNWvWLOzbtw8vvvgitm7din379sHX1xcWi6VT2ysUCvz444/47rvvkJycjJdffhkJCQnIzc11rKNSqSTbyGQyya3Gs0lLS4OPjw82btwoCXYbN27Erl27YLVaMWbMmHa3z8vLw1VXXYX09HT897//xe7du/Hqq68CQKff55labmWeGWLb0tH71+l057R9y3OC3377Lfbt2+f4yszMdDxnd/nll+P48eN44IEHUFhYiIsvvhgPPfSQZJ+VlZXw9/c/ay1E1DUMdkTUZXq9HiEhIfj5558l7T///DOSk5MBAGq1GgBgs9larXPvvffiiiuuQEpKCjQaDcrLy7t0fJlMhrFjx2Lx4sXYu3cv1Gp1px/ET0pKQlNTk6SzQEVFBbKzsx21y2QyjBs3Dl9++SUOHjyICy+8EOnp6TCbzXj99dcxcuRIuLu7t3uM3bt3w2634/nnn8cFF1yA+Ph4FBYWduk9nik2NhZ6vR6ZmZnntJ/09HTs27cPlZWV3do+OTkZGo0G+fn5GDJkiOQrPDzcsZ6/vz9mzZqFDz74AMuXL2/VgePAgQMYPnz4Ob0XImqNwY6IuuXhhx/Gs88+i9WrVyM7Oxvz5s3Dvn37cN999wEAAgICoNPpsHbtWpSUlKCmpgYAEBcXh/fffx9ZWVnYsWMHbrnllk5dRWqxY8cOPPPMM/jll1+Qn5+Pzz77DGVlZUhKSurU9nFxcbjmmmtwxx13YMuWLdi/fz9uvfVWhIaG4pprrnGsN3HiRPznP//BsGHD4OHhAblcjvHjx+PDDz/EhAkTOjzGkCFDYLVa8fLLL+PYsWN4//33sWLFik6/x7bI5XJMmjQJW7ZsOaf9TJ8+HUFBQZg6dSp+/vlnHDt2DP/973+xbdu2Tm3v6emJhx56CA888ADeffddHD16FHv27MHLL7+Md999FwCwcOFCfPnllzhy5AgOHjyIb775RvL9qa+vx+7du3HppZee03shotYY7IioW+69917MnTsXDz74INLS0rB27Vp89dVXjrHclEolXnrpJbz++usICQlxhKZ///vfqKqqwnnnnYcZM2bg3nvvRUBAQKePq9frsWnTJlxxxRWIj4/H448/jueffx6XX355p/excuVKjBgxAldddRVGjx4NIQTWrFkjuQU5YcIE2Gw2ybN0EydObNXWlqFDh2LZsmV49tlnkZqaig8//BBLlizpdH3t+dOf/oRVq1Z16bbymdRqNX744QcEBATgiiuuQFpaGpYuXSp5JvFsnnrqKTzxxBNYsmQJkpKScNlll+Hbb791DHGjVqsxf/58pKenY/z48VAoFFi1apVj+y+//BIREREYN25ct98HEbVNJsRpYwQQEVGfJYRARkYGHnjgAUyfPt3V5XTbBRdcgHvvvRc333yzq0shGnB4xY6IqJ+QyWR444030NTU5OpSuq28vBzXXXddvw6mRH0Zr9gRERERDRC8YkdEREQ0QDDYEREREQ0QDHZEREREAwSDHREREdEAwWBHRERENEAw2BERERENEAx2RERERAMEgx0RERHRAMFgR0RERDRAMNgRERERDRD/D6FORgdvdWKnAAAAAElFTkSuQmCC",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.plot(qs, ps, color='C5', label='model')\n",
"pmf_snowfall.make_cdf().plot(label='data')\n",
"\n",
"decorate(xlabel='Total snowfall (inches)',\n",
" ylabel='CDF',\n",
" title='Normal model of variation in snowfall')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We've had more winters below the mean than expected, but overall this looks like a reasonable model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Least Squares Regression\n",
"\n",
"Our regression model has three parameters: slope, intercept, and standard deviation of $\\epsilon$.\n",
"Before we can estimate them, we have to choose priors.\n",
"To help with that, I'll use StatsModel to fit a line to the data by [least squares regression](https://en.wikipedia.org/wiki/Least_squares).\n",
"\n",
"First, I'll use `reset_index` to convert `snow`, which is a `Series`, to a `DataFrame`."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.985446Z",
"iopub.status.busy": "2021-04-16T19:38:44.984866Z",
"iopub.status.idle": "2021-04-16T19:38:44.988417Z",
"shell.execute_reply": "2021-04-16T19:38:44.988051Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
YEAR
\n",
"
SNOW
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1968
\n",
"
44.7
\n",
"
\n",
"
\n",
"
1
\n",
"
1969
\n",
"
99.2
\n",
"
\n",
"
\n",
"
2
\n",
"
1970
\n",
"
66.8
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" YEAR SNOW\n",
"0 1968 44.7\n",
"1 1969 99.2\n",
"2 1970 66.8"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = snow.reset_index()\n",
"data.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is a `DataFrame` with two columns, `YEAR` and `SNOW`, in a format we can use with StatsModels.\n",
"\n",
"As we did in the previous chapter, I'll center the data by subtracting off the mean."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:44.994657Z",
"iopub.status.busy": "2021-04-16T19:38:44.993833Z",
"iopub.status.idle": "2021-04-16T19:38:44.996662Z",
"shell.execute_reply": "2021-04-16T19:38:44.997259Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1995"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"offset = round(data['YEAR'].mean())\n",
"data['x'] = data['YEAR'] - offset\n",
"offset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And I'll add a column to `data` so the dependent variable has a standard name."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.002030Z",
"iopub.status.busy": "2021-04-16T19:38:45.001189Z",
"iopub.status.idle": "2021-04-16T19:38:45.002832Z",
"shell.execute_reply": "2021-04-16T19:38:45.003449Z"
}
},
"outputs": [],
"source": [
"data['y'] = data['SNOW']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can use StatsModels to compute the least squares fit to the data and estimate `slope` and `intercept`."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.007222Z",
"iopub.status.busy": "2021-04-16T19:38:45.006101Z",
"iopub.status.idle": "2021-04-16T19:38:45.077844Z",
"shell.execute_reply": "2021-04-16T19:38:45.078260Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Intercept 63.623636\n",
"x 0.376421\n",
"dtype: float64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import statsmodels.formula.api as smf\n",
"\n",
"formula = 'y ~ x'\n",
"results = smf.ols(formula, data=data).fit()\n",
"results.params"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The intercept, about 64 inches, is the expected snowfall when `x=0`, which is the beginning of 1994.\n",
"The estimated slope indicates that total snowfall is increasing at a rate of about 0.5 inches per year. \n",
"\n",
"`results` also provides `resid`, which is an array of residuals, that is, the differences between the data and the fitted line.\n",
"The standard deviation of the residuals is an estimate of `sigma`."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.082559Z",
"iopub.status.busy": "2021-04-16T19:38:45.081856Z",
"iopub.status.idle": "2021-04-16T19:38:45.085047Z",
"shell.execute_reply": "2021-04-16T19:38:45.084586Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"25.382858670693558"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results.resid.std()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll use these estimates to choose prior distributions for the parameters."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Priors\n",
"\n",
"I'll use uniform distributions for all three parameters."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.090543Z",
"iopub.status.busy": "2021-04-16T19:38:45.089992Z",
"iopub.status.idle": "2021-04-16T19:38:45.091913Z",
"shell.execute_reply": "2021-04-16T19:38:45.092335Z"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"from utils import make_uniform\n",
"\n",
"qs = np.linspace(-0.5, 1.5, 51)\n",
"prior_slope = make_uniform(qs, 'Slope')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.097282Z",
"iopub.status.busy": "2021-04-16T19:38:45.096524Z",
"iopub.status.idle": "2021-04-16T19:38:45.098971Z",
"shell.execute_reply": "2021-04-16T19:38:45.098521Z"
}
},
"outputs": [],
"source": [
"qs = np.linspace(54, 75, 41)\n",
"prior_inter = make_uniform(qs, 'Intercept')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.103775Z",
"iopub.status.busy": "2021-04-16T19:38:45.103183Z",
"iopub.status.idle": "2021-04-16T19:38:45.105613Z",
"shell.execute_reply": "2021-04-16T19:38:45.105017Z"
}
},
"outputs": [],
"source": [
"qs = np.linspace(20, 35, 31)\n",
"prior_sigma = make_uniform(qs, 'Sigma')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I made the prior distributions different lengths for two reasons. First, if we make a mistake and use the wrong distribution, it will be easier to catch the error if they are all different lengths.\n",
"\n",
"Second, it provides more precision for the most important parameter, `slope`, and spends less computational effort on the least important, `sigma`.\n",
"\n",
"In <<_ThreeParameterModel>> we made a joint distribution with three parameters. I'll wrap that process in a function:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.110768Z",
"iopub.status.busy": "2021-04-16T19:38:45.109913Z",
"iopub.status.idle": "2021-04-16T19:38:45.111841Z",
"shell.execute_reply": "2021-04-16T19:38:45.112302Z"
}
},
"outputs": [],
"source": [
"from utils import make_joint\n",
"\n",
"def make_joint3(pmf1, pmf2, pmf3):\n",
" \"\"\"Make a joint distribution with three parameters.\"\"\"\n",
" joint2 = make_joint(pmf2, pmf1).stack()\n",
" joint3 = make_joint(pmf3, joint2).stack()\n",
" return Pmf(joint3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And use it to make a `Pmf` that represents the joint distribution of the three parameters."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.116443Z",
"iopub.status.busy": "2021-04-16T19:38:45.115752Z",
"iopub.status.idle": "2021-04-16T19:38:45.129978Z",
"shell.execute_reply": "2021-04-16T19:38:45.129613Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n",
"
probs
\n",
"
\n",
"
\n",
"
Slope
\n",
"
Intercept
\n",
"
Sigma
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
-0.5
\n",
"
54.0
\n",
"
20.0
\n",
"
0.000015
\n",
"
\n",
"
\n",
"
20.5
\n",
"
0.000015
\n",
"
\n",
"
\n",
"
21.0
\n",
"
0.000015
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Slope Intercept Sigma\n",
"-0.5 54.0 20.0 0.000015\n",
" 20.5 0.000015\n",
" 21.0 0.000015\n",
"dtype: float64"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prior = make_joint3(prior_slope, prior_inter, prior_sigma)\n",
"prior.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The index of `Pmf` has three columns, containing values of `slope`, `inter`, and `sigma`, in that order.\n",
"\n",
"With three parameters, the size of the joint distribution starts to get big. Specifically, it is the product of the lengths of the prior distributions. In this example, the prior distributions have 51, 41, and 31 values, so the length of the joint prior is 64,821."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.133803Z",
"iopub.status.busy": "2021-04-16T19:38:45.133137Z",
"iopub.status.idle": "2021-04-16T19:38:45.135815Z",
"shell.execute_reply": "2021-04-16T19:38:45.136173Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"(51, 41, 31)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(prior_slope), len(prior_inter), len(prior_sigma)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.139897Z",
"iopub.status.busy": "2021-04-16T19:38:45.139320Z",
"iopub.status.idle": "2021-04-16T19:38:45.141694Z",
"shell.execute_reply": "2021-04-16T19:38:45.142063Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"64821"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(prior_slope) * len(prior_inter) * len(prior_sigma)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.145315Z",
"iopub.status.busy": "2021-04-16T19:38:45.144835Z",
"iopub.status.idle": "2021-04-16T19:38:45.147028Z",
"shell.execute_reply": "2021-04-16T19:38:45.147371Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"64821"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(prior)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Likelihood\n",
"\n",
"Now we'll compute the likelihood of the data.\n",
"To demonstrate the process, let's assume temporarily that the parameters are known."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.150860Z",
"iopub.status.busy": "2021-04-16T19:38:45.150270Z",
"iopub.status.idle": "2021-04-16T19:38:45.153978Z",
"shell.execute_reply": "2021-04-16T19:38:45.153346Z"
}
},
"outputs": [],
"source": [
"inter = 64\n",
"slope = 0.51\n",
"sigma = 25"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll extract the `xs` and `ys` from `data` as `Series` objects:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.157932Z",
"iopub.status.busy": "2021-04-16T19:38:45.157287Z",
"iopub.status.idle": "2021-04-16T19:38:45.159173Z",
"shell.execute_reply": "2021-04-16T19:38:45.159629Z"
}
},
"outputs": [],
"source": [
"xs = data['x']\n",
"ys = data['y']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And compute the \"residuals\", which are the differences between the actual values, `ys`, and the values we expect based on `slope` and `inter`."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.164698Z",
"iopub.status.busy": "2021-04-16T19:38:45.163879Z",
"iopub.status.idle": "2021-04-16T19:38:45.166494Z",
"shell.execute_reply": "2021-04-16T19:38:45.165985Z"
}
},
"outputs": [],
"source": [
"expected = slope * xs + inter\n",
"resid = ys - expected"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"According to the model, the residuals should follow a normal distribution with mean 0 and standard deviation `sigma`. So we can compute the likelihood of each residual value using `norm` from SciPy."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.171835Z",
"iopub.status.busy": "2021-04-16T19:38:45.171084Z",
"iopub.status.idle": "2021-04-16T19:38:45.173013Z",
"shell.execute_reply": "2021-04-16T19:38:45.173490Z"
}
},
"outputs": [],
"source": [
"densities = norm(0, sigma).pdf(resid)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is an array of probability densities, one for each element of the dataset; their product is the likelihood of the data."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.177823Z",
"iopub.status.busy": "2021-04-16T19:38:45.176986Z",
"iopub.status.idle": "2021-04-16T19:38:45.179736Z",
"shell.execute_reply": "2021-04-16T19:38:45.180173Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"9.70222384229511e-112"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"likelihood = densities.prod()\n",
"likelihood"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we saw in the previous chapter, the likelihood of any particular dataset tends to be small.\n",
"If it's too small, we might exceed the limits of floating-point arithmetic.\n",
"When that happens, we can avoid the problem by computing likelihoods under a log transform.\n",
"But in this example that's not necessary."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Update\n",
"\n",
"Now we're ready to do the update. First, we need to compute the likelihood of the data for each possible set of parameters."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:38:45.185541Z",
"iopub.status.busy": "2021-04-16T19:38:45.184543Z",
"iopub.status.idle": "2021-04-16T19:39:24.492328Z",
"shell.execute_reply": "2021-04-16T19:39:24.491834Z"
}
},
"outputs": [],
"source": [
"likelihood = prior.copy()\n",
"\n",
"for slope, inter, sigma in prior.index:\n",
" expected = slope * xs + inter\n",
" resid = ys - expected\n",
" densities = norm.pdf(resid, 0, sigma)\n",
" likelihood[slope, inter, sigma] = densities.prod()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This computation takes longer than many of the previous examples.\n",
"We are approaching the limit of what we can do with grid approximations.\n",
"\n",
"Nevertheless, we can do the update in the usual way:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:24.496186Z",
"iopub.status.busy": "2021-04-16T19:39:24.495332Z",
"iopub.status.idle": "2021-04-16T19:39:24.505907Z",
"shell.execute_reply": "2021-04-16T19:39:24.506555Z"
},
"tags": [
"hide-output"
]
},
"outputs": [
{
"data": {
"text/plain": [
"5.116955523342424e-113"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"posterior = prior * likelihood\n",
"posterior.normalize()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is a `Pmf` with a three-level index containing values of `slope`, `inter`, and `sigma`.\n",
"To get the marginal distributions from the joint posterior, we can use `Pmf.marginal`, which we saw in <<_ThreeParameterModel>>."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:24.511934Z",
"iopub.status.busy": "2021-04-16T19:39:24.510975Z",
"iopub.status.idle": "2021-04-16T19:39:24.521557Z",
"shell.execute_reply": "2021-04-16T19:39:24.521978Z"
}
},
"outputs": [],
"source": [
"posterior_slope = posterior.marginal(0)\n",
"posterior_inter = posterior.marginal(1)\n",
"posterior_sigma = posterior.marginal(2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the posterior distribution for `sigma`:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:24.565248Z",
"iopub.status.busy": "2021-04-16T19:39:24.537773Z",
"iopub.status.idle": "2021-04-16T19:39:24.888743Z",
"shell.execute_reply": "2021-04-16T19:39:24.888197Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1UklEQVR4nO3deVxU5f4H8M8wMOwgOyKbC4oIgqIiiEtJoqVJlluLZla3UrNreUtbtHv7XdtMK72ZdtszTU0zM0xxSQU3wNxBXACVXTYBWWae3x9eRw8MmwJnmPm8X6951XznOWe+c2ac+fI85zyPQgghQERERETtnoncCRARERFRy2BhR0RERGQgWNgRERERGQgWdkREREQGgoUdERERkYFgYUdERERkIFjYERERERkIFnZEREREBoKFHREREZGBYGFHREREZCBY2BEREREZCBZ2REbm66+/hkKhwMWLF+VORe+0xbG52+dYuHAhFApFi+2vOXQ918188vPzZXl+fXT48GFERETA2toaCoUCR48elTslMiIs7IgacfPH5ObNwsIC3bt3x8yZM5GTk9PizxcfH4+FCxeiqKioxfdNdJM+f870ObfGVFdXY/z48bh69SqWLFmC7777Dj4+PnKnRUaEhR1RE/3zn//Ed999h2XLliEiIgKfffYZwsPDUV5e3qLPEx8fj7fffrvVftSeeOIJVFRU8MdGh/Z4bO405zv5nLXV8akvt/bw/pw7dw7p6el45ZVX8Oyzz+Lxxx+Hg4OD3GmRETGVOwGi9mLUqFHo168fAODpp5+Gk5MTPvroI/zyyy+YPHmyzNk1rqysDNbW1lAqlVAqlS2+X31zJ3m19LFpC22Rc2t9dppL7udvitzcXABAhw4d5E2EjBZ77Iju0L333gsAuHDhgjaWnJyMUaNGwc7ODjY2Nhg+fDgOHDgg2a60tBQvvfQSfH19YW5uDldXV9x3331ISkrCwoULMXfuXABA586dtcO/t59TdPnyZTz11FNwc3ODubk5evXqhS+//FLyHDfPezp16hQeffRRODg4IDIyEkD95yk1JfeG9qvLzfapqal4/PHHYW9vDxcXF7z55psQQiAzMxNjx46FnZ0d3N3dsXjxYsn26enpeOGFF9CjRw9YWlrCyckJ48ePr5N7Y3nt3r0b/fr1g4WFBbp27YrPP/+8zrlquo7NzTZpaWl48skn0aFDB9jb22PatGl1emqbmmtz7Nu3D/3795fkXZuu97Ohz9jN11Xf5+xOPjsAkJ+fjwkTJsDOzg5OTk6YPXs2rl+/rn38ySefhK+vb53tar8PDeXWEp/dpryX9WnseZ588kkMHToUADB+/HgoFAoMGzas0f2uXLkSffv2hZWVleS0D4VCgS5dujQpN6Kb2GNHdIfOnTsHAHBycgIAnDx5EoMHD4adnR3+8Y9/wMzMDJ9//jmGDRuGPXv2ICwsDADw3HPPYf369Zg5cyYCAgJQUFCAffv24fTp0xg3bhxSU1Px448/YsmSJXB2dgYAuLi4AABycnIwcOBAKBQKzJw5Ey4uLvj9998xffp0lJSU4KWXXpLkOH78ePj5+eHf//43hBD1vpam5t7c/d40ceJE9OzZE++++y5+++03vPPOO3B0dMTnn3+Oe++9F++99x5++OEHvPLKK+jfvz+GDBkC4MZJ6PHx8Zg0aRI8PT1x8eJFfPbZZxg2bBhOnToFKyurRvNKTk7GyJEj0bFjR7z99ttQq9X45z//qT2mTTFhwgR07twZixYtQlJSEr744gu4urrivffe07Zpbq6NOX78OEaMGAEXFxcsXLgQNTU1WLBgAdzc3BrdtqHPWN++fRv9nAHNf48nTJgAX19fLFq0CAcOHMAnn3yCwsJCfPvtt8163U3J7XbN/ew25b280+f529/+hk6dOuHf//43XnzxRfTv37/R9+vvf/87li5dihEjRmDatGm4dOkSlixZgurqaowePRqhoaHNOHpEAAQRNeirr74SAMSOHTtEXl6eyMzMFGvWrBFOTk7C0tJSXLp0SQghRExMjFCpVOLcuXPaba9cuSJsbW3FkCFDtDF7e3sxY8aMep/vgw8+EADEhQsX6jw2ffp00bFjR5Gfny+JT5o0Sdjb24vy8nIhhBALFiwQAMTkyZPrfT2377+puTe0X11utn/22We1sZqaGuHp6SkUCoV49913tfHCwkJhaWkppk6dqo3dfD23S0hIEADEt99+26S8xowZI6ysrMTly5e1sbNnzwpTU1NR+yuw9rG5ud+nnnpK0u6hhx4STk5OklhTc9V1/HWJiYkRFhYWIj09XRs7deqUUCqVkrx17a+xz5gQ9X/OmvvZudn+wQcflLR94YUXBADx119/CSGEmDp1qvDx8amzz5vbNyW3lvjsNuW91KWpz7Nr1y4BQKxbt67Rff75558CgHj++ecl8bffflsAEIcOHWp0H0S1cSiWqImioqLg4uICLy8vTJo0CTY2Nti4cSM6deoEtVqNP/74AzExMZKhk44dO+LRRx/Fvn37UFJSAuDGuTcHDx7ElStXmvX8Qghs2LABY8aMgRAC+fn52lt0dDSKi4u1Q203Pffcc43utzm5N2e/t3v66ae1/69UKtGvXz8IITB9+nRtvEOHDujRowfOnz+vjVlaWmr/v7q6GgUFBejWrRs6dOhQ57XqykutVmPHjh2IiYmBh4eHNt6tWzeMGjWqyfnX3u/gwYNRUFAgOS7NzbUharUa27ZtQ0xMDLy9vbXxnj17Ijo6utHt7/QzdrvmvsczZsyQ3J81axYAYOvWrXecQ2Na4rOr671siedpiiVLlsDR0REffPCBJH5zODc1NbXZ+yRiYUfURMuXL8f27duxa9cunDp1CufPn9f+yObl5aG8vBw9evSos13Pnj2h0WiQmZkJAHj//fdx4sQJeHl5YcCAAVi4cKGkmKlPXl4eioqKsHLlSri4uEhu06ZNA3DrxO2bOnfu3KT9NjX35uz3drcXJwBgb28PCwsL7TDb7fHCwkLt/YqKCrz11lvw8vKCubk5nJ2d4eLigqKiIhQXF9d5ntp55ebmoqKiAt26davTVlesqfnfvMrxbnJtSF5eHioqKuDn51fnMV3vU213+hm7XXPf49q5du3aFSYmJq0659ydfHab8l62xPM0pqamBtu3b8eoUaPqXORTVVUFALCzs2vWPokAnmNH1GQDBgzQXhV7NyZMmIDBgwdj48aN+OOPP/DBBx/gvffew88//9xgL5JGowEAPP7445g6darONr1795bcv70XqSU1d7+6rmSs7+pGcdv5XLNmzcJXX32Fl156CeHh4bC3t4dCocCkSZO0x+Nu8mqq1si1Nd3pZ+x2d3ssa1+YUvv+TWq1+q6ep7ma8l62hYsXL+LatWsIDAys81hiYiKAG0UjUXOxsCNqAS4uLrCyskJKSkqdx86cOQMTExN4eXlpYx07dsQLL7yAF154Abm5uejbty/+7//+D6NGjar3B9DFxQW2trZQq9WIioqSLfe2tH79ekydOlVytez169ebPPeaq6srLCwskJaWVucxXbG7cbe53s7FxQWWlpY4e/Zsncd0vU+6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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"posterior_sigma.plot()\n",
"\n",
"decorate(xlabel='$\\sigma$, standard deviation of $\\epsilon$',\n",
" ylabel='PDF',\n",
" title='Posterior marginal distribution of $\\sigma$')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The most likely values for `sigma` are near 26 inches, which is consistent with our estimate based on the standard deviation of the data.\n",
"\n",
"However, to say whether snowfall is increasing or decreasing, we don't really care about `sigma`. It is a \"nuisance parameter\", so-called because we have to estimate it as part of the model, but we don't need it to answer the questions we are interested in.\n",
"\n",
"Nevertheless, it is good to check the marginal distributions to make sure \n",
"\n",
"* The location is consistent with our expectations, and \n",
"\n",
"* The posterior probabilities are near 0 at the extremes of the range, which indicates that the prior distribution covers all parameters with non-negligible probability.\n",
"\n",
"In this example, the posterior distribution of `sigma` looks fine."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the posterior distribution of `inter`:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:24.912873Z",
"iopub.status.busy": "2021-04-16T19:39:24.909890Z",
"iopub.status.idle": "2021-04-16T19:39:25.019756Z",
"shell.execute_reply": "2021-04-16T19:39:25.019133Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1sklEQVR4nO3deXwU9f0/8NdnZnOHBMhJIOQggXBEIncADUokKip4FKRaENF+xaNa1FasitQqtYpXUalWEVv5oVjFC0FAUeQ03GdIgBCuJATITY6d+fz+iFmY7IYcJJndzev5eOSh+57PzL4nu5t9M/M5hJRSgoiIiIhcnmJ2AkRERETUMljYEREREbkJFnZEREREboKFHREREZGbYGFHRERE5CZY2BERERG5CRZ2RERERG6ChR0RERGRm2BhR0REROQmWNgRtbEPPvgAQghkZ2ebnYrTEULg2WefbdXnGDVqFEaNGtXs/evm2Jav51133YXo6Gjb4+zsbAgh8PLLL7f6cwPAs88+CyFEmzxXc1mtVvzpT39CZGQkFEXB+PHj6217qe8FImfEwo6cXu0XZ+2Pt7c3evbsiQcffBB5eXkt/nzl5eV49tlnsWbNmhY/NhHg3O8xZ86tMd5//3289NJLuO2227Bw4UL88Y9/bJXnWbRoEV577bVWObZZli1b1ur/sKI2IImc3IIFCyQA+de//lX+5z//ke+++66cMmWKVBRFxsTEyLKyshZ9vlOnTkkActasWS163FpWq1WeO3dO6rreKsd3ZefOnZPV1dWt+hwpKSkyJSWl2fvXfW805/Vs7nusqqpKVlRU2B4fPnxYApAvvfRSk47T3Nyqq6vluXPnWuy5WsPEiRNl165dG9W2srJSVlZWNut5xo4dK6Oiopq1r7N64IEHJMsC12cxsaYkapLrrrsOgwYNAgDcc889CAoKwiuvvIIvvvgCkyZNMjm7hpWVlcHPzw+qqkJV1RY7bnl5OXx9fVvseC2loqICnp6eUJTG3xjw9vZuxYxaR0u/no7Uvnc8PDxa9XkaYrFYYLE499dGfn4+Onbs2Ki2np6erZtME+m6jqqqKpf8HJDz4K1YcllXX301AODw4cMAavrWPPfcc+jRowe8vLwQHR2NJ598EpWVlYb90tPTkZaWhuDgYPj4+CAmJgZ33303gJo+SyEhIQCA2bNn227/Xnh7Yv/+/bjtttvQuXNneHt7Y9CgQfjyyy8Nz1F7+/jHH3/E/fffj9DQUHTr1s2wrW6frLfeegt9+/aFl5cXIiIi8MADD6CwsNDQZtSoUejXrx+2bNmCK6+8Er6+vnjyySfr/R3ddddd8Pf3R05ODm644Qb4+/uja9euePPNNwEAu3btwtVXXw0/Pz9ERUVh0aJFhv3PnDmDxx57DImJifD390dAQACuu+467Nixw9BuzZo1EEJg8eLFeOqpp9C1a1f4+vqiuLgYALBkyRL06dMH3t7e6NevHz7//HO7/mKAff+12j5dWVlZuOuuu9CxY0cEBgZi6tSpKC8vN+y7YMECXH311QgNDYWXlxf69OmDt99+u97fTUMqKyvxxz/+ESEhIejQoQNuuukmHDt2zK6do9fzUt5jta/ZwYMHcf3116NDhw644447bNvq/s5qvfrqq4iKioKPjw9SUlKwe/duw/b6+pNdeMyGcnPUx66xn7vo6GjccMMN+PnnnzFkyBB4e3sjNjYWH374ocPzqausrAyPPvooIiMj4eXlhV69euHll1+GlNKWuxACP/zwA/bs2WPL/WK3lOv+Tmrfx5988gmef/55dOvWDd7e3hg9ejSysrIM+33zzTc4cuSI7XkufF0qKysxa9YsxMXFwcvLC5GRkfjTn/5k9zsRQuDBBx/ERx99ZPvsL1++HABw/PhxTJs2DREREfDy8kJMTAymT5+Oqqoq2/6FhYV45JFHbL+TuLg4vPjii9B13dbmwn6YF3uP3HXXXba/Cxd2fSHX49z/9CK6iIMHDwIAgoKCANRcxVu4cCFuu+02PProo9i0aRPmzJmDffv24fPPPwdQ86/5MWPGICQkBE888QQ6duyI7OxsfPbZZwCAkJAQvP3225g+fTpuvvlm3HLLLQCAyy67DACwZ88ejBgxAl27dsUTTzwBPz8/fPLJJxg/fjz+97//4eabbzbkeP/99yMkJATPPPMMysrK6j2XZ599FrNnz0ZqaiqmT5+OjIwMvP322/jll1+wbt06w5Wa06dP47rrrsPtt9+OO++8E2FhYRf9PWmahuuuuw5XXnkl/vGPf+Cjjz7Cgw8+CD8/P/zlL3/BHXfcgVtuuQXz58/H5MmTkZycjJiYGADAoUOHsHTpUvzmN79BTEwM8vLy8K9//QspKSnYu3cvIiIiDM/13HPPwdPTE4899hgqKyvh6emJb775BhMnTkRiYiLmzJmDs2fPYtq0aejatevFX+ALTJgwATExMZgzZw62bt2Kf//73wgNDcWLL75oa/P222+jb9++uOmmm2CxWPDVV1/h/vvvh67reOCBBxr9XLXuuece/Pe//8Vvf/tbDB8+HN9//z3Gjh3b4H6X+h4DaoqltLQ0jBw5Ei+//HKDV2Q//PBDlJSU4IEHHkBFRQVef/11XH311di1a1eD748LNSa3uhrzuauVlZWF2267DdOmTcOUKVPw/vvv46677sLAgQPRt2/fep9DSombbroJP/zwA6ZNm4akpCSsWLECjz/+OI4fP45XX30VISEh+M9//oPnn38epaWlmDNnDgCgd+/ejT7/Wn//+9+hKAoee+wxFBUV4R//+AfuuOMObNq0CQDwl7/8BUVFRTh27BheffVVAIC/vz+AmqtuN910E37++Wf8/ve/R+/evbFr1y68+uqrOHDgAJYuXWp4ru+//x6ffPIJHnzwQQQHByM6OhonTpzAkCFDUFhYiN///vdISEjA8ePH8emnn6K8vByenp4oLy9HSkoKjh8/jv/7v/9D9+7dsX79esycORMnT5606//X0Hvk//7v/3DixAmsXLkS//nPf5r8OyMnYva9YKKG1PaxW7VqlTx16pQ8evSoXLx4sQwKCpI+Pj7y2LFjcvv27RKAvOeeewz7PvbYYxKA/P7776WUUn7++ecSgPzll1/qfb6L9TEaPXq0TExMNPRz0nVdDh8+XMbHx9vlPHLkSGm1Wh2ez+HDh6WUUubn50tPT085ZswYqWmard28efMkAPn+++/bYikpKRKAnD9/fsO/OCnllClTJAD5wgsv2GJnz56VPj4+UgghFy9ebIvv37/f7rwrKioMOUlZ06/Ly8tL/vWvf7XFfvjhBwlAxsbGyvLyckP7xMRE2a1bN1lSUmKLrVmzRgKw66NU9/lnzZolAci7777b0O7mm2+WQUFBhljd55VSyrS0NBkbG2uINaaPXe376f777zfEf/vb39rlWPf1vNT3WO1r9sQTTzjcduHvrLaPXe3noNamTZskAPnHP/6xwfOue8yL5Vb7etRq7OdOSimjoqIkAPnTTz/ZYvn5+dLLy0s++uijds91oaVLl0oA8m9/+5shftttt0khhMzKyjKcZ9++fS96vAvbXvg7qX0f9+7d29D37vXXX5cA5K5du2yx+vrY/ec//5GKosi1a9ca4vPnz5cA5Lp162wxAFJRFLlnzx5D28mTJ0tFURy+h2r7cj733HPSz89PHjhwwLD9iSeekKqqypycHCll094j7GPnHngrllxGamoqQkJCEBkZidtvvx3+/v74/PPP0bVrVyxbtgwAMGPGDMM+jz76KADgm2++AQBb35uvv/4a1dXVTXr+M2fO4Pvvv8eECRNQUlKCgoICFBQU4PTp00hLS0NmZiaOHz9u2Ofee+9tsP/VqlWrUFVVhUceecTQH+3ee+9FQECALfdaXl5emDp1apNyv+eee2z/37FjR/Tq1Qt+fn6YMGGCLd6rVy907NgRhw4dMjxXbU6apuH06dPw9/dHr169sHXrVrvnmTJlCnx8fGyPT5w4gV27dmHy5Mm2KxoAkJKSgsTExEbnf9999xkeX3HFFTh9+rTtVi8Aw/MWFRWhoKAAKSkpOHToEIqKihr9XABs76c//OEPhvgjjzzS4L6X8h670PTp0xvddvz48YYroEOGDMHQoUNt59FaGvu5q9WnTx9cccUVtschISHo1auX4T1X3/Ooqmr3ejz66KOQUuLbb79t9jk4MnXqVEP/u9qcG8oTqOl20Lt3byQkJNj+RhQUFNi6jvzwww+G9ikpKejTp4/tsa7rWLp0KW688UZbn+IL1d4eXbJkCa644gp06tTJ8DypqanQNA0//fSTYT+z3iPU9ngrllzGm2++iZ49e8JisSAsLAy9evWyFR1HjhyBoiiIi4sz7BMeHo6OHTviyJEjAGr+iN56662YPXs2Xn31VYwaNQrjx4/Hb3/7W3h5eV30+bOysiClxNNPP42nn37aYZv8/HzDH8/aW5oXU5tbr169DHFPT0/Exsbattfq2rVrkzp9e3t72/pN1QoMDES3bt3s+tAEBgbi7Nmztse6ruP111/HW2+9hcOHD0PTNNu22lvgF6p7vrW5131damOOikNHunfvbnjcqVMnAMDZs2cREBAAAFi3bh1mzZqFDRs22PW/KyoqQmBgYKOeqzZvRVHQo0cPQ7zua+TIpbzHalksFlufzMaIj4+3i/Xs2ROffPJJo4/RHI393NWq+zoCNa/lhe+5+p4nIiICHTp0MMRrb7PWfZ5LdbH3W0MyMzOxb98+u89crfz8fMPjup+ZU6dOobi4GP369WvweXbu3Nno5zHrPUJtj4UduYwhQ4Y4/BfshRrq7CuEwKeffoqNGzfiq6++wooVK3D33Xdj7ty52Lhxo+GqUl21HZIfe+wxpKWlOWxT9wvuwqtILaWpx6zvimF9cflrZ3QAeOGFF/D000/j7rvvxnPPPYfOnTtDURQ88sgjhg7azc2tsRrK9eDBgxg9ejQSEhLwyiuvIDIyEp6enli2bBleffVVh7m2lkt5j9W68EppS+Z14Wtb68Ji/VKO3RiNec85g0vJU9d1JCYm4pVXXnG4PTIy0vC4uZ8ZXddxzTXX4E9/+pPD7T179mzWccn1sbAjtxAVFQVd15GZmWnoLJ2Xl4fCwkJERUUZ2g8bNgzDhg3D888/j0WLFuGOO+7A4sWLcc8999T7JRUbGwsA8PDwQGpqaovmDgAZGRm25wCAqqoqHD58uEWfq6k+/fRTXHXVVXjvvfcM8cLCQgQHBze4f+25XTiisJajWHN99dVXqKysxJdffmm42lL3tldj1b6fDh48aLhKl5GR0ehjNOc91lyZmZl2sQMHDhhGanbq1MnhrcS6V7uakltTP3fNFRUVhVWrVqGkpMRw1W7//v227W2tvt9Tjx49sGPHDowePbpZr3NISAgCAgLsRjU7ep7S0tJG/31ozHuEo2DdA/vYkVu4/vrrAcBuJFjtv5prRzOePXvW7l/dSUlJAGCbiqB2BGLdqUZCQ0MxatQo/Otf/8LJkyftcjh16lSzck9NTYWnpyfeeOMNQ27vvfceioqKGjUSs7Woqmr3+1qyZIldX8L6REREoF+/fvjwww9RWlpqi//444/YtWtXi+YJGK+oFBUVYcGCBc063nXXXQcAeOONNwzxxqw0cCnvseZaunSp4TXZvHkzNm3aZDsPoKYQ2L9/v+F9umPHDqxbt85wrKbk1tjP3aW6/vrroWka5s2bZ4i/+uqrEEIYzrOt+Pn5Oey7OWHCBBw/fhzvvvuu3bZz585ddHQ8ANsyaF999RXS09Pttte+tyZMmIANGzZgxYoVdm0KCwthtVoNsca8R/z8/Gz7k+viFTtyC/3798eUKVPwzjvvoLCwECkpKdi8eTMWLlyI8ePH46qrrgIALFy4EG+99RZuvvlm9OjRAyUlJXj33XcREBBg+5Ly8fFBnz598PHHH6Nnz57o3Lkz+vXrh379+uHNN9/EyJEjkZiYiHvvvRexsbHIy8vDhg0bcOzYMbv53RojJCQEM2fOxOzZs3HttdfipptuQkZGBt566y0MHjwYd955Z4v+rprihhtuwF//+ldMnToVw4cPx65du/DRRx8Zriw25IUXXsC4ceMwYsQITJ06FWfPnsW8efPQr18/Q7F3KcaMGQNPT0/ceOON+L//+z+Ulpbi3XffRWhoqMMivCFJSUmYNGkS3nrrLRQVFWH48OFYvXp1o64yXup7rDni4uIwcuRITJ8+HZWVlXjttdcQFBRkuE13991345VXXkFaWhqmTZuG/Px8zJ8/H3379rUbhNLY3Br7ubtUN954I6666ir85S9/QXZ2Nvr374/vvvsOX3zxBR555BG7vpBtYeDAgfj4448xY8YMDB48GP7+/rjxxhvxu9/9Dp988gnuu+8+/PDDDxgxYgQ0TcP+/fvxySefYMWKFQ12KXnhhRfw3XffISUlxTZlysmTJ7FkyRL8/PPP6NixIx5//HF8+eWXuOGGG2xTxpSVlWHXrl349NNPkZ2dbbiq3pj3yMCBAwHUDBpKS0uDqqq4/fbbW+cXSK3HlLG4RE1QO53ExaaPkLJmuaPZs2fLmJgY6eHhISMjI+XMmTMNU5Ns3bpVTpo0SXbv3l16eXnJ0NBQecMNN8j09HTDsdavXy8HDhwoPT097aZ+OHjwoJw8ebIMDw+XHh4esmvXrvKGG26Qn376aaNyrjs9Rq158+bJhIQE6eHhIcPCwuT06dPl2bNnDW2aMpWDlDVTWfj5+dnF6ztOVFSUHDt2rO1xRUWFfPTRR2WXLl2kj4+PHDFihNywYUO900QsWbLEYR6LFy+WCQkJ0svLS/br109++eWX8tZbb5UJCQmGdnV/17XTa5w6dcrQztHv8Msvv5SXXXaZ9Pb2ltHR0fLFF1+U77//vl27xi4pdu7cOfmHP/xBBgUFST8/P3njjTfKo0ePNjjdyaW+x+p7zWq3OZru5KWXXpJz586VkZGR0svLS15xxRVyx44ddvv/97//lbGxsdLT01MmJSXJFStW2B3zYrnVne5EysZ97qS0f2/VauzrUVJSIv/4xz/KiIgI6eHhIePj4+VLL71kt5RbS0x3Uvd9XPt7XrBggS1WWloqf/vb38qOHTvaTd1TVVUlX3zxRdm3b1/p5eUlO3XqJAcOHChnz54ti4qKbO0AyAceeMBhbkeOHJGTJ0+WISEh0svLS8bGxsoHHnjAMA1LSUmJnDlzpoyLi5Oenp4yODhYDh8+XL788suyqqrKkHtj3iNWq1U+9NBDMiQkRAohOPWJixJSOlmvVSJqF5KSkhASEoKVK1eanQqR28rOzkZMTAxeeuklPPbYY2anQ22AfeyIqFVVV1fb9fdZs2YNduzY4XCJKyIiaj72sSOiVnX8+HGkpqbizjvvREREBPbv34/58+cjPDzcbuJhIiK6NCzsiKhVderUCQMHDsS///1vnDp1Cn5+fhg7diz+/ve/O5zkmIiImo997IiIiIjcBPvYEREREbkJFnZEREREboJ97BzQdR0nTpxAhw4duMQKERERmUpKiZKSEkRERDS4jjQLOwdOnDhht1AzERERkZmOHj2Kbt26XbQNCzsHaheZPnr0KAICAkzOhoiIiNqz4uJiREZG2uqTi2Fh50Dt7deAgAAWdkREROQUGtM9jIMniIiIiNwECzsiIiIiN8HCjoiIiMhNsLAjIiIichMs7IiIiIjcBAs7IiIiIjfBwo6IiIjITbCwIyIiInITLOyIiIiI3AQLOyIiIiI3YXph9+abbyI6Ohre3t4YOnQoNm/efNH2S5YsQUJCAry9vZGYmIhly5bZtdm3bx9uuukmBAYGws/PD4MHD0ZOTk5rnQIRERGRUzC1sPv4448xY8YMzJo1C1u3bkX//v2RlpaG/Px8h+3Xr1+PSZMmYdq0adi2bRvGjx+P8ePHY/fu3bY2Bw8exMiRI5GQkIA1a9Zg586dePrpp+Ht7d1Wp0VERERkCiGllGY9+dChQzF48GDMmzcPAKDrOiIjI/HQQw/hiSeesGs/ceJElJWV4euvv7bFhg0bhqSkJMyfPx8AcPvtt8PDwwP/+c9/mp1XcXExAgMDUVRUhICAgGYfh4ick5QSKDsDWX4Wwqcj4BsIoXqYnRYRkUNNqUssbZSTnaqqKmzZsgUzZ860xRRFQWpqKjZs2OBwnw0bNmDGjBmGWFpaGpYuXQqgpjD85ptv8Kc//QlpaWnYtm0bYmJiMHPmTIwfP761ToWIXIh+6hC0rZ9Bz8s0xIV3B8C3E4RvJwi/mv/Ct6Px/y2eJmVNRNQ4phV2BQUF0DQNYWFhhnhYWBj279/vcJ/c3FyH7XNzcwEA+fn5KC0txd///nf87W9/w4svvojly5fjlltuwQ8//ICUlBSHx62srERlZaXtcXFx8aWcGhE5Ib3wJLRtS6Ef3e5wu6woASpKIM/U3x9XeHeA0n0A1MvHQXj5tVKmRETNZ1ph1xp0XQcAjBs3Dn/84x8BAElJSVi/fj3mz59fb2E3Z84czJ49u83yJKK2I8vOQNvxNbSs9QAureeJrCiBduBH6Md3w3LlPVBCYlsmSSKiFmLa4Ing4GCoqoq8vDxDPC8vD+Hh4Q73CQ8Pv2j74OBgWCwW9OnTx9Cmd+/eFx0VO3PmTBQVFdl+jh492pxTIiInIitLYU3/FFWfPw0tax0cFnWieX8CZdlpVC9/Cdqe72BiN2UiIjumXbHz9PTEwIEDsXr1alv/N13XsXr1ajz44IMO90lOTsbq1avxyCOP2GIrV65EcnKy7ZiDBw9GRkaGYb8DBw4gKiqq3ly8vLzg5eV1aSdERE5BWqug71sNbfcKyOpzDtsITz+ol10PpeeVgG6FLDsLlJ+FLC88//9lZyHLf/3/6goHT6TDuuV/UHIPwDLyLggv/1Y+MyKihpl6K3bGjBmYMmUKBg0ahCFDhuC1115DWVkZpk6dCgCYPHkyunbtijlz5gAAHn74YaSkpGDu3LkYO3YsFi9ejPT0dLzzzju2Yz7++OOYOHEirrzySlx11VVYvnw5vvrqK6xZs8aMUySiNiI1K/SD66Ht+BryXJHjRqon1D6pUPteA+Hp+2vQs+b/O3Wt/9hV5yBLT0Hb/DH0/CzDNv34LlR/9beaW7OhcS10NkREzWPqdCcAMG/ePLz00kvIzc1FUlIS3njjDQwdOhQAMGrUKERHR+ODDz6wtV+yZAmeeuopZGdnIz4+Hv/4xz9w/fXXG475/vvvY86cOTh27Bh69eqF2bNnY9y4cY3OidOdELkW/dhOWH9ZAlnieA5MCAVqzyuhXnY9hE9gs59H6hq0HV9B27Ucdrd2hQJL0jgo/dIghGj2cxAR1dWUusT0ws4ZsbAjch1a5s+wbqh/3kolejAsSTdBBIS22HPqJ/bC+vP7NSNp6z5fRF9YRk6tmT6FiKgFsLC7RCzsiFyDfnw3qr9/E5C63TYlog/UATdD6dy9VZ5blhfCuvY96HkH7LYJn0BYrrwXSlh8qzw3EbUvLOwuEQs7Iuenn85B9YqXAWulIS6ComAZcAuULgmtnoPUdWg7v4G28xvYj7oVUJNugpp4HW/NEtElcYmVJ4iImkuWnob1+3/aFXVq3zSoA25us0JKKAosSTdCCYuHde2/69yaldC2fwGZdwCWK6bx1iwRtQnT5rEjImoOWVWO6tX/hDxnXCFGiRnSpkWd4bm7JMDjxqehhNtfJdRP7kP1d69CWqvaPC8ian9Y2BGRy5BaNaw/vA1ZdNIQV8J6wjJ8sqm3PIVPICypD0PtfyMAYx6y8Di0zYvNSYyI2hUWdkTkEqSUsK7/0G6wggjsAsuo+yBUD5MyuyAXRYGl/w3wGDPDbloVLWsdtIMbTMqMiNoLFnZE5BK07V9AP7zZEBM+AfAY/RCEl59JWTmmhPeEx5gZgMW4oo114yLohSfr2YuI6NKxsCMip6cd+Anarm+NQYsXLFc/BOEfZE5SDRCB4bAk/84Y1Kpg/fFf7G9HRK2GhR0ROTX92C5YNy4yBoUCj5TfQwlqnTnqWooaMxhq/BWGmCw6CW3T/zMpIyJydyzsiMhp6aePoPqnd1F3jjjL0N9C6drPnKSaSB08AaJTN0NMO7geWtZ6kzIiInfGwo6InFLNXHXz7OeqS7wOas8r6tnL+QiLJzyuvNe+v92m/8f+dkTU4ljYEZHTkZVljueqix0KNWmcSVk130X721VXOt6JiKgZWNgRkVORWjWsaxzMVRfeC5Zkc+equxT19rfbzP52RNRyWNgRkVPRNi6CnpdpiJ2fq861V0F03N9uA/vbEVGLYWFHRE5DP7kP2kFjkSN8AuEx+g8Qnr4mZdVyhMUTHim/d9DfbhH0whMmZUVE7oSFHRE5BalZYd38sTFo8YJl9IMQ/p3NSaoViIAwB/3tqmH98R32tyOiS8bCjoicgr7/e7t+dZZBt0Hp7Nxz1TWHGjMYas8UQ4z97YioJbCwIyLTyfKzsO742hATQVFQ4kaalFHrUwfdBtEp0hBjfzsiulQs7IjIdNb0/9WZr07AMnQShOK+f6Jq+tvdC2HxNsStmxZBP3vcpKyIyNW5719NInIJ+sn90LN/McTUuOFQgmNMyqjtiIAwqMPZ346IWg4LOyIyTc2AicWGmPD0hTrgFpMyantq9CD7/nbFudB2fWNSRkTkyljYEZFpHA2YUC8fB+Htb1JG5nDY327vasjSMyZlRESuioUdEZlClhfaD5jo3B1K/JUmZWSemvVk7wHEBX+SdSu07V+YlxQRuSQWdkRkCmv6p3UGTMDtB0xcjAgMh9rTWNRqhzZBP5NjUkZE5Ira519QIjKVnpvhYMDECCghsSZl5BzU/jfUGSUroW353LR8iMj1sLAjojYlNSusm4wT8QoPH6gDbjYpI+chvDtA6ZdmiOkn90I/sdekjIjI1bCwI6I2pWf8YD9gYsB4CO8OJmXkXNQ+qRA+gYaYdcv/IHXdpIyIyJWwsCOiNiPLC6FtrzNgolNkuxwwUR9h8YSaNM4Qk2ePQT+8yaSMiMiVsLAjojZj3fI/SGuFIdaeB0zUR+mRDBHYxRDTtn0Baa0yKSMichX8a0pEbULPPQD98GZDTO0xHEpoD5Mycl5CUWAZeKshJsvPQt/3vUkZEZGrYGFHRK2uZoUJBwMmBrafFSaaSnTtByW8lyGm7f4WsqLUpIyIyBWwsCOiVqdnrIEsPGGI1awwwQET9RFCQK171a66AtquZSZlRESugIUdEbWqmgETXxliolM3KD05YKIhSlAUlJghhpiWsQayON+kjIjI2bGwI6JWZd36WT0DJlSTMnItlqRxwIW/K12DlUuNEVE9WNgRUavR87OgHzJO06H2SIYSGmdSRq5HdAiGmnCVIaZnp0MvOGxSRkTkzFjYEVGrsbsF6+EDdQAHTDSVmngdhIePIaZt+R+klCZlRETOioUdEbUK/dQh6Ln7DTG1/w0QPgEmZeS6hJc/1MuuN8T0vEzIYztNyoiInBULOyJqFdqu5YbHwieAAyYugdJrFIRfZ0PMuvVzSF0zKSMickYs7Iioxelnj0E/tsMQU/tcA2HxNCkj1+dwqbGik9Cz1puUERE5IxZ2RNTi7K7Wefryal0LUGKHQnSKNMS0HV9CVlealBERORsWdkTUomRxPvTsdENM6T0awsPbpIzchxAClkF1Ji0+Vwxt70qTMiIiZ8PCjohalLZ7OYALRmtavKAmjDIrHbejdOkNJaKvIabt+Q7yXLFJGRGRM2FhR0QtRpadgXZooyGm9kqB8PI3KSP3VLPGrjgfsFZC2/FVve2JqP1gYUdELUbb8x1w4ShNxQK1T6p5CbkppVM3qD2SDTEt82fIsjMmZUREzoKFHRG1CFlRAi3zZ0NMjRsB4RNoUkbuTU26EVA9zgekDm3f9+YlREROgYUdEbUIbe8qQKs+HxAK1H5p5iXk5oRfZ6hxIwwx/cBayKpykzIiImfAwo6ILpmsKoeescYQU2OHQvgHmZNQO6H2Ho0L+9pJawX0A2vNS4iITMfCjogumbZ/DWR1xQURAbXftabl016IgFAo3ZMMMW3/95Ca1ZyEiMh0TlHYvfnmm4iOjoa3tzeGDh2KzZs3X7T9kiVLkJCQAG9vbyQmJmLZsmWG7XfddReEEIafa6/llwxRa5DVldD3rjLElKgBEIHhJmXUvqh9xxgey/JCu3kEiaj9ML2w+/jjjzFjxgzMmjULW7duRf/+/ZGWlob8/HyH7devX49JkyZh2rRp2LZtG8aPH4/x48dj9+7dhnbXXnstTp48afv5f//v/7XF6RC1O3rmWsiqMkNMTeQ/pNqKEhILJTTOENP2fAcpZT17EJE7M72we+WVV3Dvvfdi6tSp6NOnD+bPnw9fX1+8//77Dtu//vrruPbaa/H444+jd+/eeO655zBgwADMmzfP0M7Lywvh4eG2n06dOrXF6RC1K1Krrpni5AJK135QOnc3KaP2ye6qXeFxyJP7TMqGiMxkamFXVVWFLVu2IDX1/DxXiqIgNTUVGzZscLjPhg0bDO0BIC0tza79mjVrEBoail69emH69Ok4ffp0vXlUVlaiuLjY8ENEDdMPboQ8V2SIqYnXmZRN+yW6XQYREGaI1S24iah9MLWwKygogKZpCAsz/kEKCwtDbm6uw31yc3MbbH/ttdfiww8/xOrVq/Hiiy/ixx9/xHXXXQdN0+oeDgAwZ84cBAYG2n4iIyMdtiOi86Su/bp82HlKWLzdbUFqfUIIu4mg9ZP7oJ/JMSkjIjKL6bdiW8Ptt9+Om266CYmJiRg/fjy+/vpr/PLLL1izZo3D9jNnzkRRUZHt5+jRo22bMJEL0rPTIUsLDDE18XqTsiEldhiEdwdDTKszqIWI3J+phV1wcDBUVUVeXp4hnpeXh/BwxyPqwsPDm9QeAGJjYxEcHIysrCyH2728vBAQEGD4IaL6SSmh7frWEBNBURBdepuUEQmLJ5Reowwx/fAvXGaMqJ0xtbDz9PTEwIEDsXr1altM13WsXr0aycnJDvdJTk42tAeAlStX1tseAI4dO4bTp0+jS5cuLZM4UTsnj+6ALDppiFkSr4cQop49qC2ovUZxmTGids70W7EzZszAu+++i4ULF2Lfvn2YPn06ysrKMHXqVADA5MmTMXPmTFv7hx9+GMuXL8fcuXOxf/9+PPvss0hPT8eDDz4IACgtLcXjjz+OjRs3Ijs7G6tXr8a4ceMQFxeHtDQub0R0qaSUsO4yzh0pArtARPY3KSOqJbz9ofYYbohxmTGi9sVidgITJ07EqVOn8MwzzyA3NxdJSUlYvny5bYBETk4OFOV8/Tl8+HAsWrQITz31FJ588knEx8dj6dKl6NevHwBAVVXs3LkTCxcuRGFhISIiIjBmzBg899xz8PLyMuUcidyJPLkP8vQRQ0zl1TqnofZJhXbgJwA189hJawX0zJ/tpkQhIvckJGextFNcXIzAwEAUFRWxvx1RHdUrXoael2l7LPyD4TH+rxCKamJWdKHqNfOh52yzPRa+HeFx8/MQqun/lieiZmhKXWL6rVgich16fpahqAMAtd+1LOqcDJcZI2q/WNgRUaPZjYT17QilxzCTsqH6cJkxovaLhR0RNYosyoV+3Lgms9rnGogLR2GS0+AyY0TtEws7ImoULWON4bHw9IMSf4U5yVCDuMwYUfvEwo6IGiSrK6AfNK7HrPQcCeHBkebOqv5lxriyDpE7Y2FHRA3SD22ErK64ICKg9kwxLR9qHMfLjK00KRsiagss7IjooqSU0PavMcSUbpdB+AeZkxA1GpcZI2p/WNgR0UXJ3Ay75cPUhFHmJENNxmXGiNoXFnZEdFF2gyYCwiC69DYnGWoyLjNG1L6wsCOiesmyM9CP7jDE1F6juHyYi6kZRHH+NatdZoyI3A8LOyKql3bgJ0Dq5wMWL05I7IJEQCiU7kmGmLZvNaRmNSchImo1LOyIyCGpVdtd1VFjh0F4+pqUEV0KLjNG1D6wsCMih/QjWyErSgwxhYMmXJYSEgslpIchptfpP0lEro+FHRE5pO//wfBYCesJpWOESdlQS1DqTlhccBj6mRyTsiGi1sDCjojs6AXZ0AsOG2JKwlUmZUMtRel2GYRPoCGmZ/xkUjZE1BpY2BGRnbq36IRvJyiR/c1JhlqMUC1Q4kcaYtrhzZBV50zKiIhaGgs7IjKQlaXQDv9iiCk9r4RQVJMyopakxo8ExAV/+q2V0A9vMi8hImpRLOyIyEDPXAfoF0yDoag1xQC5BeHXGUq3ywwxLeNHSClNyoiIWhILOyKykboOLeNHQ0yJGgjhE2BSRtQa1F4phsey8ARk/kGTsiGilsTCjohs5PFdkGWnDTGVgybcjujSG6JDiCGmHfixntZE5EpY2BGRjbZ/jeGxCIqCCI4xJxlqNUIIqD2vNMT0I1vs5i0kItfDwo6IAACyKBf6yb2GmNorhevCuimlx3BAsZwP6Br0rPXmJURELYKFHREBALS6U5x4+kGJHmxOMtTqhLc/lOiBhph24CcOoiBycSzsiAiyuhL6wQ2GmBI/EsLiaVJG1Bbq3o6VpQWQJ/aYlA0RtQQWdkQE/dBGyOqKCyL2fbDI/YiQHhAduxpiGleiIHJpLOyI2jkpJbS668J2S4ToEGxSRtRWhBB2U5/ox3ZClp0xKSMiulQs7IjaOZl3ALLopCHGKU7aDyV2KGDxuiAioWX+bFo+RHRpWNgRtXN1r9aJgDCILr1NyobamvDwhho71BDTM3+G1Kz17EFEzoyFHVE7JsvOQD+6wxDjFCftj1J3JYpzRdCP7ainNRE5MxZ2RO2YdmAtIPXzAYsXlB7J5iVEplA6dYMS0sMQ0zmIgsglsbAjaqekVg09c60hpsYOhfD0NSkjMpNSdyWK3P2QRbkmZUNEzcXCjqid0o9ss1tCSuk1ypxkyHRK1AAITz9DTDvAq3ZEroaFHVE7pWcav7SVsHgonbrW05rcnbB4QokbbojpBzdAWqtMyoiImoOFHVE7JItyoedlGmJKz5R6WlN7YbcSRVU59Ox0k7IhouZgYUfUDtWdp0x4+UPpnmROMuQ0REAolC59DDGdt2OJXAoLO6J2RmrV9uvC9kiGUD1Myoicid1KFAWHoZ/JMSkbImoqFnZE7Yx+dAdkZakhpsaPNCkbcjaiWyKEbydDTM/40aRsiKipWNgRtTN6nduwSlg8RGC4SdmQsxGKCqVOoa8d2gxZVW5SRkTUFCzsiNoRWXIK+sl9hpgSx6t1ZKTGjwDEBV8PWhX0Q5vMS4iIGo2FHVE7omWtMzwWHj5QogaYlA05K+HbCUpkf0NMy/gRUkqTMiKixmJhR9ROSM0KvU5hp/QYBmHxNCkjcmZ2U58UnYTMzzIpGyJqLBZ2RO2EPL4b8lyxIabEX2FSNuTsRJfeEB1CDTGNgyiInB4LO6J2QquzLqwSHMOVJqheQgioveqsH5uzFbKitJ49iMgZsLAjagdk2Rnox/cYYrxaRw1ReiQDiuV8QNegH9poXkJE1CAWdkTtgJa1HsD5ju/C4g0lepB5CZFLEF7+doNrtMyfOYiCyImxsCNyc1LX7eeuix0C4eFlUkbkStQ6V3Zl0UnIUwdNyoaIGsLCjsjNyRN7IMvPGmK8DUuNJcLiITqEGGJ1/6FARM7DKQq7N998E9HR0fD29sbQoUOxefPmi7ZfsmQJEhIS4O3tjcTERCxbtqzetvfddx+EEHjttddaOGsi16DV+RIWnbtDCepuUjbkaoQQUOtMYq1lb+FKFEROyvTC7uOPP8aMGTMwa9YsbN26Ff3790daWhry8/Mdtl+/fj0mTZqEadOmYdu2bRg/fjzGjx+P3bt327X9/PPPsXHjRkRERLT2aRA5JVleCP3YTkNM7cmrddQ0Slyy/UoU2enmJURE9TK9sHvllVdw7733YurUqejTpw/mz58PX19fvP/++w7bv/7667j22mvx+OOPo3fv3njuuecwYMAAzJs3z9Du+PHjeOihh/DRRx/Bw8OjLU6FyOnoBzcAUj8fUD2hRA82LyFyScInEErkZYZY3SvBROQcTC3sqqqqsGXLFqSmptpiiqIgNTUVGzZscLjPhg0bDO0BIC0tzdBe13X87ne/w+OPP46+ffu2TvJETk5KaTd3nRozGMLTx6SMyJXVvR0rTx+BfibHpGyIqD6mFnYFBQXQNA1hYWGGeFhYGHJzcx3uk5ub22D7F198ERaLBX/4wx8alUdlZSWKi4sNP0SuTp7cB1l62hBT4kfW05ro4kREXwjfToaYnrmuntZEZBbTb8W2tC1btuD111/HBx98ACFEo/aZM2cOAgMDbT+RkZGtnCVR67MbNNGxK0RwjEnZkKsTigIlbrghph/aBGmtMikjInLE1MIuODgYqqoiLy/PEM/Ly0N4eLjDfcLDwy/afu3atcjPz0f37t1hsVhgsVhw5MgRPProo4iOjnZ4zJkzZ6KoqMj2c/To0Us/OSITyYoS6Ee3G2Jq/MhG/2OHyBE1bgSA8+8hWX0O+pGt5iVERHZMLew8PT0xcOBArF692hbTdR2rV69GcnKyw32Sk5MN7QFg5cqVtva/+93vsHPnTmzfvt32ExERgccffxwrVqxweEwvLy8EBAQYfohcmX5wA6Br5wOqB5TYoeYlRG5B+AdBiehtiOlZHERB5EwsDTdpXTNmzMCUKVMwaNAgDBkyBK+99hrKysowdepUAMDkyZPRtWtXzJkzBwDw8MMPIyUlBXPnzsXYsWOxePFipKen45133gEABAUFISgoyPAcHh4eCA8PR69evdr25IhMUDNoos5KE1EDILz8TMqI3IkSPxL6ib22x3peJmRRLkSg47ssRNS2TC/sJk6ciFOnTuGZZ55Bbm4ukpKSsHz5ctsAiZycHCjK+QuLw4cPx6JFi/DUU0/hySefRHx8PJYuXYp+/fqZdQpETkXmZUIWG7sr1F0Wiqi5lG79Ibw7QFaU2GJa1jpYBt5qYlZEVEtIruZsp7i4GIGBgSgqKuJtWXI51T+/D/3QJttjERAOj3HPsn8dtRhr+qfQ9q60PRbeHeBx698hVNOvFRC5pabUJW43KpaoPZOVpdCztxhiavwIFnXUotQ60+bIihK7FU6IyBws7IjciH5oM6BbzwcUFUoPxwORiJpLBIZDCY0zxHSuREHkFFjYEbkJRytNKN0vh/DuYFJG5M7qTnatn9hrNyE2EbU9FnZEbkIWHIYsPGGI1b1lRtRSlKiBEB7eF0QktKz1puVDRDVY2BG5ibq3woR/MER4gknZkLsTFk8oMca5EfWsdZC6blJGRASwsCNyC7LqHLTDvxhiXGmCWpvSs84givKzkCf31tOaiNoCCzsiN6Bn/wJoF6zZKRQOmqBWp3TuDtG5uyFWd3JsImpbLOyI3IDdShPdLoPw7WhOMtSuqPEjDI/1ozsgzxWblA0RsbAjcnH6maOQp48YYhw0QW1FiRkCqB7nA1KvWauYiEzBwo7IxemZ6wyPhW9HiIi+JmVD7Y3w9IUaPcgQ0zJ/Bhc1IjIHCzsiFyatVdAPbTTElLgREAo/2tR2lLg6gyhK8iHzMk3Khqh9419/IhemH9kKWX3ugoiAGjei3vZErUGE9oAICDfEtCwOoiAyAws7Ihem1/nyVLr0hvAPMikbaq+EEPaDKI5shawsMykjovaLhR2Ri5JFudDr3O5S4nm1jsyh9EgGFPV8QKuGfnizeQkRtVMs7IhclHbQuHyT8PKHEtnfpGyovRPeHaBEJhli2oG1HERB1MZY2BG5IKlZoddZl1PpkQxx4bQTRG2s7jQ7svC43VQ8RNS6WNgRuSD9+C7IihJDTOGgCTKZ6NIbws/Yx7PuGsZE1LpY2BG5oLpflkpIDygdu5iUDVENIQSUuOGGmHZ4M2R1pUkZEbU/LOyIXIwsOwP9+B5DTOFKE+Qk1LjhAMT5gLUSena6afkQtTcs7IhcjJa1HsD5DunCwxtK1EDzEiK6gPDrDKVrP0NMz1xrUjZE7Q8LOyIXInUdepZxCTElZgiEh5dJGRHZU3teYXisFxyGfvaYSdkQtS8s7IhciMzdD1l2xhDjbVhyNqJrPwifQEOMgyiI2gYLOyIXotX5chSdIqEERZmUDZFjQlHtBlHoBzdCWqtMyoio/WBhR+QiZEUJ9KPbDTG1J6/WkXOqu2axrD4H/chWk7Ihaj9Y2BG5CP3gBkDXzgdUDygxQ8xLiOgiRIcQKF16G2J11zYmopbHwo7IBUgpoWXWGTQRNQDC09ekjIgaVrf/p56XCVmUa1I2RO0DCzsiFyBPHYQsNn4hqvFX1NOayDkokf0hvPwNsbr9RImoZbGwI3IBdUcUioAwiNA4k7IhahyhekDpkWyI6Yc2QmpWkzIicn8s7IicnKwqh1Zn5n41bgSEEPXsQeQ81Dq3Yx0NAiKilsPCjsjJ6Yd/AbTq8wGh2E0lQeSsRGA4lDpXlzmnHVHrYWFH5OTq9klSIvtDeHcwKRuiplPq9AfVT+6DLCkwKRsi98bCjsiJ6adzIM/kGGJ1b20ROTslagCEh48hpnHqE6JWwcKOyInZDZrw6wzRpY9J2RA1j7B4QokdZojpWeshL5yXkYhaBAs7IiclrVXQD282xJS4ERAKP7bkepQ6q6TIc0WQx3eblA2R++I3BJGT0o9sgaw+d0FEQO3BQRPkmpRO3aAERxti2oG15iRD5MZY2BE5qbq3YZWIPhD+nU3KhujS2Q2iOL4bsuyMSdkQuScWdkROSBblQs/PMsTqLs9E5GqU6MGAxeuCiISWtd60fIjcEQs7IidUd4oT4d0BSrfLTMqGqGUIDy+oMYMNMT1rPaSUJmVE5H5Y2BE5GWmtgl7nKobSIxlCtZiUEVHLqXs7Vpadhjyx16RsiNwPCzsiJ6PnbIOsKjPEOHcduQsRFAXRqZshpmVyEAVRS2FhR+Rk9AM/GR4rXXpDBISZlA1RyxJC2P1DRT+6A/JcsUkZEbmXJhV233//PaxWa2vlQtTu6YUn7AdN9LzSpGyIWocSOxRQPc4HpA794AbzEiJyI00q7K655hqcOXN+aPqwYcNw/PjxFk+KqL2qe7VO+ARw0AS5HeHpCzVqoCGmZf7MQRRELaBJhV3dD92ePXtQWVnZogkRtVeyuhL6wY2GmBI3goMmyC3ZDaIoyYfMO2BSNkTug33siJyEnp1uv9JEnS8/InchQntABHYxxOpO80NETdekwk4IASFEvY+JqPm0Az8aHitd+0H4B5mUDVHrqhlEMcIQ049shawsNSkjIvfQpHs8UkqMHj0aFkvNbuXl5bjxxhvh6elpaLd169aWy5CoHdBP50CePmKIqT15tY7cmxKbDGz9HNC1moBuhX5oM9TeV5ubGJELa1JhN2vWLMPjcePGtWgyRO2V3aAJ304QXRNNyoaobQhvfyjdL4eenW6LaZlroSRcxbtBRM10SYVdS3nzzTfx0ksvITc3F/3798c///lPDBkypN72S5YswdNPP43s7GzEx8fjxRdfxPXXX2/b/uyzz2Lx4sU4evQoPD09MXDgQDz//PMYOnRoq+RPdClk1TlohzcbYkr8SAiFXWDJ/anxIw2FnSw8AXnqIERonIlZEbmuZn9zFBQUID09HVu2bMHp06ebncDHH3+MGTNmYNasWdi6dSv69++PtLQ05OfnO2y/fv16TJo0CdOmTcO2bdswfvx4jB8/Hrt377a16dmzJ+bNm4ddu3bh559/RnR0NMaMGYNTp041O0+i1qIf3gRYLxhdLhSuNEHthghPgOgQYohpGT/W05qIGiJkEycO2rNnD6ZPn45169YZ4ikpKXj77bfRq1evJiUwdOhQDB48GPPmzQMA6LqOyMhIPPTQQ3jiiSfs2k+cOBFlZWX4+uuvbbFhw4YhKSkJ8+fPd/gcxcXFCAwMxKpVqzB69OgGc6ptX1RUhICAgCadD1FTSClR/dVzkIXn54NUuifBY9R0E7Mialvanu9g3fK/8wFFhedtL0J4dzAvKSIn0pS6pElX7HJzc5GSkoJTp07hlVdewbJly/DNN9/gpZdewsmTJ3HFFVfUe6XNkaqqKmzZsgWpqannE1IUpKamYsMGx7OQb9iwwdAeANLS0uptX1VVhXfeeQeBgYHo379/o3Mjagvy1CFDUQcAas8Uk7IhMocSN9y4EoWuQefUJ0TN0qQ+dq+++iqioqKwbt06eHt72+LXXnstpk+fjpEjR+LVV1/FnDlzGnW8goICaJqGsDDjOphhYWHYv3+/w31yc3Mdts/NzTXEvv76a9x+++0oLy9Hly5dsHLlSgQHBzs8ZmVlpWGi5eJirllIbUOvs/i58A+G6NLbpGyIzCG8/KFGD4J2wbJi2oGfoPRNY19ToiZq0idm5cqV+POf/2wo6mr5+Pjg8ccfx4oVK1osuUtx1VVXYfv27Vi/fj2uvfZaTJgwod6riXPmzEFgYKDtJzIyso2zpfZIVpZCu6DTOACoPa/kaEBql5ReowyPZdkZyOO7zEmGyIU1qbA7dOgQBgwYUO/2QYMG4dChQ40+XnBwMFRVRV5eniGel5eH8PBwh/uEh4c3qr2fnx/i4uIwbNgwvPfee7BYLHjvvfccHnPmzJkoKiqy/Rw9erTR50DUXPrBjYBWfT6gqDW3pIjaISU4GiIoyhDjIAqipmtSYVdSUnLRTnsdOnRAaWnjZw2vnYpk9erVtpiu61i9ejWSk5Md7pOcnGxoD9RcSayv/YXHrW9dWy8vLwQEBBh+iFqTlBJanbnrlO4D2Fmc2jW1l7F/qX5iD2Rx4/ttE1ET+9gBNcWdo1uxQE3ftCYOssWMGTMwZcoUDBo0CEOGDMFrr72GsrIyTJ06FQAwefJkdO3a1dZv7+GHH0ZKSgrmzp2LsWPHYvHixUhPT8c777wDACgrK8Pzzz+Pm266CV26dEFBQQHefPNNHD9+HL/5zW+aerpErULmHYAsNl55VnteaVI2RM5BiR4Mkf4pZFW5LaYd+AmWQbeZmBWRa2nykmI9e/a86Pam9g+aOHEiTp06hWeeeQa5ublISkrC8uXLbQMkcnJyoFzQeXb48OFYtGgRnnrqKTz55JOIj4/H0qVL0a9fPwCAqqrYv38/Fi5ciIKCAgQFBWHw4MFYu3Yt+vbt26TciFpL3at1IiAcIizepGyInIOweEKJGw5t7ypbTM9aD5l0E4TF8yJ7ElGtJs1j9+OPjevvkJLi2tM1cB47ak2yogRVn/75/PqYACyDJ0Dt3fAci0TuThbnoWrpM4aYZfgUqOx/Su1YU+qSJl2xGzlyJF5++WV8+eWXqKqqwujRozFr1iz4+PhcUsJE7Ymeuc5Q1EH1gBI7zLyEiJyICAiD0qUP9JN7bTH9wI8s7IgaqUmDJ1544QU8+eST8Pf3R9euXfH666/jgQceaK3ciNyOlBJapvE2rBo9CMLLz6SMiJyPmjDK8FgvyIZekG1KLkSupkmF3Ycffoi33noLK1aswNKlS/HVV1/ho48+gq7rrZUfkVuRJ/ZClhrXVlY4aILIQHTtB+HbyRDT6/RLJSLHmlTY5eTk4Prrr7c9Tk1NhRACJ06caPHEiNyR3aCJTt0ggmNMyobIOQlFtfsHj3Z4M2RlmUkZEbmOJhV2VqvVbqoTDw8PVFdX17MHEdWS5WehH9tpiKk9r+BKE0QOqPEjAEU9H9CqoR90vCY4EZ3X5OlO7rrrLnh5edliFRUVuO++++Dnd76P0GeffdZyGRK5CS1zHSAv6LZg8YISM9S8hIicmPAJhNJ9APTsX2wxLeNHKL1H8x9DRBfRpMJuypQpdrE777yzxZIhcldS16Bn/myIqTFDIDw5opyoPmqvFENhJ0vyIU/ug4joY2JWRM6tSYXdggULWisPIrcmj++GLD9riCm9OGiC6GJEaBxExwjIwvP9uLWMH6GwsCOqV5P62BFR89RdzFwJjobSubtJ2RC5BiGE/fqxR3dAlp0xKSMi58fCjqiVyeJ86Cf2GmJKPK/WETWGEjsMsHhdEJHQDqw1LR8iZ8fCjqiVafu/B3B+5T7h4QMlepB5CRG5EOHhDbXOyix65lpIzWpSRkTOjYUdUSuSVeXQstYbYkr8SAgPr3r2IKK66vZHlRUl0HO2mZQNkXNjYUfUivSs9YC18oKIgJpwlWn5ELkipVM3KKFxhph+4Md6WhO1byzsiFqJ1PVfb8Oep3RPgvAPMikjItel9BpleKznZUI/e9ycZIicGAs7olYij+20WxdW7Z1qUjZErk3pfjmEdwdDjOvHEtljYUfUSrR9qwyPRVAURGgPk7Ihcm1CtUCJH2mI6Qc3QlZXmJQRkXNiYUfUCvQzOdDzMg0xNeFqLoVEdAnU+CsBnP8MSWsF9EObzEuIyAmxsCNqBfo+Y9864RMAJXqgSdkQuQfh3xlKt8sMMS3jR0gp69mDqP1hYUfUwuS5YmiHNxtiSs8UCNXDpIyI3IeaMMrwWBYeh8zPMicZIifEwo6ohWkHfgJ07XxAUe2WRSKi5hFdekN0CDHEtH2rTcqGyPmwsCNqQVKrhp6xxhBTY4bajeYjouapWT92lCGm52yHLM43JyEiJ8PCjqgF6dnpkBUlhpjS+2qTsiFyT0rccAiL9wURCa1Ov1ai9oqFHVELkVJC22u8JaSE9YTSOdKkjIjck/D0hdLzCkNMy1oHWVlqUkZEzoOFHVELkflZkGePGmJqH05ITNQa1ISrAXHBV5hWBf3AWvMSInISLOyIWkjdDtzCPxiia6JJ2RC5N+HfGUqUcQohbf/3kFq1SRkROQcWdkQtQJaehp6z3RBTE66CUPgRI2otat9rDI/luWLoh38xKRsi58BvHaIWoO3/AcD5SVKFxRtK3AjzEiJqB5SgKChhPQ0xbe9KTlhM7RoLO6JLJKsroWf+bIgp8cMhPH1Myoio/bC7ald4AvLEXpOyITIfCzuiS6QfXA9Zfe6CiIDa6yrT8iFqT0TXRIiAcENM27vSpGyIzMfCjugSSGk/f5bS7TKIgFCTMiJqX4QQdqPP9ZP7oJ85Ws8eRO6NhR3RJZDHd0GWGGe8VzkhMVGbUmLtV3fR964yKRsic7GwI7oEda/WiY5dIcJ7mZQNUfskLJ5Q6iwzpmX/All+1pyEiEzEwo6omfTCE9BP7jPE1N6jIYQwKSOi9kvtlQKoHucDuvbraHWi9oWFHVEz6XUnJPbyhxIz2KRsiNo34d0Bao9kQ0zP+AmyusKkjIjMwcKOqBlkZSm0Q5sMMaXnlRAWT5MyIiK192gA56+Yy+pz0LPWmZcQkQlY2BE1g35gLXDh0kWKWnMriIhMIwLDoXS7zBDT9q6G1DWTMiJqeyzsiJpIalZoGWsMMSV6EIRvR1PyIaLz7CYsLjsNPWebSdkQtT0WdkRNpOdsgywvNMTUBE5xQuQMRGgcRFCUIaZzmTFqR1jYETWBlBLarmWGmBLSA0pwtDkJEZGBEAJq3zGGmF6QDZl/0KSMiNoWCzuiJpBHd0AWnjDElDqz3hORuZTul0P4BRliXGaM2gsWdkSNJKWEdec3hpgI7AKl++UmZUREjghFtVsBRj+6A7I4z6SMiNoOCzuiRpIn9kCeyTHE1MvGckJiIiekxI+E8PC5ICKh7V1db3sid8HCjqgRpJTQ6l6t6xAKJWqgSRkR0cUID28oPa80xLSD6yErSk3KiKhtsLAjagSZmwH91CFDTE28DkLhR4jIWam9rwLEBZ9RrdpuqiIid8NvJaJGqDsSVvgFQYkZYlI2RNQYwreT3TJ/esYaSGuVSRkRtT4WdkQN0POzoOdmGGJqvzQI1WJSRkTUWGqfOhMWV5RAP7zZpGyIWh8LO6IGaDvrXK3zCYQSN9ykbIioKZTOkVC69DbEtD2csJjcFws7oovQC7Khn9hjiNVcrfMwKSMiaiq1zlyTsjgXena6SdkQtS6nKOzefPNNREdHw9vbG0OHDsXmzRe/TL5kyRIkJCTA29sbiYmJWLbs/BWV6upq/PnPf0ZiYiL8/PwQERGByZMn48SJExc5IpFjdlfrvDtAib/CpGyIqDlERF+Ijl0NMW3H15C6blJGRK3H9MLu448/xowZMzBr1ixs3boV/fv3R1paGvLz8x22X79+PSZNmoRp06Zh27ZtGD9+PMaPH4/du3cDAMrLy7F161Y8/fTT2Lp1Kz777DNkZGTgpptuasvTIjegnz0G/dgOQ0ztcw2ExdOkjIioOYQQUJNuNMRqrtr9YlJGRK1HSJM7GgwdOhSDBw/GvHnzAAC6riMyMhIPPfQQnnjiCbv2EydORFlZGb7++mtbbNiwYUhKSsL8+fMdPscvv/yCIUOG4MiRI+jevXuDORUXFyMwMBBFRUUICAho5pmRq6v+8R3oR7bYHgtPX3jcOgfCw9vErIioOaSUqP76ecizR20x0SEUHuOehVBUEzMjalhT6hJTr9hVVVVhy5YtSE093/9BURSkpqZiw4YNDvfZsGGDoT0ApKWl1dseAIqKiiCEQMeOHR1ur6ysRHFxseGH2jdZlAv9yFZDTOk9mkUdkYsSQsBS96pdST70Q5tMyoiodZha2BUUFEDTNISFhRniYWFhyM3NdbhPbm5uk9pXVFTgz3/+MyZNmlRvlTtnzhwEBgbafiIjI5txNuROtF3fAjh/MVt4eNutPUlErkV0uwwiKMoQ03Z+A6lZTcqIqOWZ3seuNVVXV2PChAmQUuLtt9+ut93MmTNRVFRk+zl69Gi9bcn9yZJT0OrMc6UkXAXh6WtSRkTUEmqu2hn7W8vSAl61I7di6gyrwcHBUFUVeXl5hnheXh7Cw8Md7hMeHt6o9rVF3ZEjR/D9999f9J60l5cXvLy8mnkW5G603csBecFoOdUTau/U+ncgIpchIvpCCY6BXnDYFtN2fgMldignHSe3YOoVO09PTwwcOBCrV6+2xXRdx+rVq5GcnOxwn+TkZEN7AFi5cqWhfW1Rl5mZiVWrViEoKKh1ToDcjiw7A+2gsb+m2isFwtvfpIyIqCXVjJCtc9Wu7DT0g+tNyoioZZl+K3bGjBl49913sXDhQuzbtw/Tp09HWVkZpk6dCgCYPHkyZs6caWv/8MMPY/ny5Zg7dy7279+PZ599Funp6XjwwQcB1BR1t912G9LT0/HRRx9B0zTk5uYiNzcXVVVcH5AuTtv9HaBr5wOKxW5yUyJybaJLbyihcYaYtnMZpFZtUkZELcf0684TJ07EqVOn8MwzzyA3NxdJSUlYvny5bYBETk4OFOV8/Tl8+HAsWrQITz31FJ588knEx8dj6dKl6NevHwDg+PHj+PLLLwEASUlJhuf64YcfMGrUqDY5L3I98lwRtMy1hpgafwWEb0dzEiKiViGEgNr/RugrX7XFZPlZ6Jk/Q024ysTMiC6d6fPYOSPOY9c+WdM/hbZ35fmAosJz/N8g/DublxQRtZrqFXOh5x2wPRY+gfC4+W+chJycjsvMY0fkLGRFKbSMHw0xNXYYizoiN6b2rzOv3bki6HWu2hO5GhZ2RAC0fasA7YI+mEKBmnideQkRUatTwntCCU8wxLTdyyGt7I9NrouFHbV7sqoc+v4fDDElZjBEhxCTMiKitmK3huy5YugHfqynNZHzY2FH7Z6273vI6ooLIgKWxOtNy4eI2o4SGgcloo8hpu1eAVldaVJGRJeGhR21a7KyFPo+47yIStQAiEDHE2QTkfux62tXUQI9Y405yRBdIhZ21K5pO5dBVpUbYuplvFpH1J4oIbFQuiYaYjVX7Srq2YPIebGwo3ZLFudDq/OvciVqIJRO3cxJiIhMY9fXrqoM2r7vTcqGqPlY2FG7Zd36WZ1VJlRYBtxsXkJEZBolKApKt/6GmL53pd0VfSJnx8KO2iU9Lwt6zjZDTE24miNhidoxNekGw2NZVc6rduRyWNhRuyOlhLZliSEmPP04bx1RO6d07g6l++WGmL53FWRlmUkZETUdCztqd/TsdOgF2YaY2v8GCC8/cxIiIqdRM0JW2B7L6nPQ6oycJ3JmLOyoXZHWKmhbPzfERIdQKD2vNCkjInImSqeuUKIHGmL63tWQlaUmZUTUNCzsqF3R930PWXbaELMMvBVCtZiUERE5G/WyG2C4ametgLZzmXkJETUBCztqN2RFCbTd3xpiSlg8RGT/evYgovZI6dgFSsxgQ0zb/wP0wpMmZUTUeCzsqN3Qtn9lN+GoOvA2CCHq2YOI2itL0k2AcsGVfKlD27wYUkrzkiJqBBZ21C7ohSehZa41xJTYoVCCo81JiIicmugQArXvNYaYnrvfbpokImfDwo7aBW3L/wCpnw+oHrBcPt60fIjI+an9roPw7WSIaemfQlqrTMqIqGEs7Mjt6Sf3Qz++yxBT+6RC+HU2KSMicgXCwwvqoNsMMVl2GtruFSZlRNQwFnbk1qSuw5r+qSEmvDtA7XetSRkRkStRogZCCetpiGl7VkCWnq5nDyJzsbAjt6Yf2gh59qghpva/EcLD26SMiMiVCCGgDpkIiAu+LrVqWNM/MS8pootgYUduS1qroG3/whATgV2gxI80KSMickVKp25Qe6UYYnrOdugn9pqUEVH9WNiR29L2fAdZXmiIWQbeCqGo5iRERC5L7X8jhJe/IWbd/DGkZjUpIyLHWNiRW5LlhdD2fGeIKV16Q3TtZ1JGROTKhJcf1AE3G2KyOBd6xg8mZUTkGAs7ckva9i8Ba+UFEQF14K2cjJiImk2JGwERFGWIadu/hjxXZFJGRPZY2JHb0c8eg5a13hBT44ZD6RxpUkZE5A6EELAMud0Qk9YKaFs/NykjInss7MjtaOn/A3DBsj+qJ9Skm0zLh4jchxISC7VHsiGmHdwAPf+gSRkRGbGwI7eiH9sJ/aRxpJraLw3Ct6M5CRGR21EH3AxhMU6ZZP3lY0hdr2cPorbDwo7chqwqh3XjR4aY8AmE2ueaevYgImo64RMINekGQ0yePgL94Pp69iBqOyzsyG1o6Z/aTW+iXj4ewsPLnISIyG0pva6CCOxiiGlbP4esLDMpI6IaLOzILegn9kLLWmeIKV16Q6nTF4aIqCUI1QLL4AmGmKwshbbjK5MyIqrBwo5cnqyugHXDf4xBixcsyb/j9CZE1GqUiD5Qul9uiGkZP0I/e8ykjIhY2JEb0Lb8D7LsjCFmGXgLhH+QSRkRUXthGfQbQPU4H5A6tM2LIaWsfyeiVsTCjlyafnI/tAM/GWJKWE8oPVPq2YOIqOUI/yCofdMMMT0vE3p2ukkZUXvHwo5clqyuhHXDh8ag6gnL8Mm8BUtEbUbtlwbhZ7xDoKUvgawsNSkjas9Y2JHL0rZ9Dll62hCzDLgZokOISRkRUXskLJ5QB91miMlzRbBu/Ii3ZKnNsbAjl6TnZULbb1x8WwmNg5JwlUkZEVF7pnS/HEpEX0NMP7IV+qGNJmVE7RULO3I50loF6/qFxqDqwVuwRGQaIUTN3yBPP0Nc27QYsqTApKyoPWJhRy5H27YUsuSUIWa5fBxEQJhJGRERAcK3I9TkOw0xaa2A9ef3IXXNpKyovWFhRy5Fz8+Ctu97Q0wJiYWSMNqkjIiIzlOjBkCNG2GI6acOQtu9wqSMqL1hYUcuo+YW7IcALuiMrFhgGT4FQuFbmYicgzp4AoR/sCGm7fgKekG2OQlRu8JvQ3IZ2o6vIYvzDDFL0k0QgeEmZUREZE94eMMy8m5AXPAVK3VY174HWV1pXmLULrCwI5egFxyGtuc7Q0wERUHpk2pSRkRE9VNCe0BNvN4QkyX50NKXmJQRtRcs7MjpSa0a1nULYbwFq8Iy4i4IRTUtLyKii1ETr4MSHGOIaZlroR/dYVJG1B6wsCOnp+38BrLopCGmXnYDlI4RJmVERNQwoVpgGTkVsHgZ4tb1H0KeKzIpK3J3LOzIqemnj9iNJhOdIqH2HWNSRkREjScCwmAZPMEQk5WlNcUdV6WgVsDCjpyWrK6A9ecFgNTPB4UCy8i7IFSLeYkRETWBEjcCSmSSIaYf3w39wI/mJERujYUdOSUpJazrFji4BTsWSqduJmVFRNR0QghYkn8H4RNgiFvTP4UsyjUpK3JXLOzIKWm7lkHP2W6IiU6RUPtda05CRESXQHj7wzJ8ijGoVaN67XuQmtWcpMgtmV7Yvfnmm4iOjoa3tzeGDh2KzZs3X7T9kiVLkJCQAG9vbyQmJmLZsmWG7Z999hnGjBmDoKAgCCGwffv2VsyeWoN+bCe07V8ZYsLTFx6j/o+3YInIZSld+0HtdZUhJs/kQNvxVT17EDWdqYXdxx9/jBkzZmDWrFnYunUr+vfvj7S0NOTn5ztsv379ekyaNAnTpk3Dtm3bMH78eIwfPx67d++2tSkrK8PIkSPx4osvttVpUAuSRbmwrn0PhqlNIGC58l6IDiFmpUVE1CLUgbdABHYxxLTdK6DnHjApI3I3Qpo4LGfo0KEYPHgw5s2bBwDQdR2RkZF46KGH8MQTT9i1nzhxIsrKyvD111/bYsOGDUNSUhLmz59vaJudnY2YmBhs27YNSUlJTcqruLgYgYGBKCoqQkBAQMM7UIuQVeWoXvZ3+9UlBt7KUbBE5Db0MzmoXvZ3QNdsMeHXGR43Pg3h6WtiZuSsmlKXmHbFrqqqClu2bEFq6vmVAxRFQWpqKjZs2OBwnw0bNhjaA0BaWlq97RursrISxcXFhh9qW1JKWH9eYFfUKdGDofS5xqSsiIhantK5OyxJ4wwxWXYG1h/fYX87umSmFXYFBQXQNA1hYWGGeFhYGHJzHY8Sys3NbVL7xpozZw4CAwNtP5GRkZd0PGo6bcdX0I/tNMREp0hYhk+GEMKkrIiIWofS5xooYfGGmH5yH7RNizi/HV0S0wdPOIOZM2eiqKjI9nP06FGzU2pX9Jzt0HZ+Y4gJL394XDUdwuJpUlZERK1HKAosI++G8O5giGtZ66Dt+takrMgdmFbYBQcHQ1VV5OUZb73l5eUhPDzc4T7h4eFNat9YXl5eCAgIMPxQ29ALT6L65/eNQaHUDJbwDzInKSKiNiD8OsNy9QOA6mGIa9u/gHb4F5OyIldnWmHn6emJgQMHYvXq1baYrutYvXo1kpOTHe6TnJxsaA8AK1eurLc9OTdZVQ7rD28C1kpD3DLoNihdEkzKioio7SjBMbBcMQ2AscuJdd0C6HlZ5iRFLs3UW7EzZszAu+++i4ULF2Lfvn2YPn06ysrKMHXqVADA5MmTMXPmTFv7hx9+GMuXL8fcuXOxf/9+PPvss0hPT8eDDz5oa3PmzBls374de/fuBQBkZGRg+/btl9wPj1qW1HVYf/o3ZMkpQ1yNHQYl4WqTsiIiantq98thGXSrMahrsP7wlt2AMqKGmFrYTZw4ES+//DKeeeYZJCUlYfv27Vi+fLltgEROTg5Onjy/pNTw4cOxaNEivPPOO+jfvz8+/fRTLF26FP369bO1+fLLL3H55Zdj7NixAIDbb78dl19+ud10KGQubceX0E/sMcREUBTUYXdwsAQRtTtK71SoPVMMMVlVhurV/4SsKDUpK3JFps5j56w4j13r0rLTYf3pXUNMeHeAx9gnIfw6m5QVEZG55K9X6fTjuw1xJaQHLNc8wsFk7ZhLzGNH7ZN+9his6xYag0KB5crfs6gjonZNKGrN38JOxim39FMHYV3/IadBoUZhYUdtRlaUwPrD24BWZYhbhkyEEt7TpKyIiJyH8PCCx+gHIXw7GeJ69i/Qtn9hUlbkSljYUZuQFSWoXjEXsrTAEFfjRkCp06+EiKg9E74dYRn9IITF2xDXdn0LLXOdSVmRq2BhR63OVtQVnTTEleAYqEMncbAEEVEdSqdusKT8HhDGr2nrxv9CP7HXpKzIFbCwo1YlzxU7LOqEXxAso+6DqDMxJxER1VC69oVl6CRjUOqw/vgv6GePm5MUOT0WdtRq5LliVH/3in1R5x8Ej7THIHw7mpMYEZGLUHteCbVvmiEmqytg/X4eZHmhOUmRU2NhR63iokXdmMcg/DkCloioMdQBN0OJGmiIybIzqF75Gos7ssPCjlqcPFdUT1EXzKKOiKiJhBCwjLgLSkisIS6LTqL6239AFueblBk5IxZ21KLkuSJUr6inqEt7lEUdEVEzCIsnLFfdD9EhxBCXZadRvfwf0M/kmJQZORsWdtRiZHlhTVFXbFyX11bUcQJiIqJmE94d4HHNHyECwgxxWVEC64q50HMPmJQZORMWdtQiZHkhqr971b6o6xDCoo6IqIUI/yB4XPs4ROfuhrisrkD1qtehH91hUmbkLFjY0SWrKeocXKnrEAKPMTNY1BERtSDh3QEeY2ZACauzYo9uRfWa+dCy1puTGDkFFnZ0Sc4XdXmGOIs6IqLWIzx9YBn9EJTIJOMGqcO6fiG0Pd+ZkheZj4UdNRuLOiIi8wiLJywpv4caN8Jum3XL/2Dd+hmklCZkRmaymJ0AuSb91CFYf/yX3RxKtj51dRawJiKilicUFWry7wAvf2h7Vhi2abtXABWlUIfdCaHwOk57wcKOmkRKCf3Aj7D+8gmga4ZtokMoPNJmsKgjImpDQghYBt4C4eUH69bPDNu0rHWQVeWwjLwbwuJpUobUlljCU6NJaxWs6xbAuun/sagjInIyar80WIZPBiAMcT1nW80SZNUV5iRGbYqFHTWKLM5H9bK/Qz+0yW6bEt4LHtf9iUUdEZHJ1LgR8Bh1H6AYb8jpuRmoXjEXsqTApMyorbCwowbpR3eg+psXIAuP221T+6XBkvowhHcHEzIjIqK6lO5J8Ej9A4TF2xCXZ3JQ/fVz0A5tNikzagss7KheUtdh3fYFqn94C7L6nGGbsHjDkvJ/sAy4BUJRTcqQiIgcUcJ7wZL2qN0/umV1Baw/v4fqn9+HrCo3KTtqTSzsyCFZWQrr6n9C27XMbpsI7AKPsTOhRg0wITMiImoMJag7PNIes1tfFgD0Q5tQ/dXfoOdnmZAZtSYWdmRHL8hG9dcvQD+5126bEj0IHtfPhAgMNyEzIiJqChEYDo+xf4EaO8xumyw7jeoVc2Hd8TVknQFx5Lo43QkZaJk/w7ppkd2oVwgFlkG3QUm4GkIIxzsTEZHTEZ4+sIycCtG1H7SNHxm71kgd2o6vIE/sheWKaRD+QeYlSi1CSE5Lbae4uBiBgYEoKipCQECA2em0CVlZBi19CbSDG+y2CZ8AWK78PZSweBMyIyKiliJLT8P68/sOb8EKD2+oQ++AGjvEhMzoYppSl7Cwc6A9FXZSSuhZ66Ft/QyystRuuxIaB8uV90L4dmz75IiIqMVJXYe2+1toO74GpG63XYkdCsuQ2yE8fU3IjhxpSl3CW7HtmF6QDW3z/4NekO1wu9p7NNQBt0CofJsQEbkLoSiwXDYWSpfesK79N2TpacN2/dAmVOdlwXLF3VBC40zKkpqLV+wccPcrdrKyFNrWpdAyfwbg4OW3eMGS/DuoMYPbPDciImo7suoctM2LoR3aaL9RKFATRkFNHAvh7d/2yZENb8VeInct7KSuQ8/6GdrWpZBVZQ7bKN2TYBk0gR1oiYjaEe3wL/YDK34lPLyh9E2D2ieV682ahLdiyY5+6hCsmxdDnj7icLvoEArLkNuhdO3bxpkREZHZ1JjBUEJiHQ6skNUV0LZ/AT1jDdSkm6D0SObE9E6MV+wccKcrdrKiBNrWz6FlrXPcQPWs6WvRZzSE6tG2yRERkVORugZt93JoO7+xn/bqVyKwCywDbobodhmnv2ojvBV7idyhsJOa9fxtVweX1gFAiRoIy6DbIPw6t3F2RETkzGTpaVi3LYV+uP51ZZXQOKgDboES2qMNM2ufWNhdIlcu7GRVOfTMn6Ht+x6y/KzDNiIgHJYhE6FE9Gnj7IiIyJXoZ3Kgbfnc4UpEtZTuSbBcfjNXJGpFLOwukSsWdrKkANr+72tGulorHTeyeNXcdu09mlOYEBFRo+kn9sK65TPIs0cdNxAK1LgRUPvfwHlPWwEHT7Qj+qlD0Paugn5kKxxOXfIrJXowLINuhfDt1HbJERGRW1Ai+sCjS2/ohzdD2/YFZJlx7jtIHVrmWmgH10OJTILa80qI8F7sg2cCFnYuSOo69KPboe9dCf3UoYu2VUJioSaNg9IloY2yIyIidySEgBo7FErUAOgZP0Lbucx+6ixdg35kC/QjWyA6hELteQWUHsM5D14b4q1YB5z1VqysroCetQ7avtV2M4UbCShRA6D2SYUSEttm+RERUfshq8qh7V4Bbd9qQKuuv6GiQokaWHMVLzSOV/GagX3sLpEzFXZS1yHzs6Af2Qr90MZ6R7gCACxeUONHQk24GqJDcNslSURE7ZYsPwttxzc1q1dcrMBDzVQpas8roMQOg/Dya6MMXR8Lu0tkdmEndQ0yL7OmmMvZCllRctH2wrcT1N5XQ4kfyUWbiYjIFLKyDPqhTdAO/ARZdPLijVUPqNGDar63QnrwKl4DWNhdIjMKO6lZIfMO1PRNyNkOWVna4D4iKApqn2ugdL+co1yJiMgpSCkh87OgHfgJ+pEt9U50XEv4BEDpmgjRtR+UiD4QHt5tlKnrYGF3idqqsJOaFfLkvporc0e3Q1aVN2IvAaXbZVD7XsO+CkRE5NRkRSn0g+uhHVgLWZLf8A6KCiWsJ5Su/aB0S4QICGv9JF0AC7tL1JqFnbRWQZ7cB+3IFsijOy/eZ+4ComPXmgERMUMgAkJbNCciIqLWJKWEzM2ouYp3dHuDV/FqiYCw80VeaHy7vTvFeeycmJ6xBtYt/2tUW9G5O9SoATW3WjmjNxERuSghBESXBChdEiArSqBnroN2cD1kcd5F95PFedCK86DtWw1h8YaI6A0lvBdEcAxEp65c49wBXrFzoFWv2BXno2rp0/VuV4KjoXQfACVqAESHkBZ9biIiImcii/OgH9sF/fhu6HkHGn0lDwCgqBCdukEJjoEIjoYSHAMEhLllFyVesXNiIiAUolOkYVkWJaQHlNorc/5BJmZHRETUdkRAGNQ+YVD7pNbM1XpiL+Tx3dCP74I8V3zxnXUN8vQRaKePABm/Hs/DGyIoCiI4GiI4BkpwdLtbcYmFnQnU6EHQPb1/vTJ3ebt70xEREdUlPLyhRg0AogbU9Mk7faTmSt6xnZCnjzTqGLK6AjI3A8jNOH9c7w4QAWG2HwSE1vy/fzCExbO1Tsc0vBXrQGuPipVSuuWlYiIiotYgzxVBP74bMvcA9IJsyOLcFjiqgPDrXHMnzVb4hUJ0CAX8OjlV/z3einVyLOqIiIgaT/gEQo0bAcSNAFCznJk8nQNZkA399GHIgmzI8sImHlVClp2GLDsNnNxn/5xe/oBPIIRvRwjfjoBvR4hfH9fG4R0AoSiXeHYtyykKuzfffBMvvfQScnNz0b9/f/zzn//EkCFD6m2/ZMkSPP3008jOzkZ8fDxefPFFXH/99bbtUkrMmjUL7777LgoLCzFixAi8/fbbiI+Pb4vTISIiolYkPH0huiQAXRKg/hqT5YU1t28Lfi30CrIbPaWYI7KyFKgshSw8frFMIHwCfi36OkIdcDOUjl2a/ZwtwfQy8+OPP8aMGTMwa9YsbN26Ff3790daWhry8x1PZLh+/XpMmjQJ06ZNw7Zt2zB+/HiMHz8eu3fvtrX5xz/+gTfeeAPz58/Hpk2b4Ofnh7S0NFRUVLTVaREREVEbEr4doUT2h+Xy8fC45hF43P4qPMfNhsdV98My8Fao8SOhhMVD+AS24LNKyHNFNQXlsR2A1Fvw2M1jeh+7oUOHYvDgwZg3bx4AQNd1REZG4qGHHsITTzxh137ixIkoKyvD119/bYsNGzYMSUlJmD9/PqSUiIiIwKOPPorHHnsMAFBUVISwsDB88MEHuP322xvMyey1YomIiKj1yOoKyJJ8yKI8yOK8mlUxivNqHl/CVT7PiXNrbuG2MJfpY1dVVYUtW7Zg5syZtpiiKEhNTcWGDRsc7rNhwwbMmDHDEEtLS8PSpUsBAIcPH0Zubi5SU1Nt2wMDAzF06FBs2LChUYUdERERuS/h4Q3RuTvQubshLqUEqsohzxUB5YU1t3fLC4FzRZDnCoHyoprYuSL7q3OKBfD0a7NzqI+phV1BQQE0TUNYmHEtuLCwMOzfv9/hPrm5uQ7b5+bm2rbXxuprU1dlZSUqKyttj4uLG5g7h4iIiNyOEALw8oPw8gM6RtTbTkoJVJT8WuwVQpYXAdZKpxgc6RSDJ8w2Z84czJ492+w0iIiIyAUIIQCfgJqBE3Wu+pnN1METwcHBUFUVeXnGteLy8vIQHu54bdTw8PCLtq/9b1OOOXPmTBQVFdl+jh496rAdERERkTMztbDz9PTEwIEDsXr1altM13WsXr0aycnJDvdJTk42tAeAlStX2trHxMQgPDzc0Ka4uBibNm2q95heXl4ICAgw/BARERG5GtNvxc6YMQNTpkzBoEGDMGTIELz22msoKyvD1KlTAQCTJ09G165dMWfOHADAww8/jJSUFMydOxdjx47F4sWLkZ6ejnfeeQdAzeXRRx55BH/7298QHx+PmJgYPP3004iIiMD48ePNOk0iIiKiVmd6YTdx4kScOnUKzzzzDHJzc5GUlITly5fbBj/k5ORAuWBW5+HDh2PRokV46qmn8OSTTyI+Ph5Lly5Fv379bG3+9Kc/oaysDL///e9RWFiIkSNHYvny5fD29m7z8yMiIiJqK6bPY+eMOI8dEREROYum1CWmrzxBRERERC2DhR0RERGRm2BhR0REROQmWNgRERERuQkWdkRERERugoUdERERkZtgYUdERETkJljYEREREbkJ01eecEa1czYXFxebnAkRERG1d7X1SGPWlGBh50BJSQkAIDIy0uRMiIiIiGqUlJQgMDDwom24pJgDuq7jxIkT6NChA4QQZqfTLMXFxYiMjMTRo0e5LJqb4Wvrvvjaui++tu6rLV5bKSVKSkoQEREBRbl4LzpesXNAURR069bN7DRaREBAAP+IuCm+tu6Lr6374mvrvlr7tW3oSl0tDp4gIiIichMs7IiIiIjcBAs7N+Xl5YVZs2bBy8vL7FSohfG1dV98bd0XX1v35WyvLQdPEBEREbkJXrEjIiIichMs7IiIiIjcBAs7IiIiIjfBws6FPfvssxBCGH4SEhJs20eNGmW3/b777jMxY2qK48eP484770RQUBB8fHyQmJiI9PR023YpJZ555hl06dIFPj4+SE1NRWZmpokZU2M19Nredddddp/da6+91sSMqTGio6PtXjchBB544AEAQEVFBR544AEEBQXB398ft956K/Ly8kzOmhqjodfWmb5vOUGxi+vbty9WrVple2yxGF/Se++9F3/9619tj319fdssN2q+s2fPYsSIEbjqqqvw7bffIiQkBJmZmejUqZOtzT/+8Q+88cYbWLhwIWJiYvD0008jLS0Ne/fuhbe3t4nZ08U05rUFgGuvvRYLFiywPXaWEXdUv19++QWaptke7969G9dccw1+85vfAAD++Mc/4ptvvsGSJUsQGBiIBx98ELfccgvWrVtnVsrUSA29toDzfN+ysHNxFosF4eHh9W739fW96HZyTi+++CIiIyMNX+wxMTG2/5dS4rXXXsNTTz2FcePGAQA+/PBDhIWFYenSpbj99tvbPGdqnIZe21peXl787LqYkJAQw+O///3v6NGjB1JSUlBUVIT33nsPixYtwtVXXw0AWLBgAXr37o2NGzdi2LBhZqRMjXSx17aWs3zf8lasi8vMzERERARiY2Nxxx13ICcnx7D9o48+QnBwMPr164eZM2eivLzcpEypKb788ksMGjQIv/nNbxAaGorLL78c7777rm374cOHkZubi9TUVFssMDAQQ4cOxYYNG8xImRqpode21po1axAaGopevXph+vTpOH36tAnZUnNVVVXhv//9L+6++24IIbBlyxZUV1cbPrMJCQno3r07P7Mupu5rW8tZvm95xc6FDR06FB988AF69eqFkydPYvbs2bjiiiuw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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"posterior_inter.plot(color='C1')\n",
"decorate(xlabel='intercept (inches)',\n",
" ylabel='PDF',\n",
" title='Posterior marginal distribution of intercept')"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.023742Z",
"iopub.status.busy": "2021-04-16T19:39:25.023322Z",
"iopub.status.idle": "2021-04-16T19:39:25.027308Z",
"shell.execute_reply": "2021-04-16T19:39:25.027853Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"63.65 [57.675 69.225]\n"
]
}
],
"source": [
"from utils import summarize\n",
" \n",
"summarize(posterior_inter) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The posterior mean is about 64 inches, which is the expected amount of snow during the year at the midpoint of the range, 1994.\n",
"\n",
"And finally, here's the posterior distribution of `slope`:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.063785Z",
"iopub.status.busy": "2021-04-16T19:39:25.044731Z",
"iopub.status.idle": "2021-04-16T19:39:25.212957Z",
"shell.execute_reply": "2021-04-16T19:39:25.213516Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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GQMAcHR0xPLly/Hoo4+iZ8+eGD9+PNzd3ZGeno7NmzdjwIABegUtmTh5bsYlaj010wbcblqCyspKsWjRItGxY0dhbW0t/Pz8xJw5cyRTkyQkJIgJEyaIDh06CJVKJTw8PMTdd98tDh8+LHmtffv2iV69egmlUqk33UFqaqqYNGmS8PLyEtbW1sLX11fcfffd4vvvv29QzrrTY9RYunSpCA0NFdbW1sLT01PMmDFDXL9+XdKmoVM51Jg8ebKws7PTi9f1Ov7+/mL06NHa7bKyMvHSSy8Jb29vYWNjIwYMGCDi4+P1ps6ome5k/fr1teaxbt06ERoaKlQqlQgLCxMbN24UDzzwgAgNDZW00/1a10yvkZOTI2lX29dw48aNonv37kKtVouAgADxzjvviJUrV+q1a8h0J0IIcePGDfHcc88JV1dXYWdnJ+655x6RkZFx2+lOmvoZq+uc1TxX23Qn7733nvjggw+En5+fUKlUYtCgQeLYsWN6+//vf/8TgYGBQqlUisjISLFt2za916wvN93pToRo2PedEPqfrRoNPR9FRUXixRdfFD4+PsLa2loEBweL9957T2g0Gr3Xa8j3SEPPk+75rtk3NjZW2NvbC1tbWzFs2DCxb98+SZuaz8Xu3bvFE088IVxcXIS9vb2YOHGiyMvL08tn586dIjY2Vjg5OQm1Wi06deokpkyZopcPmT6FEDKMOiUiaqLIyEi4u7tj+/btcqdC1OxWr16NqVOn4tChQ7e96YvoVhxjR0RGrbKyElVVVZLYrl27cOzYsVqXuCIiMmccY0dERu3y5cuIiYnBI488Ah8fH5w5cwYrVqyAl5eX3sTDRETmjoUdERk1FxcX9OrVC59//jlycnJgZ2eH0aNH4+2339au80tERDdxjB0RERGRieAYOyIiIiITwcKOiIiIyERwjF0tNBoNrly5AgcHh2ZfuoeIiIjIEEIIFBUVwcfH57brQLOwq8WVK1f01usjIiIiklNGRgbat29fbxsWdrWoWSQ6IyNDb90+IiIiotZUWFgIPz8/bX1SHxZ2tajpfnV0dGRhR0REREahIcPDePMEERERkYlgYUdERERkIljYEREREZkIFnZEREREJoKFHREREZGJYGFHREREZCJY2BERERGZCBZ2RERERCaChR0RERGRiWBhR0RERGQiWNgRERERmQgWdkREREQm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/ru2TWufcxZ2LSQvL09MmDBB2NvbC0dHRzF16lTtLzIhhEhLSxMAxM6dO4UQQqSnp4vBgweLdu3aCZVKJYKCgsSsWbMk89gJIcSFCxfEqFGjhI2NjXBzcxMvvfSSZEoQY2DosdfcLl7bIy0tTQhxc8qUyMhIYW9vL+zs7ERERIRYsWKFZK4gOfzf//2f6NChg1AqlaJv375i//792ueGDBkiJk+eLGn/3Xffic6dOwulUim6desmNm/eLHleo9GI1157TXh6egqVSiWGDx8ukpOTW+NQDGLIcfv7+9d6bhcsWCCEEKK0tFSMGDFCuLu7C2tra+Hv7y+mT59udL/oahhy7C+88IK2raenp7jrrrsk83oJYZrnXAghzpw5IwCI3377Te+12so5r+tnU82xTp48WQwZMkRvn8jISKFUKkVgYKBk7r4a9X0tjYWhxz5kyJB62wtxc+oXb29voVQqha+vrxg3bpxISUlp3QO7DUOP+5133hGdOnUSarVatGvXTgwdOlTs2LFD73Vb85wrhJBpvggiIiIialYcY0dERERkIljYEREREZkIFnZEREREJoKFHREREZGJYGFHREREZCJY2BERERGZCBZ2RERERCaChR0RERGRiWBhR0RNplAosGHDBrnTAAAkJyfDy8sLRUVFAIDVq1fD2dm52V7/woULUCgU2rWcqXmNHz8eH3zwgdxpELVZLOyIqF45OTmYMWMGOnToAJVKBS8vL8TGxmLv3r1yp1arOXPm4Nlnn4WDgwMAYNy4cTh79qzMWVFDzZs3D//+979RUFAgdypEbRILOyKq1wMPPIDExESsWbMGZ8+excaNGzF06FDk5eXJnZqe9PR0bNq0CVOmTNHGbGxs4OHhIV9SRqyyslLuFLQqKioAAGFhYejUqRP+97//yZwRUdvEwo6I6pSfn489e/bgnXfewbBhw+Dv74++fftizpw5GDNmTJ37nThxAnfccQdsbGzg6uqKJ554AsXFxdrnp0yZgrFjx2LRokVwd3eHo6MjnnzySe0vdwDQaDRYvHgxOnbsCBsbG0REROD777+vN9/vvvsOERER8PX11cZ0u2IXLlyIyMhIfPXVVwgICICTkxPGjx+v7bqtee93330XQUFBUKlU6NChA/79739L3uv8+fMYNmwYbG1tERERgfj4eMnzf/75JwYNGgQbGxv4+fnhueeeQ0lJifb5Tz75BMHBwVCr1fD09MSDDz5Y53HVHMOGDRu0+8TGxiIjI0PS7ueff0bPnj2hVqsRGBiIRYsWoaqqSvu8QqHA8uXLMWbMGNjZ2ekdEwC8/vrrCAsL04tHRkbitdde025//vnn6NKlC9RqNUJDQ/HJJ59I2r/66qvo3LkzbG1tERgYiNdee01SSNach88//xwdO3aEWq3WPnfPPfdg3bp1dX49iKgegoioDpWVlcLe3l688MILoqysrM52AMRPP/0khBCiuLhYeHt7i/vvv1+cOHFCxMXFiY4dO4rJkydr20+ePFnY29uLcePGiaSkJLFp0ybh7u4u5s6dq23z5ptvitDQULF161aRmpoqVq1aJVQqldi1a1edeYwZM0Y8+eSTktiqVauEk5OTdnvBggXC3t5em98ff/whvLy8JO/9yiuvCBcXF7F69WqRkpIi9uzZIz777DMhhBBpaWkCgAgNDRWbNm0SycnJ4sEHHxT+/v6isrJSCCFESkqKsLOzE0uWLBFnz54Ve/fuFT169BBTpkwRQghx6NAhYWlpKdauXSsuXLggEhISxMcff1znca1atUpYW1uL3r17i3379onDhw+Lvn37iv79+2vb/PHHH8LR0VGsXr1apKamit9++00EBASIhQsXSs6Th4eHWLlypUhNTRUXL17Ue6+MjAxhYWEhDh48qI0lJCQIhUIhUlNThRBC/O9//xPe3t7ihx9+EOfPnxc//PCDaNeunVi9erV2nzfeeEPs3btXpKWliY0bNwpPT0/xzjvvSM6DnZ2dGDlypEhISBDHjh3TPvfrr78KpVJZ72eOiGrHwo6I6vX9998LFxcXoVarRf/+/cWcOXMkv4SFkBZ2n376qXBxcRHFxcXa5zdv3iwsLCxEZmamEOJmYdeuXTtRUlKibbN8+XJhb28vqqurRVlZmbC1tRX79u2TvM+0adPEhAkT6sw1IiJCvP7665JYbYWdra2tKCws1MZmzZoloqKihBBCFBYWCpVKpS3kdNUUdp9//rk2dvLkSQFAnD59WpvnE088Idlvz549wsLCQty4cUP88MMPwtHRUZJDfVatWiUAiP3792tjp0+fFgDEgQMHhBBCDB8+XLz11luS/b766ivh7e2t3QYgXnjhhdu+36hRo8SMGTO0288++6wYOnSodrtTp05i7dq1kn3eeOMNER0dXedrvvfee6JXr17a7QULFghra2uRnZ2t1/bYsWMCgLhw4cJtcyUiKXbFElG9HnjgAVy5cgUbN27EyJEjsWvXLvTs2ROrV6+utf3p06cREREBOzs7bWzAgAHQaDRITk7WxiIiImBra6vdjo6ORnFxMTIyMpCSkoLS0lLceeedsLe31z6+/PJLpKam1pnrjRs3JF16dQkICNDeXAEA3t7eyM7O1uZfXl6O4cOH1/sa3bt3l+wPQPsax44dw+rVqyW5x8bGQqPRIC0tDXfeeSf8/f0RGBiIRx99FF9//TVKS0vrfT8rKyv06dNHux0aGgpnZ2ecPn1a+56vv/665D2nT5+Oq1evSl67d+/et/36TJ8+Hd988w3KyspQUVGBtWvX4rHHHgMAlJSUIDU1FdOmTZO815tvvik5N99++y0GDBgALy8v2NvbY968eUhPT5e8j7+/P9zd3fXe38bGBgBu+zUhIn1WcidARMZPrVbjzjvvxJ133onXXnsNjz/+OBYsWCC5SaE51YzH27x5s2S8HACoVKo693Nzc8P169dv+/rW1taSbYVCAY1GA+DvosKQ11AoFACgfY3i4mL885//xHPPPae3X4cOHaBUKpGQkIBdu3bht99+w/z587Fw4UIcOnSo0VOzFBcXY9GiRbj//vv1nru12L214K7LPffcA5VKhZ9++glKpRKVlZXaMYA15+azzz5DVFSUZD9LS0sAQHx8PCZOnIhFixYhNjYWTk5OWLdund40JnXlcu3aNQCotegjovqxsCMig3Xt2rXOeeu6dOmC1atXo6SkRPuLe+/evbCwsEBISIi23bFjx3Djxg1tIbV//37Y29vDz88P7dq1g0qlQnp6OoYMGdLgvHr06IFTp041/sAABAcHw8bGBnFxcXj88ccb9Ro9e/bEqVOnEBQUVGcbKysrxMTEICYmBgsWLICzszN27NhRa2EGAFVVVTh8+DD69u0L4OZ8ffn5+ejSpYv2PZOTk+t9z4aysrLC5MmTsWrVKiiVSowfP157njw9PeHj44Pz589j4sSJte6/b98++Pv741//+pc2dvHixQa/f1JSEtq3bw83N7emHQiRGWJhR0R1ysvLwz/+8Q889thj6N69OxwcHHD48GG8++67uPfee2vdZ+LEiViwYAEmT56MhQsXIicnB88++yweffRReHp6attVVFRg2rRpmDdvHi5cuIAFCxbgmWeegYWFBRwcHPDyyy/jxRdfhEajwcCBA1FQUIC9e/fC0dERkydPrvW9Y2Nj8fjjj6O6ulp79chQarUar776Kl555RUolUoMGDAAOTk5OHnyJKZNm9ag13j11VfRr18/PPPMM3j88cdhZ2eHU6dOYfv27Vi6dCk2bdqE8+fPY/DgwXBxccGWLVug0Wgkha8ua2trPPvss/jPf/4DKysrPPPMM+jXr5+20Js/fz7uvvtudOjQAQ8++CAsLCxw7NgxJCUl4c033zT46/D4449ri0bdOQsXLVqE5557Dk5OThg5ciTKy8tx+PBhXL9+HTNnzkRwcDDS09Oxbt069OnTB5s3b8ZPP/3U4Pfes2cPRowYYXDORATeFUtEdSsrKxOzZ88WPXv2FE5OTsLW1laEhISIefPmidLSUm073HLzhBBCHD9+XAwbNkyo1WrRrl07MX36dFFUVKR9fvLkyeLee+8V8+fPF66ursLe3l5Mnz5dchekRqMRH330kQgJCRHW1tbC3d1dxMbGit27d9eZb2VlpfDx8RFbt27Vxmq7eSIiIkKy35IlS4S/v792u7q6Wrz55pvC399fWFtbiw4dOmhvTKi5eSIxMVHb/vr16wKA2LlzpzZ28OBBceeddwp7e3thZ2cnunfvLv79738LIW7eSDFkyBDh4uIibGxsRPfu3cW3335b53HVHMMPP/wgAgMDhUqlEjExMXp3tW7dulX0799f2NjYCEdHR9G3b1/x6aefap/XPU+3M2jQINGtW7dan/v6669FZGSkUCqVwsXFRQwePFj8+OOP2udnzZqlPbfjxo0TS5Ysue15EEKIGzduCCcnJxEfH9/gPInobwohhJC3tCQiczNlyhTk5+e3yDJky5Ytw8aNG7Ft27Zmf225rF69Gi+88ALy8/Nb7T2FEAgODsZTTz2FmTNnttr7Ll++HD/99BN+++23VntPIlPCrlgiMin//Oc/kZ+fj6KiIsmdr9RwOTk5WLduHTIzMzF16tRWfW9ra2v83//9X6u+J5EpYWFHRCbFyspKMmifDOfh4QE3Nzd8+umncHFxadX3buwNK0R0E7tiiYiIiEwEJygmIiIiMhEs7IiIiIhMBAs7IiIiIhPBwo6IiIjIRLCwIyIiIjIRLOyIiIiITAQLOyIiIiITwcKOiIiIyESwsCMiIiIyEf8PZRqVX81MRe4AAAAASUVORK5CYII=",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"posterior_slope.plot(color='C4')\n",
"decorate(xlabel='Slope (inches per year)',\n",
" ylabel='PDF',\n",
" title='Posterior marginal distribution of slope')"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.217691Z",
"iopub.status.busy": "2021-04-16T19:39:25.217238Z",
"iopub.status.idle": "2021-04-16T19:39:25.219918Z",
"shell.execute_reply": "2021-04-16T19:39:25.219480Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.376 [0.02 0.74]\n"
]
}
],
"source": [
"summarize(posterior_slope)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The posterior mean is about 0.51 inches, which is consistent with the estimate we got from least squared regression. \n",
"\n",
"The 90% credible interval is from 0.1 to 0.9, which indicates that our uncertainty about this estimate is pretty high. In fact, there is still a small posterior probability (about 2\\%) that the slope is negative. "
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.224069Z",
"iopub.status.busy": "2021-04-16T19:39:25.223483Z",
"iopub.status.idle": "2021-04-16T19:39:25.226209Z",
"shell.execute_reply": "2021-04-16T19:39:25.225770Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"array(0.04584032)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"posterior_slope.make_cdf()(0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, it is more likely that my conjecture was wrong: we are actually getting more snow around here than we used to, increasing at a rate of about a half-inch per year, which is substantial. On average, we get an additional 25 inches of snow per year than we did when I was young.\n",
"\n",
"This example shows that with slow-moving trends and noisy data, your instincts can be misleading. \n",
"\n",
"Now, you might suspect that I overestimate the amount of snow when I was young because I enjoyed it, and underestimate it now because I don't. But you would be mistaken.\n",
"\n",
"During the Blizzard of 1978, we did not have a snowblower and my brother and I had to shovel. My sister got a pass for no good reason. Our driveway was about 60 feet long and three cars wide near the garage. And we had to shovel Mr. Crocker's driveway, too, for which we were not allowed to accept payment. Furthermore, as I recall it was during this excavation that I accidentally hit my brother with a shovel on the head, and it bled a lot because, you know, scalp wounds.\n",
"\n",
"Anyway, the point is that I don't think I overestimate the amount of snow when I was young because I have fond memories of it. "
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"## Optimization\n",
"\n",
"The way we computed the likelihood in the previous section was pretty slow. The problem is that we looped through every possible set of parameters in the prior distribution, and there were more than 60,000 of them.\n",
"\n",
"If we can do more work per iteration, and run the loop fewer times, we expect it to go faster.\n",
"\n",
"In order to do that, I'll unstack the prior distribution:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.229663Z",
"iopub.status.busy": "2021-04-16T19:39:25.228880Z",
"iopub.status.idle": "2021-04-16T19:39:25.265229Z",
"shell.execute_reply": "2021-04-16T19:39:25.265554Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Sigma
\n",
"
20.0
\n",
"
20.5
\n",
"
21.0
\n",
"
21.5
\n",
"
22.0
\n",
"
22.5
\n",
"
23.0
\n",
"
23.5
\n",
"
24.0
\n",
"
24.5
\n",
"
...
\n",
"
30.5
\n",
"
31.0
\n",
"
31.5
\n",
"
32.0
\n",
"
32.5
\n",
"
33.0
\n",
"
33.5
\n",
"
34.0
\n",
"
34.5
\n",
"
35.0
\n",
"
\n",
"
\n",
"
Slope
\n",
"
Intercept
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
-0.5
\n",
"
54.000
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
...
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
\n",
"
\n",
"
54.525
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
...
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
\n",
"
\n",
"
55.050
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
...
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
0.000015
\n",
"
\n",
" \n",
"
\n",
"
3 rows × 31 columns
\n",
"
"
],
"text/plain": [
"Sigma 20.0 20.5 21.0 21.5 22.0 22.5 \\\n",
"Slope Intercept \n",
"-0.5 54.000 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
" 54.525 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
" 55.050 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
"\n",
"Sigma 23.0 23.5 24.0 24.5 ... 30.5 \\\n",
"Slope Intercept ... \n",
"-0.5 54.000 0.000015 0.000015 0.000015 0.000015 ... 0.000015 \n",
" 54.525 0.000015 0.000015 0.000015 0.000015 ... 0.000015 \n",
" 55.050 0.000015 0.000015 0.000015 0.000015 ... 0.000015 \n",
"\n",
"Sigma 31.0 31.5 32.0 32.5 33.0 33.5 \\\n",
"Slope Intercept \n",
"-0.5 54.000 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
" 54.525 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
" 55.050 0.000015 0.000015 0.000015 0.000015 0.000015 0.000015 \n",
"\n",
"Sigma 34.0 34.5 35.0 \n",
"Slope Intercept \n",
"-0.5 54.000 0.000015 0.000015 0.000015 \n",
" 54.525 0.000015 0.000015 0.000015 \n",
" 55.050 0.000015 0.000015 0.000015 \n",
"\n",
"[3 rows x 31 columns]"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"joint3 = prior.unstack()\n",
"joint3.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The result is a `DataFrame` with `slope` and `intercept` down the rows and `sigmas` across the columns.\n",
"\n",
"The following is a version of `likelihood_regression` that takes the joint prior distribution in this form and returns the posterior distribution in the same form."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.270539Z",
"iopub.status.busy": "2021-04-16T19:39:25.270009Z",
"iopub.status.idle": "2021-04-16T19:39:25.272082Z",
"shell.execute_reply": "2021-04-16T19:39:25.271704Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"from utils import normalize\n",
"\n",
"def update_optimized(prior, data):\n",
" \"\"\"Posterior distribution of regression parameters\n",
" `slope`, `inter`, and `sigma`.\n",
" \n",
" prior: Pmf representing the joint prior\n",
" data: DataFrame with columns `x` and `y`\n",
" \n",
" returns: Pmf representing the joint posterior\n",
" \"\"\"\n",
" xs = data['x']\n",
" ys = data['y']\n",
" sigmas = prior.columns \n",
" likelihood = prior.copy()\n",
"\n",
" for slope, inter in prior.index:\n",
" expected = slope * xs + inter\n",
" resid = ys - expected\n",
" resid_mesh, sigma_mesh = np.meshgrid(resid, sigmas)\n",
" densities = norm.pdf(resid_mesh, 0, sigma_mesh)\n",
" likelihood.loc[slope, inter] = densities.prod(axis=1)\n",
" \n",
" posterior = prior * likelihood\n",
" normalize(posterior)\n",
" return posterior"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"This version loops through all possible pairs of `slope` and `inter`, so the loop runs about 2000 times."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.276199Z",
"iopub.status.busy": "2021-04-16T19:39:25.275543Z",
"iopub.status.idle": "2021-04-16T19:39:25.278211Z",
"shell.execute_reply": "2021-04-16T19:39:25.278659Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"2091"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(prior_slope) * len(prior_inter)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Each time through the loop, it uses a grid mesh to compute the likelihood of the data for all values of `sigma`. The result is an array with one column for each data point and one row for each value of `sigma`. Taking the product across the columns (`axis=1`) yields the probability of the data for each value of sigma, which we assign as a row in `likelihood`."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:25.282991Z",
"iopub.status.busy": "2021-04-16T19:39:25.282462Z",
"iopub.status.idle": "2021-04-16T19:39:27.180270Z",
"shell.execute_reply": "2021-04-16T19:39:27.179860Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 996 ms, sys: 5 µs, total: 996 ms\n",
"Wall time: 994 ms\n"
]
}
],
"source": [
"%time posterior_opt = update_optimized(joint3, data)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"We get the same result either way."
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.185227Z",
"iopub.status.busy": "2021-04-16T19:39:27.184354Z",
"iopub.status.idle": "2021-04-16T19:39:27.188848Z",
"shell.execute_reply": "2021-04-16T19:39:27.189315Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.allclose(posterior, posterior_opt.stack())"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"But this version is about 25 times faster than the previous version. \n",
"\n",
"This optimization works because many functions in NumPy and SciPy are written in C, so they run fast compared to Python. If you can do more work each time you call these functions, and less time running the loop in Python, your code will often run substantially faster.\n",
"\n",
"In this version of the posterior distribution, `slope` and `inter` run down the rows and `sigma` runs across the columns. So we can use `marginal` to get the posterior joint distribution of `slope` and `intercept`."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.192910Z",
"iopub.status.busy": "2021-04-16T19:39:27.192447Z",
"iopub.status.idle": "2021-04-16T19:39:27.200629Z",
"shell.execute_reply": "2021-04-16T19:39:27.200147Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
\n",
"
probs
\n",
"
\n",
"
\n",
"
Slope
\n",
"
Intercept
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
-0.5
\n",
"
54.000
\n",
"
1.681717e-07
\n",
"
\n",
"
\n",
"
54.525
\n",
"
2.268085e-07
\n",
"
\n",
"
\n",
"
55.050
\n",
"
3.015062e-07
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Slope Intercept\n",
"-0.5 54.000 1.681717e-07\n",
" 54.525 2.268085e-07\n",
" 55.050 3.015062e-07\n",
"dtype: float64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from utils import marginal\n",
"\n",
"posterior2 = marginal(posterior_opt, 1)\n",
"posterior2.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The result is a `Pmf` with two columns in the index.\n",
"To plot it, we have to unstack it."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.204066Z",
"iopub.status.busy": "2021-04-16T19:39:27.203624Z",
"iopub.status.idle": "2021-04-16T19:39:27.226398Z",
"shell.execute_reply": "2021-04-16T19:39:27.225993Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from utils import plot_contour\n",
"\n",
"plot_contour(joint_posterior)\n",
"decorate(title='Posterior joint distribution of slope and intercept')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The ovals in the contour plot are aligned with the axes, which indicates that there is no correlation between `slope` and `inter` in the posterior distribution, which is what we expect since we centered the values.\n",
"\n",
"In this example, the motivating question is about the slope of the line, so we answered it by looking at the posterior distribution of slope.\n",
"\n",
"In the next example, the motivating question is about prediction, so we'll use the joint posterior distribution to generate predictive distributions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Marathon World Record\n",
"\n",
"For many running events, if you plot the world record pace over time, the result is a remarkably straight line. People, [including me](http://allendowney.blogspot.com/2011/04/two-hour-marathon-in-2045.html), have speculated about possible reasons for this phenomenon.\n",
"\n",
"People have also speculated about when, if ever, the world record time for the marathon will be less than two hours.\n",
"(Note: In 2019 Eliud Kipchoge ran the marathon distance in under two hours, which is an astonishing achievement that I fully appreciate, but for several reasons it did not count as a world record).\n",
"\n",
"So, as a second example of Bayesian regression, we'll consider the world record progression for the marathon (for male runners), estimate the parameters of a linear model, and use the model to predict when a runner will break the two-hour barrier. "
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The following cell downloads a web page from Wikipedia that includes a table of marathon world records, and uses Pandas to put the data in a `DataFrame`."
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.418039Z",
"iopub.status.busy": "2021-04-16T19:39:27.417570Z",
"iopub.status.idle": "2021-04-16T19:39:27.824997Z",
"shell.execute_reply": "2021-04-16T19:39:27.825376Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"url = 'https://en.wikipedia.org/wiki/Marathon_world_record_progression#Men'\n",
"tables = pd.read_html(url)\n",
"len(tables)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"If that doesn't work, I have made a copy of this page available. The following cell downloads and parses it."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.828135Z",
"iopub.status.busy": "2021-04-16T19:39:27.827662Z",
"iopub.status.idle": "2021-04-16T19:39:27.829786Z",
"shell.execute_reply": "2021-04-16T19:39:27.829411Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"#import os\n",
"\n",
"#datafile = 'Marathon_world_record_progression.html'\n",
"#download('https://github.com/AllenDowney/ThinkBayes2/raw/master/data/Marathon_world_record_progression.html')\n",
"\n",
"#tables = pd.read_html(datafile)\n",
"#len(tables)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The first table is the one we want."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.838976Z",
"iopub.status.busy": "2021-04-16T19:39:27.838551Z",
"iopub.status.idle": "2021-04-16T19:39:27.842313Z",
"shell.execute_reply": "2021-04-16T19:39:27.842643Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Time
\n",
"
Name
\n",
"
Nationality
\n",
"
Date
\n",
"
Event/Place
\n",
"
Source
\n",
"
Notes
\n",
"
\n",
" \n",
" \n",
"
\n",
"
48
\n",
"
2:02:57
\n",
"
Dennis Kimetto
\n",
"
Kenya
\n",
"
September 28, 2014
\n",
"
Berlin Marathon
\n",
"
IAAF[86][87] ARRS[83]
\n",
"
The ARRS notes Kimetto's extended time as 2:02...
\n",
"
\n",
"
\n",
"
49
\n",
"
2:01:39
\n",
"
Eliud Kipchoge
\n",
"
Kenya
\n",
"
September 16, 2018
\n",
"
Berlin Marathon
\n",
"
IAAF[1]
\n",
"
NaN
\n",
"
\n",
"
\n",
"
50
\n",
"
2:01:09
\n",
"
Eliud Kipchoge
\n",
"
Kenya
\n",
"
September 25, 2022
\n",
"
Berlin Marathon
\n",
"
IAAF[88]
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Time Name Nationality Date Event/Place \\\n",
"48 2:02:57 Dennis Kimetto Kenya September 28, 2014 Berlin Marathon \n",
"49 2:01:39 Eliud Kipchoge Kenya September 16, 2018 Berlin Marathon \n",
"50 2:01:09 Eliud Kipchoge Kenya September 25, 2022 Berlin Marathon \n",
"\n",
" Source Notes \n",
"48 IAAF[86][87] ARRS[83] The ARRS notes Kimetto's extended time as 2:02... \n",
"49 IAAF[1] NaN \n",
"50 IAAF[88] NaN "
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table = tables[0]\n",
"table.tail(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"We can use Pandas to parse the dates.\n",
"A few of them include notes that cause parsing problems, but the argument `errors='coerce'` tells Pandas to fill invalid dates with `NaT`, which is a version of `NaN` that represents \"not a time\". "
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.853767Z",
"iopub.status.busy": "2021-04-16T19:39:27.853247Z",
"iopub.status.idle": "2021-04-16T19:39:27.855693Z",
"shell.execute_reply": "2021-04-16T19:39:27.856161Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"0 1908-07-24\n",
"1 1909-01-01\n",
"2 1909-02-12\n",
"3 1909-05-08\n",
"4 NaT\n",
"Name: date, dtype: datetime64[ns]"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table['date'] = pd.to_datetime(table['Date'], errors='coerce')\n",
"table['date'].head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"We can also use Pandas to parse the record times."
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.860393Z",
"iopub.status.busy": "2021-04-16T19:39:27.859869Z",
"iopub.status.idle": "2021-04-16T19:39:27.861986Z",
"shell.execute_reply": "2021-04-16T19:39:27.861604Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"table['time'] = pd.to_timedelta(table['Time'])"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"And convert the times to paces in miles per hour."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.868089Z",
"iopub.status.busy": "2021-04-16T19:39:27.867544Z",
"iopub.status.idle": "2021-04-16T19:39:27.869998Z",
"shell.execute_reply": "2021-04-16T19:39:27.870375Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"0 8.967143\n",
"1 9.099504\n",
"2 9.419942\n",
"3 9.465508\n",
"4 9.672854\n",
"Name: y, dtype: float64"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table['y'] = 26.2 / table['time'].dt.total_seconds() * 3600\n",
"table['y'].head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"The following function plots the results."
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.874390Z",
"iopub.status.busy": "2021-04-16T19:39:27.873871Z",
"iopub.status.idle": "2021-04-16T19:39:27.876092Z",
"shell.execute_reply": "2021-04-16T19:39:27.875730Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"def plot_speeds(df):\n",
" \"\"\"Plot marathon world record speed as a function of time.\n",
" \n",
" df: DataFrame with date and mph\n",
" \"\"\"\n",
" plt.axhline(13.1, color='C5', ls='--')\n",
" plt.plot(df['date'], df['y'], 'o', \n",
" label='World record speed', \n",
" color='C1', alpha=0.5)\n",
" \n",
" decorate(xlabel='Date',\n",
" ylabel='Speed (mph)')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Here's what the results look like.\n",
"The dashed line shows the speed required for a two-hour marathon, 13.1 miles per hour."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:27.896251Z",
"iopub.status.busy": "2021-04-16T19:39:27.894071Z",
"iopub.status.idle": "2021-04-16T19:39:28.025535Z",
"shell.execute_reply": "2021-04-16T19:39:28.026172Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_speeds(table)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"It's not a perfectly straight line. In the early years of the marathon, the record speed increased quickly; since about 1970, it has been increasing more slowly.\n",
"\n",
"For our analysis, let's focus on the recent progression, starting in 1970."
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.039659Z",
"iopub.status.busy": "2021-04-16T19:39:28.039051Z",
"iopub.status.idle": "2021-04-16T19:39:28.041586Z",
"shell.execute_reply": "2021-04-16T19:39:28.041953Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Time
\n",
"
Name
\n",
"
Nationality
\n",
"
Date
\n",
"
Event/Place
\n",
"
Source
\n",
"
Notes
\n",
"
date
\n",
"
time
\n",
"
y
\n",
"
\n",
" \n",
" \n",
"
\n",
"
32
\n",
"
2:09:28.8
\n",
"
Ron Hill
\n",
"
United Kingdom
\n",
"
July 23, 1970
\n",
"
Edinburgh, Scotland
\n",
"
ARRS[9]
\n",
"
NaN
\n",
"
1970-07-23
\n",
"
0 days 02:09:28.800000
\n",
"
12.140871
\n",
"
\n",
"
\n",
"
33
\n",
"
2:09:12
\n",
"
Ian Thompson
\n",
"
United Kingdom
\n",
"
January 31, 1974
\n",
"
Christchurch, New Zealand
\n",
"
ARRS[9]
\n",
"
NaN
\n",
"
1974-01-31
\n",
"
0 days 02:09:12
\n",
"
12.167183
\n",
"
\n",
"
\n",
"
34
\n",
"
2:09:05.6
\n",
"
Shigeru So
\n",
"
Japan
\n",
"
February 5, 1978
\n",
"
Beppu-ÅŒita Marathon
\n",
"
ARRS[9]
\n",
"
NaN
\n",
"
1978-02-05
\n",
"
0 days 02:09:05.600000
\n",
"
12.177236
\n",
"
\n",
"
\n",
"
35
\n",
"
2:09:01
\n",
"
Gerard Nijboer
\n",
"
Netherlands
\n",
"
April 26, 1980
\n",
"
Amsterdam Marathon
\n",
"
ARRS[9]
\n",
"
NaN
\n",
"
1980-04-26
\n",
"
0 days 02:09:01
\n",
"
12.184472
\n",
"
\n",
"
\n",
"
36
\n",
"
2:08:18
\n",
"
Robert De Castella
\n",
"
Australia
\n",
"
December 6, 1981
\n",
"
Fukuoka Marathon
\n",
"
IAAF,[53] ARRS[9]
\n",
"
NaN
\n",
"
1981-12-06
\n",
"
0 days 02:08:18
\n",
"
12.252533
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Time Name Nationality Date \\\n",
"32 2:09:28.8 Ron Hill United Kingdom July 23, 1970 \n",
"33 2:09:12 Ian Thompson United Kingdom January 31, 1974 \n",
"34 2:09:05.6 Shigeru So Japan February 5, 1978 \n",
"35 2:09:01 Gerard Nijboer Netherlands April 26, 1980 \n",
"36 2:08:18 Robert De Castella Australia December 6, 1981 \n",
"\n",
" Event/Place Source Notes date \\\n",
"32 Edinburgh, Scotland ARRS[9] NaN 1970-07-23 \n",
"33 Christchurch, New Zealand ARRS[9] NaN 1974-01-31 \n",
"34 Beppu-ÅŒita Marathon ARRS[9] NaN 1978-02-05 \n",
"35 Amsterdam Marathon ARRS[9] NaN 1980-04-26 \n",
"36 Fukuoka Marathon IAAF,[53] ARRS[9] NaN 1981-12-06 \n",
"\n",
" time y \n",
"32 0 days 02:09:28.800000 12.140871 \n",
"33 0 days 02:09:12 12.167183 \n",
"34 0 days 02:09:05.600000 12.177236 \n",
"35 0 days 02:09:01 12.184472 \n",
"36 0 days 02:08:18 12.252533 "
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"recent = table['date'] > pd.to_datetime('1970')\n",
"data = table.loc[recent].copy()\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the notebook for this chapter, you can see how I loaded and cleaned the data. The result is a `DataFrame` that contains the following columns (and additional information we won't use):\n",
"\n",
"* `date`, which is a Pandas `Timestamp` representing the date when the world record was broken, and\n",
"\n",
"* `speed`, which records the record-breaking pace in mph.\n",
"\n",
"Here's what the results look like, starting in 1970:"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.057142Z",
"iopub.status.busy": "2021-04-16T19:39:28.056331Z",
"iopub.status.idle": "2021-04-16T19:39:28.210918Z",
"shell.execute_reply": "2021-04-16T19:39:28.210485Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_speeds(data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The data points fall approximately on a line, although it's possible that the slope is increasing.\n",
"\n",
"To prepare the data for regression, I'll subtract away the approximate midpoint of the time interval, 1995."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.214686Z",
"iopub.status.busy": "2021-04-16T19:39:28.214200Z",
"iopub.status.idle": "2021-04-16T19:39:28.215796Z",
"shell.execute_reply": "2021-04-16T19:39:28.216157Z"
}
},
"outputs": [],
"source": [
"offset = pd.to_datetime('1995')\n",
"timedelta = table['date'] - offset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When we subtract two `Timestamp` objects, the result is a \"time delta\", which we can convert to seconds and then to years."
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.221866Z",
"iopub.status.busy": "2021-04-16T19:39:28.220942Z",
"iopub.status.idle": "2021-04-16T19:39:28.223586Z",
"shell.execute_reply": "2021-04-16T19:39:28.223108Z"
}
},
"outputs": [],
"source": [
"data['x'] = timedelta.dt.total_seconds() / 3600 / 24 / 365.24"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.231701Z",
"iopub.status.busy": "2021-04-16T19:39:28.231064Z",
"iopub.status.idle": "2021-04-16T19:39:28.234172Z",
"shell.execute_reply": "2021-04-16T19:39:28.233719Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"count 19.000000\n",
"mean 2.161520\n",
"std 16.212660\n",
"min -24.444201\n",
"25% -11.633447\n",
"50% 4.810536\n",
"75% 15.236557\n",
"max 27.732450\n",
"Name: x, dtype: float64"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['x'].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As in the previous example, I'll use least squares regression to compute point estimates for the parameters, which will help with choosing priors."
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.243896Z",
"iopub.status.busy": "2021-04-16T19:39:28.243090Z",
"iopub.status.idle": "2021-04-16T19:39:28.246900Z",
"shell.execute_reply": "2021-04-16T19:39:28.246348Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Intercept 12.464040\n",
"x 0.015931\n",
"dtype: float64"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import statsmodels.formula.api as smf\n",
"\n",
"formula = 'y ~ x'\n",
"results = smf.ols(formula, data=data).fit()\n",
"results.params"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The estimated intercept is about 12.5 mph, which is the interpolated world record pace for 1995. The estimated slope is about 0.015 mph per year, which is the rate the world record pace is increasing, according to the model.\n",
"\n",
"Again, we can use the standard deviation of the residuals as a point estimate for `sigma`."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.251555Z",
"iopub.status.busy": "2021-04-16T19:39:28.250995Z",
"iopub.status.idle": "2021-04-16T19:39:28.253487Z",
"shell.execute_reply": "2021-04-16T19:39:28.253872Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.04419653543387639"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results.resid.std()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These parameters give us a good idea where we should put the prior distributions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Priors\n",
"\n",
"Here are the prior distributions I chose for `slope`, `intercept`, and `sigma`."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.258022Z",
"iopub.status.busy": "2021-04-16T19:39:28.257434Z",
"iopub.status.idle": "2021-04-16T19:39:28.259420Z",
"shell.execute_reply": "2021-04-16T19:39:28.259062Z"
}
},
"outputs": [],
"source": [
"qs = np.linspace(0.012, 0.018, 51)\n",
"prior_slope = make_uniform(qs, 'Slope')"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.263808Z",
"iopub.status.busy": "2021-04-16T19:39:28.263043Z",
"iopub.status.idle": "2021-04-16T19:39:28.265744Z",
"shell.execute_reply": "2021-04-16T19:39:28.265217Z"
}
},
"outputs": [],
"source": [
"qs = np.linspace(12.4, 12.5, 41)\n",
"prior_inter = make_uniform(qs, 'Intercept')"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.270542Z",
"iopub.status.busy": "2021-04-16T19:39:28.269999Z",
"iopub.status.idle": "2021-04-16T19:39:28.272030Z",
"shell.execute_reply": "2021-04-16T19:39:28.272481Z"
}
},
"outputs": [],
"source": [
"qs = np.linspace(0.01, 0.21, 31)\n",
"prior_sigma = make_uniform(qs, 'Sigma')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And here's the joint prior distribution."
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:39:28.277187Z",
"iopub.status.busy": "2021-04-16T19:39:28.276205Z",
"iopub.status.idle": "2021-04-16T19:39:28.287288Z",
"shell.execute_reply": "2021-04-16T19:39:28.287636Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"posterior_inter.plot(color='C1')\n",
"decorate(xlabel='intercept',\n",
" ylabel='PDF',\n",
" title='Posterior marginal distribution of intercept')"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.717982Z",
"iopub.status.busy": "2021-04-16T19:40:08.717261Z",
"iopub.status.idle": "2021-04-16T19:40:08.721465Z",
"shell.execute_reply": "2021-04-16T19:40:08.720768Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12.464 [12.445 12.4825]\n"
]
}
],
"source": [
"summarize(posterior_inter)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The posterior mean is about 12.5 mph, which is the world record marathon pace the model predicts for the midpoint of the date range, 1994.\n",
"\n",
"And here's the posterior distribution of `slope`."
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.774456Z",
"iopub.status.busy": "2021-04-16T19:40:08.760561Z",
"iopub.status.idle": "2021-04-16T19:40:08.957028Z",
"shell.execute_reply": "2021-04-16T19:40:08.957858Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"posterior_slope.plot(color='C4')\n",
"decorate(xlabel='Slope',\n",
" ylabel='PDF',\n",
" title='Posterior marginal distribution of slope')"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.966418Z",
"iopub.status.busy": "2021-04-16T19:40:08.965585Z",
"iopub.status.idle": "2021-04-16T19:40:08.972250Z",
"shell.execute_reply": "2021-04-16T19:40:08.972843Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.016 [0.01476 0.01704]\n"
]
}
],
"source": [
"summarize(posterior_slope)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The posterior mean is about 0.015 mph per year, or 0.15 mph per decade.\n",
"\n",
"That's interesting, but it doesn't answer the question we're interested in: When will there be a two-hour marathon? To answer that, we have to make predictions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prediction\n",
"\n",
"To generate predictions, I'll draw a sample from the posterior distribution of parameters, then use the regression equation to combine the parameters with the data.\n",
"\n",
"`Pmf` provides `choice`, which we can use to draw a random sample with replacement, using the posterior probabilities as weights."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.976629Z",
"iopub.status.busy": "2021-04-16T19:40:08.975627Z",
"iopub.status.idle": "2021-04-16T19:40:08.979423Z",
"shell.execute_reply": "2021-04-16T19:40:08.980266Z"
},
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"np.random.seed(17)"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.983792Z",
"iopub.status.busy": "2021-04-16T19:40:08.983006Z",
"iopub.status.idle": "2021-04-16T19:40:08.987959Z",
"shell.execute_reply": "2021-04-16T19:40:08.988740Z"
}
},
"outputs": [],
"source": [
"sample = posterior.choice(101)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is an array of tuples. Looping through the sample, we can use the regression equation to generate predictions for a range of `xs`."
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:08.995701Z",
"iopub.status.busy": "2021-04-16T19:40:08.994987Z",
"iopub.status.idle": "2021-04-16T19:40:09.151613Z",
"shell.execute_reply": "2021-04-16T19:40:09.151148Z"
}
},
"outputs": [],
"source": [
"xs = np.arange(-25, 50, 2)\n",
"pred = np.empty((len(sample), len(xs)))\n",
"\n",
"for i, (slope, inter, sigma) in enumerate(sample):\n",
" epsilon = norm(0, sigma).rvs(len(xs))\n",
" pred[i] = inter + slope * xs + epsilon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each prediction is an array with the same length as `xs`, which I store as a row in `pred`. So the result has one row for each sample and one column for each value of `x`.\n",
"\n",
"We can use `percentile` to compute the 5th, 50th, and 95th percentiles in each column."
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.158240Z",
"iopub.status.busy": "2021-04-16T19:40:09.157499Z",
"iopub.status.idle": "2021-04-16T19:40:09.161662Z",
"shell.execute_reply": "2021-04-16T19:40:09.162303Z"
}
},
"outputs": [],
"source": [
"low, median, high = np.percentile(pred, [5, 50, 95], axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To show the results, I'll plot the median of the predictions as a line and the 90% credible interval as a shaded area."
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.193803Z",
"iopub.status.busy": "2021-04-16T19:40:09.193041Z",
"iopub.status.idle": "2021-04-16T19:40:09.467845Z",
"shell.execute_reply": "2021-04-16T19:40:09.468385Z"
},
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"times = pd.to_timedelta(xs*365.24, unit='days') + offset\n",
"\n",
"plt.fill_between(times, low, high, \n",
" color='C2', alpha=0.1)\n",
"plt.plot(times, median, color='C2')\n",
"\n",
"plot_speeds(data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The dashed line shows the two-hour marathon pace, which is 13.1 miles per hour.\n",
"Visually we can estimate that the prediction line hits the target pace between 2030 and 2040.\n",
"\n",
"To make this more precise, we can use interpolation to see when the predictions cross the finish line. SciPy provides `interp1d`, which does linear interpolation by default."
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.477523Z",
"iopub.status.busy": "2021-04-16T19:40:09.475247Z",
"iopub.status.idle": "2021-04-16T19:40:09.489783Z",
"shell.execute_reply": "2021-04-16T19:40:09.488592Z"
}
},
"outputs": [],
"source": [
"from scipy.interpolate import interp1d\n",
"\n",
"future = np.array([interp1d(high, xs)(13.1),\n",
" interp1d(median, xs)(13.1),\n",
" interp1d(low, xs)(13.1)])"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.501330Z",
"iopub.status.busy": "2021-04-16T19:40:09.500502Z",
"iopub.status.idle": "2021-04-16T19:40:09.504183Z",
"shell.execute_reply": "2021-04-16T19:40:09.504946Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
datetime
\n",
"
\n",
" \n",
" \n",
"
\n",
"
early
\n",
"
2028-03-24 16:47:21.722121600
\n",
"
\n",
"
\n",
"
median
\n",
"
2035-03-10 14:59:51.082915200
\n",
"
\n",
"
\n",
"
late
\n",
"
2040-12-29 22:53:36.679804800
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" datetime\n",
"early 2028-03-24 16:47:21.722121600\n",
"median 2035-03-10 14:59:51.082915200\n",
"late 2040-12-29 22:53:36.679804800"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dts = pd.to_timedelta(future*365.24, unit='day') + offset\n",
"pd.DataFrame(dict(datetime=dts),\n",
" index=['early', 'median', 'late'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The median prediction is 2036, with a 90% credible interval from 2032 to 2043. So there is about a 5% chance we'll see a two-hour marathon before 2032."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary\n",
"\n",
"This chapter introduces Bayesian regression, which is based on the same model as least squares regression; the difference is that it produces a posterior distribution for the parameters rather than point estimates.\n",
"\n",
"In the first example, we looked at changes in snowfall in Norfolk County, Massachusetts, and concluded that we get more snowfall now than when I was young, contrary to my expectation.\n",
"\n",
"In the second example, we looked at the progression of world record pace for the men's marathon, computed the joint posterior distribution of the regression parameters, and used it to generate predictions for the next 20 years.\n",
"\n",
"These examples have three parameters, so it takes a little longer to compute the likelihood of the data.\n",
"With more than three parameters, it becomes impractical to use grid algorithms. \n",
"\n",
"In the next few chapters, we'll explore other algorithms that reduce the amount of computation we need to do a Bayesian update, which makes it possible to use models with more parameters.\n",
"\n",
"But first, you might want to work on these exercises."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercises\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise:** I am under the impression that it is warmer around here than it used to be. In this exercise, you can put my conjecture to the test.\n",
"\n",
"We'll use the same dataset we used to model snowfall; it also includes daily low and high temperatures in Norfolk County, Massachusetts during my lifetime."
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Here's the data."
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.508642Z",
"iopub.status.busy": "2021-04-16T19:40:09.507790Z",
"iopub.status.idle": "2021-04-16T19:40:09.598819Z",
"shell.execute_reply": "2021-04-16T19:40:09.596426Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
STATION
\n",
"
NAME
\n",
"
DATE
\n",
"
PRCP
\n",
"
SNOW
\n",
"
SNWD
\n",
"
TMAX
\n",
"
TMIN
\n",
"
TOBS
\n",
"
WESD
\n",
"
WT01
\n",
"
WT03
\n",
"
WT04
\n",
"
WT05
\n",
"
WT06
\n",
"
WT08
\n",
"
WT09
\n",
"
WT11
\n",
"
WT16
\n",
"
WT18
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
1967-05-11
\n",
"
0.43
\n",
"
0.0
\n",
"
0.0
\n",
"
57
\n",
"
36.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
1967-05-12
\n",
"
0.00
\n",
"
0.0
\n",
"
0.0
\n",
"
58
\n",
"
39.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
1967-05-13
\n",
"
0.00
\n",
"
0.0
\n",
"
0.0
\n",
"
64
\n",
"
38.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" STATION NAME DATE PRCP SNOW SNWD TMAX \\\n",
"0 USC00190736 BLUE HILL COOP, MA US 1967-05-11 0.43 0.0 0.0 57 \n",
"1 USC00190736 BLUE HILL COOP, MA US 1967-05-12 0.00 0.0 0.0 58 \n",
"2 USC00190736 BLUE HILL COOP, MA US 1967-05-13 0.00 0.0 0.0 64 \n",
"\n",
" TMIN TOBS WESD WT01 WT03 WT04 WT05 WT06 WT08 WT09 WT11 WT16 \\\n",
"0 36.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 39.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 38.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
" WT18 \n",
"0 NaN \n",
"1 NaN \n",
"2 NaN "
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('2239075.csv', parse_dates=[2])\n",
"df.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Again, I'll create a column that contains the year part of the dates."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.605621Z",
"iopub.status.busy": "2021-04-16T19:40:09.604420Z",
"iopub.status.idle": "2021-04-16T19:40:09.610189Z",
"shell.execute_reply": "2021-04-16T19:40:09.610858Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"df['YEAR'] = df['DATE'].dt.year"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"This dataset includes `TMIN` and `TMAX`, which are the daily low and high temperatures in degrees F.\n",
"I'll create a new column with the daily midpoint of the low and high temperatures."
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.620934Z",
"iopub.status.busy": "2021-04-16T19:40:09.620132Z",
"iopub.status.idle": "2021-04-16T19:40:09.624087Z",
"shell.execute_reply": "2021-04-16T19:40:09.625038Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"df['TMID'] = (df['TMIN'] + df['TMAX']) / 2"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Now we can group by year and compute the mean of these daily temperatures."
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.634750Z",
"iopub.status.busy": "2021-04-16T19:40:09.632057Z",
"iopub.status.idle": "2021-04-16T19:40:09.638953Z",
"shell.execute_reply": "2021-04-16T19:40:09.639856Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"54"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tmid = df.groupby('YEAR')['TMID'].mean()\n",
"len(tmid)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Again, I'll drop the first and last years, which are incomplete."
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.646871Z",
"iopub.status.busy": "2021-04-16T19:40:09.642980Z",
"iopub.status.idle": "2021-04-16T19:40:09.653320Z",
"shell.execute_reply": "2021-04-16T19:40:09.654470Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"52"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"complete = tmid.iloc[1:-1]\n",
"len(complete)"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Here's what the time series looks like."
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.672386Z",
"iopub.status.busy": "2021-04-16T19:40:09.671591Z",
"iopub.status.idle": "2021-04-16T19:40:09.886776Z",
"shell.execute_reply": "2021-04-16T19:40:09.887123Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAEYCAYAAAD4czk4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnQUlEQVR4nO3df5xcVX3/8dc7gCwmGwKYREyCgZaoCAHCGlTyVYkVBYGoyC9FothCv0ULtmilxYqKWkU09QfV1IogEGgECgVFohhpVL7pRpBEAliRSoAvCSExm5SNhHz6x72bTEJ25s5k7sy9M+/n47GPnblz78xnz+7OmXPO55yjiMDMzKxIRrQ7ADMzs+25cjIzs8Jx5WRmZoXjysnMzArHlZOZmRXOru0OIIsXvehFMXny5HaHYWZmTbBkyZKnImJstXNKUTlNnjyZ/v7+dodhZmZNIOm/a53jbj0zMyscV05mZlY4rpzMzKxwSjHmtCPPPvssK1asYHBwsN2htERPTw8TJ05kt912a3coZma5K23ltGLFCnp7e5k8eTKS2h1OriKC1atXs2LFCvbff/92h2NmlrvSdusNDg6yzz77dHzFBCCJffbZp2taiWZmpW05AV1RMQ3ppp/VrJMtfXglNy96iEefXMek8aOZNWMKhxwwrt1hFU7NlpOkcZLeLulcSWdJmi6ptC0uM7N2WfrwSubMX8zagUEmjO1l7cAgc+YvZunDK9sdWuEMW8lIOlrSD4DbgGOBfYGDgIuApZI+IWl0a8IsntWrV3PYYYdx2GGH8eIXv5gJEyZsuS+J97znPVvO3bRpE2PHjuX4448H4Nvf/jYf+MAHALj44ou3XHvggQfyjne8g/vvv78tP5OZ5evmRQ+x16gexvT2MGKEGNPbw16jerh50UPtDq1wqnXrHQf8WUT8bvsHJO0KHA+8Cbghp9iaqtlN6X322Yd7770XSCqYUaNGccEFFwAwatQoli1bxjPPPMMee+zBggULmDBhwrDP9aEPfWjLtddffz0zZ85k6dKljB1bdXUPMyuZR59cx4SxvdscGz1ydx59cl2bIiquYVtOEfHhHVVM6WObIuLfIqI0FVOrm9LHHnsst912GwDz5s3j9NNPz3TdqaeeyjHHHMO1116bW2xm1h6Txo9m3YaN2xxbt2Ejk8Z3bSfUsKp163274vbslkSTk3Y0pU877TSuu+46BgcHue+++zjyyCMzXztt2jQeeOCB3GIzs/aYNWMKa9YPsnZgkM2bg7UDg6xZP8isGVPaHVrhVEtsOLTi9nl5B5KnR59cx+iRu29zLO+m9NSpU3nkkUeYN28exx13XF3XRkROUZlZOx1ywDjOP3k6Y3p7eGzVAGN6ezj/5OnO1tuBamNOHfMOOWn8aNYODDKmt2fLsVY0pU888UQuuOACFi5cyOrVqzNfd88999DX15djZGbWLoccMM6VUQbVKqeJkr4MqOL2FhHxl7lG1kSzZkxhzvzFQNJiWrdhI2vWDzL72Km5vu5ZZ53FnnvuySGHHMLChQszXXPDDTdwxx13cNlll+Uam5lZkVWrnD5ccbvUmykNNaUrs/VmHzs1908vEydO5LzzaveIfulLX+Lqq69mw4YNHHzwwdx5553O1DOzrqYyjG/09fXF9psNLl++nFe84hVtiqg9uvFnNrPOI2lJRFQdu/BKD2ZmVjiunMzMrHBKXTmVoUuyWbrpZzUzq7kq+fZZeqnfA/0RcXONax8BBoDngE0R0SfpUuAE4A/Ab4D3RcTaOuOmp6eH1atXd8W2GUP7OfX09NQ+2cysA2TZMqMHeDkwP71/EvAr4P2Sjo6I82tcf3REPFVxfwFwYURskvQ54ELgb+oLO8mEW7FiBatWrar30lIa2gnXzKwbZKmc/hiYGRGbACT9E3AHyaKvS+t9wYi4o+Lu3cA7630OgN122827wpqZdagsY04TgJEV90cCL4mI54CNO75kiwDukLRE0tk7ePws4Ps7ulDS2ZL6JfV3S+vIzMwSWVpOnwfulbSQZLWI1wGfkTQS+GGNa4+KiMcljQMWSHogIu4CkPR3wCbgmh1dGBFzgbmQzHPK8sOYmVlnqFk5RcS/SPoeMJ2kcvrbiHg8ffjDw18JQ+dFxEpJN6XPcVe6yvnxwBvDaWhmZradLNu0C3gjcGhE/Buwq6TpGa4bKal36DZwDLBM0ltIEiBOjIj/2ZngzcysM2Xp1rsc2AzMBD5Jkhp+A/CqGteNB25K07x3Ba6NiNsl/RewO0k3H8DdEfHnjYVvZmadKEvldGRETJN0D0BErJH0gloXRcTDbLsn1NDxP64/TDMz6yZZsvWelbQL6f5OksaStKTMzMxykaVy+jJwEzBO0qeBRcBnco3KzMy6WpZsvWskLSFJihDwtohYnntkZmbWtYatnCTtXXF3JTCv8rGIeDrPwMzMrHtVazktIRlnErAfsCa9PQb4HeC1g8ysay19eOU2u2vPmjEl9921u8mwY04RsX9EHAD8ADghIl4UEfuQTJ69sVUBmpkVzdKHVzJn/mLWDgwyYWwvawcGmTN/MUsfXtnu0DpGloSIV0XE94buRMT3gdfnF5KZWbHdvOgh9hrVw5jeHkaMEGN6e9hrVA83L3qo3aF1jCzznJ6SdBFwNUk33xnA6lyjMjMrsEefXMeEsb3bHBs9cncefXJdmyJ6vrJ3O2ZpOZ0OjCVJJ78pvX16nkGZmRXZpPGjWbdh200Z1m3YyKTxo9sU0bY6oduxZuUUEU9HxHkRcXhETIuI852pZ2bdbNaMKaxZP8jagUE2bw7WDgyyZv0gs2ZMaXdoQGd0Ow5bOUmaK+mQYR4bKeksSe/OLzQzs2I65IBxnH/ydMb09vDYqgHG9PZw/snTC9Nt9uiT6xg9cvdtjhWt27GWamNOlwMfSyuoZcAqki3bDwRGA99imL2YzKz4yj4m0W6HHDCusOU1afxo1g4MMqa3Z8uxInU7ZlEtlfzeiDiFZPXxrwH/AdwC/GlEHBoR/xgRtXbCNbMC6oQxCRte0bsds8iyfNF6YGH+oZhZq1SOSQBbvt+86KHCtgYsu6Fux8qW8exjp5bqd5slldzMOkwZUqFt5xS52zGLLKnkZtZhip4KbZa55SRpZERsyDMYM2uNWTOmMGf+YiBpMa3bsJE16weZfexUwMkS1n41W06SXivpfmB5ev9QSZfnHpmZ5aZaKrSTJawIsrScvgS8mSRTj4j4paTX5RqVmeVuuDEJJ0tYEWQac4qIR7c79FwOsZhZAXTCBE4rvywtp0clvRYISS8A/pK0i8/MOk/ZJ3B6vKwzZGk5/TlwLjABWAEclt43sw5U5gmcHi/rHFUrJ0m7AHMi4t0RMT4ixkXEGRHhLTPMOlTR142rphMWPLVE1W69iHhO0lhJL4iIP7QqKDNrr7JO4PTk4s6RZczpEeCnkm4Btsxziogv5hWUmVkjyj5eZltlGXN6HLg1Pbe34svMrFDKPF5m28qy8OsnWhGImdnO6oQFTy1Rs3KS9GMgtj8eETNzicjMbCeUdbzMtpVlzOmCits9wEnApnzCMTMzy9att2S7Qz+V9JOc4jEzM8vUrbd3xd0RwBHAi3OLyMzMul6Wbr0lJGNOIunO+y3w/jyDMjOz7palcnpFRAxWHpC0+3Anb3feI8AAyUKxmyKiT9LJwMXAK4DpEdFfV8RmZtbxslROPwOmbXfs5zs4NpyjI+KpivvLgHcA38h4vVnbeTFRq4f/XnbesJNwJb1Y0hHAHpIOlzQt/XoD8MJGXzAilkfEg41eb9ZqXkzU6uG/l+ao1nJ6M/BeYCJQuVTRAPC3GZ8/gDskBfCNiJibNTBJZwNnA+y3335ZLzNrOm++Z/Xw30tzDFs5RcSVwJWSToqIGxp8/qMi4nFJ44AFkh6IiLuyXJhWZHMB+vr6njcJ2KxVvJio1cN/L82RZZ7TDZLeCrySZBLu0PFPZrj28fT7Skk3AdOBTJWTWVF4MVGrh/9emqPmwq+Svg6cCnyQJJ38ZOClGa4bKal36DZwDEkyhFmp1FpMdOnDK7nkqkWcc+n3uOSqRR5b6HJefLY5FFG9x0zSfRExteL7KODGiDimxnUHADeld3cFro2IT0t6O/AVYCywFrg3It5c7bn6+vqiv98Z59Y+w2VfDQ1+7zWqh9Ejd2fdho2sWT9Yms35mskZalu5LKqTtCQi+qqek6FyWhwR0yXdTZICvhpYFhEHNi/U6lw5WVFdctWi53XhDN2/6MwZbYystVxJWz2yVE5Z9nP6d0ljgEuBX5BsPjhvp6Mz6wCPPrmO0SO3nZPejYPf3h7dmq1qQoSkEcCPImItcIOkW4GeiPh9K4IzKzoPfiecoWbNVrXlFBGbgcsq7m90xWS2lQe/E5PGj2bdho3bHOvGStqaJ0u33h2STpKk3KMxK5mhnVfH9Pbw2KoBxvT2dOU4iyvpcilDhmmWhIgBYCTJ4q3PkKSTR0S07COREyLMis8ZauVQhOSVLAkRWSbh9tY6x8zM26OXQ1mWV8oyCVeSzpD0sfT+JEnT8w/NzMyarSwZplnGnC4HXgO8K72/HvhabhGZmVluypK8kqVyOjIizgUGASJiDfCCXKMyM7NclCV5JUvl9KykXUi2v0DSWGBzrlGZmVkuypJhmmUn3C+TrJE3XtKngXcCF+UalZmZ5aYMyStZsvWukbQEeGN66G0RsTzfsMzMrJtlaTlBsi37UNfeHvmFY2ZmlqFykvT3JHs43UAyAfcKSfMj4pK8g+sUnpxoZlafLAkRpwOvioiLI+LjwKuBd+cbVucYmo29dmCQCWN7WTswyJz5iwu5XIiZWVFkqZweoWJ7dmB34De5RNOBvJWAmVn9sow5bQR+JWkByZjTm4BFkr4MEBF/mWN8peetBMzM6pelcrqJrdutAyzMJ5TO5P1+zMzqlyWV/MpWBNKpZs2Ywpz5iwG2WQF49rFT2xyZWes4KcjqlWXh1+Ml3SPpaUnrJA1Icp9URmWZjW2WFycFWSOydOvNAd4BLI1amz/ZDpVhNrZZXsqyRYMVS5ZsvUeBZa6YzKwRZdmiwYolS8vpI8D3JP2EJHMPgIj4Ym5RmVnHcFKQNSJL5fRpkj2cevBWGWZWJycFlUeREldUq7dOUn+tvd7z1tfXF/39/e0Mwcx2QpHe9GzHhhJX9hrVs82HiDwSuCQtqVWvZGk5/VDSMRFxR5PiMrMu46Sg4ita4kqWhIhzgdslDTqV3MysMxUtcSXLJNzeWueYmVm5FS1xJcuWGSJZhXz/iPiUpEnAvhGxOPfozMy6RLvH5YqWuJKlW+9y4DXAu9L764Gv5RaRmVmXKcIqGkVbzSZLQsSRETFN0j0AEbFGklPKzcyapCjJCEVKXMlSOT0raWiLdiSNBTbnGpWZWRfZma112t0dmJcs3XpfJtkyY5ykTwOLgM9meXJJj0haKuleSf3psb0lLZD06/T7Xg1Hb2bWASaNH826DRu3OZYlGaEI3YF5qVk5RcQ1JEsYfRZ4AnhbRPxrHa9xdEQcVjHh6qPAjyLiQOBH6X0zs641a8YU1qwfZO3AIJs3B2sHBlmzfpBZM6ZUva6Td9rOsmXGdyLigYj4WkR8NSKWS/rOTrzmLGBoj6grgbftxHOZmZVeo8kIRZub1ExZxpxeWXknHX86IuPzB3CHpAC+ERFzgfER8QRARDwhaYelL+ls4GyA/fbbL+PLmZnVrwjjNo0kIxRtblIzDdtyknShpAFgaroyxLr0/krg5ozPf1RETAOOBc6V9LqsgUXE3Ijoi4i+sWPHZr3MzKwuZR63abQ7sAyGrZwi4rPp6hCXRsTo9Ks3IvaJiAuzPHlEPJ5+X0mSVDEdeFLSvgDp9+L/BZhZxyrzuE3R5iY1U5blizJVRNuTNBIYERED6e1jgE8CtwCzgX9Iv2dthZmZNd3OpHEXQZHmJjVTljGnRo0HbkpWP2JX4NqIuF3SfwL/Kun9wO+Ak3OMwcysqk4etymz3CqniHgYOHQHx1cDb8zrdc3M6lG0NeUskSWV/AuSXlnrPDOzMurkcZsyy9JyegCYK2lX4ApgXkT8Pt+wrAiprWbdolPHbcosywoR34yIo4AzgcnAfZKulXR03sF1qzKntpqZNUOmMad04u3L06+ngF8CfyXpnIg4Lcf4ulJRVijOg1uEZpZFljGnLwIPAscBn4mIIyLicxFxAnB43gF2o05dksQtQjPLKsuq5MuAqRFxzg52v52eQ0xdr9EViouuzJMdzay1qi1fNE3SNOBe4OVD9yuO48SIfHTqkiSd2iI0s+arNuZ0WZXHApjZ5FgsNZTaWjk2M/vYqaUfm/FkR2snj3eWy7CVU0Q4G6+NOjG11ZMdrV2Gxjv3GtWzzXin5zMV17CVk6SZEXGnpHfs6PGIuDG/sKwTdWqL0IqvkzNgO1W1br3XA3cCJ+zgsQBcOVndOrFFaMVX9sVdu1G1br2Pp9/f17pwzMyaz+Od5ZN1Eu5bSXbE3fKbjYhP5hWUmVk19SY3eLyzfLJMwv06cCrwQUAkW1y8NOe4zMx2qJHJ3F7ctXyytJxeGxFTJd0XEZ+QdBkebzKzNmk0ucHjneWSZYWIZ9Lv/yPpJcCzwP75hWRmNjxP5u4OWVpOt0oaA1wK/IIkU++beQZl1s08WbQ6Jzd0B0VE9pOl3YGeVi9b1NfXF/39/a18ya7iN8PiqJwsWjlw7/GRrVxG7dHM9wlJSyKir+o5w1VOw02+HdLKSbiunPLjf/RiueSqRc9rFQzdv+jMGW2MrFj8gaq1mv0+kaVyqtatNzT5dhzwWpIJuQBHAwtxUkRH8Mz5YvFk0Wy6Lbmh3ZVxO94nqk3CfR+ApFuBgyLiifT+vsDXconGWq4ob4bt/ucrCo+n2PaKsC5gO94nsmTrTR6qmFJPAuXeu8G2KMLeUd6EcKtO3S7FGleEfdDa8T6RpXJaKOkHkt4raTZwG/Dj3CKylirCm2ER/vmKwpNFbXtFSJ1vx/tEzVTyiPiApLcDr0sPzY2Im3KLyFqqCCuFF6VrsSiqjae4+7P7FKGrtx3vE5nW1ksrI1dIHardg8tF+OcrgyKMPVjrFWVdwFa/T2Tp1jPLVRG6FsvA3Z/dqVu7ejO1nMzyVISuxTJw92f3anfvRjtU2wn3RxHxRkmfi4i/aWVQ1n268Z+vXu7+tG5SrVtvX0mvB06UdLikaZVfrQrQzBLu/rRuUq1b7++BjwITgS9u91gAM/MKysyez92f1k2qrRDxXeC7kj4WEZ9qYUxmNgx3f1q3yDLP6VOSTmTrPKeFEXFrvmGZmVk3q1k5SfosMB24Jj10nqSjIuLCLC8gaRegH3gsIo6XdCjwdWAU8Ajw7ohwulGTeJJmbS4js+LLMs/prcCbIuJbEfEt4C3psazOA5ZX3P8m8NGIOIRkYu+H63guq8Jr1NXmMjIrh6yTcMdU3N4z65NLmkhSkVXunPsy4K709gLgpKzPZ9V5kmZt3VhGSx9eySVXLeKcS7/HJVctckVspZClcvoscI+kb0u6ElgCfCbj888BPgJsrji2DDgxvX0yMGlHF0o6W1K/pP5Vq1ZlfLnuVoQFIouu28rILUUrq5qVU0TMA15NsrngjcBrIuK6WtdJOh5YGRFLtnvoLOBcSUuAXuAPw7zu3Ijoi4i+sWPH1no5oxjbXxRdt5VRN7YUrTNk6taLiCci4paIuDki/n/G5z6KZALvI8B1wExJV0fEAxFxTEQcAcwDftNQ5PY8nqRZW7eVUbe1FK1z5Lbwa0RcGBETI2IycBpwZ0ScIWkcgKQRwEUkmXvWBN26QGQ9uq2Muq2laJ2jHQu/ni7p3PT2jcAVbYihY3mSZm3dVEZF2W7BrF6KiNonSTOAAyPiCkljgVER8dvco0v19fVFf39/q16uKs+RKQf/nrZyWVjRSFoSEX1Vz6lVOUn6ONAHvCwipkh6CTA/Io5qXqjVFaVyqtzsrfJTaCd3C5WRf09mxZalcsoy5vR2ktTvDQAR8ThJll3XceZTOfj3ZFZ+Wcac/hARISkAJI3MOabCymOzN3e5NF8ZNuXz792suiwtp3+V9A1gjKQ/A34I/HO+YRVTszOfPEEyH0XPUPPvvVy8wkZ7ZJmE+wXgu8ANJEsP/X1EfCXvwFqh3j+6Zs+RcfdTPoo+l8m/9/LwB4n2yZRKHhELSNbB6xiVg+aVf3TVBs2bvdlbGbqfhlPkbqmib8rn7uHyqPwgAWz5fvOih1y+OcuyZcYAyc63lX5Psg3GX0fEw3kElrdG/+iaOUdm0vjRrB0Y3PLaUKzup+E0UrG3WpHnMjX7916G30dZlfkDZNllGXP6Ism2FhNItmy/gGTM6TrgW/mFlq8iLOtS9O6n4bS6W6rT+vzdPVweRR+/7GRZKqe3RMQ3ImIgItZFxFzguIi4Htgr5/hyU4Q/urIupdPKir0T+/yb/XsvwgetTlXWD5CdIMuY02ZJp5AkRQC8s+Kx2stLFFRRlnUpcvfTcFrZHdmpff7uHi6Hoo9fdrIsldO7gX8ELiepjO4GzpC0B/CBHGPLlf/oGtfKit19/rUV5YNWpyrjB8hOkGltvXYryvJFtlWrssMuuWrR81oFQ/cvOnNG01+vrJytZ2WSZfmiLNl6PcD7gVcCW94hIuKsnY7QSqtVnybdKsjGn+6t02Tp1vsO8ADwZuCTJN18y/MMymyIu1+Lx600a4Usq5LfExGHS7ovIqZK2g34QUTMbE2I7tYzKwqv+G7N0KxVyZ9Nv6+VdDCwJzB5J2MzsxLynCprlSzdenMl7UWypfotwCjgY7lGZZaRu5hay9mT1ipVKydJI4B1EbEGuAs4oCVRWVV+Q0542Z7W85wqa5Wq3XoRsZkSz2XqRJ24YkKj3MXUel4xwVolS7feAkkXANeT7oYLEBFP5xaVDatTV0xohLuYWq+V2ZPuIehuWSqnoflM51YcC9zF1xZ+Q97KXUzt0Yo5Ve6ytZqVU0Ts34pAiqTIn9j8hryVJ+h2LvcQWM1UckkvlHSRpLnp/QMlHZ9/aO1R9DEd9/lvVdZV3a02r7RuWbr1rgCWAK9N768A5gO35hVUOxX9E5tXTNiWl+3pTO4hsCyV0x9FxKmSTgeIiGckKee42qYMYzp+Q7ZO5y5by7JCxB/S7TECQNIfARurX1JeRdiE0KzbucvWsrScLgZuByZJugY4CnhvjjG1lT+xdbciJ8N0G/cQdLdM+zlJ2gd4NSDg7oh4Ku/AKrV64Ve/QXUnL2pq1hrN2s/pFmAecEtEbKh1fifwJ7buVPRkGLNukqVb7zLgVOAfJC0mWSni1ogYzDWyJnEryLIqQzKMWbeomRARET+JiL8gWRFiLnAKUIxJPzUUfc6SFYuTYcyKI0vLiTRb7wSSFtQ04Mo8g2oWd9O0R1lbq06GMSuOLCtEXE+yLftM4Gsk854+mPUFJO0i6R5Jt6b3D5N0t6R7JfVLmt5o8LV4lvnOW/rwSi65ahHnXPo9LrlqUc1WZ5lbq05fNiuOrCtEvCsinmvwNc4jqdyG+kY+D3wiIr4v6bj0/hsafO6qPMt85zSy+GbZW6tOhmm9sra0LV9ZxpxuB14h6RRJZw59ZXlySROBtwLfrHxKtlZUewKP1xlzZl6Hbuc0sl+SW6tWjzK3tC1fWbr1Pg58Jf06mqSlc2LG558DfATYXHHsfOBSSY8CXwAuHOZ1z067/fpXrVqV8eW25W6andNIReOkAquHN4y04WTp1nsncChwT0S8T9J4tm0J7VC6cvnKiFgi6Q0VD/1f4EMRcYOkU4B/Af5k++sjYi5JdiB9fX21ZwoPw900jWukW9RJBVYPp+/bcLKsrfdMul37JkmjSdLIs2w0eBRwoqRHgOuAmZKuBmYDN6bnzAdyS4iwndNIt6hbq1YPt7RtOFlaTv2SxgD/TLJ1xnpgca2LIuJC0i67tOV0QUScIWk58HpgIUkG4K8biNtaoNHtOdxatazc0rbhZFpbb8vJ0mRgdETcV9eLbK2cjpc0A/hHkopxEPiLiFhS7fpWr61nZq3jbL3uk2Vtvboqp3Zx5WRm1jmyVE5ZxpzMzMxaypWTmZkVzrAJEZL2rnZhRDzd/HDMzMyqZ+stIVnNQTt4LMiWTm5mZla3YSuniNi/lYGYmZkNybplxl7AgcCWpQIi4q68gjIzs+6WZZv2PyVZWXwicC/wauDnJBNozawKz+Exa0yWbL3zgFcB/x0RRwOHA42txGrWRbzitlnjslROgxExCCBp94h4AHhZvmGZlZ9X3DZrXJYxpxXp2nr/BiyQtIYc92Ay6xRecduscTUrp4h4e3rzYkk/Jtkg8PZcozLrAN6J2axxWTYb3G/oC/gtSVLEi/MOzKzsvBOzWeOydOvdxtbJuD3A/sCDwCtzjMus9BrdcsTMsnXrHVJ5X9I04JzcIjLrIN7byqwxdS/8GhG/IEktNzMzy0WWSbh/VXF3BDANz3MyM7McZRlzqsyF3UQyBnVDPuGYmZllG3P6RCsCsXx5GR0zK5MsqeRTJM2VdIekO4e+WhGcNYeX0TGzssnSrTcf+DrwTeC5fMOxPFQuowNs+X7zoofcejKzQspSOW2KiH/KPRLLjZfRMbOyyZJK/u+S/kLSvpL2HvrKPTJrmknjR7Nuw8ZtjnkZHTMrsiyV02zgw8DPSLZuXwL05xmUNZeX0TGzssmSreft2kvOy+iYWdlk3ab9tcDkyvMj4qqcYrIceBkdMyuTLCtEfAf4I5LVyIey9QJw5WRmZrnI0nLqAw6KiMg7GDMzM8hWOS0j2b/piZxjKT2vwmBm1hxZsvVeBNwv6QeSbhn6yjuwsvEqDGZmzZOl5XRx3kF0Aq/CYGbWPFlSyX9SeV/SUcC7gJ/s+Iru5FUYzMyaJ2sq+WEkFdIpwG+pY8sMSbuQTNp9LCKOl3Q98LL04THA2og4LHvIxTRp/GjWDgxuaTGBV2EwM2vUsJWTpCnAacDpwGrgekARcXSdr3EesBwYDRARp1a8xmXA7+t8vkKaNWMKc+YvBpIW07oNG1mzfpDZx05tc2RmZuVTLSHiAeCNwAkRMSMivkKdq5JLmgi8lWRF8+0fE0lLbF49z1lUQ6swjOnt4bFVA4zp7eH8k6d7vMnMrAHVuvVOImk5/VjS7cB1gOp8/jnAR9h2N90h/wd4MiJ+XedzFpZXYTAza45hW04RcVPaBfdyYCHwIWC8pH+SdEytJ5Z0PLAyIpYMc8rpVGk1STpbUr+k/lWrVtV6OTMz6yCqZ+GHdKuMk4FTI2JmjXM/C7wH2AT0kIw53RgRZ0jaFXgMOCIiVtR63b6+vujv90LoZmadQNKSiOirdk6WSbhbRMTTEfGNWhVTeu6FETExIiaTdA/eGRFnpA//CfBAlorJzMy6T12VUxOdRockQpiZWfNlmue0syJiIcm41dD997bidc3MrJza1XIyMzMbVl0JEe0iaRXw32146RcBT7XhdYvIZZFwOWzlski4HLbKWhYvjYix1U4oReXULpL6a2WUdAuXRcLlsJXLIuFy2KqZZeFuPTMzKxxXTmZmVjiunKqb2+4ACsRlkXA5bOWySLgctmpaWXjMyczMCsctJzMzKxxXTmZmVjhdVzlJ+paklZKWVRw7VNLPJS2V9O+SRqfH3y3p3oqvzemuwEg6Ij3/vyR9Od2fqjTqLIfdJF2ZHl8u6cKKa0pdDlB3WbxA0hXp8V9KekPFNaUuC0mTJP04/R3/StJ56fG9JS2Q9Ov0+14V11yY/rwPSnpzxfHSlkW95SBpn/T89ZK+ut1zlbYcoKGyeJOkJenPvETSzIrnqq8sIqKrvoDXAdOAZRXH/hN4fXr7LOBTO7juEODhivuLgdeQ7HH1feDYdv9seZUD8C7guvT2C4FHgMmdUA4NlMW5wBXp7XHAEmBEJ5QFsC8wLb3dCzwEHAR8HvhoevyjwOfS2wcBvwR2B/YHfgPsUvayaKAcRgIzgD8Hvrrdc5W2HBosi8OBl6S3DwYea7Qsuq7lFBF3AU9vd/hlwF3p7QUkGy1ub8v+U5L2BUZHxM8jKfWrgLflEnBO6iyHAEYq2epkD+APwLpOKAeouywOAn6UXrcSWAv0dUJZRMQTEfGL9PYAsByYAMwCrkxPu5KtP9cskg8tGyPit8B/AdPLXhb1lkNEbIiIRcBg5fOUvRygobK4JyIeT4//CuiRtHsjZdF1ldMwlgEnprdPBibt4JxT2bqS+gSgcruPFemxshuuHL4LbACeAH4HfCEinqZzywGGL4tfArMk7Sppf+CI9LGOKgtJk0k+Bf8/YHxEPAHJmxVJixGSn+/RisuGfuaOKYuM5TCcjikHaKgsTgLuiYiNNFAWrpwSZwHnSlpC0nT9Q+WDko4E/icihsYkdtRX2gk5+cOVw3TgOeAlJN03fy3pADq3HGD4svgWyT9WPzAH+BnJhpodUxaSRgE3AOdHxLpqp+7gWFQ5Xip1lMOwT7GDY6UrB6i/LCS9EvgccM7QoR2cVrUsWrJlRtFFxAPAMQCSpgBv3e6U7fefWgFMrLg/EXickqtSDu8Cbo+IZ4GVkn4K9AH/QQeWAwxfFhGxCfjQ0HmSfgb8GlhDB5SFpN1I3oSuiYgb08NPSto3Ip5Iu2dWpsdXsG0vw9DPXPr/jzrLYTilLweovywkTQRuAs6MiN+kh+suC7ecAEnj0u8jgIuAr1c8NoKkW+e6oWNpM3ZA0qvTjJMzgZtbGnQOqpTD74CZSowEXk2yk3FHlgMMXxaSXpiWAZLeBGyKiPs7oSzSuP8FWB4RX6x46BZgdnp7Nlt/rluA09Ixhf2BA4HFZS+LBsphh8peDlB/WUgaA9wGXBgRPx06uaGyaHc2SKu/SFpATwDPktTm7wfOI8lCeQj4B9KVM9Lz3wDcvYPn6SMZl/gN8NXKa8rwVU85AKOA+SQDnPcDH+6UcmigLCYDD5IMDP+QZOn/jigLkoyzAO4D7k2/jgP2IUkC+XX6fe+Ka/4u/XkfpCL7qsxl0WA5PEKSVLM+/Rs6qOzl0EhZkHyQ21Bx7r3AuEbKwssXmZlZ4bhbz8zMCseVk5mZFY4rJzMzKxxXTmZmVjiunMzMrHBcOZnlLJ0ftkjSsRXHTpF0ezvjMisyp5KbtYCkg0nmih0O7EIy/+MtsXUGfT3PtUtEPNfcCM2KxZWTWYtI+jzJBMWR6feXkmzFsitwcUTcnC6u+Z30HIAPRMTPlOwb9XGSycKHRcRBrY3erLVcOZm1SLrs0S9IFpG9FfhVRFydLvmymKRVFcDmiBiUdCAwLyL60srpNuDgSLanMOtoXvjVrEUiYoOk60mWuDkFOEHSBenDPcB+JIthflXJjsvPAVMqnmKxKybrFq6czFprc/ol4KSIeLDyQUkXA08Ch5IkLFVuYLehRTGatZ2z9cza4wfAB9MVmpF0eHp8T+CJiNgMvIckecKs67hyMmuPTwG7AfdJWpbeB7gcmC3pbpIuPbeWrCs5IcLMzArHLSczMyscV05mZlY4rpzMzKxwXDmZmVnhuHIyM7PCceVkZmaF48rJzMwK538BHk199p+5IsgAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"complete.plot(ls='', marker='o', alpha=0.5)\n",
"\n",
"decorate(xlabel='Year',\n",
" ylabel='Annual average of daily temperature (deg F)')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"As we did with the snow data, I'll convert the `Series` to a `DataFrame` to prepare it for regression."
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.899059Z",
"iopub.status.busy": "2021-04-16T19:40:09.898484Z",
"iopub.status.idle": "2021-04-16T19:40:09.901665Z",
"shell.execute_reply": "2021-04-16T19:40:09.902018Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
YEAR
\n",
"
TMID
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1968
\n",
"
48.071038
\n",
"
\n",
"
\n",
"
1
\n",
"
1969
\n",
"
48.687671
\n",
"
\n",
"
\n",
"
2
\n",
"
1970
\n",
"
48.258904
\n",
"
\n",
"
\n",
"
3
\n",
"
1971
\n",
"
48.804110
\n",
"
\n",
"
\n",
"
4
\n",
"
1972
\n",
"
47.112022
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" YEAR TMID\n",
"0 1968 48.071038\n",
"1 1969 48.687671\n",
"2 1970 48.258904\n",
"3 1971 48.804110\n",
"4 1972 47.112022"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = complete.reset_index()\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.907118Z",
"iopub.status.busy": "2021-04-16T19:40:09.906333Z",
"iopub.status.idle": "2021-04-16T19:40:09.910678Z",
"shell.execute_reply": "2021-04-16T19:40:09.910015Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"1994"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"offset = round(data['YEAR'].mean())\n",
"offset"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.918655Z",
"iopub.status.busy": "2021-04-16T19:40:09.917835Z",
"iopub.status.idle": "2021-04-16T19:40:09.922722Z",
"shell.execute_reply": "2021-04-16T19:40:09.921649Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"-0.5"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['x'] = data['YEAR'] - offset\n",
"data['x'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.929320Z",
"iopub.status.busy": "2021-04-16T19:40:09.928415Z",
"iopub.status.idle": "2021-04-16T19:40:09.935474Z",
"shell.execute_reply": "2021-04-16T19:40:09.936590Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"1.2389114009625752"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['y'] = data['TMID']\n",
"data['y'].std()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"Now we can use StatsModels to estimate the parameters."
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.950115Z",
"iopub.status.busy": "2021-04-16T19:40:09.948247Z",
"iopub.status.idle": "2021-04-16T19:40:09.955668Z",
"shell.execute_reply": "2021-04-16T19:40:09.954729Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"Intercept 49.430172\n",
"x 0.044252\n",
"dtype: float64"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import statsmodels.formula.api as smf\n",
"\n",
"formula = 'y ~ x'\n",
"results = smf.ols(formula, data=data).fit()\n",
"results.params"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"And compute the standard deviation of the parameters."
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.961504Z",
"iopub.status.busy": "2021-04-16T19:40:09.960803Z",
"iopub.status.idle": "2021-04-16T19:40:09.965281Z",
"shell.execute_reply": "2021-04-16T19:40:09.964756Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/plain": [
"1.041705765390206"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results.resid.std()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"hide-cell"
]
},
"source": [
"According to the least squares regression model, annual average temperature is increasing by about 0.044 degrees F per year.\n",
"\n",
"To quantify the uncertainty of these parameters and generate predictions for the future, we can use Bayesian regression."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Use StatsModels to generate point estimates for the regression parameters.\n",
"\n",
"2. Choose priors for `slope`, `intercept`, and `sigma` based on these estimates, and use `make_joint3` to make a joint prior distribution.\n",
"\n",
"3. Compute the likelihood of the data and compute the posterior distribution of the parameters.\n",
"\n",
"4. Extract the posterior distribution of `slope`. How confident are we that temperature is increasing?\n",
"\n",
"5. Draw a sample of parameters from the posterior distribution and use it to generate predictions up to 2067.\n",
"\n",
"6. Plot the median of the predictions and a 90% credible interval along with the observed data. \n",
"\n",
"Does the model fit the data well? How much do we expect annual average temperatures to increase over my (expected) lifetime?"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.973077Z",
"iopub.status.busy": "2021-04-16T19:40:09.972198Z",
"iopub.status.idle": "2021-04-16T19:40:09.976051Z",
"shell.execute_reply": "2021-04-16T19:40:09.976805Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"# Solution\n",
"\n",
"qs = np.linspace(0, 0.1, num=51)\n",
"prior_slope = make_uniform(qs, 'Slope')"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.983354Z",
"iopub.status.busy": "2021-04-16T19:40:09.982599Z",
"iopub.status.idle": "2021-04-16T19:40:09.987585Z",
"shell.execute_reply": "2021-04-16T19:40:09.986707Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"# Solution\n",
"\n",
"qs = np.linspace(48, 52, num=41)\n",
"prior_inter = make_uniform(qs, 'Intercept')"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:09.994924Z",
"iopub.status.busy": "2021-04-16T19:40:09.993916Z",
"iopub.status.idle": "2021-04-16T19:40:09.997161Z",
"shell.execute_reply": "2021-04-16T19:40:09.996368Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [],
"source": [
"# Solution\n",
"\n",
"qs = np.linspace(0.5, 2, num=31)\n",
"prior_sigma = make_uniform(qs, 'Sigma')"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"execution": {
"iopub.execute_input": "2021-04-16T19:40:10.005414Z",
"iopub.status.busy": "2021-04-16T19:40:10.003358Z",
"iopub.status.idle": "2021-04-16T19:40:10.031755Z",
"shell.execute_reply": "2021-04-16T19:40:10.030704Z"
},
"tags": [
"hide-cell"
]
},
"outputs": [
{
"data": {
"text/html": [
"