{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can order print and ebook versions of *Think Bayes 2e* from\n",
"[Bookshop.org](https://bookshop.org/a/98697/9781492089469) and\n",
"[Amazon](https://amzn.to/334eqGo)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Regression"
]
},
{
"cell_type": "code",
"execution_count": 1,
"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": [
"# install empiricaldist if necessary\n",
"\n",
"try:\n",
" import empiricaldist\n",
"except ImportError:\n",
" !pip install empiricaldist\n",
" import empiricaldist"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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": 3,
"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": 4,
"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": 5,
"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": 6,
"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",
"
19357
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2020-05-09
\n",
"
0.45
\n",
"
0.0
\n",
"
0.0
\n",
"
57
\n",
"
34.0
\n",
"
34.0
\n",
"
NaN
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
19358
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2020-05-10
\n",
"
0.00
\n",
"
0.0
\n",
"
0.0
\n",
"
44
\n",
"
31.0
\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",
"
\n",
"
\n",
"
19359
\n",
"
USC00190736
\n",
"
BLUE HILL COOP, MA US
\n",
"
2020-05-11
\n",
"
0.00
\n",
"
0.0
\n",
"
0.0
\n",
"
59
\n",
"
38.0
\n",
"
50.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",
"19357 USC00190736 BLUE HILL COOP, MA US 2020-05-09 0.45 0.0 0.0 57 \n",
"19358 USC00190736 BLUE HILL COOP, MA US 2020-05-10 0.00 0.0 0.0 44 \n",
"19359 USC00190736 BLUE HILL COOP, MA US 2020-05-11 0.00 0.0 0.0 59 \n",
"\n",
" TMIN TOBS WESD WT01 WT03 WT04 WT05 WT06 WT08 WT09 WT11 WT16 \\\n",
"19357 34.0 34.0 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN \n",
"19358 31.0 38.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"19359 38.0 50.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
" WT18 \n",
"19357 NaN \n",
"19358 NaN \n",
"19359 NaN "
]
},
"execution_count": 6,
"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": 7,
"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": 8,
"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": 9,
"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": [
"52"
]
},
"execution_count": 9,
"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": 10,
"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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",
"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": 11,
"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": 11,
"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": 12,
"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": 13,
"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": [
"(64.19038461538462, 26.28802198439569)"
]
},
"execution_count": 13,
"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": 14,
"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": 15,
"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": "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",
"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": 16,
"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": 16,
"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": 17,
"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": [
"1994"
]
},
"execution_count": 17,
"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": 18,
"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": 19,
"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 64.446325\n",
"x 0.511880\n",
"dtype: float64"
]
},
"execution_count": 19,
"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": 20,
"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.385680731210623"
]
},
"execution_count": 20,
"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": 21,
"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": 22,
"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": 23,
"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": 24,
"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": 25,
"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": 25,
"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": 26,
"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": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(prior_slope), len(prior_inter), len(prior_sigma)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"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": 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.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": 28,
"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": 29,
"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": 30,
"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": 31,
"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": 32,
"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": 33,
"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": [
"1.3551948769060997e-105"
]
},
"execution_count": 33,
"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": 34,
"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": 35,
"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": [
"6.769832641515688e-107"
]
},
"execution_count": 35,
"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": 36,
"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": 37,
"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": "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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": 38,
"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": "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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": 39,
"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": [
"64.448 [58.725 70.275]\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": 40,
"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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mDFjhuE6Kd/3yzHVz3p/meJnvb+G9LN+VVtwzVxubq6Ijo4Wzc3NorGxUURGRorTp09fMu7s2bNCo9EIIYSora0VI0eOFDt27BBCCPH444+Lxx9/XAghxHfffTdkOzn1N3t9fb0YPXq0WL9+/SW3lZWVGb7fvn27CAkJMVperVYrwsPDxcmTJ4UQQixevLjHnZx6G7Nt2zYxZcoUodVqRVlZmQgKChrSnW0ul10IIVasWCHuuusuodfru11fXl5uuK60tFQoFAqRl5dn/OCif9mbm5tFQ0ODEEIIjUYjli9fLp5++mkhhHm870II8cgjj4hHHnmk23VSvu9d+trJyRQ/6xfqa0chU/ysX6i37EP9WR/WBSuEEK+++qqIiIgQ4eHh4s033zRc//bbb4unnnpKCCHEF198IeLi4sSoUaNEXFyceO211wzj6uvrxfz584VSqRSjR4827BVoKtmff/55YW9vLxISEgxf+/btE0IIsXTpUsPrmjx5ssjIyDBq3h07dojY2FgREREh7rrrLqHRaER6erqYO3dun2O6PPLIIyIiIkIolUrx2WefGTXrQLPv3btXABDx8fGG9/mNN94QQgjxj3/8Q6hUKsP1XXu5mkr206dPi4SEBDFy5EihUqnEb37zG9Ha2mq4vym/70IIodPphEKhEMePH+92Xynf91WrVonAwEABQAQGBopVq1aZzWf9ctlN+bN+uexD/VnnVIlERERGYPHbYImIiKTAgiUiIjICFiwREZERsGCJiIiMgAVLRERkBCxYol688sorGDlyJBISEhAfH49NmzYBAN5//33D/NPGtmzZMqSnpwMAVq5cecUH7Q9lZlO2YMECnD59WuoYNExY/FSJRFfi0KFD2LRpE9LT02Fvb4+WlpYep600poKCApSWlmLs2LEAgPfee29In38o6HQ6WFtbD9lz3X///fjLX/6CdevWDclz0vDGJViiHpSVlcHNzQ22trYAACcnJyiVykvGdXR04J577kF8fDzi4+O7laBcLsdTTz2FUaNGISkpCVlZWQAAvV6PJ554AuPGjcPIkSPx+OOP95jhww8/7HY+zWnTpmHv3r2G7x977DFMmDABYWFh+PLLLw3jPvvsMyQmJiIhIaHb1Jjnzp3DDTfcgKioKCxbtsxwfXFxMRYsWIDk5GQkJyfjp59+AgDs27cPY8aMQWJi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",
"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": 41,
"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.512 [0.1 0.9]\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": 42,
"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.01840519)"
]
},
"execution_count": 42,
"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": 43,
"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": 43,
"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": 44,
"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": 45,
"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": 45,
"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": 46,
"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 1.23 s, sys: 3.86 ms, total: 1.23 s\n",
"Wall time: 1.23 s\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": 47,
"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": 47,
"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": 48,
"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",
"
7.633362e-08
\n",
"
\n",
"
\n",
"
54.525
\n",
"
1.013295e-07
\n",
"
\n",
"
\n",
"
55.050
\n",
"
1.327249e-07
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Slope Intercept\n",
"-0.5 54.000 7.633362e-08\n",
" 54.525 1.013295e-07\n",
" 55.050 1.327249e-07\n",
"dtype: float64"
]
},
"execution_count": 48,
"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": 49,
"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": {},
"outputs": [],
"source": [
"url = \"https://github.com/AllenDowney/ThinkBayes2/raw/master/data/Marathon_world_record_progression.html\""
]
},
{
"cell_type": "code",
"execution_count": 52,
"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": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tables = pd.read_html(url)\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",
"
47
\n",
"
2:03:23
\n",
"
Wilson Kipsang
\n",
"
Kenya
\n",
"
September 29, 2013
\n",
"
Berlin Marathon
\n",
"
IAAF[83][84] ARRS[82]
\n",
"
The ARRS notes Kipsang's extended time as 2:03...
\n",
"
\n",
"
\n",
"
48
\n",
"
2:02:57
\n",
"
Dennis Kimetto
\n",
"
Kenya
\n",
"
September 28, 2014
\n",
"
Berlin Marathon
\n",
"
IAAF[85][86] ARRS[82]
\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",
"
\n",
"
"
],
"text/plain": [
" Time Name Nationality Date Event/Place \\\n",
"47 2:03:23 Wilson Kipsang Kenya September 29, 2013 Berlin Marathon \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",
"\n",
" Source Notes \n",
"47 IAAF[83][84] ARRS[82] The ARRS notes Kipsang's extended time as 2:03... \n",
"48 IAAF[85][86] ARRS[82] The ARRS notes Kimetto's extended time as 2:02... \n",
"49 IAAF[1] 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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v5/+/fuzZcsWANauXRt6/3/6p3/itttu45577mHVqlU899xzzbalpKSEDRs2YFkWd9xxB3fddRezZs2irKyM8ePHM2PGDLZv386LL75IQUEBycnJnDhxAoDHHnuMSy65hFdeeYX9+/czefJkJk2aBMC+ffuYM2cOP/nJT6iurmbo0KG89dZbZGdnNwjI+tasWUNKSgp/+MMfgIY5sG3bNv72t7/Ro0cPrrzySlavXs2sWbO4++67+f3vf09aWhrbtm1j/vz5bNu2jccff5xx48axbNkyqqqqmDJlCjNmzKCmpoZf/vKXbN++PfReWVlZ7fr/eL6I3Xj8+te/zrvvvstf/vIXcnNzG9xvAFi4cCFFRUWhf/r06dPuz2ruF4O6XwzVIxaR1tSto6+3xA/OfZf4vMHzF6BumPjtt99mypQpTJo0ib/85S98+umnxMXFMXDgQDZu3Mhdd92Fw+EgJSWFr371q2zatCn0HrfeemuT771p0yZuv/12AK699toWv0+//vWvhyb1/OlPf+Jf/uVfyM3NZfr06fh8Pvbu3cuaNWu46667Qrf5+vbtC8DGjRtD9y8HDx7MhAkTePfddwFITU3ly1/+MgDFxcVccsklofvKdW07X05ODhs3buTBBx9kzZo1JCUlhc597WtfIykpibi4OG6++WY2bdrErl272LlzJ3PmzCE3N5cFCxZw9OhRAN58802efvppcnNz+dKXvkRZWRm7du1i06ZNzJ07t8F7dZSILdP5/PPPSU1Npby8nP/8z//kJz/5iX0fpgITInKhbF5HP3XqVF599VW8Xi+33XYbSUlJ1NbWsmbNmtD916aGduvC0Ol00qNHj7A+q6WqVYmJiaH/DgQCbNy4kd69ezd4zm9+85uw37euffXfN9yqWUOHDuW9995j7dq1/OIXv+Dpp5/mjTfeaPK5lmVhjGHo0KEUFhY22baXX36Z3NzcBseffPLJsNrSHhG7gr3lllvIyspi4sSJ3H333UyePNm+D6v3i1GfCkyISLjq1tFTXhr6Lgmtox8544InTE6dOpWCggIOHjzI4MGDAZg4cSI//elPQwE7ffp0XnjhBQKBACdPnuSPf/wj+fmt3+KaNm0a//u//wvAqlWrOHXqVFhtmj17doOLn8LCQowxzJ49mxdeeIHTp4MTRuuGiKdPnx66L7x//37effddxo8f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4r//+79jul8g+Ofi1ltvBSAnJ4eMjAz27NkT9f3SUp/87Gc/48SJEwCMGTOG1NRUioqKorJP/H4/t956K1dccQX33nsvEPwzcfDgwdBzSkpKmDhxIn379uXMmTNUVVXRo0cPKisr8fl8JCcnR1XftKVP6tjyndsB95QlTPUnaJw6dcpUVVUZY4ITOMaMGRO6yf7iiy+acePGmVOnTjV4/alTp0xGRoY5evSo8fl8ZsqUKd1yEsL5wu2X+qZNmxaa5BTr/fJv//Zv5kc/+pExxpiDBw+aAQMGmLKysqjsl3D7JCsry6xevdoYE+yT/v37m+PHj0dln3zzm980d911lwkEAqFja9euNfn5+aa2ttYcPnzYZGRkhCb0fOMb3zDLly83xhjz7LPPhiY5RVPftLVP7PrOVcB2grvvvtukpaUZwKSlpZm7777bbNu2zQwbNsyMHDnSTJs2zRQXF4ee73K5zODBg83YsWPN2LFjze233x4695vf/MYMGzbMDBkyxDz88MOR+HE6TFv7pb76AWtMbPdLeXm5ue6668zo0aPN2LFjzYoVK0LnoqVf2tonW7duNePHjzc5OTkmOzvbvPLKK6Fz0dInxhhTUFBgAJOdnR36vnjqqaeMMcY8+OCDZujQoWbYsGHm1VdfDb3m4MGDJi8vzwwfPtxMnTrVlJSUhM5FQ9+0p0/s+s5VqUQREREbaJKTiIiIDRSwIiIiNlDAioiI2EABKyIiYgMFrIiIiA0UsCJRwLIscnNzyc7OZtSoUTzwwAOhak4tWbFiRYOF9CLScRSwIlHA6XRSWFjIRx99xLZt2zh06BDXXXddq69TwIrYR+tgRaKAy+WitrY29Pj06dNccsklbN26lZycHG688Ub2799PVVUVV111FT/96U/ZsGEDN9xwA7169aJPnz48++yzjBs3jnvvvZf33nsPr9fLggUL+Md//McI/mQi3ZdqEYtEoeTkZIYNG8bHH39MTk4Ozz//PH379iUQCHD99dezZs0aZs2axVe/+lVmzpzJbbfdBsB3v/tdxo0bx7Jly6iqqmLKlCnMmDGDrKysCP9EIt2PAlYkitUVLV++fDmvvvoqfr+f0tJS8vLymDVrVqPnv/nmm3i93lAR/fLycnbt2qWAFWkHBaxIFCovL2fPnj1kZWWxadMmfv/737N582Z69erF/fffT1VVVZOvM8bw8ssvk5ub27kNFolCmuQkEmUqKiq45557mDx5MtnZ2ZSXl9O7d2969erFiRMn+P3vfx96blJSUoPZxrNnz+app57C7/cD8Omnn4Y1G1lEGlPAikQBv98fWqYzYcIE0tLSeP311wH4yle+QmJiIqNHj+a2225j2rRpodfdeuutPPvss4wfP56tW7eyZMkSEhMTGTt2LGPGjGH+/PlUV1dH6scS6dY0i1hERMQGuoIVERGxgQJWRETEBgpYERERGyhgRUREbKCAFRERsYECVkRExAYKWBERERsoYEVERGzw/wA55rxf3bNYjwAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"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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MUJbt26VMUYvvviiOnToUK8PLCoqUm5urhYsWKB+/frVeNyYMWN01113qaysTDExMVq/fj1TLQIIGlamgZUC/nWsoKBAhYWFGj16dMBruU6dOlXx8fHyeDyKj4/X1KlT9eSTT6qkpESzZs1SZmamMjMzdfDgQUm+HvKCBQskSYmJiZo4caKuvfZapaenq3379rrnnnvq91UCQC1qWplG51amYYgYdRTQ3MJ5eXn64osvtG/fPu3du1dHjx7VmDFj9M9//jMUNdYJcwsDqCvjOiX36mdkaxVXfd/Jw3LkPiobkztEvLrkS0A915UrV2rFihVq1sy3OsNVV111wWXoAKBBOm9lmvOxMg3qK6BwdTqdVSZ5KC8vV4CL6QDAZc8W7VBU0lCptMQfsP6VaZKGMs8v6iygcB0+fLjy8vJ09uxZvffee/rtb3+r22+/Pdi1AUDIRHfPVlTmaKnCJXPysFThYmUa1FtA11yNMVq8eLHef/99GWM0atQo3XvvvaGor8645grgUhiPm5VpcEGWr+dqs9l099136+abb1a7du0uqTgAuJyxMg2sENCw8ObNm9W1a1f16dNHku+xnClTpgS1MAAAGqqAwnXmzJn+lWwkKTMzU5988klQCwMAoKEKeBKJq6++usrr6Ohoy4sBAKAxCChcO3TooN27d/tXpFm0aFG1sAUAAD4B3dA0f/583XPPPfrqq6/Utm1bpaSkaMmSJcGuDQCABimgcO3cubPWrVunn376ScYYNW/ePNh1AQDQYAUUrpWVlVq4cKE2bdokm82mwYMHa8qUKXI4eAYMAIBfCyhc77vvPv30008aP368JOmNN97Q1q1ba1zoHACASBZQuH7yySf66quv/K9vueUWpaamBq0oAAAasoDuFr766qtVUlLif11SUqIePXoErSgAABqygHquMTExSk5O1vDhwyVJ69at05AhQ3T//fdLkhYuXBi8CgEAaGACCtfbbrtNt912m//1qFGjglYQAFiNyfgRagGF66RJk4JdBwBYzni98uzPl3fPeunnhc+jkoYqunu2bFEBT1AH1Fmt311vvvmmDhw44H89depUtWzZUpmZmdq5c2fQiwMQuYzHLeM65et11pNnf768BSukGKdsreKkGKe8BSvk2Z9vYaVAdbX2XJ955hlt3bpVkvT3v/9dH374odatW6d//etfmjFjhjZu3BiKGgFEEKt6m8bj9p0jtr1sDqckyeZwysS2l3fPepnE/gwRI2hq/U6NioqS0+n7ply1apXuvfdeZWVl6f7779eJEydCUiCAyGJZb7PirOR2+YP1HJvD6QvtirMWVg1UVWu4er1eud1uGWO0efNmDRkyxL/P4/EEvTgAkaWm3qbO9TbrMkQc00xyOGXcrqqf8XNvWDHNrCwdqKLWcJ00aZIGDBigESNGqE2bNurfv78kae/evWrdunVICgQQQSzsbdqiHYpKGiqVlvgD1rhdUmmJopKGMiSMoKr1musjjzyinJwcHT58WDfccIN/yTmbzaZ58+aFpEAAEeS83ub5AVvf3mZ092xJ8vV6fzruu36bOdq/HQiWiz6K07dv32rbmJ0JQDCc6216C1bI/Dw07O9tZo6uc2/TFhUle89BMon9ec4VIRXQc64AECrB6G3aoh2Ss6VVJQIXRbgCuKzQ20RjQLgCuCzR20RDxvxfAABYjHAFEHJWTG0IXM4YFgYQMkykj0jBdzOAkGEifUQKwhVASFg6tSFwmSNcAYQGE+kjghCuAEKDifQRQQhXACHBRPqIJNwtDCBkmEgfkYJwBRAyTG2ISEG4Agg5pjZEY8c1VwAALEa4AgBgMcIVAACLEa4AAFiMcAUAwGKEKwAAFiNcAQCwGOEKAIDFCFcAACxGuAIAYLGghuuMGTMUHx8vu/2XWRaXLFmijIwMpaenKysrSxs3bqz1HCdPnlSnTp00ZcqUYJYKAIBlghqu48aN07Zt26psu+aaa7Rhwwbt2LFDixcv1h133CGv11vjOWbPnq1hw4YFs0wAACwV1HDNzs5Whw4dqmwbMGCA2rRpI0lKTk5WWVmZzpw5c8H3b9iwQeXl5YQrLjvG45ZxnZLxuMNdCoDLUFhXxVm6dKlSUlIUGxtbbZ/L5dKcOXO0atUqrV69OgzVAdUZr1ee/fny7lkvuV2+9UiThiq6e7ZsUdzCAMAnbOG6fft25eXlae3atRfc/8QTT2jq1Klq165dreeZP3++5s+f73994sQJS+sEzufZny9vwQoptr1sV7SRcbt8ryXZew4Kc3UALhc2Y4wJ9ofY7XZVVlb6X+/bt0+jRo3S0qVL1a9fvwu+JycnR4cOHZIknTlzRuXl5fr3f/93vfbaa7V+VnJysnbv3m1d8cDPjMct96qnpRinbA7nL9vdLqnCJcfNj7HwN9CI1SVfQt5zLSoqUm5urhYsWFBjsErSRx995P/74sWLlZ+fr1dffTUUJQIXVnFWcrtku6JNlc02h1Pmp+O+/SwADkBBDtepU6dq9erV8ng8io+PV25urrxer0pKSjRr1iz/ccuXL1eXLl00d+5cderUSdOmTQtmWUD9xDSTHE4Zt6t6z9Xh9O0HAIVoWDiUGBZGMFXu3fzLNdefg1alJYrKHM01V6CRu6yHhYGGLLp7tiTJu2e9byjY4VRU5mj/dgCQCFegTmxRUbL3HCST2N93jTWmGTcxAaiGcAXqwRbt4OYlADXiqXc0WsyiBCBc6Lmi0WEWJQDhxk8aNDr+WZRinLK1ipNinPIWrJBnf364SwMQIQhXNCrG4/b1WH9+VEbyTfKg2Pa+O3wZIgYQAoQrGpdzsyidN8mD9HPAul2+/QAQZIQrGpfzZlE6H7MoAQglwhWNii3aoaikoVJpiT9g/bMoJQ3lmVQAIcHdwmh0mEUJQLgRrmh0mEUJQLgRrmi0mEUJQLhwzRUAAIsRrgAAWIxwBQDAYoQrAAAWI1wBALAY4QoAgMUIVwAALEa4AgBgMcIVAACLEa4AAFiMcAUAwGKEKwAAFiNcAQCwGOEKAIDFCFcAACxGuKLRMB63jOuUjMcd7lIARDgWS0eDZ7xeefbny7tnveR2SQ6nopKGKrp7tmxR/P4IIPT4yYMGz7M/X96CFVKMU7ZWcVKMU96CFfLszw93aQAiFOGKBs143L4ea2x72RxOSfL9N7a9vHvWM0QMICwIVzRsFWclt8sfrOfYHE7fEHHF2TAVBiCSEa5o2GKaSQ6njNtVZbP5+dqrYpqFqTAAkYxwRchZeVevLdqhqKShUmmJP2CN2yWVligqaahs0Y5L/gwAqCvuFkbIBOuu3uju2ZLku8b603HfeTNH+7cDQKgRrggZ/129se1lu6KNjNvley3J3nNQvc9ri4qSvecgmcT+vmusMc3osQIIK4aFERKhuKvXFu2QzdmSYAUQdoQrQoO7egFEEMIVocFdvQAiCOGKkOCuXgCRhBuaEDLc1QsgUhCuCBnu6gUQKQhXhJwt2iE5W4a7DAAIGq65AgBgMcIVAACLEa4AAFiMcAUAwGKEKwAAFgtquM6YMUPx8fGy23+5KXnJkiXKyMhQenq6srKytHHjxgu+N9DjAAC43AT1UZxx48YpLy9PcXFx/m3XXHONNmzYoDZt2mjXrl0aNmyYiouLFfWrJccCPQ4AgMuNzRhjgv0hdrtdlZWV1bYbY9S6dWsVFhYqNja2xvcHepwkJScna/fu3ZdcMwAA56tLvoS1G7h06VKlpKRcNDADPQ4AgMtB2GZo2r59u/Ly8rR27dpLOm7+/PmaP3++//WJEycsrRMXZzxupjMEgPOEZVh43759GjVqlJYuXap+/frV+L5Ajzsfw8KhY7xeefbn+xZB/3npuKikoYruni0b18YBNDKX9bBwUVGRcnNztWDBgloDM9DjED6e/fnyFqyQYpyytYqTYpzyFqyQZ39+uEsDgLAK6rDw1KlTtXr1ank8HsXHxys3N1der1clJSWaNWuW/7jly5erS5cumjt3rjp16qRp06bpySefrPE4WKe+Q7rG4/b1WGPby+ZwSpJsDqdMbHvfknKJ/RkiBhCxQjIsHEoMCwfmUod0jeuU3Kuf8fVYf73v5GE5ch+VjZVvADQil/WwMKozHreM65SvFxkilzykG9NMcjhl3K4qm83PQa2YZkGoGgAaBtZzDaNw3RBkxZCuLdqhqKSh8haskPn5PMbtkkpLFJU5miFhABGNcA0jf+8xtr1sV7SRcbt8ryXZew4K3gdXnJXcLtmuaFNls83hlPnpuG9/AEO60d2zJckXyD8d9/1ykDnavx24HDWyK2GwmM1ms+Q8hGuYhPWGoPOGdM99tlT3IV1bVJTsPQfJJPbnOVdc9txutw4dOqTy8vJwl4LLWJMmTZSQkCCH49J+lhGu4WJR77E+rB7StUU7glYrYJVDhw6pRYsW6tKli2W9EzQuxhgdO3ZMhw4dUteuXS/pXIRruFjUe6wvhnQRSYwxKi8vV5cuXVj8AzWy2Wxq27atfvzxRxljLumXMMI1TMJ9QxBDuohE9FhxMVZ9j/ArXBhFd89WVOZoqcIlc/KwVOEKee/RFu2QzdmSYAVqYPWjcrNnz9bjjz/ufz1r1iz17NnT/3rbtm1KTU2t0zknT56sN95444L7unTpoqKiovoVGwQHDx5UYmJiuMuQJC1evFhTpkwJyrnpudYgFJPR03sELl/BelQuJydHzz//vP/1li1b1Lx5c5WUlKh9+/bKz89XTk5OwOfzeDz1ruX8c0RHR1/yeUJ97ssZPddfMV6vKvdulnvV03KvfkbuVU+rcu9mGa83aJ9J7xG4/ARr7uzs7Gx99tlnqqysVFlZmcrLy3XTTTcpP9933nPhWlFRoQceeECpqalKTU3Vq6++6j+H3W7Xs88+q4EDB+qtt96qcv7vvvtO2dnZSk1N1X/+53/W+OjR9ddfr8cee0zXX3+9Zs6cqePHj+uOO+5Q3759lZGRobffftt/7Isvvqi0tDRlZGTo9ttvlySdOnVK48aN829fuXKlJF/PtGvXrnr44YfVr18/ffzxx1q3bp169eqla6+9VgsXLrxgPWfPntWtt96q9PR0paam6rHHHpMkPfHEE5owYYIGDRqkHj16aObMmf737NixQ0OHDtV1112ngQMHaufOnZIkl8uladOmqW/fvkpLS9NLL73kf88f/vAHde/eXf3799fWrVsD+59WD/RcfyVsz54CuGwE81G51q1bq0uXLtq+fbtcLpeysrKUnZ2tNWvWaMyYMfr444/1xz/+UQsWLNAPP/ygHTt26OTJk+rTp4/69++vlJQUeTwetW/fXh9//LEkVVmS83e/+53Gjx+vadOmaeXKlfrzn/9cYy1FRUXasGGDbDabJk6cqLvvvlsjR47UiRMnlJWVpaFDh2rbtm1avHix8vPz1bJlSx07dkyS9OSTT6pTp0566623dPDgQQ0YMED9+/eXJH377bfKzc3Vc889p/LycnXr1k0ffPCBUlNTq4Tj+dasWaM2bdrof//3fyVVXT5069at+vzzz9W0aVNdf/31WrVqlUaOHKn7779f77zzjuLi4rR161ZNmTJFW7du1bPPPqvevXtrwYIFKisr08CBAzV06FBVVFTotdde07Zt2/znSk5Ortf/x4shXM/DZPQAJAX9UbmcnBx99NFHcrlcGjhwoPr376/HH39cX3/9tWJiYtS5c2dt3LhR9957r6KiotSmTRv95je/0aZNm5SSkiJJuuuuuy547k2bNmnJkiWSpFtuuUWtW7eusY4777zTfwPPP/7xD+3YsUP/7//9P0m+54IPHDigNWvW6O6771bLlr6vt23btpKkjRs36vXXX5fku67bt29fffrpp0pOTlaHDh00bNgwSdKePXvUqVMn/3XkCRMmaPny5dVqSU9P18yZMzVr1iwNHz5cw4cP9+/77W9/q9jYWEnSuHHjtGnTJnXp0kW7du1Sbm6u/7jjx49Lkt5//325XC7/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",
"text/plain": [
"
"
]
},
"metadata": {},
"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 18.000000\n",
"mean 0.740913\n",
"std 15.417918\n",
"min -24.444201\n",
"25% -12.352152\n",
"50% 4.264319\n",
"75% 13.492498\n",
"max 23.707699\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.460507\n",
"x 0.015464\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.041399612201932"
]
},
"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": {},
"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.46 [12.4425 12.4775]\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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X/z8NTU16OjoQEREBLy9vQEAra2t1vsvzna1xx42bBjc3Nx6fD+UlJTA3d0dwcHBV811qUu/t7ofz9bTglQqFVauXIkjR47g5MmTKCsrw7PPPntNz3Px5wzo+v7p/hnRarXYtGlTj5+h1tZWLF682KacZD8sWLouERERmDVrFh577DG0tLSgrKwMzz//PO69914AwGeffYaCggJYLBb4+vrC1dXVuuUWEhKC06dPWx8rNDQUt956Kx5++GHrX/bV1dU9DuC4mnvuuQevvvoq8vLy0NHRgaeeegoRERHWA2Kk0NjYCH9/f3h5eeHkyZN4/fXX+xw/ceJEBAQE4IUXXoDRaER2djb++c9/DtjzX2zx4sXYsGED9u/fj87OTjz33HPWg4AulZ+fj6+//hptbW1wc3ODt7d3j69lVVVVvw6u6vbmm28iPz8fbW1teOKJJzB9+nRoNBoEBwcjMjIS69atg8ViQVZWFv7zn/9YP27YsGFQKpU9vocuplQq8eMf/xhPPvkk6uvrUVdXhyeffBIZGRnX9EfWXXfdhR07duDTTz+F2WzG5s2bsWvXLtx99902ffz27duRm5sLk8kELy8veHh49NiL0W3+/PmoqanBa6+9BpPJhF27dmHjxo1YunSpdUxBQQFWr14Nk8mEzz//HNu3b8ddd90FAFixYgV+97vfIT8/H0DX98enn37a65Y5SYcFS9dt48aNaGtrw4gRIzBlyhTccsstePzxxwEARUVFmDt3Lnx8fKDX6zFp0iQ89NBDALqOCP3mm2/g7++PBQsWAOg6arV717Cvry+mTZuGgwcP2pxl6dKl+NnPfoYFCxYgNDQUR44cwZYtW674i8xe3nzzTbz00kvw9vbGgw8+eNVfuK6urvjkk0/w2WefISAgAI8//jjuueceuLu7D8jzX+zGG2/E73//e9x+++0ICwuDxWJBUlLSFcd2dnbit7/9LUJCQhAUFITt27dbF6S44YYbMHHiRERERMDf379fW+TLly/H4sWLERISgoqKCmzYsMF635o1a/DOO+/Az88Pb775Zo+5eXp64umnn8a8efPg7++PjRs3XvbYf/vb3xAVFQW9Xo/ExETodDr8+c9/tjnbxXQ6HTZv3oynn34aAQEBeO655/Dxxx9j5MiRNn382bNnsXjxYvj7+yM6Ohp+fn54+umnLxsXEBCAL774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",
"text/plain": [
"
"
]
},
"metadata": {},
"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.015 [0.01428 0.01668]\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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bfqsp/rTmX786U9/YuLEidjtdjZt2tTsfD3559KZvtx5552MHz+eyZMnc+utt1JTU9P0WV/ry7/+679SVFTE1KlTKS4uZteuXT3el870o9Gzzz6LzWZr9jPW03/v26QGkPfff1+dOXNGORyOpvceeugh9YMf/EAppVR1dbUqLCxUdXV1Lb7785//XH37299uOi4vL0+VlpYqXdfVnDlz1DvvvNM9nTino32588471aOPPqqUUmrfvn0qIyOjV/SlI/2wLEvl5uaqbdu2KaWUeumll9Q999zTK/qhlFKlpaXqk08+UUopFYlE1Pz589XLL7+s1q5dq+bNm6d0XVclJSUqLy+v6c/l61//uvr973+vlFJq5cqV6q677urx/nSmH59//rk6cOCAWrBggXr//febztXTfy6d6ctrr72mTNNUSin14x//WH3/+9/vs32pqalp+v7LL7+srrjiih7vS2f6oZRSlZWV6vLLL1ezZ89u+hnr6T+TSxlQI9ji4mKys7Obvbdr1y6uvfZaAFJTU5k4cSJvvvlmi++uWrWKO++8E4A333yTK6+8kiFDhuB0Orn77rt56aWX4t+B83S0LzabranaSF1dHUOGDAF6vi8d6UdFRQVKKaZOnQrA4sWLee6553pFPwCGDBnCjBkzAHC73RQVFXH8+HFeeukl7rnnHpxOJ7m5uRQXF7Nu3TqUUrz++uvcddddANx999288sorPd6fjvYDoKioiLFjx7Y4V0//uXSmL0uXLsVub/jVOGPGDI4fP95n+5KSktL0/fr6+qb/7ms/XwA//OEP+dnPfobX6+0V/WiPARWwrZk+fTrPPfcclmVx6tQpNm3axMmTJ5sd88knn6BpGsXFxUBDaayhQ4c2fT5s2DBKSkq6td2taasvv/jFL1i1ahVDhw7lmmuu4bHHHgN6Z18u1o/MzEzcbjcbNmwAGm4NhUIhqqqqel0/KisrWb16NYsWLbpo2yorK0lISGj6hZGQkIDb7aa2trbX9Kc9/WhLb+kHdLwvSikef/zxpn/s9dW+/O///b8ZOXIk//Iv/8Kjjz4K9J6+tLcfb731FpZlsXDhwmbf7y39uJgBH7A//vGPcTqdTJs2jeXLl7NgwYJmzwMB/vrXv3L77bdjs9ma3jv/v1UvWenUVl9++9vf8s///M+cPHmS9957jzvvvJNAIAD0vr601Y8XX3yRn//858yYMYMjR46QkZHR9Flv6UckEuGWW27hBz/4ARMnTgQu3rbz32/rs57oT0f60Zae7gd0ri//9m//ht/v57777mt6ry/25eGHH+bo0aM8+uij/OhHP2p6v6f70t5+hEIh/tf/+l/83//7f1s9T0/3oy3OSx/Sv/n9fn73u981vb7hhhsYP35802vDMHj22WfZuHFj03tDhw5lx44dTa9LSkpitsFAV7TVl//5n/+hsrISgEmTJpGdnc2ePXt6ZV/a6se0adN4++23gYZ//T7xxBMkJyf3mn6Ypsntt9/OjBkz+P73vw80/LycOHGiWdtmz57NoEGDCAQCaJqG1+slFAqh6zopKSk93p+O9KMtPd0P6FxffvOb37Bp0ybWrl3b9Au8r/al0fXXX8+yZcuoqKjo8b50pB+HDx/mxIkTzJw5E4AzZ85w66238v/+3//r8X5cUrc/9e0Fzp9QU1NTozRNU0o1TLiZNGlS0wQHpZRas2aNmjlzZrPv19TUqKFDh6rTp08rXdfV5Zdf3mMP1tvbl/z8fPXaa68ppZQ6ceKEysrKUhUVFb2mL+3tx5kzZ5RSSlmWpb773e+q//iP/2j6Tm/ox7e+9S31zW9+U1mW1fTeunXr1Pz585VhGOrUqVNq6NChTZM3vvGNb6jHH39cKaXUo48+2jTJqaf709F+NLpwklNP90OpjvflySefVFOnTm02Qaiv9mXv3r1Nx7333nsqJydHWZbV433p7M+XUs1/xnq6H5cyoAL2O9/5jsrNzVWAys3NVd/5znfUli1b1JgxY9SECRPUggUL1L59+5p95+tf/7p65JFHWpzrb3/7mxozZowaNWqU+vGPf9xdXWjS0b5s3rxZzZw5UxUVFanCwkL17LPP9oq+dLQfP/7xj9W4cePUmDFj1D/90z8pXdd7RT+UUmrTpk0KUIWFhWry5Mlq8uTJTT87Dz74oBo9erQaM2aMeu6555q+c+LECVVcXKzGjh2r5s2bp0pKSnq8P53pxxNPPKFyc3OV2+1WmZmZatKkST3ej872xel0qhEjRjQdf+edd/bZvlx33XUqPz9fTZ48Wc2bN09t2bKlx/vSmX6c78J/xPX03/u2SKlEIYQQIg4G/CQnIYQQIh4kYIUQQog4kIAVQggh4kACVgghhIgDCVghhBAiDiRgheinbDYbU6ZMobCwkIkTJ/KjH/2oWT3ai1m9enWzxftCiM6RgBWin3I4HGzfvp1du3axZcsWTp48yY033njJ70nAChEbsg5WiH7K6XRiGEbT69raWnJycti8eTNFRUXccsstHDt2DE3TuPrqq/n1r3/Nu+++y80330xSUhJpaWk8+uijTJ06le9///ts27aNcDjMsmXL+Md//Mce7JkQfcOAr0UsxECRkpLCmDFj2Lt3L0VFRfz+979n0KBBWJbFTTfdxNq1a1m8eDHXX389ixYt4o477gAaisVPnTqVxx57DE3TuPzyy7nqqqvIz8/v4R4J0btJwAoxwDQWr3/88cd57rnnME2TsrIyiouLWbx4cYvjX3/9dcLhcNMGDHV1dezfv18CVohLkIAVYoCoq6vj8OHD5Ofns3HjRl588UXee+89kpKS+OEPf4imaa1+TynFqlWrmDJlSvc2WIg+TiY5CTEA1NfXs3z5cubOnUthYSF1dXWkpqaSlJREZWUlL774YtOxycnJzWYbL1myhEceeQTTNAE4dOhQu2YjCzHQScAK0U+Zptm0TGfWrFnk5uby0ksvAXDttdeSmJhIQUEBd9xxBwsWLGj63u23386jjz7KzJkz2bx5MytWrCAxMZHJkyczadIk7rvvPiKRSE91S4g+Q2YRCyGEEHEgI1ghhBAiDiRghRBCiDiQgBVCCCHiQAJWCCGEiAMJWCGEECIOJGCFEEKIOJCAFUIIIeJAAlYIIYSIg/8PfiNexNTt9FIAAAAASUVORK5CYII=",
"text/plain": [
"
"
]
},
"metadata": {},
"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",
"
2030-06-21 12:40:01.592340389
\n",
"
\n",
"
\n",
"
median
\n",
"
2036-09-20 09:03:28.522400448
\n",
"
\n",
"
\n",
"
late
\n",
"
2042-08-13 11:20:06.313348412
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" datetime\n",
"early 2030-06-21 12:40:01.592340389\n",
"median 2036-09-20 09:03:28.522400448\n",
"late 2042-08-13 11:20:06.313348412"
]
},
"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": "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t92GvLw8VFZW4tZbb8VLL70kR2xEREQOSSUIgmDvICwRHx+PkpISe4dBREQuzpJ81KF5rkRERCSNyZWIiMjKmFyJiIisjMmVzNLpDaiq1UKnN9g7FCIihyK5cD+5Hm5nRkTUNay50jVatjPz8/FERO8g+Pl4Iq+gGAUHuUMSEZElmFzJhNR2ZmwiJiKSxuRKJridGRFR1zG5kgluZ0ZE1HVMrmSC25kREXUdRwvTNbidGRFR1zC50jW4nRkRUdcwuZJZzduZMakSEXUU+1yJiIisjMmViIjIyphciYiIrIzJVSZcBJ+IyHVwQJONcRF8IiLXw5qrjXERfCIi18PkakNcBJ+IyDUxudoQF8EnInJNTK42xEXwiYhcE5OrDXERfCIi1yRLcl20aBE8PJoHJr/00ksYMmSI+J+npyfef/99OcKwi6zUKGRnJaC+QYezF39FfYOOi+ATETk5m0/FKSwsRH19vfj43nvvxb333gsAKC8vR1JSEm655RZbh2E3XASfiMj12LTm2tjYiJycHKxevbrN57dt24bJkyfD29vblmEoQvMi+N5MrERELsCmNdfly5dj7ty5CAkJafP5rVu34oUXXmjzudzcXOTm5oqPq6qqbBIjERGRtakEQRBsceEjR47goYceQn5+PlQqFTw8PKDX68XnDx06hNtvvx1nz56FSiW9UlF8fDxKSkpsESoREZHFLMlHNmsW3rdvH0pKShAVFYXIyEgYDAZERkaKNdCtW7di2rRpFiVWIiIiR2Kzmusfta65GgwGhIeHo6CgAPHx8Radz5orEREpgV1rru359NNP0bt3b4sTKxERkSORLbm27m8dN24cvv/+e7l+NRERkay4QhMREZGVMbkSERFZmWwDmroqMDAQYWFh9g4DVVVV6N69u73DcAgsK8uxrCzHsrIcy8oyHS2niooK1NTUtPsah0muSsFRy5ZjWVmOZWU5lpXlWFaWsUU5sVmYiIjIyphciYiIrIzJtYMWL15s7xAcBsvKciwry7GsLMeysowtyol9rkRERFbGmisREZGVMbkSERFZmcsn1//3//4fwsLC4OHx+9a2NTU1uPPOOzF48GAMHjwYO3fuFJ8bP348hgwZgiFDhiAmJsZkbtSbb76J2NhY9O/fH48++qicb0MWHS2r06dPY8yYMUhJSUFSUpLJcywr07IqLCxEWloa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",
"text/plain": [
"
"
]
},
"metadata": {},
"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"
}
},
"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"
}
},
"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"
}
},
"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"
}
},
"outputs": [
{
"data": {
"text/html": [
"