{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[](https://mybinder.org/v2/gh/kasparvonbeelen/ghi_python/main?labpath=11_-_Linear_Regression.ipynb)\n",
"\n",
"\n",
"# Lecture 11: Correlation and Linear Regression\n",
"## A gentle introduction to correlation and regression for historians \n",
"### ... in Python and Pandas\n",
"\n",
"\n",
"## Data Science for Historians (with Python)\n",
"\n",
"### Created by Kaspar Beelen and Luke Blaxill\n",
"\n",
"### For the German Historical Institute, London\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"This notebook turns to more advanced and scientifically interesting methods. We will discuss linear regression and later on generalised linear models. \n",
"\n",
"So far, we focused on quantifying and interpreting differences between subgroups in our data (place and gender), more specifically estimating the significance between the means.\n",
"\n",
"\n",
"Now we turn the analysing the relationship between variables, the extent to which variables are associated with each other. This allows us to model historical phenomena and make predictions. \n",
"\n",
"As in the previous notebook, we highly recommend you watch the lecture by Luke Blaxill for an introduction to the concepts and terminology used in this lecture."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Understanding relations between variables: Lifespan and Wealth in late Victorian London"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We continue with the data used previously but change the research question and analyse the relationship between wealth and lifespan. Concretely, we will asess if the wealthier districts causes a higher ratio of older people. We don't have information on the possession or income for each individual but we have access to the rateable value per capita for each borough in London, which serves as a proxy for the average prosperity of place. We will abbreviate this variable as `rvc` in what follows. \n",
"\n",
"When it comes to lifespan we use the same synthetic census data as in notebook ten. We don't have information on how long people live, but we can establish the ratio of 'old' people, for example, those aged over 50. \n",
"\n",
"Notice how both variables (wealth and lifespan) are proxies for concepts we can not measure directly. In many ways, this makes this case study highly problematic (but therefore morer useful from a didactic perspective). However, working with imperfect proxies is often the only option and being creative with your data is a necessity. In the social sciences, the operationalisation of your research is called [construct validity](https://en.wikipedia.org/wiki/Construct_validity): as we project meaning onto our data we should be critical of our semantics.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's turn to our code. The first step is to load the required tools we need later on in this notebook."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.7/site-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
" import pandas.util.testing as tm\n"
]
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import statsmodels.api as sm\n",
"import statsmodels.formula.api as smf\n",
"import scipy\n",
"import matplotlib.pyplot as plt\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"sns.set()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before turning to the actual regression analysis, we need to discuss the data wrangling. We will cover a few steps that you will often encounter when preparing your data for analysis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create a new dataframe that records the ratio of people over 50 for each district. \n",
"\n",
"Why? We don't know how long Londoners live on average. Here we reason that districts where people have a higher probability of getting \"old\" (beyond 50) they tend to live longer. For \"old\", we computed the ratio of residents over 50 years (twice the median) but we could have chosen other thresholds. We encourage you to do this and assess the extent to which the results will change."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
district
\n",
"
subdistrict
\n",
"
gender
\n",
"
age
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2402205
\n",
"
St George In The East
\n",
"
St George North
\n",
"
M
\n",
"
42
\n",
"
\n",
"
\n",
"
3065353
\n",
"
St Olave Southwark
\n",
"
Bermondsey
\n",
"
F
\n",
"
56
\n",
"
\n",
"
\n",
"
2972022
\n",
"
Southwark
\n",
"
St Mary Newington
\n",
"
F
\n",
"
44
\n",
"
\n",
"
\n",
"
2121692
\n",
"
Shoreditch
\n",
"
Hoxton Old Town
\n",
"
M
\n",
"
40
\n",
"
\n",
"
\n",
"
2225893
\n",
"
Bethnal Green
\n",
"
Bethnal Green North
\n",
"
F
\n",
"
5
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" district subdistrict gender age\n",
"2402205 St George In The East St George North M 42\n",
"3065353 St Olave Southwark Bermondsey F 56\n",
"2972022 Southwark St Mary Newington F 44\n",
"2121692 Shoreditch Hoxton Old Town M 40\n",
"2225893 Bethnal Green Bethnal Green North F 5"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('data/democraphic_data/london_subsample_2.csv',index_col=0)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(27.74792555804773, 25.0)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.age.mean(), df.age.median()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"age_by_dist = df.groupby(['district','subdistrict']).agg({'age':lambda x: round(np.mean(x > 50) *100,1),\n",
" 'gender':'count'}).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
district
\n",
"
subdistrict
\n",
"
age
\n",
"
gender
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Bethnal Green
\n",
"
Bethnal Green East
\n",
"
13.7
\n",
"
10826
\n",
"
\n",
"
\n",
"
1
\n",
"
Bethnal Green
\n",
"
Bethnal Green North
\n",
"
10.6
\n",
"
12570
\n",
"
\n",
"
\n",
"
2
\n",
"
Bethnal Green
\n",
"
Bethnal Green South
\n",
"
9.6
\n",
"
8121
\n",
"
\n",
"
\n",
"
3
\n",
"
Camberwell
\n",
"
Camberwell
\n",
"
14.7
\n",
"
22260
\n",
"
\n",
"
\n",
"
4
\n",
"
Camberwell
\n",
"
Dulwich
\n",
"
14.5
\n",
"
2491
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
109
\n",
"
Whitechapel
\n",
"
Spitalfields
\n",
"
9.4
\n",
"
6659
\n",
"
\n",
"
\n",
"
110
\n",
"
Woolwich
\n",
"
Charlton
\n",
"
11.9
\n",
"
5220
\n",
"
\n",
"
\n",
"
111
\n",
"
Woolwich
\n",
"
Plumstead East
\n",
"
10.7
\n",
"
12100
\n",
"
\n",
"
\n",
"
112
\n",
"
Woolwich
\n",
"
Plumstead West
\n",
"
13.9
\n",
"
4444
\n",
"
\n",
"
\n",
"
113
\n",
"
Woolwich
\n",
"
Woolwich
\n",
"
11.1
\n",
"
10062
\n",
"
\n",
" \n",
"
\n",
"
114 rows × 4 columns
\n",
"
"
],
"text/plain": [
" district subdistrict age gender\n",
"0 Bethnal Green Bethnal Green East 13.7 10826\n",
"1 Bethnal Green Bethnal Green North 10.6 12570\n",
"2 Bethnal Green Bethnal Green South 9.6 8121\n",
"3 Camberwell Camberwell 14.7 22260\n",
"4 Camberwell Dulwich 14.5 2491\n",
".. ... ... ... ...\n",
"109 Whitechapel Spitalfields 9.4 6659\n",
"110 Woolwich Charlton 11.9 5220\n",
"111 Woolwich Plumstead East 10.7 12100\n",
"112 Woolwich Plumstead West 13.9 4444\n",
"113 Woolwich Woolwich 11.1 10062\n",
"\n",
"[114 rows x 4 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"age_by_dist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To understand the relationship between average wealth and lifespan we need to add additional information to our dataframe. \n",
"\n",
"The dataframe below capture the rateable value per capita in each London borough (these data are synthetic but follow the pattern of \"real\" values collected for 1922)."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
borough
\n",
"
rateable_value_pc
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Battersea
\n",
"
6.1
\n",
"
\n",
"
\n",
"
1
\n",
"
Bermondsey
\n",
"
8.5
\n",
"
\n",
"
\n",
"
2
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
3
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
"
\n",
"
4
\n",
"
Chelsea
\n",
"
14.7
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" borough rateable_value_pc\n",
"0 Battersea 6.1\n",
"1 Bermondsey 8.5\n",
"2 Bethnal Green 4.9\n",
"3 Camberwell 5.2\n",
"4 Chelsea 14.7"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rvc = pd.read_csv('./data/democraphic_data/rateable_value.csv',index_col=0)\n",
"rvc.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We want to merge the data frames, but first, we should check to what extent this is possible, both practically and theoretically.\n",
"\n",
"Our first question is: What variables occur in both datasets? Which ones can we use to combine information from different sources?\n",
"\n",
"For our data, both data frames have information about place. The census lists registration districts while the rateable value is organised by the borough.\n",
"\n",
"This leads to a second question: To what extent are the districts that appear in the census the same as the boroughs in the data on rateable value per capita?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we want check which place names appear in both datasets. We create a Python `set`, a list of unique values, for the place names in both dataframes.\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Islington', 'Lambeth', 'Woolwich', 'Marylebone', 'Whitechapel', 'Lewisham', 'Shoreditch', 'Southwark', 'Greenwich', 'Paddington', 'St George In The East', 'Bethnal Green', 'Hampstead', 'Chelsea', 'St George Hanover Square', 'Holborn', 'Mile End Old Town', 'Wandsworth', 'Fulham', 'St Olave Southwark', 'Kensington', 'Camberwell', 'London City', 'Strand', 'Westminster', 'Hackney', 'Pancras', 'St Giles', 'Poplar', 'Stepney'}\n"
]
}
],
"source": [
"d1_pl = set(df['district'])\n",
"print(d1_pl)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Islington', 'Lambeth', 'Woolwich', 'Marylebone', 'Lewisham', 'Shoreditch', 'Bermondsey', 'Southwark', 'Greenwich', 'Paddington', 'Bethnal Green', 'Hampstead', 'Chelsea', 'Stoke Newington', 'Holborn', 'Wandsworth', 'Fulham', 'Battersea', 'Kensington', 'Hammersmith', 'Deptford', 'Camberwell', 'Westminster', 'Hackney', 'Pancras', 'Poplar', 'Finsbury', 'Stepney'}\n"
]
}
],
"source": [
"d2_pl = set(rvc['borough'])\n",
"print(d2_pl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then compute the intersection of these two sets, i.e. the names that appear in both dataframes.\n",
"\n",
"The syntax is `set1.intersection(set2)`. We basically apply the `.intersection()` to a set and pass another set as argument."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Islington', 'Woolwich', 'Lambeth', 'Marylebone', 'Lewisham', 'Shoreditch', 'Southwark', 'Greenwich', 'Paddington', 'Bethnal Green', 'Hampstead', 'Chelsea', 'Holborn', 'Wandsworth', 'Fulham', 'Kensington', 'Camberwell', 'Westminster', 'Hackney', 'Pancras', 'Poplar', 'Stepney'}\n"
]
}
],
"source": [
"print(d1_pl.intersection(d2_pl)) # place names that appear in both dataframes"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'London City',\n",
" 'Mile End Old Town',\n",
" 'St George Hanover Square',\n",
" 'St George In The East',\n",
" 'St Giles',\n",
" 'St Olave Southwark',\n",
" 'Strand',\n",
" 'Whitechapel'}"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d1_pl - d2_pl # place names that appear in df and not rvc"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Battersea',\n",
" 'Bermondsey',\n",
" 'Deptford',\n",
" 'Finsbury',\n",
" 'Hammersmith',\n",
" 'Stoke Newington'}"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d2_pl - d1_pl # place names that appear in rvc and not in df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can merge these two data frame based on the place names. However, be careful: it is not because the strings match that they mean the same thing!\n",
"\n",
"Don't worry about the syntax we will explain it in more detail below."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
district
\n",
"
subdistrict
\n",
"
age
\n",
"
gender
\n",
"
borough
\n",
"
rateable_value_pc
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Bethnal Green
\n",
"
Bethnal Green East
\n",
"
13.7
\n",
"
10826
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
1
\n",
"
Bethnal Green
\n",
"
Bethnal Green North
\n",
"
10.6
\n",
"
12570
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
2
\n",
"
Bethnal Green
\n",
"
Bethnal Green South
\n",
"
9.6
\n",
"
8121
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
3
\n",
"
Camberwell
\n",
"
Camberwell
\n",
"
14.7
\n",
"
22260
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
"
\n",
"
4
\n",
"
Camberwell
\n",
"
Dulwich
\n",
"
14.5
\n",
"
2491
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
89
\n",
"
Westminster
\n",
"
St James Westminster
\n",
"
14.1
\n",
"
5317
\n",
"
Westminster
\n",
"
57.2
\n",
"
\n",
"
\n",
"
90
\n",
"
Woolwich
\n",
"
Charlton
\n",
"
11.9
\n",
"
5220
\n",
"
Woolwich
\n",
"
6.6
\n",
"
\n",
"
\n",
"
91
\n",
"
Woolwich
\n",
"
Plumstead East
\n",
"
10.7
\n",
"
12100
\n",
"
Woolwich
\n",
"
6.6
\n",
"
\n",
"
\n",
"
92
\n",
"
Woolwich
\n",
"
Plumstead West
\n",
"
13.9
\n",
"
4444
\n",
"
Woolwich
\n",
"
6.6
\n",
"
\n",
"
\n",
"
93
\n",
"
Woolwich
\n",
"
Woolwich
\n",
"
11.1
\n",
"
10062
\n",
"
Woolwich
\n",
"
6.6
\n",
"
\n",
" \n",
"
\n",
"
94 rows × 6 columns
\n",
"
"
],
"text/plain": [
" district subdistrict age gender borough \\\n",
"0 Bethnal Green Bethnal Green East 13.7 10826 Bethnal Green \n",
"1 Bethnal Green Bethnal Green North 10.6 12570 Bethnal Green \n",
"2 Bethnal Green Bethnal Green South 9.6 8121 Bethnal Green \n",
"3 Camberwell Camberwell 14.7 22260 Camberwell \n",
"4 Camberwell Dulwich 14.5 2491 Camberwell \n",
".. ... ... ... ... ... \n",
"89 Westminster St James Westminster 14.1 5317 Westminster \n",
"90 Woolwich Charlton 11.9 5220 Woolwich \n",
"91 Woolwich Plumstead East 10.7 12100 Woolwich \n",
"92 Woolwich Plumstead West 13.9 4444 Woolwich \n",
"93 Woolwich Woolwich 11.1 10062 Woolwich \n",
"\n",
" rateable_value_pc \n",
"0 4.9 \n",
"1 4.9 \n",
"2 4.9 \n",
"3 5.2 \n",
"4 5.2 \n",
".. ... \n",
"89 57.2 \n",
"90 6.6 \n",
"91 6.6 \n",
"92 6.6 \n",
"93 6.6 \n",
"\n",
"[94 rows x 6 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged = age_by_dist.merge(rvc,left_on='district',right_on='borough')\n",
"data_merged"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`.merge()` is an extremely useful method combining data frames. It requires us to specify which variable (or column) is shared across data frames and can be used for merging tables. \n",
"\n",
"\n",
"In this `.merge()` operation, we combined information from `rvc` with `age_by_dist`. \n",
"\n",
"As we have shown before, both data frames contain a column with similar values, namely, place names in London. \n",
"\n",
"We use these values to combine the data frames, i.e. rows that have the value `Bethnal Green` in the `age_by_dist` data frames will be joined by the information we have for 'Bethnal Green' in `rvc`\n",
"\n",
"Please notice: the names of the columns can be different but the values in the columns have to overlap.\n",
"\n",
"Below we show a toy example slight adapted from very thorough Pandas [documentation](https://pandas.pydata.org/docs/reference/api/pandas.merge.html).\n",
"\n",
"Imagine that I recorded the number of cats and dogs I spotted each day, but kept this information in two separate data frames."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"df1 = pd.DataFrame({'day': ['mon', 'tue', 'wed', 'thu'],\n",
" 'cats': [1, 2, 3, 5]})\n",
"df2 = pd.DataFrame({'dayz': ['mon', 'tue', 'wed', 'thu'],\n",
" 'dogs': [5, 6, 7, 8]})"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" dayz dogs\n",
"0 mon 5\n",
"1 tue 6\n",
"2 wed 7\n",
"3 thu 8"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Both tables have a column that records that day of the week, even though the column name is slightly differentz. We can combine these data frames into one using `left_df.merge(right_df)`. The method is applied to a dataframe at the left-hand side (before the dot) and one at the right-hand side (passed as an argument to the method).\n",
"\n",
"To merge properly, we have to instruct Pandas precisely which columns we want to use for combining information. `left_on` (`right_on`) indicates the column name we use in the dataframe at the left-hand (right-hand) side of the `.merge()` method. "
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
day
\n",
"
cats
\n",
"
dayz
\n",
"
dogs
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
mon
\n",
"
1
\n",
"
mon
\n",
"
5
\n",
"
\n",
"
\n",
"
1
\n",
"
tue
\n",
"
2
\n",
"
tue
\n",
"
6
\n",
"
\n",
"
\n",
"
2
\n",
"
wed
\n",
"
3
\n",
"
wed
\n",
"
7
\n",
"
\n",
"
\n",
"
3
\n",
"
thu
\n",
"
5
\n",
"
thu
\n",
"
8
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" day cats dayz dogs\n",
"0 mon 1 mon 5\n",
"1 tue 2 tue 6\n",
"2 wed 3 wed 7\n",
"3 thu 5 thu 8"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.merge(df2, left_on='day', right_on='dayz')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sometimes we want `.merge()` using the index of a data frame instead of a column. In this case, we select the argument `left_index` (or `right_index`) and which takes a boolean value (`True` or `False`).\n",
"\n",
"The `.merge()` operation should be more understandable at this point: we merge `age_by_dist` (left) with `rvc`. For the left data frame we use the index (`left_index=True`), for the right the `'borough'` column (`right_on='borough'`)."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
district
\n",
"
subdistrict
\n",
"
age
\n",
"
gender
\n",
"
borough
\n",
"
rateable_value_pc
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Bethnal Green
\n",
"
Bethnal Green East
\n",
"
13.7
\n",
"
10826
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
1
\n",
"
Bethnal Green
\n",
"
Bethnal Green North
\n",
"
10.6
\n",
"
12570
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
2
\n",
"
Bethnal Green
\n",
"
Bethnal Green South
\n",
"
9.6
\n",
"
8121
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
3
\n",
"
Camberwell
\n",
"
Camberwell
\n",
"
14.7
\n",
"
22260
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
"
\n",
"
4
\n",
"
Camberwell
\n",
"
Dulwich
\n",
"
14.5
\n",
"
2491
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" district subdistrict age gender borough \\\n",
"0 Bethnal Green Bethnal Green East 13.7 10826 Bethnal Green \n",
"1 Bethnal Green Bethnal Green North 10.6 12570 Bethnal Green \n",
"2 Bethnal Green Bethnal Green South 9.6 8121 Bethnal Green \n",
"3 Camberwell Camberwell 14.7 22260 Camberwell \n",
"4 Camberwell Dulwich 14.5 2491 Camberwell \n",
"\n",
" rateable_value_pc \n",
"0 4.9 \n",
"1 4.9 \n",
"2 4.9 \n",
"3 5.2 \n",
"4 5.2 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged = age_by_dist.merge(rvc,left_on='district',right_on='borough')\n",
"data_merged.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
subdistrict
\n",
"
age
\n",
"
gender
\n",
"
borough
\n",
"
rateable_value_pc
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Bethnal Green East
\n",
"
13.7
\n",
"
10826
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
1
\n",
"
Bethnal Green North
\n",
"
10.6
\n",
"
12570
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
2
\n",
"
Bethnal Green South
\n",
"
9.6
\n",
"
8121
\n",
"
Bethnal Green
\n",
"
4.9
\n",
"
\n",
"
\n",
"
3
\n",
"
Camberwell
\n",
"
14.7
\n",
"
22260
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
"
\n",
"
4
\n",
"
Dulwich
\n",
"
14.5
\n",
"
2491
\n",
"
Camberwell
\n",
"
5.2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" subdistrict age gender borough rateable_value_pc\n",
"0 Bethnal Green East 13.7 10826 Bethnal Green 4.9\n",
"1 Bethnal Green North 10.6 12570 Bethnal Green 4.9\n",
"2 Bethnal Green South 9.6 8121 Bethnal Green 4.9\n",
"3 Camberwell 14.7 22260 Camberwell 5.2\n",
"4 Dulwich 14.5 2491 Camberwell 5.2"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged.drop('district',inplace=True, axis=1)\n",
"data_merged.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Correlation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After combining information from these two data frames, we can explore the relationship between variables. Let's start with the most obvious: correlation. \n",
"\n",
"Correlation tells us the extent to which two variables are related. Imagine, each day I collect the number of dogs and cats I observed in two separate variables or vectors (`dogs` and `cats`). \n",
"\n",
"If there is a correlation, I expect that if the number of (spotted) dogs up, the same will apply to cats.\n",
"\n",
"Visually, we can make a scatterplot to assess whether there is a correlation: the x-axis shows the number of dogs, the y-axis the number of cats. "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"dogs = [1,3,5,7,2,6] # first vector\n",
"cats = [2,4,8,7,3,5] # second vector"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.scatterplot(x=dogs,y=cats)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The figure suggests a strong correlation between the vectors for`dogs` and `cats`, i.e. we observe high values for y when x is high (and vice versa of course). \n",
"\n",
"Please notice that computing correlation is based on an implicit alignment between the two vectors. Each position captures the same day. If the order in `cats` would be different from `dogs` (for example the former starts on Wednesday and the latter on Sunday) I could, technically, still make a scatterplot and computer correlation but the results would be meaningless (or at least not match the intention).\n",
"\n",
"The visualization is helpful, but we'd like to put a number on this, quantify the strength of the relation, so we can compare if other vectors are stronger correlated. Here the Pearson correlation coefficient will come to our rescue.\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pearson Correlation\n",
"\n",
"A widely used measure for computing the relationship between two vectors or vectors is the Pearson correlation coefficient. This coefficient will vary between -1 and +1, meaning a strong negative respectively positive correlation. A score of 0 indicates no correlation.\n",
"\n",
"We will first show you how to compute the Pearson correlation coefficient yourself, purely for didactic purposes, so you know what is going on (the score is not magic, far from!). But as you can probably guess by this point, there exists a method in Pandas that will help you. We'll have a look at that later.\n",
"\n",
"Showing how the calculation is done, demystifies the process and helps you to understand what is going on.\n",
"\n",
"We need a few ingredients to compute the Pearson correlation coefficient. First, we calculate the mean and standard deviation for each vector. We need to normalize by the amount of data we have and record the number of observations `n`, which is equal to the length of `v1` (or `v2`—remember both are aligned and equal in length!)."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"v1 = [1,3,5,7,2,6] # first vector\n",
"v2 = [2,4,8,7,3,5] # second vector"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"mean_v1 = np.mean(v1)\n",
"mean_v2 = np.mean(v2)\n",
"std_v1 = np.std(v1)\n",
"std_v2 = np.std(v2)\n",
"n = len(v1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we subtract each value a vector with the mean (of that vector of course). We repeat this for `v1` and `v2`."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"sub_mean_v1 = [i - mean_v1 for i in v1]\n",
"sub_mean_v2 = [i - mean_v2 for i in v2]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([-3.0, -1.0, 1.0, 3.0, -2.0, 2.0],\n",
" [-2.833333333333333,\n",
" -0.833333333333333,\n",
" 3.166666666666667,\n",
" 2.166666666666667,\n",
" -1.833333333333333,\n",
" 0.16666666666666696])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sub_mean_v1,sub_mean_v2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we compute products of the values in `sub_mean_v1` and `sub_mean_v2` position-wise, i.e we multiply the first value in `sub_mean_v1` with first the value `sub_mean_v2` etc.\n",
"\n",
"A convenient function for doing this `zip()`, which, as the name suggests, \"zips\" two lists based on their positional index. For example if we `zip` `sub_mean_v1` and `sub_mean_v1` we get:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(-3.0, -2.833333333333333),\n",
" (-1.0, -0.833333333333333),\n",
" (1.0, 3.166666666666667),\n",
" (3.0, 2.166666666666667),\n",
" (-2.0, -1.833333333333333),\n",
" (2.0, 0.16666666666666696)]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diffs_zipped = list(zip(sub_mean_v1,sub_mean_v2))\n",
"diffs_zipped"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each element in the list `diffs_zipped` is a tuple. We multiply the elements in each tuple.."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[8.5,\n",
" 0.833333333333333,\n",
" 3.166666666666667,\n",
" 6.500000000000001,\n",
" 3.666666666666666,\n",
" 0.3333333333333339]"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"products = [i*j for i,j in diffs_zipped]\n",
"products"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"... and we sum all the values, which will give is the nominator of Pearson correlation coefficient."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"23.0"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nominator = sum(products)\n",
"nominator"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To obtain the coefficient, we divide the nominator by the product of the standard deviations and the number of observations."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"denominator = std_v1 * std_v2 * len(v1)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8390957231764806"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nominator / denominator"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking closer at these steps you can intuitively grasp what determines the strength of the correlation. If two values (at the same position) differ from the mean in equal terms, this will result in a higher product (remember from high school that the product of two negative numbers is positive!) and, in turn, increases the value of the nominator. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Of course, Pandas provides a method called`.corr()` to compute correlations between two instances of `pd.Series`. We first convert each vector to an instance of `pd.Series` and then calculate the correlation coefficient, which, no surprise, should be exactly the same!"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8390957231764807"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.Series(v1).corr(pd.Series(v2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Of course, now we can also compute the relation between age and wealth."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0477830510512453"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged['age'].corr(data_merged['rateable_value_pc'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Actually, that's quite a low correlation! This does not bode well for our expectation that richer boroughs are associated with longer lifespans. But we'll turn that to that shortly."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.scatterplot(x='rateable_value_pc',y='age',data=data_merged)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Spearman Correlation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pearson correlation is one option of many to compute the strength of the relationship between two variables. The choice depends on your research priorities and some procedures will be more relevant or valid than others. \n",
"\n",
"Pearson takes into account the absolute counts of the number of cats and dogs. But imagine, that I don't care about how many animals I observe each day what matters is that ranking of the days is correlated. In this case, the ranking of the days has priority. In this scenario, we should calculate the Spearman rank correlation. \n",
"\n",
"To obtain this coefficient, we need to compute the rank of each day, for example, the third item in `v1` has rank 4 (i.e. it comes fourth after the items on positions 0, 1 and 4)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([1, 3, 5, 7, 2, 6], [1, 3, 4, 6, 2, 5])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v1_ranked = {v:i+1 for i,v in enumerate(sorted(v1))} # compute the rank if each days\n",
"v1_rank = [v1_ranked[i] for i in v1]\n",
"v1, v1_rank "
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([2, 4, 8, 7, 3, 5], [1, 3, 6, 5, 2, 4])"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v2_ranked = {v:i+1 for i,v in enumerate(sorted(v2))} # compute the rank if each days\n",
"v2_rank = [v2_ranked[i] for i in v2]\n",
"v2, v2_rank"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"mean_v1 = np.mean(v1_rank) # we compute the mean ranks\n",
"mean_v2 = np.mean(v2_rank)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"nominator = np.sum([(i1 - mean_v1)*(i2 - mean_v2) for i1,i2 in zip(v1_rank,v2_rank)]) # we compute the difference between rank and mean rank"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"denominator = np.std(v1_rank) * np.std(v2_rank) * len(v2_rank)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8285714285714286"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nominator/denominator"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8285714285714287"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.Series(v1).corr(pd.Series(v2), method='spearman')"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.10742706678948936"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged['age'].corr(data_merged['rateable_value_pc'],method='spearman')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Correlation does not mean causation. Oftentimes, correlations are 'spurious', i.e. it is unlikely there exists a realistic mechanism that explains the association between two variables. \n",
" \n",
"There is even [a website on this topic!](https://www.tylervigen.com/spurious-correlations)\n",
"\n",
"Be careful when making claims based on correlation. As often, the statistical experiment won't give you an answer to your question. There is no simple way to determine if a correlation is spurious. It depends on your domain expertise to make sense of these results and justify them.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Linear Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Whereas correlation tells you that two variables, X and Y, are related you can not model their relationship, i.e. you can not predict Y using X. Correlation can only tell you that when X goes up, Y goes up (or not).\n",
"\n",
"Regression modelling attempts to model the mechanistic relationship between two variables: how many cats do I expect to see, given that I observed five dogs?\n",
"\n",
"Modelling the mechanistic relationship enables us to predict outcomes based on independent variables or predictors.\n",
"\n",
"Returning to our example of age and wealth (goodbye doggies, you were helpful), we'd want to predict the lifespan (the response variable approximated by the ratio of residents older than 50) given the rateable value per capita (predictor variable).\n",
"\n",
"Notice that we rely on domain expertise to construct a model that makes sense. We could also model the reverse, assuming that increasing lifespan will push rateable value upwards.\n",
"\n",
"However, we assumed wealth has a positive impact on lifespan and not vice versa. Our causal model, therefore, looks as follows: \n",
"\n",
"`Wealth -> lifespan`\n",
"\n",
"and not \n",
"\n",
"`Wealth <- lifespan`\n",
"\n",
"Whether a causal model makes sense is not a statistical question but depends on your domain expertise as a historian (and in this case, there is room for dispute!?). When reading a historical paper that uses statistical methods, it is often more important to critically look at the relation between the narrative and the method than just the regression procedure: What are data supposed to capture and how are they combined into/framed as a causal theory?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's discuss these questions with some actual data. We first demonstrate what a regression model does before we continue with a more detailed explanation of how to run and evaluate a regression model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A linear model tries to predict a value (lifespan/ratio of 50+) based on a linear combination of other variables (for now, just one, the rateable value per capita). We want to predict the former using the latter.\n",
"\n",
"Using `seaborn` we can make a dispersion plot where each observation is turned into a point on the figure. The x-axis (`x=`) shows the rateable value, the y-axis (`y=`) the ratio of residents older than 50. "
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.scatterplot(x='rateable_value_pc',\n",
" y='age',\n",
" data=data_merged)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"A linear regression models the relation between `x` and `y` by drawing a line best \"fits\" the data, i.e. is closest to the observations as possible.\n",
"\n",
"\n",
"From your high school education, you may remember the equation of a line.\n",
"\n",
"$y = a + b*x$\n",
"\n",
"\n",
"Which can convert this equation to our variables of interest\n",
"\n",
"- $a$ is the intercept, the point where the line crosses to y-axis when x is zero. You may also think as: what ratio do we expect for a place with zero rateable value?\n",
"\n",
"- $b$ is the slope, and determines the strength of the relationship between $y$ and $x$: how much change do we expect in $y$ after one unit change $x$. \n",
"\n",
"\n",
"\n",
"We know lifespan and rateable value. \n",
"\n",
"lifespan = intercept + slope * rateable value per capita\n",
"\n",
"We use these data to estimate the values of $a$ (intercept) and $b$ slope. \n",
"We will discuss later how, but for now, we just plot the outcome of running a linear regression, to show what the model thinks the line should look like after observing the data."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rateable_value_pc\", y=\"age\", \n",
" data=data_merged,\n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The line visualizes the outcome of linear regression. The fact that a model throws back a result, a line, doesn't necessarily mean that this result makes sense. The best fit can still be pretty bad. In this case, the line is pretty flat, suggesting that $b% is close to zero, but also pretty bad (it doesn't capture much of the variation).\n",
"\n",
"As you observe there are many values are clustered together in the lower range of the x-axis, and only a few appear at the right-hand side of the figure.\n",
"\n",
"We can improve the fit by transforming the values on x-axis. We take the natural logarithm of the rateable value per capita, this will make small differences bigger and bigger ones smaller, it pulls apart the observation at the lower end of the independent variable and pushes those placed at the far right towards the other observations).\n",
"\n",
"But what is the natural logarithm? Let's have a look, what happens if we take the logarithm of 1000"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6.907755278982137"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.log(1000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We get a number close to 7 (i.e. 6.907755278982137). What does this mean? The logarithm is inverse of exponentiation: if x = log(y) then y = exp(x), or sticking to our example, if np.log(1000) produces 6.907755 then \n",
"e6.90775 will approximately equal 1000 (not exactly as rounded the numbers.\n",
"`e` is called Euler's number and is approximately equal to 2.71828182845904523536028747135266249775724709369995 according to [Wikipedia](https://en.wikipedia.org/wiki/E_(mathematical_constant)). You can check this for yourself"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"999.9999999999998"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.exp(6.907755278982137)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"..is equivalent to..."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"999.9953534904313"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.power(2.71828,6.907755278982137)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But why would we do this? Why would we effectively rescale our variables? Taking the logarithm partly solves the problem of dispersion: the logarithmic scale makes linear modelling often easier if a variable is linear on the logarithmic scale. "
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"x_1 = [10,100,1000,10000]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is difficult to model these gaps with a line..."
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=list(range(len(data_merged))), y=data_merged[\"rvc_log\"], \n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Both lines don't fit the data perfectly, However, the latter one seems to approximate the actual observed values better.\n",
"\n",
"Also, if now model age as a function of the logged rateable value, the line will fit our observation better across all values of the x-axis. Still the result isn't great..."
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"data_merged['rvc_log'] = np.log(data_merged['rateable_value_pc']) # take the logarithm of rvc"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEJCAYAAAByupuRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de3RU1dk/8O+ZS4bcgAiTvDEkSINcRIUqFfktCkgrUhNE1CK8XfhSar2UcrEu5boML20EEYu6KLYq2GppISIKxry01Sjv4vJSoRAKRQopCQmkhIQEM7nM9fz+CDOZJJPMTDLnMrO/n7VcknMm5+ydk+xnn2fvs48ky7IMIiISkkHrAhARkXYYBIiIBMYgQEQkMAYBIiKBMQgQEQmMQYCISGAMAkREAjNpXYBw1dU1wuNpe7RhwIAk1NbaNCyRNkSst4h1BlhvkShRZ4NBQkpKYpf7oy4IeDxyuyDg3SYiEestYp0B1lskateZ6SAiIoExCBARCYxBgIhIYAwCREQCYxAgIhJY1M0OIqLwnblQh3MXr2FoRj8Mz0rRujikI7wTIIpxZy7UYWvRV/ji+CVsLfoKZy7UaV0k0hEGAaIYd+7iNXhkGUnxZnhkGecuXtO6SKQjDAJEMW5oRj8YJAm2ZicMkoShGf20LhLpCMcEiGLc8KwUzL9/BMcEKCAGASIBDM9KYeNPATEdREQkMEWDwKZNm5CTk4OcnBysX78eAHDw4EFMnz4dU6dOxcaNG5U8PRERBaFYEDh48CD279+PDz/8EB999BFOnTqFwsJCrFixAps3b0ZRURFOnjyJffv2KVUEIiIKQrEgYLVasWzZMsTFxcFsNiM7OxtlZWUYPHgwMjMzYTKZMH36dOzdu1epIhARURCKDQzffPPNvn+XlZWhqKgIc+fOhdVq9W1PTU3F5cuXwzrugAFJnbZZrck9L2gUE7HeItYZYL1FonadFZ8ddPbsWTz55JNYunQpTCYTzp8/326/JElhHa+21tbupQtWazKuXGmISFmjiYj1FrHOAOstEiXqbDBIATvPvv0RPVsHR48exbx58/Dss89i5syZSEtLQ01NjW9/dXU1UlNTlSwCERF1Q7EgUFVVhQULFmDDhg3IyckBAIwePRrnz59HeXk53G43CgsLMXHiRKWKQEREQSiWDtqyZQvsdjvWrVvn2zZ79mysW7cOCxcuhN1ux6RJkzBt2jSlikBEREFIsixH1ZucOSbQSsR6i1hngPUWScyNCRARkb4xCBARCYxBgIhIYAwCREQCYxAgIhIYgwARkcAYBIiIBMYgQEQkMAYBIiKBMQgQEQmMQYCISGAMAkREAmMQICISGIMAEZHAGASIiATGIEBEJDAGASIigTEIEBEJjEGAiEhgDAJERAJjECAiEhiDABGRwBgEiIgEZtK6AERaO3OhDucuXsPQjH4YnpWidXGIVKXonYDNZkNubi4qKysBAPv378cDDzyA3NxcPP/883A4HEqeniioMxfqsLXoK3xx/BK2Fn2FMxfqtC4SkaoUCwIlJSWYM2cOysrKfNtWrlyJjRs3orCwEC0tLdi9e7dSpycKybmL1+CRZSTFm+GRZZy7eE3rIhGpSrEgUFBQgLy8PKSmpvq2ud1u2Gw2uN1u2O12WCwWpU5PFJKhGf1gkCTYmp0wSBKGZvTTukhEqlJsTCA/P7/TttWrV2Pu3LlISkrCoEGDMG3aNKVOTxSS4VkpmH//CI4JkLAkWZZlJU8wZcoUvPvuu7BYLJg7dy7efPNNDBo0CGvXroXL5UJeXp6Spyciom6oNjvoyJEjGDZsGLKysgAAs2bNwpIlS8I+Tm2tDR5PW9yyWpNx5UpDxMoZLUSst4h1BlhvkShRZ4NBwoABSV3vj+jZujFs2DCcOHECNTU1AIDPPvsMt912m1qnJyKiAFS7E8jOzsbixYvx2GOPwWg0YvDgwVizZo1apyciogAUDwLFxcW+f8+cORMzZ85U+pRERBQiPjFMfGKWSGBcO0hwfGKWSGwMAoLjE7NEYmMQEByfmCUSG8cEBMcnZonExiBAGJ6VwsafSFBMBxERCYxBgIhIYAwCREQCYxAgIhIYgwARkcAYBIiIBMYgQEQkMAYBIiKBMQgQEQmMQYCISGAMAkREAmMQICISGBeQUxHf4EVEesM7AZXwDV5EpEcMAirhG7yISI8YBFTCN3gRkR5xTEAlfIMXEekRg4CK+AYv0gonJVBXmA4iinGclEDdUTwI2Gw25ObmorKyEgBw7NgxzJo1Czk5OfjZz34Gh8OhdBGIhMZJCdQdRYNASUkJ5syZg7KyMgCtAWHhwoVYs2YNPvnkEwDAzp07lSwCkfA4KYG6o+iYQEFBAfLy8vD8888DAA4cOIAxY8ZgxIgRAIBVq1bB7XYrWYSowHwtKYmTEqg7igaB/Pz8dl+Xl5cjISEBCxYswIULFzB27FgsW7ZMySLonjdf65Fl/G9JFebfP4J/pBRxnJRAXVF1dpDb7cb+/fuxY8cO3HjjjVi5ciXefPNNLFy4MORjDBiQ1Gmb1ZocyWKq6osTVZAkICXJgq8bHaiqb8GEO0OrTzTXu6dErDPAeotE7TqrGgQGDhyI0aNHIzMzEwDwve99D7///e/DOkZtrQ0ej+z72mpNxpUrDREtp5rS+/eBLAN1DXYYJAnp/fuEVJ9or3dPKFVnvafjRLzWgJj1VqLOBoMUsPPs2x/RswUxYcIEnDp1ClVVVQCAzz//HKNGjVKzCLrjzddOHnMjU0Ea4PRJEp2qdwLp6elYs2YNnnrqKdjtdowcORJLly5Vswi6xHytdvynT9qanTh38RqvBQlFlSBQXFzs+/fkyZMxefJkNU5LFNTQjH7435IqTp8kYXHZiB7Qew6ZQsfpkyQ6BoEwcUpnz+g5cDIdRyLj2kFh4iP44ePgK5F+MQiEqSeP4J+5UIdPDpUp0vgpeexIYeAk0i+mg8IUbg5ZyfRRtKSmOPhKpF8MAj0QTg5ZySmI0TK9Ua+Dr3oepyBSC9NBClNyBcdoWh1yeFYKcsbfpJvGluMURK14J6AwJXvBeu1hR4NouYsiUhqDQA+Em0ZQcgoipzf2zNCMfvj0aCWq65oQZzbq+i4qEpj6oq4wHRQmphFih+T3Xyzj7yx1J+QgcOLECWzfvh0OhwPHjh1Tsky6xumOPaO3qaznLl6D0WiANSUBRqMhpq8jf2epOyEFgV27dmH58uV4++230dDQgJ/85CcoKChQumy6pLfnBKKBHnui0TSo3lsi1ZXCF1IQeO+997Bjxw4kJSVhwIAB2LVrF373u98pXTZdCnfpZz02gGrTY09UpCW8RaorhS+kgWGDwYCkpLaXEqSnp8NoNCpWKL3Ty3MCodJ6UFCvD4uJNKguUl0pPCEFgf79++P06dOQpNYhtD179qBfP338Ieud1g2gHp4q5lRWIv0KKQisWLECixcvxoULFzBhwgRYLBZs3rxZ6bKpJtyecjif17oB1MOdCMCeKJFehRQEsrOzsXv3bpSVlcHtdmPIkCEwm81Kl00V4faUQ/l8xyChZQOo9Z0IEelbSEFg06ZN7b6WJAnx8fG4+eab8e1vf1uRgqkl3J5ysM/rIf3iT+s7ESLSt5BmB/3zn//Ejh07UF9fj4aGBnzwwQf4/PPP8frrr+NXv/qV0mVU1NCMfnC5Paiua4LL7QnaUw423U6vM2H0tG4PEelHSEGgtrYWu3btwqpVq7B8+XJ88MEHkCQJ27Ztw969e5Uuo+LCeXI02HQ7zskmomgSUjqovr4eVqvV93VKSgrq6+sRFxcHkym6lx/yPTmaZAl54LS7HH+g9IvWUzSJiLoSUguemZmJV155BbNmzQIAvP/++8jKykJJSQkMhuhefkiJgVP/IKG3MQIiIn8hteAvvvgiLl26hIceegjf//73UV1djfz8fJw6dQpLly5VuoyKUvppSj2OERAReYV0J1BeXo7GxkaMHDkSsiyjoqICM2bMwBdffKFw8dSh5BROTtEkIj0L6U5g1apVuOOOO9DU1IQHHngAycnJmDp1qtJliwlct4WI9CykICBJEp544gl861vfwje+8Q289tprOHLkSNDvs9lsyM3NRWVlZbvt27Ztw9y5c3tW4ijknaIJQOjVRIkofEqvQhxSEEhMTAQAZGVl4ezZs7BYLHC73d1+T0lJCebMmYOysrJ228+dO4ff/OY3PSttFONqokQULjXajZCCwO23344lS5bg7rvvxtatW7Fu3bqgq4gWFBQgLy8Pqampvm0OhwMvvPACFi9e3LtSRyGlBohFf1cBUSxTY2JJyAvIlZSUYMiQIVixYgUOHjyIDRs2dPs9+fn5nba98sorePjhhzFo0KCelVYnerLg3JX6ZrjdnnYDxL19foDTT4lih8cjo6HJgeq6JjS2uNBkd8Hl9sDucMPp8sCi0LuwQwoCkiRhzJgxAIDJkydj8uTJYZ/owIEDqKqqwvLly3H48OGwv99rwICkTtus1uQeHy9cJ0tr8Ls/nYHHI+PAyX9j8aPfxK3ZA0P6vMEgYeyINEy+szUIvrbjWMjHCaSqvgWSBKQkWfB1owNV9S2YcKd6PwstqHmt9YT1jg4utweNzU7Ymp2wNTmu/7/1647bG737WpxobHKgye6CLAc+rsEg4Wf/eQfuHJEW8TKr9rhvYWEhzp49ixkzZqCpqQk1NTVYsmQJXn311bCOU1trg8fT9pOyWpNx5UpDpIvbpSOnquB0eXwLyB05VYW0vpaQP5/Ux4i0vhZ8cqgs4HFCvTuwWpOR3r8PZBmoa7DDIElI799H1Z+F2tS+1nrBeqvL6XKjqcXV2htvcaGxxdn2f3vHbS40tTh9n7U7ux8rDYckAQkWExL7mHHLTSnIvCG+Rz8Pg0EK2Hn2Ui0IrF271vfvw4cPY9OmTWEHAD0Id95/V58PtD3c9A5XCCXqTJZlOJyeLhpv/0b7+v4ODbvT5YlYWYwGCQl9Whvy9v83IaGPGYnxrdsSr29LT+sHl8OBBIsZfSxGGKS2Fc3c7i5uE3opuhf+CUOk1u8Jt+Ht6vOBtn9yqCzsF8DwZS0Ui2RZRlOLEzXXmts13r5/253teurNHRp4tydyDabZZGhttC0mJMR7G2yzryH3NuqJfcxIiPffZ4LFbPS9kTFwPdv/e+DAJNTUNECWAdkDuKFMw+9P8SBQXFzcadu4ceMwbtw4pU/to/UAalcNdcftPXm6mIvTdcafiT54PPL1HnhrTzxgeqXFhX9fbULd13YYDBI8HtnXc+8qP94TFrOxrffdx4TE+AANuLdxv96Qtzb6JsSZOs+E9JatrYxywPJ6PK37whHJeodCiDuBSL5iUcmAEu5dhtbBTY/4M4ksl9sTIA/e+v+mbnPmLrTYXRHtx8ZbOjbY7VMqCdd7323plbZtJmP72fAde+BdNeKAcmkYvRAiCERy/Z5zF6/B7nTDIAFOGRF5Z2+g11GGWhY9vD9YT/gz6UxXA50dUimNzU7UNzrQJ84Ij0fG0Ix++OawgUiwmJCe1hcuh9PXKzcYWtMqgRrwjts7ivWGvDeECAKRHEC1mI2wNTshyzIkSYLF3P1Dc8H0pufKxek6i8WfiSzLsDvcIQ10ehvv1vSLsgOd7Xvi/umVtoFO737vQKfk9+omWQbOVdbj3T+dgdPtgUGS8O3b032///6zg2SZDblShAgCQOQGUO1ON5LjTZAkqfWPs5c9pY491/85XI7CQ2UYnT0Q3x2b2e33cnZQZ3r9mciyjGa7u0N+PPBAZ1PHGSx2F1wRbADNJkPr1MN4vxx5iAOdcSbj9d99IJQeeLufgQeQOySIsjP64T+/e7PurpdIhAkCkTI0ox/2/vUC7A4XLHG9f4LPv+fa4nDh5L+uQgZwurweAEIKBJFOR0U7pWZM+Q90tkutdJFS8c+ZN9vd8ERwxM830BnfodftlxfvNNB5fZ/Zb8mXYPnwjmS5NaBR7GAQCFNFtQ3NLa0zF5pbXKiotkVsyunfzlxBWUsDzEYDnG4PSkprggaB3hJtILWrgc62KYbqDXQmWDo22IEHOv/DmgyP04XEPmbEW9oGOv1npgCh98g9EZw+2Vui/f7pEYNAmEpKayCj9ZY61Iba29O2mI2wO92detzenqvFbER5tQ1OtweSJGF0mMtI9MS5i9fgcLogSRJc1xeo0vsfYbcDnf49cbv6A53+qZSO27w99XiLGQkWIwwGKaSGO9CTs3pqyHuDA/naYxAI0+jsgThdXh9yQ+3t6didbtianUiON3XZ4/EGk5LSmpDGBCLBYjaiodkVsYHuUHjHUpoCplS6fqKzxeFCQ5NTvYFOS4ec+PWHhRLiWnvjHQc6w/85RKwaUSsWB/KjDYMAwsuJh9tQe3s6Bgm+htbTTY/7u2MzVWn8vexON5LizTBIgEdGyD1lWZbR0m7GSsfZKc4APfW2hl2RJzo75MQ7ple888zjLWYk9GnNqXsHOkkbeh3IF4nwQaAnOcnM1CTYnW5kpna9KJOXt6fjlOGbUaSXHo/HIyNjYCJMBglujwwJgNPlwRfHL3ZqvJs7TD9sanGpNtDpzY+nDkyCx+Vu66Vfb8hNQd5tQfrGpU+0JXwQCDcn2ZtF3roaE+iN7p7obG28u8iZ21tnrHS050BZj8sSbzG2n5Xi1xOPt7Q9it/6mdbPxl9Ps3R8ojMQUVfTJFKS8EEg3JxkTwaygvV0nC43GkNotP1TKi0ONxqanMoPdF5PoSTEt/3b16D79dj9n+gkoughfBAINycZKGjofelab548oWPD7j/g2afz0rVEFPuEDwJAayAYltkfzXZ3SEvXJsWbcM3mgBsy3vjopHJL13acZug3rzzNmgS3w9WpwY8zG8Ie6DxzoQ6HT1/mwByRgIQJAsfP1uDsxfpOvfNmv567kkvXJsSbkGhpv9Jh4IeFTDAHWLq2o0jlx/mwDpHYhAgC1xodeP2DE2F/X8dGumMDntjHhPgAbw0KdaBTD/iwDpHYhAgCfRPMuHdsJi7WNPrNI29LsySoNNAZyvMIaq/jw4d1xBBr60NR5EhylK0GpfWL5nvKP+1ikKSAaZdQPuMVyXpHSwMRLdc60npb73B+r/RExOutRJ2DvWg+OnIWOnPmQh0+OVSGMxfqQv4e/7SL94nhnnxGCcOzUpAz/qaoaBgofFr9XlF0YBAIk7dX9cXxS9ha9FXIgWBoRj8YJKnbtEsonyEKF3+vqDtCjAlEUk8HUrt7HsE/HXPv2EG+dYnU6pmrkQ6KlpRTLOL6PNQdBoEwhTKQ2lWDF+jJYf987adHKyEBMBoNqK6rRGZqUkT+YD89UtHlgndqTBHlNFQi/WIQCFOwXlW4DZ7/nUV1XRMkANYkS8Sma356pALbi89BluWAbytTY4oop6Fqi0GYusMxgR7obiD13MVrsDvdcLs9sDvdQQfh/PO1cWYj4q6/yD5SuduS0hrIsgyz0QBZllFSWtPl+ZXKFzMnrS0ODFN3eCcQYZbrjXioL2npeGcBIKK522AvwVEjX8yctLb4LAh1R/EgYLPZMHv2bPz617/GoEGDsGPHDrz33nuQJAm33nor/vu//xtxcXFKFyOiuhvktDvdSI43+d4dEO4qn5FeWz2Ul+CosZ4714zXDoMwdUfRdFBJSQnmzJmDsrIyAMD58+exZcsWbN++HXv27IHH48Ef/vAHJYsQccGmiA7N6Ic4swlGowFxZlPQXldPp5yG47tjM/Hso99U9Y1lpC98FoS6omgQKCgoQF5eHlJTUwEAcXFxWL16NZKSkiBJEoYNG4ZLly4pWYSIC5Zf9fa6Jo+5MaQBOOZriUhLiqaD8vPz232dkZGBjIwMAMDVq1exbds2rF27NqxjBnr82WpN7nkhwzR2VDoOnPw3mu0umE0GjB2V3un8VmsyJtwZ/FgnS2tgs7shy3K3x+uKmvXWCxHrDMR2vU+W1uB02VWMvOkG3NphzCqW690VteusycDw5cuX8fjjj+Phhx/GuHHjwvperdcOSutrwX/dN9yXX03ra+nR+f2n7bk9Mm4bkoK7R6WFfDyuqyKOWK63/9/B/xwsa3f3HMv17ooQaweVlpZizpw5mDlzJhYsWKD26SOit/nVMxfqUHioDA6nC0nxZpiMBgzs34f5WhIO06HaUzUI2Gw2/OhHP8LixYsxf/58NU8dUT1ZQM7/e7cWfYWK6kY0NLtQ39DCaXskLD5Doj1V00E7d+5ETU0Ntm7diq1btwIApkyZgsWLF6tZjF7p7dOX3p5PSrIFADAoNRG5nLVBguL0Ve2pEgSKi4sBAPPmzcO8efPUOKViersEgv+DOxazkQGAiDTFJ4bD1NunL9nzIWrDdY20xyAQpuFZKb1e7rnj07NKL7PMZZxJr7i4oPa4gFyYzlyow1+OVOLfV5vxlyOVvX7CV+knhtV4IpmopzgwrD0GgTBFekqb0lPkOAWP9CzcJ+wp8hgEwhTpnovSPSH2tEjvuK6RtjgmEKZID+wqPVDMgWgi6g6DQA9Eelnk3hwvlEHfYMfnwDGRuBgENNTbxjcS0+s4RY9IbBwT0EgkZu1EYtCXA8dEYmMQQO/WAuop/8bX7nSjsAfnj8SgLweOSWta/P1RG+Pq1atXa12IcDQ3OyC3rSSNxEQLmpocPT6et0d+/t8NOH6uFlmpSRjYLz4CJe2eLMs4fq4WtmYnbM1O2B0unPjX1ZDPn5hoQbzZgKzUJPRNjMN37hzUozTOwH7xvT6GWnp7raNVLNe7u7+/WK53V5SosyRJSEjo+hW+wt8JaJEO8Y4F3Dt2EDJTE5Ecb0L/5D49On8kptdxih5phelI7QkfBNROh/iPBfzlSCVGZw9EnNnEdAwJielI7Qk/O0jtefQd10qxO93t1iICgE8OlXG6JgkhEmtxUe8IHwSAyM/7747/KqQutwfnKq+h/HIDjEYDKq+Uw+2W4fF4EGc24skHRvGPgmKady0ujyyjuq4SmalJ/J1XmfDpILV57zxG3ZQCCcA/K+vxdaMDZqOEFrsLjc1O2F0efN3owP+duqx1cYkUxTEB7QkTBPQ0DW14Vgqs/eNhNBrQNzEOkICvGx2QJAmSBEAGIAEy5GCHIopqHBPQnhDpID0+FetNC7ncMpIT4jAmeyAyrIn45P/K4XC6EWc2Yvyo/9C0jERK49pW2hMiCOjtxRX+U0TtTne7X/7M1KSw/iC47g9FOzXH5KgzIYJAb18J2VufHqnwzX7ITE3y3ZUYJKnTXUk4fxB6vMMhoshSuqMnRBDQ8pbz0yMV2F58DrIs43R5PW4bckPE7kr0dodDRJGlRkdPmIFhrZ6KLSmtgSzLMBsNkGUZ1xrtERsI46AaUWxTY/aUEHcCWhqdPRCny+vhdHsgSRL+363pYef9u8JBNaLYpkYqm0FAYd8dmwkAvjEB79eRarA5qEYUu9To6CmeDrLZbMjNzUVlZSUA4ODBg5g+fTqmTp2KjRs3Kn16TXx6pAKv7DiGT49UAGgNBM8++k1fACAiCpXSqWxFg0BJSQnmzJmDsrIyAEBLSwtWrFiBzZs3o6ioCCdPnsS+ffuULILqvAPB/yirw/bic75AQESkR4oGgYKCAuTl5SE1NRUAcOLECQwePBiZmZkwmUyYPn069u7dq2QRVNdxILiktEbrIhERdUnRMYH8/Px2X1dXV8Nqtfq+Tk1NxeXLsbU+TseBYO/KoEREeqTqwLAsd14LR5KksI4xYEBSp21Wa3KPyxRpc753C5KSLPjy9GV8a2Qapn87W7Fz6aneahGxzgDrLRK166xqEEhLS0NNTVt6pLq62pcqClVtrQ0eT1swsVqTceVKQ8TKGAl3j0jF3SNa66VU2fRYb6WJWGeA9RaJEnU2GKSAnWff/oieLYjRo0fj/PnzKC8vh9vtRmFhISZOnKhmEYiIyI+qdwIWiwXr1q3DwoULYbfbMWnSJEybNk3NIhARkR9VgkBxcbHv3+PHj8eePXvUOC0REQUhzBPDXHKZiKgzIRaQ867E98XxS9ha9JUu3i5GRKQHQgQBvseUiCgwIYIAl1wmIgpMiDEBLrlMRBSYEEEA4JLLRESBCJEOIiKiwBgEiIgExiBARCQwBgEiIoExCBARCYxBgIhIYAwCREQCE+Y5AT3j4nZEpBXeCWiMi9sRkZYYBDTGxe2ISEsMAhrj4nZEpCWOCWiMi9sRkZYYBHSAi9sRkVaYDiIiEhiDABGRwBgEiIgExiBARCQwBgEiIoFF3ewgg0EKaZsIRKy3iHUGWG+RRLrOwY4nybIsR/SMREQUNZgOIiISGIMAEZHAGASIiATGIEBEJDAGASIigTEIEBEJjEGAiEhgDAJERAJjECAiEljUBAGbzYbc3FxUVlZ22rdp0ybcc889mDFjBmbMmIFt27ZpUMLI27RpE3JycpCTk4P169d32n/69Gk8/PDDuO+++7By5Uq4XC4NShl5weodq9f7tddew/3334+cnBy88847nfbH4vUOVudYvdZeL730EpYtW9Zp+6VLl/CDH/wA06ZNw9NPP43GxkblCiFHgePHj8u5ubnyqFGj5IqKik77n3zySflvf/ubBiVTzoEDB+RHH31UttvtssPhkB977DH5z3/+c7vP5OTkyMeOHZNlWZaXL18ub9u2TYuiRlQo9Y7F63348GF59uzZstPplJubm+V77rlHLi0tbfeZWLveodQ5Fq+118GDB+Vx48bJS5cu7bTviSeekAsLC2VZluVNmzbJ69evV6wcUXEnUFBQgLy8PKSmpgbcf/LkSbz11luYPn061qxZA7vdrnIJI89qtWLZsmWIi4uD2WxGdnY2Ll265Nt/8eJFtLS0YMyYMQCAhx56CHv37tWquBETrN5AbF7vu+66C++++y5MJhNqa2vhdruRkJDg2x+L1ztYnYHYvNYAUF9fj40bN+Kpp57qtM/pdOLLL7/EfffdB0D5ax0VQSA/Px9jx44NuK+xsREjR47E0qVL8eGHH+Lrr7/G5s2bVS5h5N18882+P/iysjIUFRVh0qRJvv3V1dWwWq2+r61WKy5fvqx6OSMtWL1j9XoDgNlsxuuvv46cnByMHz8eaa7xc7wAAAUlSURBVGlpvn2xer27q3MsX+sXXngBzzzzDPr27dtpX11dHZKSkmAytS7yrPS1joog0J3ExES89dZbGDx4MEwmE+bPn499+/ZpXayIOXv2LObPn4+lS5fipptu8m2XAyz+Kkmxs+xuV/WO9eu9aNEiHDp0CFVVVSgoKPBtj+Xr3VWdY/Vav//++0hPT8f48eMD7lf7Wkd9ELh06RJ27tzp+1qWZV8EjXZHjx7FvHnz8Oyzz2LmzJnt9qWlpaGmpsb39ZUrV7pMl0Wb7uodq9e7tLQUp0+fBgDEx8dj6tSpOHPmjG9/LF7vYHWO1WtdVFSEAwcOYMaMGXj99ddRXFyMF1980bf/hhtugM1mg9vtBqD8tY76INCnTx+8/PLLqKiogCzL2LZtG+69916ti9VrVVVVWLBgATZs2ICcnJxO+zMyMmCxWHD06FEAwEcffYSJEyeqXcyIC1bvWL3elZWVWLVqFRwOBxwOBz777DPceeedvv2xeL2D1TlWr/U777yDwsJC7N69G4sWLcKUKVOwYsUK336z2YyxY8eiqKgIgPLXOmrD6o9//GMsWrQIt912G9asWYOnn34aTqcTd9xxB374wx9qXbxe27JlC+x2O9atW+fbNnv2bBQXF/vqvWHDBqxatQqNjY245ZZb8Nhjj2lY4sgIpd6xeL0nTZqEkpISPPjggzAajZg6dSpycnLa/Z7H2vUOpc6xeK27snLlSkyZMgXf+c53kJeXh2XLluGNN95Aeno6fvnLXyp2Xr5ZjIhIYFGfDiIiop5jECAiEhiDABGRwBgEiIgExiBARCQwBgEiBSxbtgxbtmzRuhhEQTEIEBEJLGofFiOKhMOHDyM/Px8JCQn4xz/+gZ/+9Kd44oknAAB//OMfcfjwYbz66qvYuXMn3nnnHRgMBqSkpOCll15Cenp6SOc4cuQI1q9fj+bmZpjNZixZsgQTJ06E2+3G+vXrUVxcjOTkZNx+++0oLS3Fe++9p2SVidrhnQAJ7+zZs3jllVfw5ptv4uOPP/Zt37VrF2bNmoWvvvoKGzZswNtvv42PP/4YU6ZMwRtvvBHSsevq6rBo0SKsXLkSH3/8MV566SU899xzqKiowPvvv49Tp06hsLAQ27dvR0VFhVJVJOoS7wRIeOnp6cjIyMCNN94Iu92Ov//974iPj8fVq1cxfvx4/Pa3v8WECRN8Pf958+aFfOwTJ04gKysLo0ePBtC6VPYdd9yBv/71r9i3bx9mzJgBi8UCAHj00Ud5F0CqYxAg4XlfZCJJEh555BHs3r0bZrMZjzzyCCRJgtFobLeUb0tLCy5evIjs7Oygx/Z4PJ22ybIMl8vVaUVMg4E35qQ+/tYR+Zk5cyaKi4vxpz/9CQ899BAAYNy4cTh06BCqq6sBANu3b8fLL78c0vFGjx6N8+fP48SJEwBaU09ffvkl7rrrLkyaNAl79uyBw+GAy+XChx9+qEyliLrBOwEiP1arFbfccgtcLpfvLVfDhw/Hc889h8cff9z3Gf/137tzww034LXXXsPPf/5ztLS0QJIkrF27FkOGDMHgwYNx/vx5PPjgg0hISMCgQYMQHx+vWN2IAuEqokQa2b9/P2prazFjxgwAwC9+8QtYLBY899xzGpeMRMIgQNQD//rXv/DMM88E3DdkyBC8+uqrQY9x+fJlLFu2zPeS9REjRmD16tVITk6OdHGJusQgQEQkMA4MExEJjEGAiEhgDAJERAJjECAiEhiDABGRwBgEiIgE9v8Bx/T+58ghx2AAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rvc_log\", y=\"age\", \n",
" data=data_merged,\n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Later we will quantify goodness of fit of the different lines (before and after taking the logarithm). For now, a visual inspection suffices. \n",
"\n",
"(Please notice that logging also improve the correlation between the two variables.)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.04778305105124528"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged['rateable_value_pc'].corr(data_merged['age'],method='pearson')"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.13820568259755875"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_merged['rvc_log'].corr(data_merged['age'],method='pearson')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Taking the logarithm values doesn't harm, but you'll have to be careful as it influences your interpretation of the results and the predictions of the model. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A closer look at the scatterplot and the data show that two (maybe ever three) places have a significantly higher rateable value: Holborn and Westminster, and also Marylebone. This is confirmed by the boxplot below. \n"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.boxplot(rvc.rateable_value_pc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"How to approach these observations: one easy, albeit problematic, approach is to consider them as \"outliers\" and remove them from the datasets.\n",
"\n",
"This is a classical example of where interventions need to be motivated or at least explained by domain expertise. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's remove these districts to understand the extent to which they affect our model and more importantly our understanding of the effect of wealth on lifespan. As you'll notice, the figure below suggests that after excluding Holborn and Westminster, the relation become positive. These two districts have a large effect on the slope of the regression line."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"data_wo_outliers = data_merged[~data_merged.borough.isin(['Westminster',\"Holborn\",\"Marylebone\"])]"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rvc_log\", y=\"age\", data=data_merged,\n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)\n",
"\n",
"sns.regplot(x=\"rvc_log\", y=\"age\", data=data_wo_outliers,\n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The orange line shows the impact of removing the so-called 'outliers'. Throwing away information (i.e. observations) is a tricky thing: yes, it becomes easier to model the relationship between the variables linearly. However, this \"solution\" comes at a cost, we won't be able to accurately say something about the wealthier districts. If we were to believe the orange line, we'd disastrously overestimate the ratio of older residents in districts like Westminster.\n",
"\n",
"However, if you're only interested in predicting the age for a certain type of boroughs, and have good reasons to believe that the other ones away are qualitatively different (and deserve to be treated as separate case studies) than discarding observations is to some extent justifiable (but, of course, this should be made explicit).\n",
"\n",
"In any case, we need to acknowledge that a few places carry a lot of weight in determining the outcome and interpretation of the regression model (they influence the estimate of the slope substantially).\n",
"\n",
"Again, domain expertise has priority over statistics: the latter alone can not tell you what is the right approach."
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.13820568259755875\n",
"0.34931346861521706\n"
]
}
],
"source": [
"print(data_merged['rvc_log'].corr(data_merged['age']))\n",
"print(data_wo_outliers['rvc_log'].corr(data_wo_outliers['age']))"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEJCAYAAAByupuRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deXRU9d0/8PedSTIkzCSEZLKQ3SiLItDKUx+OVJHj1hKhgAfFgoe6HzewrYJCC482oqiVnqNWaaEtlBbQQysoRcUUnwf1YOkPQgVEiEz2nSwzIdvMfH9/JDPZJslMMvfOvXPfr3N6SpJx7ueb5fP5bvd7JSGEABER6ZIh1AEQEVHosAgQEekYiwARkY6xCBAR6RiLABGRjrEIEBHpGIsAEZGORYQ6gEA1NLTA7Q7OrQ0JCWbU1zuC8l5qE65tC9d2AWybVqm9bQaDhPj4sYN+XXNFwO0WQSsCnvcLV+HatnBtF8C2aZWW28bpICIiHWMRICLSMRYBIiIdYxEgItIxFgEiIh3T3O4gIiK9OFvSgPPlTbg8LQ6TMuNluQZHAkREKnS2pAHbDnyNwycqsO3A1zhb0iDLdWQtAg6HA3l5eSgrKwMAHDlyBPPnz0deXh6efvppdHR0yHl5IiLNOl/eBLcQMEdHwi0Ezpc3yXId2YpAYWEhli5dCpvN5v3c2rVr8dprr+H9999HW1sb3nvvPbkuT0SkaZenxcEgSXC0dsIgSbg8LU6W68hWBPbs2YP169cjKSnJ+zmXywWHwwGXy4X29naYTCa5Lk9EpGmTMuNx7w8nY86MCbj3h5NlWxOQbWE4Pz9/wOc2bNiA5cuXw2w2Iz09Hbfddptclyci0rxJmfGyJX8PSe4Hzc+dOxfbt2+HyWTC8uXLsWXLFqSnp2Pjxo1wOp1Yv369nJcnIqIhKLZF9NixY5g4cSIyMzMBAEuWLMGqVasCfp/6ekfQDmuyWi2orbUH5b3UJlzbFq7tAtg2rVJ72wwGCQkJ5sG/rlQgEydOxMmTJ1FXVwcA+OSTT3D11VcrdXkiIvJBsZFAbm4uVq5ciXvuuQdGoxFZWVl47rnnlLo8ERH5IHsRKCgo8P574cKFWLhwodyXJCIiP/GOYSIiHWMRICLSMR4gRyQjJQ4AIxoNjgSIZKLUAWBEo8EiQCQTpQ4AIxoNFgEimSh1ABjRaHBNgEgmngPAuCZAasYiQCQjJQ4AIxoNTgcREekYiwARkY6xCBAR6RiLABGRjrEIEBHpGIsAEZGOsQgQEekYiwARkY6xCBAR6RiLABGRjrEIEBHpGIsAEZGOsQgQEekYiwARkY6xCBAR6RiLABGRjrEIEBHpGJ8sRn2cLWng4xCJdIQjAfI6W9KAbQe+xuETFdh24GucLWkIdUhEJDMWAfI6X94EtxAwR0fCLQTOlzeFOiQikhmLAHldnhYHgyTB0doJgyTh8rS4UIdERDLjmgB5TcqMx70/nMw1ASIdYRGgPiZlxjP5E+kIp4OIiHSMRYCISMdkLwIOhwN5eXkoKysDABw/fhxLlizBvHnz8NOf/hQdHR1yh0BERIOQtQgUFhZi6dKlsNlsALoKwuOPP47nnnsOH3zwAQDg3XfflTMEIiIagqxFYM+ePVi/fj2SkpIAAJ999hlmzJiByZMnAwDWrVuHm2++Wc4QSAFnSxrwwRc23lxGpEGy7g7Kz8/v83FxcTFiYmLw6KOPoqSkBDNnzsSaNWvkDIFk5rnL2C0E/rewEvf+cDJ3FxFpiKJbRF0uF44cOYLdu3djwoQJWLt2LbZs2YLHH3/c7/dISDAHNSar1RLU91MTJdp2+GQlJAmIN5vQ3NKBysY2zL5G3uvyZ6ZNbJs6KVoEEhMTMX36dGRkZAAAfvCDH+DPf/5zQO9RX++A2y2CEo/VakFtrT0o76U2SrUtddwYCAE02NthkCSkjhsj63X5M9Mmti10DAZpyM6zoltEZ8+ejVOnTqGyshIA8M9//hNXXXWVkiFQkHnuMp4zYwKngoiCTIn1NkVHAqmpqXjuuefw8MMPo729HVOmTMHq1auVDIFkwLuMiYJPqfU2RYpAQUGB999z5szBnDlzlLgsEZFm9T7V19HaifPlTbIUAd4xTESkQkqd6ssD5FSGT/YiIkC5U31ZBFSEe+6JqDcl1ts4HaQifLIXESmNRUBF+GQv0iIeG6JtnA5SET7Zi7SGU5jaxyKgMkrvuQ+nhehwaotWKLWNkeTD6SAd8/TiDp+owLYDX2t6OB9ObdESTmFqH4uAjoXTQnQ4tUVLeGxI8IRqbYVFQMfCqRcXTm3RmkmZ8Zg3K5sFYBRCOZLlmoCOhdNCdDi1hfQnlGsrLAI6F06Hv4VTW0hfLk+Lw/8WVoZkJMsioDLc4UKkP5My43HzzHQUFtVhem6ion/7LAIqwj3XRPp0tqQBHx8rg1sI1DSUISPJrNjfPheGVYQ7XEiLeMfw6IXyb59FQEW4w4W0hvdnBEco//Y5HaQiodjhwjUIGg3eMRwc/f/2L5sQB1tVM2yVdhgMEmZPS4VBkmS5NouAyii5w4VrEDRaodzVEi6cLjfKa1tQefES6pracOxsLcpqHHC5hfc1SeOiMTmLzxOgIGMvbngcKQ2N92cExpPwi6vtsFU2w1ZlR1mtA06X8Pn6OHMUpuaMR1aKRbaYWAR0jL24oXGk5B/en+Gb0+VGRV0LbFV22KrsKK5qRmlNC5wut8/Xx42NQnZqLHJSLchJjUVWigXxFhMAwDVIkQgGFoEAKNErVLLnyV7c0DhSIn95En5xd8K3VdlRWuMYNOHHjo1CTqoF2SldST87Ndab8IXw/E/Imvw9WAT8pESvMBQ9T/biBseREvnicrtRUXepa+G2yo6Kukv4tqIJnc5BEn5MpLeHn50Si+zUrh6+JEmKJ3xfWAT8pESvMNjX4Hz26HCkRC63G5V1l7p7980orrKjpMYxaMK3xEQiJzUW2SkWb+Lvm/AFhADcbgAITdLvj0XAT0r0CoN5ja+K6jifHQQcKemHy+1GZf0l2Crt3dM6zSitcaBjsIQf3dXDn3JZApLjTMiZEIvx3Qnf7e5K+IC6Er4vLAJ+UqJXGMxrnLFd5Hw20SDcboHK+t6LtnaUVNsHTfjm6Ejv3H12StfC7fhYEwAJCQlm1Nbau98XUHPC94VFQGWC1fOckj0e//jcxvls0j23W6Dy4iXYKrumc2zV3Qm/03fCHxsd0WfBNifVgoTYMQAk73RO1/sCWkv4vrAI+Elr2wWn5iZyPpt0x+0WqLrYs2jb1cN3oL3T5fP1Y8dEdPXuu7dlZqdYkBgXvgnfFxYBP2lxu6A/owouHpNWuYVA9cWuOXzPwu1QCT9mTIQ30Xt6+XpL+L6wCPgpHLcLam10Q/rlSfi99+EXV9vR3jF4wvfs0PHM4VvHMeH7wiLgp3DcLqjF0Q2Fv64z9Vu9B6gVdyf8tsESvikC2amWnqSfakHSuGgAEty9zt9hwveNRSAA4bZdMBxHN6QtbiFQ29DaZx9+cbUdre2+E360yei94cqT9JPiowEhebdkAkz4gWAR0LFwHN2QegkhUNPY2mcf/lAJf0yUsTvZ9yzc+kr4ggl/VFgEdC7cRjekDp6E75nDr6i/hHOljWhtd/p8/ZgoY585/OxUC5LiYyAB6JXvmfBlIGsRcDgcuOuuu/DWW28hPT3d+/mdO3fi4MGD2LFjh5yXpxHgbiEKlBACtY2t3i2Znv+/NETCz0qx9DlaISk+ZmBuF0z3SpCtCBQWFmLdunWw2Wx9Pn/+/Hm8/fbbyMrKkuvSNELcLUTDEUKgtqmtK9lXNvuV8DOTLZicMx6p8dHITrEgebzvhE+hIVsR2LNnD9avX4+nn37a+7mOjg788pe/xMqVK/H3v/9drkvTCGl9txBHMcElhECdJ+H3WrhtafOd8E2RRmSlmHumdFJikRwfDUmSYLVavEcrMOGri2xFID8/f8DnXn31VSxevLjP1BCph5Z3C3EUMzpCCNQ3tXn333t6+YMl/KhIgzfRexZvPQmftEWxheHPPvsMlZWVeOaZZ3D06NERv09CgjmIUQFWq3yPbRuJr4rqcMZ2EVOyx2NqbuKo3suftvW+3uxrMjFuXMyQ1w9mfCPlq12HT1ZCkoB4swnNLR2obGzD7GvU9bP1hxK/j545/POljThf1oiisiacK22E/VKHz9ebooy4bEIcctPjcEXGOFyePg5pSRYYDYElfLX9rQWTltsmid57rWQwd+5cbN++HW+88QZOnDiBqKgoXLp0CXV1dbjhhhuwefPmgN6vvt7R5waQ0egzRFWB3r1ZgySNqjfrT9sCvV4w4xupwdqlhthGS47fRyEELja395nOsVXZ4Wjt9Pn6qAgDMpMtfU7MTB4fA8Moe/hq+1sLJrW3zWCQhuw8KzYS2Lhxo/ffR48exeuvvx5wAQh3Ss/JB3q9kcanxFw973noSvgN9nbvsQqepG+/5DvhR0YYkJls7vMQlJQgJHzSFr+LwMmTJ3H69GksWrQIp06dwne+8x0549IlpefkA73eSOJTcq5eT/c8eBJ+n7N0qprRPFTCTzJ7j1XITrEgNWEsEz75Nx20d+9ebN26Fe3t7di9ezfy8vLw5JNPYsmSJUrE2MdopoP690jVOIwLVq/Z37YFer1AX//BFzYcPlHhHT3MmTEB82Zl+9EC39T4MwuWwdomhECjo6PPdI6tyo7mFt9z+JHGrh5+77ttQ53w9fhzU4ugTAft2LEDu3fvxrJly5CQkIC9e/fi/vvvD0kRGClfPVI1LuYo3ZsN9HqBvl7LO45CpaeH37MPv2mIhJ+RbO5zt21qQgyMBoPCUZNW+VUEDAYDzOaeSpKamgqj0ShbUHLwNZ89+5pQRzVQuO11V3KuXovfu0ZH9xx+ZTMqG1rxTUkDmhy+E36EUUJGUt99+BMSmfCVpsXfs6H4VQTGjRuHM2fOePcA79u3D3Fx2urRaaFHGq573ZUY3Wjhe9fkaMeF7p69p6ffOFzC77UPnwk/9LQyoxAIv4rAs88+i5UrV6KkpASzZ8+GyWTCm2++KXdsQaWF3SNav2M3lNT2vWtq6eh5pm33DVgN9nafrzUauhL+pOzxmDC+62iFCYnmgPfhk/y0MqMQCL+KQG5uLt577z3YbDa4XC7k5OQgMjJS7tiCTu27Ry5Pi8Ohf5ehpuESoiKNqhyt+KKG4XEoR3rNLR0D9uEPlfDTk8zep11lp1qQ1p3w1b7ASNqYUQiUX0Xg9ddf7/OxJEmIjo7GFVdcge9///uyBKZXUq//aYFapmGUGuk1X+roc3jacAk/zTq213NtYzEh0YwIo1Z+utSfFmYUAuVXEfjmm29w/Phx3HrrrTAajfj444+RlpaGf/zjHzh58iQeffRRuePUhfPlTTAaDbCaTaqY0vCHP9Mwh46VorCoDtNzE3HTzAzZYgn2SM/enfAv9JrDv9g8RMJPHNs1f58ai+yUWKRbYxChsQ0UNDy1zygEyq8iUF9fj71798JqtQIAHn74YaxcuRI7d+7E4sWLWQSCRItDzeFiPnSsFLsKzkMIgTPFjQAgayEYKU/C733jVf0gCd8geXr4Pdsy061mRBi5aEva41cRaGxs9BYAAIiPj0djYyOioqIQEcGHkwXLpMx4TM9NwMlv6zDtsgRN9DaGGx4XFtVBCIFIowGdLjcKi+pCXgQcrZ19b7yqtKO+uc3naz0J3/O0q5zUWKQlmhEZ4V/CV8N6CdFQ/MrgGRkZePXVV703h73zzjvIzMxEYWEhDNyyFjSHjpWi4Hg5hBAoOF6OpPjokCdMfww1PJ6em4gzxY3odLkhSRKmK3zyqKO1s+d5tt1Jv67Jd8KXJHRP6XTP4U/oSvhRfib8/tSyXkI0FL+KwAsvvID8/HwsWrQIRqMRc+bMQX5+Pj744AOsXr1a7hh1IxS95v491WD3XD3xK7Em0NLW2fOIw+6FW78Tfmos0qwjT/i+nC9vQkenE5IkwSmEJtZ4SH/8KgLFxcVoaWnBlClTIIRAaWkpFixYgMOHD8scnr4o3Wvu31O9eWY6Pj5WFvSe600zM4Ke/C+1dfabw7ejprHV52slCZiQONab7LNSLMhIsgQ14ftiijTC3uqEEAKSJMEUyUViUh+/isC6deuwYMECfPTRR7jzzjvxySef4JZbbpE7NtWRe35XyV4zMHBnT2FRnapuuPLwJvxqOyovtuKb4obBEz6A1MSY7geYxyI7uTvhRyo/bdne6YI5OhIGCXCLro+J1MavIiBJEh588EE0NDTgsssuw/z587F06VK5Y1MVpeZ35eg1D6b/zp7puYmoaSgL6e6kS21OlFT3nIdvq7KjpmGYhN99tEJOaizSrWbV9Lg931+3EIjUyG4v0h+/isDYsWMBAJmZmTh37hyuueYauFz66tUodSyBkrtJfO3syUgyK3b91vauhH+hsmfhtnqIhJ+SEINJWeMxIaHraIWMJItqEr4v4XhjEYUfv4rAtGnTsGrVKqxcuRIPPfQQbDab5k4RHS0l9vCHYjdJ/509ct0I40n4tl7z+NUXL/l8rSfhe49HTrUgM8mCMVFGJCZq62iFcLuxiMKP3wfIFRYWIicnB88++yw+//xzvPLKK3LHpipK9OrUdgjaSHkSfnG/hD/Yo4BSxsd4n3aVkxqLzOSuhN//cUfyPg2bSJ/8XhOYMWMGAGDOnDmYM2eOnDGplty9Oi3eMdzW4URJtcN7l62tyo6q+sETfvL4aGSnxCInlQmfSA14u6+KqH0O2ZPwez/1asiEHx/tnc7JSbEgIykW0aaB04jhnPB5xzCpHYuAyqhlDrm9w4WSmp5jFYqr7aisaxk04SfFR3edpZPStQ8/K9mCaJO+f714xzBpgb7/SglA1/710mpHn2faVtS3DNpDT4qP7lm0TbYgM9mMmDHae76E3MJljYfCG4uAzrR3ulBa4+g5WqHajoq6wRN+YtwY5EyIRU6KBZnJschKMWMsE75ftLjGQ/rDIhDGOroTfu+nXlXUXYJ7kIyfGDcGSfHRMEUZMTljHGZNTYU5evQJX6/z4mpf4yECWATCRkenC6W1jq75+yo7yupaUFJlHzLhe6Z0spLNyEqJRXmtwzuHXVbTgsxky6gTl97nxdWyxkM0GBYBDep0ulBa04LiqmbvU6/Ka1sGTfgJsWO69+F7Er4FlpioAa+TYw6b8+JE6sYioDL9p046nS6U1bb0eaZtRV0LXG7fCX98rAnZKbG4MjcBSRbToAnfFznmsDkvTqRuLAIqcupCPbZ+8DU6nS643AKxY6NQ39Q2eMK3mLqmc1LM3b18C2LHdiV8qzXw4xXkmMPmvDiRurEIhIjT5UZZraNnH36VHSU19j67dNo6eg5Ti7eYuqZ0ki1d+/BTYhE31r8efiBGMoet14Vff+jhe6OHNoYzFgEFOF1ulNe24EKvRxyW1TgG7eFHGCVERRpxzUQrvjvRiuwUC+LMJoWj9s9wC796XhjWQ9v10MZwxyIQZJ6E79mSeaHKjvJaB5wu3wl/nDnKe9NVVooFTpcbVRcvBaVXpUQPbbiFX60vDB86Vjrih/xove3+0EMbwx2LwCg4XW5U1LX0HI9c2YyyIRJ+3Ngo75ZMz7Ntx8nUw/+qqE6RHtpwC79aXhg+dKwUuwrOQwiBM8WNABBQIdBy2/2lhzaGOxYBP/VP+MVVzSitaYHT5fb5+rixUchK6Toe2XOeTrxFuSmdM7aLaO90wSABnQKy9dCGW/jV8sJwYVEdhBCINBrQ6XKjsKguoCKg5bb7Sw9tDHcsAj54En7v8/BLaxyDJvzYsZFdjzjsPjgtOzUW48xRkCRJ4ch7jIkywtHaqchDzodbTNbqDVPTcxNxprgRnS43pO7HbwZKq20PhB7aGM5kLwIOhwN33XUX3nrrLaSnp2P37t3YsWMHJEnC1KlT8T//8z+Iigr+Lhd/udxuVNZd6rNoW1rjQKfTd8K3xER6e/Y5KRZvDz9YCT9Y8/htHS5YoiMgSRKEELI+5Dxcd4d4ev0jXRMg0gJZi0BhYSHWrVsHm80GALhw4QK2bt2KvXv3YuzYsVizZg3+8pe/YMWKFXKG4eVJ+J6TMsvqW3ChvAkdQyT83lM62UFO+P0Fc6fFlOzx+MfnEXALIetcbbjvDrlpZgaTP4U1WYvAnj17sH79ejz99NMAgKioKGzYsAFmsxkAMHHiRFRUVMgZglfVxUt4aef/Q1NLh8+v9/TwzchK7kr442PlS/i+BHOnxdTcREXmark7hEjbZC0C+fn5fT5OS0tDWloaAODixYvYuXMnNm7cKGcIXs0tHd4CYI6ORHaKBVMuS0BS9zELSid8X4K900KJuVruDiHStpAsDFdXV+P+++/H4sWLce211wb03yYkmEd0TavVgrcz4hFhNMAaHx3yhO+L1WrBuHExOGO7iCnZ4zF1BAuR/d8v2L4qqusTX7Bj9occ7VILtk2btNw2SQj5n/A6d+5cbN++Henp6SgqKsIDDzyAZcuW4d577w34verrHXAPcqdtoEZyvo5WyNG23vP/BkkKyfw/f2baxLaFjsEgDdl5VnQk4HA4cN999+HJJ5/EggULlLw0jVDvnT+c/ycKP4oWgXfffRd1dXXYtm0btm3bBqBrlLBy5UolwyA/9d/5c/PMdBgkifP/RGFEkSJQUFAAAFixYoVi20G1Sk177vv3/Ns7Xbw7lCjM8I5hFVHbnntfO394dyhReGERUBG1zbnzXBii8McioCJq3HPPnj9ReGMRUBH2vIlIaSwCNGpqWswOtnBuGxEAGEIdAPXwLAwfPlGBbQe+xtmShlCHNCwtxuyvcG4bkQeLgIr0Xhh2C4Hz5U2hDmlYWozZX+HcNiIPFgEVuTwtTnM3Y2kxZn+Fc9uIPLgmoCJaXBjWYsz+Cue2EXmwCKiMFrdkajFmf4Vz24gAFgEKI2rcyaPGmIh645oAhQU17uRRY0xE/bEIUEDOljTggy9sqktoatzJo8aYiPpjESC/qblnq8adPGqMiag/rgkEQO/zu4MdcKeG74sad/KoMSai/lgE/KS2Y55DwdcBd2r6vqhxJ48aYyLqjdNBftLr/G7vNQBPz3bOjAneZK/X7wtRuGAR8JMe53d9rQFMyozHvFnZ3t6tHr8vROGE00F+0uP8rj8PuZmUGY+bZ6ajsKgO03MTfX5f1LBmQES+sQgEQG/zu/485OZsSQM+PlYGtxCoaShDRpK5z/dITWsGRDQQiwANytfop3+vfrjRwvnyJnR0OiFJEpzdawYsAkTqwSJAQ+o9+vHVqx9utGCKNMLe6oQQApIkwRRpDEUziGgQuioCnJseHV+9/nmzsodcK2nvdMEcHQmDBLhF18dEpB662R2k5rtdtWKwnUD9dwz1/29MkUYYjQaYIo3cPUSkMroZCfjqxc6+JtRRactIdkjpcVcVkZbopgj4s9OFBuo/hTaSHVJK7aridB9R4HRTBNgjDZyWtndqKVYiNdHNmgAw9Ny1Xh06VopXdx/HoWOlA76mpSMhtBQrkZroqghQX4eOlWJXwXmctjVgV8H5AYVAS0dCaClWIjXRzXQQDVRYVAchBCKNBnS63CgsqsNNMzO8X9fSFJqWYiVSExYBHZuem4gzxY3odLkhSRKm5yYOeI2WjsrQUqxEasEioGOeXr/n8LfeowAi0gcWAZ27aWYGkz+Rjsm+MOxwOJCXl4eysjIAwOeff47bb78dt9xyC1577TW5L69rQ+38ISICZC4ChYWFWLp0KWw2GwCgra0Nzz77LN58800cOHAAX331FT799FM5Q9Ct/f9XNOTOHyIiQOYisGfPHqxfvx5JSUkAgJMnTyIrKwsZGRmIiIjA7bffjoMHD8oZgm7960y1d+ePEAKFRXWhDomIVEjWNYH8/Pw+H9fU1MBqtXo/TkpKQnV1tZwh6NZ/TUlG4bm6IXf+EBEpujAshBjwOUmSAnqPhARzsMIBAFitlqC+n1rc3t2uf52pxn9NScbt388NcUTBE64/M4Bt0yott03RIpCcnIy6up5piZqaGu9Ukb/q6x1wuwcWk5GwWi2orbUH5b3Uxmq14L8nJ+G/J3d9f8OlneH+M2PbtEftbTMYpCE7z4oeGzF9+nRcuHABxcXFcLlceP/993H99dcrGQIREfWi6EjAZDLhxRdfxOOPP4729nbccMMNuO2225QMgYiIelGkCBQUFHj/PWvWLOzbt0+JyxIR0TB4iigRkY7p6tgIPnmKiKgv3RQBX0+e0vK2LiKiYNDNdBCfPEVENJBuigCfPEVENJBupoP45CkiooF0UwQAPnmKiKg/3UwHERHRQCwCREQ6xiJARKRjLAJERDrGIkBEpGMsAkREOsYiQESkYywCREQ6xiJARKRjLAJERDrGIkBEpGO6OjuI5MGH9RBpF0cCNCqeh/UcPlGBbQe+xtmShlCHREQBYBGgUeHDeoi0jUWARoUP6yHSNq4J0KjwYT1E2sYiQKPGh/UQaReng4iIdIxFgIhIx1gEiIh0jEWAiEjHWASIiHRMc7uDDAZJ1e+nJuHatnBtF8C2aZWa2zZcbJIQQigUCxERqQyng4iIdIxFgIhIx1gEiIh0jEWAiEjHWASIiHSMRYCISMdYBIiIdIxFgIhIx1gEiIh0TBdFwOFwIC8vD2VlZQO+9u2332L58uWYP38+7rvvPjQ1aesZuUO17dSpU1i8eDHmz5+Phx56CM3NzSGIcGRef/11zJs3D/PmzcOmTZsGfP3MmTNYvHgxbr31VqxduxZOpzMEUY7McG07dOgQFixYgPnz5+ORRx7R1O/kcG3zOHz4MObOnatgZKM3XNs0m0tEmDtx4oTIy8sTV111lSgtLe3zNbfbLW655Rbx6aefCiGEePnll8WmTZtCEeaIDNU2IYRYunSpOHz4sBBCiI0bN4pf//rXSoc4Ip999pm48847RXt7u+jo6BD33HOP+Oijj/q8Zt68eeL48eNCCCGeeeYZsXPnzlCEGrDh2ma328V1110nqqqqhBBCbN68WTz//POhCjcg/vzchBCitrZW3HbbbeLGG28MQZQjM1zbtJxLwn4ksBFlRy8AAAYvSURBVGfPHqxfvx5JSUkDvnbq1CnExMTg+uuvBwA8/PDD+PGPf6x0iCM2VNsAwO12o6WlBQDQ2tqKMWPGKBneiFmtVqxZswZRUVGIjIxEbm4uKioqvF8vLy9HW1sbZsyYAQBYtGgRDh48GKpwAzJc2zo7O7FhwwYkJycDACZNmoTKyspQhRuQ4drmsW7dOjz22GMhiHDkhmublnOJ5k4RDVR+fv6gXyspKUFiYiJWr16N06dPY+LEifjFL36hYHSjM1TbAGDNmjX4yU9+ghdeeAHR0dHYs2ePQpGNzhVXXOH9t81mw4EDB7Br1y7v52pqamC1Wr0fW61WVFdXKxrjSA3Xtvj4eNx0000AgLa2NmzZsgXLly9XPM6RGK5tALB9+3ZceeWVmD59utLhjcpwbdNyLgn7kcBQnE4nvvzySyxbtgz79+9HRkYGXnzxxVCHFRRtbW1Yu3Yt/vSnP+HIkSO4++67sXr16lCHFZBz587h3nvvxerVq5Gdne39vPBx8K0kqfcoX18Ga5uH3W7HAw88gMmTJ2PhwoXKBzgKg7Xtm2++wUcffYRHHnkkdMGN0mBt03Iu0XURsFqtyMrKwtVXXw0AyMvLw8mTJ0McVXB88803MJlMmDZtGgDgzjvvxJdffhniqPz373//GytWrMDPfvazAUkwOTkZdXV13o9ra2sHnRJTo6HaBnSNdO6++25Mnjx52NGe2gzVtoMHD6K2thaLFy/Ggw8+6G2nVgzVNk3nklAvSijlxhtvHLB42traKq677jpx5swZIYQQb7/9tvj5z38eivBGxVfbGhsbxaxZs0RRUZEQQoh9+/aJZcuWhSK8gFVUVIhrr71WfP7554O+Zt68eeLYsWNCCCHWrl0rfve73ykV3qgM1zan0ykWLlwo3njjDYUjGz1/fm4epaWlmloYHq5tWs4lYb8m4MsDDzyAJ554AldffTXeeOMNrFu3Dq2trUhJSRlyW5sW9G7bxo0bsWrVKgghkJCQgBdeeCHU4fll69ataG9v7zOcvuuuu1BQUOBt2yuvvIJ169ahpaUFV155Je65554QRuy/4dpWVVWF06dPw+Vy4cMPPwQATJ06VRMjAn9+blrlT9u0mkv4ZDEiIh3T9ZoAEZHesQgQEekYiwARkY6xCBAR6RiLABGRjrEIEMlgzZo12Lp1a6jDIBoWiwARkY7p8mYxIo+jR48iPz8fMTExOH36NB577DE8+OCDAIC//vWvOHr0KDZv3ox3330Xf/jDH2AwGBAfH4+XXnoJqampfl3j2LFj2LRpE1pbWxEZGYlVq1bh+uuvh8vlwqZNm1BQUACLxYJp06ahqKgIO3bskLPJRH1wJEC6d+7cObz66qvYsmUL9u/f7/383r17sWTJEnz99dd45ZVX8Pvf/x779+/H3Llz8dvf/tav925oaMATTzyBtWvXYv/+/XjppZfw1FNPobS0FO+88w5OnTqF999/H7t27UJpaalcTSQaFEcCpHupqalIS0vDhAkT0N7ejv/85z+Ijo7GxYsXMWvWLPzxj3/E7NmzvT3/FStW+P3eJ0+eRGZmpvfo5CuuuALf/e538eWXX+LTTz/FggULYDKZAHQd8sdRACmNRYB0LyYmBkDXcdR33HEH3nvvPURGRuKOO+6AJEkwGo19jqpua2tDeXk5cnNzh31vt9s94HNCCDidTkRE9P3zMxg4MCfl8beOqJeFCxeioKAAH374IRYtWgQAuPbaa/HFF1+gpqYGALBr1y68/PLLfr3f9OnTceHCBe+xwufOncO//vUvfO9738MNN9yAffv2oaOjA06nE3/729/kaRTREDgSIOrFarXiyiuvhNPp7POIx6eeegr333+/9zX+nsg6fvx4/OY3v8Hzzz+PtrY2SJKEjRs3IicnB1lZWbhw4QJ+9KMfISYmBunp6YiOjpatbUS+8BRRohA5cuQI6uvrsWDBAgDAr371K5hMJjz11FMhjoz0hEWAaAS+/fZbPPnkkz6/lpOTg82bNw/7HtXV1VizZg3q6+vhcrkwefJkbNiwARaLJdjhEg2KRYCISMe4MExEpGMsAkREOsYiQESkYywCREQ6xiJARKRjLAJERDr2/wH4l56+AtLo/AAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rvc_log\", y=\"age\", \n",
" data=data_wo_outliers,\n",
" scatter_kws={\"s\": 10},\n",
" order=1,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hopefully, this visual introduction demonstrated the use of linear regression and some of the problems that you are likely to encounter. Again, we'd like to stress that often the solution to these issues often require you to lean on your domain expertise as a historian. To solutions are often not statistical. \n",
"\n",
"History always should come before statistics."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The regression model attempts to capture as much as possible variation by drawing a straight line as close as to all the observations. However, the line doesn't have to be straight: this was a choice we made to constrain our model. We could have used, what is called, a \"quadratic function\" (i.e. $y$ = $a$ + $b$*$x$ + $c$*$x$2) to obtain a curve. Below we plot the quadratic approximation for the complete (blue) as well as the reduced (orange) data.\n"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rvc_log\", y=\"age\", \n",
" data=data_merged,\n",
" scatter_kws={\"s\": 10},\n",
" order=2,ci=False)\n",
"sns.regplot(x=\"rvc_log\", y=\"age\", \n",
" data=data_wo_outliers,\n",
" scatter_kws={\"s\": 10},\n",
" order=2,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Linear Regression (a closer look)\n",
"\n",
"In the preceding section, we introduced linear regression from a more visual, intuitive perspective. We did not discuss how to fit and read the results. \n",
"Let's, therefore, have a closer look at the statistical nitty-gritty of regression analysis. Running a linear regression model is rather straightforward with the `statsmodels` package in Python. There a just a few things to be careful about. First, we define the response variable, in this case 'Age'."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [],
"source": [
"Y = data_merged['age']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we select the independent variable from the dataframe."
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [],
"source": [
"X = data_merged['rateable_value_pc']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now there is one small trick to keep in mind. The equation of a simple linear model is:\n",
"\n",
"$y = a + b*x$\n",
"\n",
"Both $y$ and $x$ are data we observed. We don't know $a$ and $b$, these are the parameters we want to learn from the data. Running a regression will return an estimate for $a$ and $b$ that is most consistent with the observed data. \n",
"\n",
"Because we want `statsmodels` to estimate both the intercept $a$ and the slope $b$ we have to add one more column with only a constant to `X`. Luckily this is really straightforwards with the `add_constant` function."
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
const
\n",
"
rateable_value_pc
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1.0
\n",
"
4.9
\n",
"
\n",
"
\n",
"
1
\n",
"
1.0
\n",
"
4.9
\n",
"
\n",
"
\n",
"
2
\n",
"
1.0
\n",
"
4.9
\n",
"
\n",
"
\n",
"
3
\n",
"
1.0
\n",
"
5.2
\n",
"
\n",
"
\n",
"
4
\n",
"
1.0
\n",
"
5.2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" const rateable_value_pc\n",
"0 1.0 4.9\n",
"1 1.0 4.9\n",
"2 1.0 4.9\n",
"3 1.0 5.2\n",
"4 1.0 5.2"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = sm.add_constant(X)\n",
"X.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we are ready to fit the model. 'Fitting the model' means finding the optimale fit with the data, in our case we estimate the parameters for a line (intercept and slope) that best capture the variation in our data. Please notice that a line may not necessarily provide \n",
"\n",
"We save the fitted model in the `results` variable."
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [],
"source": [
"model = sm.OLS(Y,X) # instantiate model\n",
"results = model.fit() # fit model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Applying the `.summary()` method to the fitted model will print a report."
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
OLS Regression Results
\n",
"
\n",
"
Dep. Variable:
age
R-squared:
0.002
\n",
"
\n",
"
\n",
"
Model:
OLS
Adj. R-squared:
-0.009
\n",
"
\n",
"
\n",
"
Method:
Least Squares
F-statistic:
0.2105
\n",
"
\n",
"
\n",
"
Date:
Thu, 03 Feb 2022
Prob (F-statistic):
0.647
\n",
"
\n",
"
\n",
"
Time:
18:13:22
Log-Likelihood:
-198.53
\n",
"
\n",
"
\n",
"
No. Observations:
94
AIC:
401.1
\n",
"
\n",
"
\n",
"
Df Residuals:
92
BIC:
406.1
\n",
"
\n",
"
\n",
"
Df Model:
1
\n",
"
\n",
"
\n",
"
Covariance Type:
nonrobust
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
coef
std err
t
P>|t|
[0.025
0.975]
\n",
"
\n",
"
\n",
"
const
12.9145
0.307
42.037
0.000
12.304
13.525
\n",
"
\n",
"
\n",
"
rateable_value_pc
0.0097
0.021
0.459
0.647
-0.032
0.052
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
Omnibus:
9.979
Durbin-Watson:
1.732
\n",
"
\n",
"
\n",
"
Prob(Omnibus):
0.007
Jarque-Bera (JB):
10.252
\n",
"
\n",
"
\n",
"
Skew:
0.662
Prob(JB):
0.00594
\n",
"
\n",
"
\n",
"
Kurtosis:
3.929
Cond. No.
21.5
\n",
"
\n",
"
Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: age R-squared: 0.002\n",
"Model: OLS Adj. R-squared: -0.009\n",
"Method: Least Squares F-statistic: 0.2105\n",
"Date: Thu, 03 Feb 2022 Prob (F-statistic): 0.647\n",
"Time: 18:13:22 Log-Likelihood: -198.53\n",
"No. Observations: 94 AIC: 401.1\n",
"Df Residuals: 92 BIC: 406.1\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"=====================================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"-------------------------------------------------------------------------------------\n",
"const 12.9145 0.307 42.037 0.000 12.304 13.525\n",
"rateable_value_pc 0.0097 0.021 0.459 0.647 -0.032 0.052\n",
"==============================================================================\n",
"Omnibus: 9.979 Durbin-Watson: 1.732\n",
"Prob(Omnibus): 0.007 Jarque-Bera (JB): 10.252\n",
"Skew: 0.662 Prob(JB): 0.00594\n",
"Kurtosis: 3.929 Cond. No. 21.5\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The most important parts of this (admittedly extensive) report are located at the top right (`R-squared`) and in the middle (`const` and `rvc_log`). Let's start with the latter. These numbers will figure most prominently in the interpretation of the results.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- `const 12.9145` means that for a place with zero rateable value, we expect the percentage of those over 50 to be around 12.9. This is the estimate for the intercept, i.e. the value of y (Age) when x (rateable value) = 0. \n",
"- `rateable_value_pc 0.0097\t` is an estimate of the slope which is the increase in y for one unit change in x. For example: if the rateable value changes from 1 to 2 we expect an increase of 0.0097% (not a lot in other words). \n",
"- What do the other statistics reported tell us about these coefficients? Continuing with the estimate for `rateable_value_pc` the p-value is around 0.65, substantially higher than the traditional 0.05 threshold. So far there is a weak positive association, it is unlikely to be of any significance. \n",
"- The confidence intervals range from `-0.032` to `0.052`. Notice that zero is included in the confidence interval. A slope of zero implies a horizontal line, meaning no change in y for x (they are largely independent, x does not influence y at all!). The chance that x and y are not related (in any positive or negative way) is well within the range of possibilities.\n",
"- p-values and confidence intervals remain rather abstract and difficult to explain, and statisticians tend to doubt their use. In human language, these number tells you how sure the model is about where to draw the line. It is really sure that the intercept is higher than zero, which is not surprising. However, it is less confident about the slope, which can go down (-0.032) as well as up (0.052).\n",
"\n",
"What happens if we fit a new model with logged rateable values?"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"Y_2 = data_merged['age']\n",
"X_2 = data_merged['rvc_log']\n",
"X_2 = sm.add_constant(X_2)\n",
"model_2 = sm.OLS(Y_2,X_2) # instantiate model\n",
"results_2 = model_2.fit() # fit model"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
OLS Regression Results
\n",
"
\n",
"
Dep. Variable:
age
R-squared:
0.019
\n",
"
\n",
"
\n",
"
Model:
OLS
Adj. R-squared:
0.008
\n",
"
\n",
"
\n",
"
Method:
Least Squares
F-statistic:
1.791
\n",
"
\n",
"
\n",
"
Date:
Thu, 03 Feb 2022
Prob (F-statistic):
0.184
\n",
"
\n",
"
\n",
"
Time:
18:13:27
Log-Likelihood:
-197.73
\n",
"
\n",
"
\n",
"
No. Observations:
94
AIC:
399.5
\n",
"
\n",
"
\n",
"
Df Residuals:
92
BIC:
404.5
\n",
"
\n",
"
\n",
"
Df Model:
1
\n",
"
\n",
"
\n",
"
Covariance Type:
nonrobust
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
coef
std err
t
P>|t|
[0.025
0.975]
\n",
"
\n",
"
\n",
"
const
11.9857
0.799
15.010
0.000
10.400
13.572
\n",
"
\n",
"
\n",
"
rvc_log
0.4809
0.359
1.338
0.184
-0.233
1.194
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
Omnibus:
7.154
Durbin-Watson:
1.761
\n",
"
\n",
"
\n",
"
Prob(Omnibus):
0.028
Jarque-Bera (JB):
6.612
\n",
"
\n",
"
\n",
"
Skew:
0.573
Prob(JB):
0.0367
\n",
"
\n",
"
\n",
"
Kurtosis:
3.614
Cond. No.
10.2
\n",
"
\n",
"
Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: age R-squared: 0.019\n",
"Model: OLS Adj. R-squared: 0.008\n",
"Method: Least Squares F-statistic: 1.791\n",
"Date: Thu, 03 Feb 2022 Prob (F-statistic): 0.184\n",
"Time: 18:13:27 Log-Likelihood: -197.73\n",
"No. Observations: 94 AIC: 399.5\n",
"Df Residuals: 92 BIC: 404.5\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 11.9857 0.799 15.010 0.000 10.400 13.572\n",
"rvc_log 0.4809 0.359 1.338 0.184 -0.233 1.194\n",
"==============================================================================\n",
"Omnibus: 7.154 Durbin-Watson: 1.761\n",
"Prob(Omnibus): 0.028 Jarque-Bera (JB): 6.612\n",
"Skew: 0.573 Prob(JB): 0.0367\n",
"Kurtosis: 3.614 Cond. No. 10.2\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results_2.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using the log-scale changes coefficients quite a lot (especially for the rateable value). To coefficient is higher (we expect 0.5% change in y for a unit change in x). Nonetheless, the p-value suggests that this positive association may still be the result of random chance. The model is now more certain the relation is positive but still includes zero within the 95% confidence interval. \n",
"\n",
"Note that the scale of the x-axis is different now. For each change in x, the logged rateable value, we expect to add half a percentage to y. The steps on x-axis are become increasingly large on the original scale of rateable value."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(7.38905609893065, 20.085536923187668, 54.598150033144236)"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.exp(2), np.exp(3), np.exp(4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"According to the model, the rate of change in lifespan is the same when moving from 7 to 20 or transitioning from 20 to 54."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As said, the additional statistics for each coefficient convey where the model thinks the line should be.\n",
"\n",
"Similar to notebook 10, We can make these results more intuitive using a \"bootstrap\" method. We construct the mean and confidence intervals by resampling from the original data. \n",
"\n",
"More precisely, we repeat the following steps, let's say, 1000 times:\n",
"- sample observations from the data (50% at each iteration)\n",
"- fit the model and record the values for the intercept and the slope\n",
"- plot the lines using these recorded values (or collect them and compute the 2.5 and 97.5 percentile range).\n",
"\n",
"This procedure is implemented by the code below (only 100 iteration but feel free to change this)."
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAeIAAAExCAYAAACgQ6EiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOy9eYxkWX3v+T3nbrHkvlVX04vHNTAwPR6QxiOE5OdGjOwHarBFe4RAI/xG848tWRjkJwMG5LaQEMiyB0tGyEby6IFl6ZnxYDxqAxrJ8HrEMli2cWMa2u5u6IburqpcIjMjI+Ku55z54yz33MjMyqUiMyqzfp9WV2bGcuPGiRvne37rYUopBYIgCIIgpgKf9gkQBEEQxN0MCTFBEARBTBESYoIgCIKYIiTEBEEQBDFFSIgJgiAIYoqQEBMEQRDEFCEhJgiCIIgpEk7rhbe3h5Byfwnz8vIMtrYGUzijywWN42SgcZwMNI6TgcZxMpz3OHLOsLjYPfT+qQmxlOpAIbb3EbcPjeNkoHGcDDSOk4HGcTLcSeNIrmmCIAiCmCIkxARBEAQxRUiICYIgCGKKkBATBEEQxBQhISYIgiCIKUJCTBAEQRBTZGrlSwRBELfLt566gS888Ry2+jmW5xI8+vA1vOGhe6Z9WgRxIkiICYK4kHzrqRv47JefRlFJAMBWP8dnv/w0AJAYExcKck0TBHEh+cITzzkRthSVxBeeeG5KZ0QQp4OEmCCIC8lWPz/R7QRxp0JCTBDEhWR5LjnR7QRxp0JCTBDEheTRh68hDptTWBxyPPrwtSmdEUGcDkrWIgjiQmITsihrmrjokBATBHFhecND95DwEhceck0TBEEQxBQhISYIgiCIKXIsIf7Upz6FRx55BI888gh+//d/HwDwzW9+E29729vwi7/4i/jkJz95pidJEARBEJeVI4X4m9/8Jr7+9a/jr//6r/HFL34RTz31FB5//HF86EMfwqc//Wl86Utfwve+9z088cQT53G+BEEQBHGpOFKIV1dX8cEPfhBxHCOKIly7dg3PP/88HnzwQdx///0IwxBve9vb8JWvfOU8zpcgCIIgLhVHCvErX/lKvO51rwMAPP/88/jSl74ExhhWV1fdY9bW1nDz5s2zO0uCIAiCuKQcu3zpmWeewa/92q/hAx/4AMIwxI9+9KPG/YyxE73w8vLMofetrs6e6FjEwdA4TgYax8lA4zgZaBwnw500jscS4n/8x3/Eb/7mb+JDH/oQHnnkEfz93/89Njc33f3r6+tYW1s70QtvbQ0gpdp3++rqLDY29k50LGI/NI6TgcZxMtA4TgYax8lw3uPIObul8Xmka/r69ev4jd/4DfzBH/wBHnnkEQDAa1/7WvzoRz/CCy+8ACEEHn/8cfz8z//85M6aIAiCIO4SjrSI/+zP/gx5nuMTn/iEu+2d73wnPvGJT+A973kP8jzHww8/jDe/+c1neqIEQRAEcRlhSqn9/uFzgFzTZwuN42SgcZwMNI6TgcZxMlw41zRBEARBEGcHCTFBEARBTBESYoIgCIKYIiTEBEEQBDFFSIgJgiAIYoqQEBMEQRDEFCEhJgiCIIgpQkJMEARBEFOEhJggCIIgpggJMUEQBEFMERJigiAIgpgiJMQEQRAEMUVIiAmCIAhiipAQEwRBEMQUISEmCIIgiClCQkwQBEEQU4SEmCAIgiCmCAkxQRAEQUwREmKCIAiCmCIkxARBEAQxRUiICYIgCGKKkBATBEEQxBQhISYIgiCIKUJCTBAEQRBThISYIAiCIKYICTFBEARBTBESYoIgCIKYIiTEBEEQBDFFSIgJgiAIYoqQEBMEQRDEFAmnfQIEQTT51lM38IUnnsNWP8fyXIJHH76GNzx0z7RPiyCIM4KEmCDuIL711A189stPo6gkAGCrn+OzX34aAEiMCeKSQq5pgriD+MITzzkRthSVxBeeeG5KZ0QQxFlzLCEeDAZ461vfihdffBEA8PWvfx2/9Eu/hLe+9a14//vfj6IozvQkCeJuYaufn+h2giAuPkcK8ZNPPol3vetdeP75591tH/7wh/HJT34Sjz/+OLIsw9/8zd+c5TkSxF3D8lxyotsJgrj4HCnEn//85/HYY49hbW3N3SaEwGAwgBACeZ4jSWiSIIhJ8OjD1xCHza9lHHI8+vC1KZ0RQRBnzZHJWh/72Mf23fZ7v/d7ePe7342ZmRncd999ePOb33wmJ0cQdxs2IYuypgni7oEppdRxHvimN70Jn/vc55AkCd797nfjM5/5DO677z58/OMfR1VVeOyxx876XAmCIAji0nHi8qV/+Id/wKte9So88MADAIB3vOMdeN/73nfiF97aGkDK/WuA1dVZbGzsnfh4RBMax8lA4zgZaBwnA43jZDjvceScYXl55vD7T3rAV73qVfjud7+Lzc1NAMDf/d3f4Wd+5mdOf4YEQRAEcRdzYov42rVreO9734tf/dVfRRAEePDBB/HRj370LM6NIAiCIC49xxbir371q+73t7/97Xj7299+JidEEARBEHcT1OKSODXUE5kgCOL2ISEmTgX1RCYIgpgM1GuaOBXUE5kgCGIykBATp4J6IhMEQUwGEmLiVFBPZIIgiMlAQkycCuqJTBAEMRkoWYs4FdQTmSAIYjKQEBOn5g0P3UPCSxAEcZuQa5ogCIIgpggJMUEQBEFMERJigiAIgpgiJMQEQRAEMUVIiAmCIAhiipAQEwRBEMQUISEmCIIgiClCQkwQBEEQU4SEmCAIgiCmCAkxQRAEQUwREmKCIAiCmCIkxARBEAQxRUiICYIgCGKKkBATBEEQxBQhISYIgiCIKUL7EZ8z33rqBr7wxHPY6udYnkvw6MPXaE9fgiCIuxgS4nPkW0/dwGe//DSKSgIAtvo5PvvlpwGAxJggCOIuhVzT58gXnnjOibClqCS+8MRzUzojgiAIYtqQEJ8jW/38RLcTBEEQlx8S4nNkeS450e0EQRDE5YeE+Bx59OFriMPmkMchx6MPX5vSGREEQRDThpK1zhGbkEVZ0wRBEISFhPicecND95DwEsSEoHJA4jJAQkwQxIWEygGJywLFiAmCuJBQOSBxWSAhJgjiQkLlgMRl4dhCPBgM8Na3vhUvvvgiAOA73/kO3vGOd+CRRx7Bb/3Wb6EoijM7ybuJbz11A7/96W/gf/vEV/Hbn/4GvvXUjWmfEkHckVA5IHFZOJYQP/nkk3jXu96F559/HoAW5fe85z346Ec/ir/9278FAPzVX/3VmZ3k3YKNedkVvY15kRgTxH6oHJC4LBxLiD//+c/jsccew9raGgDgG9/4Bl73utfh1a9+NQDgIx/5CH7hF37h7M7yLoFiXgRxfN7w0D34D295tbOAl+cS/Ie3vJoStYgLB1NKqeM++E1vehM+97nP4Utf+hKeffZZDIdD/PjHP8bP/uzP4oMf/CCShFxCt8Mv/ce/wUEfBgPwf//hL5/36RAEQRDnwKnKl4QQ+PrXv46//Mu/xL333osPf/jD+MxnPoP3vOc9xz7G1tYAUu6XndXVWWxs7J3mtC48S3PJgYkmS3PJicfkbh7HSTKNcbyMtbF0PU4GGsfJcN7jyDnD8vLM4fef5qArKyt47Wtfi/vvvx9BEOAtb3kLvvvd7576JAkNxbwIyhMgiPOlFCW2sx280P8J/mn9u/h/Xvgv+JfN75/rOZzKIv65n/s5/PEf/zGuX7+Oq1ev4mtf+xoeeuihSZ/bXQe1wCRulSdA1wFBnB4hBQblEHvFAD8uCzx34yfYHPXQy3eQlilSkaGSFQCGB+fuw8+s/Lfndm6nEuKrV6/iox/9KH79138deZ7jNa95DT7wgQ9M+tzuSqgF5t0N1cYSxO0hlcSoTLFXDrCb9bGRbmIz7WEr62FYjpBWGSQXEJUEA0PIA7TDNlbby1hqLWKlvYxXLfz0uZ7ziYT4q1/9qvv9jW98I974xjdO+nzuSC5jzI64M1k+JE+AamMJoolSCmmVYa8coJ/vYSvradEd9TAoh0irFLmo+1sELEArbGGptYBXLF5BBzNOfOfiWXSiNjibTo8r6jV9BNTPljhPHn34WuN6AyhPgCByUWCvGGAv30Mv38b6aAsb6Sb2ij2kVYasyiGhvzMBC5AECWaiGTwwt4CV1jKW20tYbS9jPplDN+rgytr8HZX0RkJ8BBSzu/O5TB4LyhMg7mZKWWFQDLBXDLCd7WAz3cLNdAM7WR+pyJBVGYQUAADOOOIgRjts42r3ClbateAuJAuYiToIeDDld3Q8SIiPgGJ2dzaX0WNBeQLEZUcnTo0wMHHc9XQT66NNbOfbGJUp0ipDKUswMHDGEPIInbCFlZl7ndiudVaw2FrATNRFyC+2lF3ssz8HKGZ3Z0MeC4K4c/ETp/r5HjbTHtbTDWymW05wc1kASoEzjpAHaAUtXOmuYqW1jJXOMlZby1hpL2E2nkEURNN+S2cCCfERTCpmN0336WVy3Y5DHguCmD5KKWQiw14xQD8foJdv4+ZoHRujLQzKIbIqQyYKKKUzlQMeoBUkWGovYiVZwkpnCSvGyp2LZxEH8bmccyFLDIoBBuVQ/1/on1c6q/jvVl5z5udgISE+gknE7KbpPr2Mrlsf8lgQxPniEqeKAXbyXdwcbWB9uIF+aROnMkglwMARMI44SDAbzeKn5paw0lnEansFa+0VzCfzSIIYjLEzPV+dXZ02xJbtSVzvbaIUpXtcwEPMRB0stxax1lk903Mah4T4GNxuzG6a7tPL7rq9LFnGl9lrQVxMXOKUcSvfHK3jxmgDu1kfaVU3wGBgCFiAiIfoRh3cN3MVK+1lZ+EutRbRCpIzF1ypJIblyIjtwMWgh+XIJXgBQBzEuNpaxtXuFcxEXbTDNhgYKllhWA2xm+1hUAyw1lk50/P1ISE+B6bpPr3srtvLkGV82b0WxJ2Nnzil47ibuD5cRy/bxshYuIXU9bgBCxDyEJ2wjQc692O1bVzK7WWstFfQidpnLrilrDD03MjWyh1VI/h7GLWjNmaiLpZbS5iJumiFLQDaouetCj/cfQlPbz2DXrqN3XKAUTVCXuWoVIV7Omv4jz/7G2f6PnxIiM+BabpP7wbX7UXPMr7sXgvizkAqiVGVuvKgzayHlwc30Mu2Xccp3QBDIWCBa4Bxb/cKltvLWOksYa29irXOCrpR50ybXyilkItCC+5Y/DarMvc4xhi6URezcVdbuHEXMY+hoJBVGTbSHp7ffQE3R5vYzLYxKkfIRYZKCVRCQEEBUAAYAsYRsAAxj7F6jtYwQEJ8LkzTfXpZXLeXmcvutSDOFz9xaq8YYjvfwfXBDaynm57g5pBKgoMj4AGSIDbW7QpWXHnQGuaT2TMX3PH4rf39wPhtW1u33bCDKAghlcJOtoOXhzfwb70fYj3dQL/oI61yFKKEUAKAglIKjHFwMIRBgFaYIIpiJEGMmEcIuF54AEApSyy3Fs/sPR8ECfExuN343TTdp5fBdXvZuRu8FmfF3R5bL2ziVDnATraL68N1rI820C/2TKZyjkpWxsLlCIMY8/GcE9uVzjLW2qtYbi+eqeCeJH47E3Vd/LYbdRGwAGk5wsvDm3h+5wVcH95Ez9QbF7JEJStt2RqvdMADBOBIghjtsIV22EY7TBCyUG/uDoCFCv3REBISlaoghIACEEA3CTnvRiAkxEcwqfjdNN2nF911e9n5768t42vfefnA24nDuZti6y5xqreNFzZu4MZoHTdG69jN+y5TuZQVOGMmjhtgNp7F/XOvwGprBSudZVzprGCltYwwOLtp/7Tx207UgVQK68N1vDh8Gd/f+jdspT30yz0UotBiKSWsG9nWHEc8wkI8j27UQSfsIAljMHMepayQCe1u3ysr99ocHDO8jXbURoBAd+gKIwQIUMoSpawQ8fOtVyYhPgKK3935XHSr6LvPbZ3odkJzGb+bQgoMq5HpqzzAzXQD1wc3sZ3vIK1SlCgwynMwBhfH7cZd3NNZqy3cji4PSsKz8agcN37LGUcn6mA2nqnjtyxCv9jDj/dewr/1nsV6uoXdoo+0TFGpClJKE7cFGOMIWYA4iDEbzmA2nsFcNIdO1ALnHKUoMSpTZCJHJjJsZluNRLGYa9dzO24h4Po4EY9QyQoyqDCsMuQyRyFLiFxAyApKAQHn6A47ZzJ2h0FCfAQUv7uzuQxWEV1jp+Mij5ufONXPB9jMtnB9eBNbqd6qLxM5cpEDyrhaGUc7auPB+fswx+ax0l7GamcFVzqr6ETtMznH08ZvO0EbmchxfXADLw2v419Gm9jOdzAsRyhkYSxbAFBgzJY+RZgP5zDXmsViPI/5eB4hDyAg9RgVA2Qiw43RTUglwRigFBDyEAmP0Q27iOIIrTB2yVqjSnfuykSOsiy9mDEQRxGU0GLfDhK0whkkYYKIRQg4x6sXX3kmY3oYJMRHMKn43UW32u5ULoNVRDHi03ERxk0nTuXYKwYYlANspdt4eXgDG6M6cSoTORQUApc4lWCtvYzV9ipWOktYbWvBnY1nsLY2N/Fdg04Tv+0EHUgIbGY9rA828MLuj9HLtjEoR8iE3phB5yMr0y+aIwoizEQzmItnsNxaxHJrGd2wjQoCw3KE7XwHe8UQN9MN/GTwsrOMuYn3JkGC5VYH7bDtrP28yjGq9MJlVI2wnhaopHZDc8bBwcEYQytIsGAaiHDO0UoipFkBDq7jxLLCoBgC0J6GG6N1vHaio3xrSIiPYBJZx5fBartTuchWkYUy20/HnTZufuJUL93BjeFNrKebdeJUlUMoAW7LZIIYi60F7VJuG8HtrmI+njuTZKGTxm+XkkVIKbFb7GEn28FPRi9hM+1hrxi4Zh76eTZuyxDyEO3QPL+1iCudVay2lyGhxb6XbWM728VWto2XhzddohUDQ8QjtIIEM+EMOu0WOmEHnAcoRYlhOcSo0j2rN7MeClHqxQvjYGBgjCEOIr0BBAvBuU48szFzoQRKWWFUpQh5iDBiria6a9zn87HeIrEdtbDapvKlO4pJZB1fNKvtIlnvF8EqOgrKbD8d0xq3SlYYlEO9VV++i5vDddwYrutYp0mcqmTlBDfiIWbjGTw4dz9WOyumxeMqllsLE0+cOmn8tmv+HxTaGu7lu9jafhb9fA+jKtXxVEgope1TV2sbRFiI57DUWsA93XtwtbOGKIyQlim2811sZT3s5n18v/evKD2XcMB1nW47SDDfntPCGUQQUiATKQbFCKlIsVPsohAlpPYfw8gtwiBCzCO0ww44dB1xwANwMEilICHBGEPIA4Q8QmTc5nPxHObiGczEM2iHLdy3toK0L9EOW2CMIa0y83+KtEoxLIfoRucXJyYhPga3m3V8kay2i2a932lW0WmhzPbTcZbjJpV0grub97E+2sCN0Tp6qek4JTKUonKJU7bF473de7DaXsZqZxlrnVWstpYRh5PdxOAk8dt22ELMIohAYFAMsZcPsFvsYifvY1SlKGUFqSSk0lnJjOke0RGPMJfMYSGew5XuGu6bvRfz0SxKWWI338NmtoVetoNnd36Ip7Z+oEVbSZPRHKEVxJiNZjHb7aIdtKAYUIgcwzI1buRNvDi47lzJjMFsCMERMm0d65KrENxYvoCOC0c8RMhDxEGMbtjBbDKDhXgOM/EMOlEb7aCNdtRCO9DdtNIqMzFjHTd+fudF3Oxtu9AAPI8AGMNPzd1/rv2m7xohvh0r73YtxItktV00652sSeJ2UUon9ljB3Ug3cWO4js20p+OPVY5CFlAAQlMa1A7buL9zn27t2FnGWnsFq+1l3bd4gi0ex+O3z2USL29tNuK32lLVCV25KJBWWuj6xQD9Yg+jMkUpSwgpIJXSrmDGEDKOgIXoRm3MRrNY6azgvu49WOksI2QcozLFZtbDVtbDerqJH+4+b6xbLdjOug1bWGotoMVbCILAJaKNyhT9oo/1dANCVt5rwzUSCViATtRGyAJwY9nGQYwoiBBxbf3OxF3nOp6LZ7XQhm10whZaYQtCCqQiQ1rq/tfDYoSNaguZEd9CFI0xZYxhlS2AMY6V9pKpM265YyZBcqY11QdxVwjx7Vh5k7AQL5LVdpGsdwtZk8Rx0G7b3AnUxmgTN0cb2Ei3MCyHrsWjTZwKeYgkTHClq0uDdNLUMlY6q5iZcItHG7/dK4a1W9mL3yooVFKg24nRH6bIRIZRlWFUjkzSV4pcFk2xBYx73FiOrQ6WkkVc7azhSncNM3EXlRTYzXexkW5hK9vGP2/+C0Zl5sVutQXaCnWyUyds6T2BFUcpc7PX8BDbey+hkqWxrOvyIw6OkHNEQYyIB+AI0Y4SxDxGHMQ6rht3MRfPYi6ereO0YRudqIWYxxBKuAzotMrQL/Zwc7ShrdsyQynLxlhyFhhhbeGe7hpaQcuItxZZAJhbSPDjGzfRL/UOUi/uvYxhNcKoHGFUZXhg9j78Tw/8u4l9vkdxVwjx7Vh5J33urazni2C1XSTrnSAOoxCl3hu36OvM3uEGbo42sVfs1YKrbDwxRBLEWG4t6hhuS7uVVzurmI9nJ5Y4dVT8ViqF0nSKkkoiq3R9bFrmSMUIWVWgQomiqqBM3BYMZrtBHROdibtYSOadlb7cXkTEI4zKEbaybWykW3hh8CKe2n4aWZU70eSMIeIxumEbV9qrSMIInAXaWyBS7OUDrI82UIgCwrixFWCs2wABDxCyEAk3Ihi1kQQxWmFLW7TRDObiWSwm8+jGXWeBJjxGIQsnsqMqxXauW1ba24SsGuMY8BAd8/zFZMFZtDGPAMZQiNLtGtVLtzGs9GJlWI5cNy5wiTTPUCkJqXSGN8wCRkGBqX0f35lyVwjx7Vh5J3nuUdbznSi841wk650gXOKUqcVdN1au6zglMl13arbqS4IY88kclltLutOUsXQXWvOIg8l0U7pV/DarcpRS17TmIkcpSmSiRC4y5FWOUhYoRIlKCSN2xro0sdM4jDETJ+hGbSwluk3lcnsJs/EMhBToF31spD308m28PLiOoXFLWwLG0Qpb6IYzWEqWELEAEjrje1ANsVv0sZ5umsXAmCuZcSeC3aCtu1lFOj5rLdqFZB6zJiGqHbYR8dC4y+tEqK2050RXL0Cahk4URCbzuoOV9jLaQYKAhxCyQikLjKocw2KIXraNvWKoS62KETKZoxIVhBLaMwAJKRUUkyYvG+ZfBcYZKqH7UOvPDN54Kwyr0USuheNyVwjx7Vh5J3nuRYuvHsRFst6JuwcbK+3ne9jKethIt3BztIHtTHecyqoclc3MZbpfcDfq4L7Zez238goWWgsT2xtXSO0y9etvrRWemU0HbL/nQhYohBbZUlaoXI9kXWsrlQJnzLhyA3TCNlpBC7PxDFZaS1hqL2IhnsfS4gzWt3awU+xiM+3hhcFP8L3eD4x1W889EY9M7HYeIQuhAFSi1O7saoSdfNdZ3rr4yGQgI0AYhDrpKexgPp7FUmsB86054zqex3yi47SdsA0OjlzauLQW1vV008VrsyprlEYBQBImaIctzCdzWG0tQ0GZMalQyAKDcoQbo5vaNV+OkJoFijBdt4QUEJAmwUqXTXEWaIlVCsJ4CxjTMqukhFASChJCKUApMA7oviLWI8ABBXDOwZnuVX2e3BVC/OjD1/B/PP59CO96CBiOZeWdxEK8iPHVg7go1jtx+bDWZL8YYCvVgruebmIr7WFkOk6VxlUZMI6YR2iFbazNreqEKZOpvJgsoBO1JxLHHY/f9os97GS72C10H+SsykzXqFK7lkWlt9mTldv9RypAQTrLlkNvMdgKEnTCjnbbthewmMyjHXWglMKg3MN2uovtfAc/GbyEYZlCvSCNJafdyXr3oASdVgtKMghVIpMFsirHMBtBiBICymUF+52s5uJZzEYzXi3zMuaTOcwndZyWAchE7rKN0yrDjdG6+zuvxuY2xtAOEsRBghZPEMcRKilQiBypcbXfHG24mG8hCtP8Q0Eq6cQ2YFxnSpsdk7QbXNWudHAjrBKlFFpozULEirDd4UEXPnEEnCPitgyKQ0ilX0OZxZDZpcmWap0nd4UQAwDjDL4SM368FfFJLESKrxLE8bCJU3vFENvZNtbTTWyMNrGR9lziVClLKGXil0GEdtDC1e4Vs0XfKlbbK1hqL2A2mrntOO54/FZb3tvYyXe1S7k05S9C19YKKSGc2Ern8rROUM7MxI8EUaCbXHTDDuYSnZA0G80gDAIUosJesYdevoMf772E7/f+FUVVQNi4JXSmdhRESAK9XV+OAqWoUIoSadVHJYWJGXuWrdkQYaa1gPl4FivtJVzprOKe7hUstRYxE3fRDtuAUhg5t7H+ed2Lz45nHAN6ASQVICGRiwKFyJGLQv9vxDYXhSuJsi5uKOUsTm6acNiaX6kAziQ4048XSqAUehykquPhznw36ONwhIyD8bCWXsbB0RRYaVprKkiUUkFJBQldp2yzzu35LbdpG8SJ84UnnkMlmmucSqhju4yPayHeynq+SE0yCGKSFKLE5rCH53ZexPpoExvpFjbSLZc4VYrSCBiMhZu4OlzdAGMZS8ki5pJZxMHt1eNai3uvHGIn29WdnvId7OR9DIuRc7EWJntaSOHitbaDkxWFwNTLJqbsphUm6EQdtIMW5uIZzMazSILEbVK/V+xhO+/jpYEWOu0aFvVeuYyb5CsGppjboi+TGUQhXY9lKLha3ziIsZDMYzFZwHJ7Efd0ruAVM1ex2llGJ2xDQjVEdlSmeHlw3YmvreEVSqISJQpZx1idhW9i2vZvIeVY/NokjJlx4FxnnOvzhG60obTVKpQwVnBlyqDgWaBGbI2cBqY9ZcQiWE8xY6aaWAGMcy2wppzKuua58UlLsyCKGQPjHCxkCJlOLEviGGUpzPlbZVfOtU3lS2fAebmMD7OeAVyoJhkEcRqEFNgrB9jOdrGRbmLTCO5u1kfJCgzzzLkPQx6iFbSwmMy79o4rnRWstLTgtoLWbcVxhRSupeJmuo3tfBu7eR87RR/DYqjLfYQttxEuE9iKrdYDPZEnPEbAApNZHOn4bdhCEiaYibRlGbIApSqRltqt/tLwJkY7P3QbDWjLzhoDdYKQUAJK6QoijsEAACAASURBVNilVLJh9XEwUzrUQjfqYDFZwANLV7EYLOFq5wpW2kvgPEAucq+8J0Uv38aLw5eRlimKqkAhS+TGhV6o0iwuKlRSmFi1aMSLLbb8Sf8fmLrhCMy0j3TuZNM+0m5XKJ04SpMEpeuWwQCuGBQUOAIwM77WjcyMFwFQgFmI2DiwHQ+Yz0Zbrtp1rRPxuIkVc/2aRkxt3FgLrBZZISVkKVFVxp3NTKKWiREHYHrDjXPkrhDi83QZH2Q9//anv3Hhk7gIwmITp2y3qY10C5vpFrbzXYzKFLmoE4cCFuga1M4s7m1fdUlTS60lzCWz6N5mPW4uCmylPfP6O9jOdtHP+9jN+xhUKUpRoJQVlJKQzmqyCT7MiYHdDJ6j3nqvE7YRhzFiHrm9bqUSyKsCoypFvxzg5nAdmSiMNVkaYa3LYFx8WNoJ38ZqtSXGue5g1Q1idCJdjrPSXsYrZq5ipb2EVpiAg6NUAmmVIu4yvLyxiR9sP4P+jb7ZpalAJjIUVYEKFYQwm93b0hxdm6MtP2YiptYdiwBBoFtWWstQWcvQCWwJoTIXh/WtYQXUMVxo3QwYN7FoLdocADehA73QMfqqagvYGsI2nssD5s7H/XQLMxsI0DFjBhhrW7lFjDJxXy36zMWaGRgYZ4iCEKG5PrnxLgD69oAFeGD2/lNfk6fhrhDiaZfkXJYkLuLuwrpxd/K+E9vNdEsnTlV6H1i7WTtnXDdOCFu42l3DWnsVq50VrLS14P5XV+/Bdi891XmUosRO0cdW2kMv62E70+0Zd7Jd7BV7KFWpE3ak0PFASJ0Baydfs/OPrXXVsUBt3VlXeMgjhDxAK2iDM52gpXf2SbGT7+qaXlN/bJOwFNAUXWV8scastGIXco4oTFxjibl41rjeV9AJ2wh5pDezF5VrPflv28/in9aHyITNti50GRIHysrW1SovZMpcH2jGTDMS49q1AiYVjPWvLeBCFChVBVmaOK4nsProaEihi33bMWTGHW2sWhfGVfV5KaPOWmi5OxfFTMzY27RBP0ehFtp6fPX1CFfry4wF7HswQha6bl3WkrcbO4Q80FY90++k3Y5R5hKhebx1qwdcH+NKd+1U1+ppuSuEeNolOZTERdzJ2ESlftHHxmirFt1M742bV7mJJSqA6S3pOmELy60lrHVWtOC2ljGfzGI2njkwjnurzQ2UaWQxNE0nemkP2/kudrI+dvId7BZ7yEXuBNCKv7XGtNWlzys0E2nItbUXB5HpTaw3ALDiEXFt3ZaiRFbl2C13kZYpBlWKQuQmE9fU0ioj7gA8+wxgevIPTT9k7W5P0I10S8Zu2EE7aiMAR6m08OVVgVRk+HH/Rfyg9wxKWbrSHaGEF6/0xs6KCwIkYYgWb4ErDnBrueoYrIvDihJpJb1Ep9o6bNqY9m1wE48NTJ9oDs5DJ3S22YU0CxwbqFZKJ0IJJcYaYFjxZzq0y1hjQQDjrgbjzr3NlIkLM5N0x7TlHJqe0naRwZn1WETOXW63OtTPr1tn2mPZXuBWnAGGmZkEe8ggVOUWJpkUzuJv8QSvWvzpQ6/ZSXNXCDEw3ZKcaVvkBGEpRYndYs/EbzexlW5jM93Cntl4vTItEhmD6yM831nBiikNWjUlLrPRjNu55jho61q3ZByUQ2ylOklqN99FL91Bv6wTtypVuTIWQLskOXjd/SkKtQVrJuKIx0iCSMcYoTOGdRwxAFMMldLlM7v5nt5Zp0qRiwylNOJlLGkdm4QTEQY9gVuRDXmk2zLyEK2wjZiHpnZZn2clpWsw0su2XRKazfr1rU3tuuVOYFs81rWwnJnTUM7NLaF0wpgskeUKlagFFt4xbfwU5uw5dKITD3Tyl7aUtWXo/Mgmq1hKU3drXq+UpbNQGWwc1xzZiDFnOvnJuom1S9tKd/1uGXgj/BAGofvsAhN/Dk2WdxREbl9meyQG3U3LxoFtFrZ1iStTGmZd8XmV6+QzJZwFbTO4bS5APAxRldJZw6HJAdAWOkcyoeYux+WuEeJpMm6Rc1bHiP37CWJSCCmwVwyw6dXhbpqt6XR3p8q5cCMeoRW2sNxaxFJrCWsmcWohmdOW3THjuH6z/1E1Qj8fYDvbxna+i/SZITYHOxiWqdk43ib1aBG0QstMJnIn1KIXcT1ph4Hejceeh5/pyngAYVzJfdN/OBe5qzn2S2D8TlWMwbgrQ7SCUFu3nCPmsdnPlrlkJNsQIq1SDKWAUNuelWxkx4i4izkq/TvndQxSK4u1JqUT2DrmqhquXQszWwFyHdVFxCO34DCP0K/BvPiplK7JCRggoUvGrPN3fBFlorN6gQDuTtc25KiF2SxUmBZlxjkiI6aBGUOGAFEQIjbbFoY8AIMWO/s+7Weoy5UqE8tXqCBQVKXLiJaQZoFYx7uVud4stcXL3MKNMY7IeEgiHjZEt9NJMBjpzHUdB8+RVTnW+wPc3Bngie1N/F+D4tw8pyTE54T9MCl7mpgkUkkMiqHeIWe0ia2s56xNW4trJ6yQ2eb9umnDlfaqFlzTNWkm6uqyk1tQmc3V9WYDqWtwsZ3v6gSpYoBhmSKtdIMLK7aKAUrWMcGQB0iCCEkQIwkTRDwy5xcj4hHAgEoK14iikgKlLE1zCd1IohCF2+ig4bK2JT6AqRHVwhKGocmK1TFUBqbdksbyLGSBXCoM1AjW2HTeVKV7D3BjETKTsQvY9pOBy86VTJkmFWbBoIAKyrmIda0vt/cakaoTqewiAWAuy5wzBgkg4AwltBVfirKh1lrjdfzU3l4fT7uJFQvhW6t2nKyb32JLkPTiJHDtLSOz9WDEIxOPtmKqvQF2gWGtz7TKMVKpWwTZumIJASmVyYbWr8ydq1q5RVLouZmTMNEeCl90wUydsOmeZcIIuomIrgvXpVc6ac9eK/ox0sXFrYtfCAm0gGAxx9bL5zc/H0uIB4MB3vnOd+JP/uRPcN9997nb/+Iv/gJf+cpX8Od//udndoKXiWm1wKQa5ouPUgqjMkUv62HdxHB72Ta2su16mzu7PR0L0AoSzEYzmI1ndBy3vYLF1jxmYx3HTQ6px/XjtU5wqxTDYoTdoo+9fA+DUrdzHJUj5GZ7PWs12sQtbsQpMZP2fGcGXOhJvRUmSIIWwABhsnJtlm6/GJi2kIXLePbd1RLSCYeltm65S5ACdAcr381bSQF4bSXHhZaDNYSBcQ7OAChT3+v8vkzfbkROa62C7ZrF9MkAMGU7irksaZtxLKWX5GVcwkr6md3u6AAAyfTxQxW4ciDmrN/6s3ONihRrmtTGco2Z2cs3CI0XgrsYesACBAEzGVamtlhWLlZuPR79YuDc5i75yne9q7rel7O6TCk0Yh6bxZB1A9sPgqMuZ7K9n23mdlqNUOQ6Ka9SZWPxZYVfQjfpsIlz492xbLiCm4YnIefgLHKdxtZ7OUTJAMkhejpZ67yqW44U4ieffBIf+chH8Pzzzzduf/bZZ/Gnf/qnePDBB8/q3C4d08iensQ2jsT5YROnetk21kcb2Mx66KVacO3qXq/otTu3FSTohh104zZW2zpxaqm1iFmTMHTQ/rg2G9pu0K5dyane97YYYFSa38uBbt0oChSqtiZsva1Nfol4iDZvmc0E2kiCBHEQox21EDAOISVYJNHb66NUJTZTvb1fXhWu77LNelYuWuvFU/1/XRxPT9w2K1c7TU3ykNk7WJehqsbzrRVVd1EymcXGarRxS+2abZbL2LpU1wrRCikYpOl/LJXdhtB36datE/V7AKz9aQXcnQN0wpGfu+xcyUb0tc7ocQpM8pJ2vYZmIcC9GGzg3PnWIrU7PFm3taxSF0PV2cx11JcBYzW/zJV4BUHQiB/bpCn7Pux70JsvaKGsRAFR6jpma6HWddyi7oKllCfuyjpGnGvbvo69BmMeIwxCJDzWuz4FLV16xnRsP+IhOGdQikNBIEpCDEcjc/0J5DLH9XJTXyWBRNAdQm7q1zyP6pYjhfjzn/88HnvsMbz//e93txVFgd/93d/Fe9/7Xnzxi1880xO8E5iERfmtp26AM11CME63FeC3P/2NM7FYL8NGFJeVUpTYznZwM93AxkjXwW6l29gr9nRNqkki4owh4XpLuaXWApbMzkELyQLmEr3rzXgc11ovG+mmEVxr3Y6Qlrp14chsUjCsUuO+y80kLRpWmbWatCWboBt10A3biM3vIQ8gpNR7xeZ72C37SEcpsqpw2c4SJovXTMgWP1aoX0//65oxACYjl5nYKpxr0R6F18/yYrS2ZMVafGGd8OOEj5uyGW1BSaVcowtpE32MZWYtcpfQZJtvwFqEdTMQe6tiTQF1GchmySBlrfXSxptt2RW3sdrAWXEhC5HEIYSAew9Qtoa2Mn2X9T7C6Vi9r7+c8Rcz9bjr5iFWbN17sCflPVYp3SLStbE08WiJOhZvLeg65l0fyf+s6zFjJhlPW+dxECEJErQD3Y/bXns2+z0yyVSlKF3IIhMZ0qpALjKkIsOgHLjaZ5ukJczigwccUtTnKJVE0ClMNre2rC3nUd1ypBB/7GMf23fbH/7hH+JXfuVXGm7qk7K8PHPofaurs6c+7qT5L//4E3zuK/+K3LRD2+rn+NxX/hVzsy288X84XtG3PcZBIhxwhryUGGb5qY9/GKurs+gdsprr9fM7apzvZG53nCop0Btt4/reOm4MN7Ex2MLmaAvbqa5PtcKneyrH6LZaWIuXsdSex71zV7DSWcJCa07vgJPMNCahYTHCoBhhu9jU2+0VQwwLbeUKqfe01bFbXYaUV3pDADuJ+v2JwyBAK0qQBDG6cQdzSRfduIuZqAMeBMjKDP18gN2sj/Vc77CTixJ5VWj3pTTWrGqKLdAomPFu07HS2mo1yUGQtfh6/+pOU9oSi3iImEdIIr2TTyuMjQWoy24UFEqhd/MRUqISlSkVKlxTDTsxV6Jy7SOV6fxk0XsW6wUO57WQ+m5v2/xJl754b9DTL2tRB8wKK3elOKErq+JGrJWJudpuXCZOjhJFkTuhsyVELnHKjrTWNecmt9aj/RR8C90XaskUBASYUrXLV/oiKp1lat+3q5821xAzNdqR7bVt6rRbYYxO1EEnbpvPK9GflYm7SwVUqkRe5mY3qxFGhV449ooeSlE5MXVib/dkhj2F2hPhW9JNJ/V+l7UjhCvD4t0+ACCJAvyvb33ozOfKEydrfeMb38D169fxO7/zO/j2t7996hfe2hroYP0Yq6uz2NjYO/VxJ81/evwpJ8KWvBT4T48/hYceWDj1MQAdRmonAQZpc+Pr8eOfxiK347h0SA3z0lxyR43zncpJrkepJPbygbFwdeJUL9sxmcpZ3bPYWDftsIW5UO/feqW9gqX2kqvFnYl0HLeQJUblCP3dFNc3X/ASpbTLWCmFSlQYVCOz4X1mui3lyOzmAd6Ea8tE2ryt3cehbsIR81i7DmWFUTnC7miA6/11vRm9qq1kN8HBt5iOpulq9mpxFWpXs4nxhkxbRUmYoB0kaJst9wIeuFaKtsGFkBLDPMVuOoCQlU4Ksy0jZdNy1sJprVAGKQRsfFkxNEQPJk6px87UUKNpKVqL1G7DZ1suhraWFTom2nANmy357H65mRKQKnPi64+R94ezrIOAwzTp8ixt6503z1LMPqn+nJgWUvcaCsYNrV3trszHvH+mmEls88p6mLaaYx4hDhIkxjrV7SsZpNDZz5UsUSqdXJdXOQbZCD2xY3akEsZytouIekelW4rkIdfSSXALFdTNXmyTl8i0Eq2KABubEvmNK26ufeiBhdueKzlntzQ+TyzEjz/+OJ555hn88i//MkajETY3N/G+970Pf/RHf3RbJ3qnMom47mGPlQr7RHj8Obcb46Ua5smjlMKgGGI90zsGbaY9bGc72Ml3TSN9YXbk0Q0JEtOYfybq6n7K7SW9BV08g5moAwaOVGTOddzr77jYrWvKLwVGZvP4vMr1Xq9GcHMjyNZlaifMgHEkQVuLmukRHLAAhSgxErpj1PpoQ8cLjUtzPD57y3E44DbPLnPlSDaJSZfGBKbbkU7kshm4dcasdgOXQief6eSgPVM+pIyYyobrs3abWmGxmwkAYMoJTfO8PQGotRfOLa7geh/bWlfOAoTmd8ZszNWOuzCJVsp0rSrr2uR948PAmHXJc9P0giNkxjXMmUuksmLhGpFEAURZ7/akmNmEQul3rZSCYgpMARK2k5aEss1CGhatHruQhwjAwFgA6w9wCVBSmliuhIBJjjILSj9WPn5l+As1369xq6vpsKvOL1VrfE6o+0u78WER4lDHiNumF7juB95CK2gjMVn5C/Md7PZHJhlQ7xxVSN3cpVgpcO0NP4U3XP0fjzjnyXFiIf74xz/ufv/2t7+NT33qU1MV4bPOCJ5EV6yjjnGr+243xjvtrmIXnVGR4oX+T1xpUC/bwU62i2E5RGWaQYDpOsYkiDEb6brbZbORwVwyi07YdiU5WaW309vOd/DS4DpSkygDaIu6MBnCaZliVGXIqtQJcOka8+sJSU/UHJwzV0rCjV/SHmtYjlxGs92l5nT2RNOi8BNl/IYMtjG/FRFAl8JEYYCiEiYzWEvUqMowKIeuQYNL0nFnaDNg62xju1SwImr/ttN+M5qphac+b5OQZRN9OHfWrL7P7E3LmkJv61wVSueOZt5L1FnR9fFiJ+DcxaZt1yebTGXbanLFwDirrWVTs6wzye3CpEJZ5kiFQF6WTghdUw7rmnXWs78E8JLLXDZx7bZtuHKBsecedB0w+LF921jDvpZdXPgxcTtWDUtfMehyZVsS1kwICxhHGERIeGzixrHplBa4hh/O7a5gLO7SZMjrjO8ts8Wm79JWUAgCDmH2dVaNU9TvrZLVnS3EdxLnkRE8CYvyqGPc6r5JWOTT7Cp2UchFgQ27J+6oh+1cN6LIVYo0L1yXHrsDTSfqYCbqYCGZx0pnBTNRV2dmmmzbQuQYVnrLuVTkziLTWasClSgwqjIMjeWrdwMqXN2vb+0xBtMZyUxiZgKVTEGpEqKqRXY8NnsU7Bb/cmvFmuxbm53LTVZvZUqBpJIQkG7rQB83ERfQ3ZvM31LafWJ9ga0ff2sh0P+6jGMvW9f1HzaTNDeNNWzctBYkPSmXSgKo3JG5N7nbEELA9WcaWIvYfM5xEOr2GqalJjcNNmyCkF1YaFetzhLOityEKIRz90vfZYxmvLMWfO0r1/HvpoUI63IH3HaSdexa+c6AfZ9M01JlxjLWJUXMLKqajzKfjS2PskkGNtPalTTVJVv1oueA/2GTzpSpza4tXfsZ20zvXOZACfdm7YYP9qyUAhhTUOZcpFuk2D2R6xwGMLjubf5C0LrLbVLXeXFsIf7qV7+677bXv/71eP3rXz/REzoJ55ERPAmL8jjHOOw+6lM9WSpRYTPbcvvi6s5PffTzvivpUEoiMD1u5zszmAvmMBPNYrE1b0pyTEmIAgqps4+3021nIVtXbwmBrDClQVWGvErNfq+2heOYbNrEGydXDZtm7F8c+DjfmhnPiq3vVG6CBBgCzsARIuIBYOo4GfREZcuVhBTIYGOJGDsy01kuCmPuyoOzZY+LLYdplMXsE1y4V3IWjxEmZcpxlF3IGKEJWGhqhFndHMIsOmwHK33SWojsYsGORSFyCCWwV9pJXpgmFQpK+gsLXzC9EWO1V8F+Lq7Hsn5A01J170lBKLgmH03PQR0OcFeHtUCZJ4o2IO7bvsbNrvdANp+Xix3b7Pm63rcedZOcZbtZsbqDWF2ixUxClhVX+9noxVDpEq+U+wlTmuULpLeka/wt3f3+iNTjMb6kY+7nmH+H1RY5B8dScrz8n0lxoS3ii7Sr0a2s0lvdNwmL/G5s6CGkwHa+g5vDDWxmW9hKt7GT72K36OtaXGONBKaDUCtoYT6ZQytoYS6ZRRLEYIyh3Y6wvTdELnLcHK7r+J/UW95VUmhLRxTadawqpHmBvCr1fqhcwVYUeVMXAOve9F18SvcAtpO40vat73I9eIJpijDgTfDe326XG24tifq4QkmUKkfeXNN6x7TxSDhrfJ/NegyldQlG8Js3mBipsoJhX0SZBCPPijW3SwDCupytqBlrKuCBi+9qt721vmpxVXaPJlPuAyjIqn4NXxj81264vFG/vq1qDhmD6SXirFSo/ce1pVL2PPxrwFqBdkHhPBNeiQ9QL5aMv1dbwxJoXj/2qpHGSnQy6y0NmosFN5bQLnyYz0eZ272rwTxNv56u3xZwPhH3+tYy9y8VY7Wr/bfVl5L9fjRDC/AWFAxACB1Tt9e4jefr2H7odlQKOddbW5iFRBSHKEudFyGlNDXg0lnPy+3lwy/kM+BCC/F5WIvTbohxuxb5tM//rJFSYrfYw/poHRvpFraybWybTOVcFG5T9sAkw0Rc7zMbMu1iBoN2FcsKg2KAXdXHS8PrECZBhQcMZSVMNqjQt8Nrp+dcq0Y0pDJxL/O3AFhgY161FNnZU0kBG7m1jTrG43vjNGUZjUc243X6VusCBmq3p/3XXwzc2iF84Kk4/Hih74403lHnIq1dg3bjdwnnBFQAJGrr10y4uqxHj19tvQZu31s7WytP4KQ3y+uYYV3u0nD7+2/PPscIG3OrKF3zq5g0awTbA3l8pA8aoP0uYNe5y9iZ8HYPEgoQpdDCaax5qRRCs0+DMCJtPRO3eu2m1ed5UZh9Xd8y9p28ugxLAPoCHn8LyvvT/qPqz40zANyIuu1KZsqU3MLJF1XUiX1WTO32hbZHtN7kw69x1j+lXVRJXXpVicr1j7Y14YUooap6cQcFsAKQQjYXct7PO9Y1fSdyHhnB590Q4zDr9bSvdZkaeuwVeiN2Lbh2X9pd11O5FKV7rI1V2WmmYsBIZq5Fon6Q+aGNBTNRm+J/2AlbNtsRYty6tW5eQFTW8rC36scFAFigk0kaE+YhwnYSN27Tqqmf6xpEHHHMw0S9+Rq+hV03/fdPwgq93sCBmXGTbuK3jTTGY4T+7jt+N6jA24lIGmEVUtQb3psGEnonIpuMZgWqacnWnst6IvZbZfohgoPc/QeNR9PdrHco4uPj4o++s8jrK6neNMI/RwCBebiqb5JmgccVa56rdT+7euL6E9PfAbjb68+tjuPapCrG625idg9nZ/Gb5ifcE0Hn5rbv2PwzHmNnJpkw4rFLWPObiVgrtDLtKm3YRpjM+bRKm60spXLjVrut3YCYsahbkHJv8etfi2EQQEGXg9n343+inbB96Od/FlxoIT6PjODzdH+fhfV6kdz3lmE+xE8GL+HFwXXcHG2gl21jrxggrTLT4UjU8SNvtrIra3/VzUySjY7pKmNVSJOhajs91Ukb9QRbT3dN12FtW+jJ3Lo6oVsSM+WeBcCVkRxcpHY0vtAeJA7+GZ3u2L6k1O+Se5OTfZR1/+oaU69sBLrJhq3H1J2PYl1nGujSpCQJMUxz10RDmHi8bbRRyBIjleo2mrYxv3WDe14H3z0P7+9jc6TR33xAbZvbG7xFj5eo5FXg7jsK81533CVsx1gLIkcl/KStWtglgJkoQRgwKFULnRNJIzKMNcXQ7s9c727lvSPmuf29LHRl1g3WRV1fFeY7whi4YpDMXOdSJw7a71RlPEzCi5/b+HrDY9Gw6pUTczvC9XmOW80BAhi3ufK8JmOeFOuu9vMMfNe0KOuafuvKthnZ98/ee+sLZcJcaCEGzj4j+LC2lJztv+12Ocx6/eyXf4A/e/z7kEq/7sOvuxfv/vevPtYx74RkLyEFcpMlPCgGGFW6IUU/72Mj0zW4/WKAtBqZLfpKr4xFNVxjTNUr9ZDrgJxfS2hbKCpjfQopkcvcWVXjsdWD52W17/f90/3+262XdHzSPXoDwcO5HaH1LTS3SHFWk721nnC5tVyNdRo6t2DoWg/aMVempCevcmSyNE02MgwLW29qG4mYRc4p38NhnER++djkDKDO7LXHU95Iu89Pjf2rLf+Gh1ZZwfBaRjJ4blg7xr4Y1Fs+1tanHv/1nQx60ykGSJ3xDckRBiGu3bOMJIlQFMItNA9yTztvgbKLGgmhSpRSmUYndTtK+0aUEUJlXe9eHbFdDPkRZv3ex/wp5oJvOo99UbRjEDZqpa2VHPLQCzuY5zmXMXNjyKEteD+5Tgu0scnH3M3OQ+B99+MkxCgtTP23dPNEWunxWojnj319TYILL8RnzUEifKvbb4fDrNSiql9MKuBr33kZAI4lxpN239vdeQpRIhe56/I0NB2fRiJDVqZIK9twokBeZUir3G1FZrOKbYay716yVlC9zjGZoEpndTLOzA4rEnklPKvY/5qdwYdzHIyL2/1Zm5cTfIl6grMZsuMWm5v8ndXEvUmfOatWUzelqGAsGdtD2EzIcI88/3G1DlQ7sdrJvFkCU0++LstZWben2RXKJHnZOLHdNKH5rjx7dcw68zO3G00kWG1t2r8DHriOTSEPzHaCurwp8MQYqM/RljIF1QgvbQ2gg+USCCrwCOh2JF4a3AAb6Wx2KZt1sVYw7cnr75D5JrkFqCdGavzTHLPhba9H73rThzYWqHE52/+su9luOrHPAmf+N9pct4yZxDr/0wYUBCqTpyidwsN7n2iUvdWbRNSLvn0bbtj3rJTuKAbmXQPmKvAWFv18D2+79u8PvijPgEsjxHZHmPGdZm6X87QoD3utg3jin18+lhDfyn1vt56z+3UWojR7eGpxTStdepNWGbJKN1LPRaHdilKgN0ixvjuCqCSCEFjsRkjazOwQZJObhGvtaLOAj5rQWT2FAGAQvoVSh9VOjbUU7WtM0lozJZj1lH5KER5ziDYmQwB17aX52znUlU5asbfq98j3LVbOinFrCKh7HkPVVmHAdDarjhsHpuylfl8K0KVHUrldjeo4oY4pKlnWVpoal5WDXMy1kADagnKZ1eZnyMK6EYeJVdsNGPRxUdcIu0leQpkcg0oJlFXZ3J7PP0rykQAAIABJREFULmrMJh76OPt3mbLwWWUyoM25M2CoGIZ5HTTxgyf7OOSOcZe4iwGPWe92kXeQZWlXm4oxcO917HupVL3VZB37rmP1vg09fpuzzN1j7Jv1j3MU9WP870/jXoV936zx33JZHPlKk+RSCPGoHOH/fen/g1ACEQtNgX3o3Gva7+//bTe71rWTvgvOPs+2lVtbbB8ojmuLkw/mH2S9HsZBFrntplTKEmpY4Pqgh1KWWL6a43/5n+cwrFKkZYr16p/xn5/WG7sXIkMhS+Si1PE65TWUMF8Mvc+szhi1SUyFqFBWAkgUeKI9aD0BsNFRZ64ak7WNb+lSFWUsFz9z+GTSMbZ+P1CA5PiXfdIwHDAFHOtpsPafthjMrZ5L3Z+04N3ScJeOoXDw9dQU93o8fJe2qwuFKXty5Tq1G1YvgOsyocZxlYKAAmMKlXFX625REkrkRtj2ezWO4qBJ1n9lV2pjBvKgKVkakbeZ2iZNuN5Q4YDnnIdPQKG5oKuFxf7UvzXXeCbkoLwx4HVutMsudwJsX8u7ruwCCBLCVc4dnpnQ+Mu7CK3Y1Wd20DP8Ww/5tjD4b9otTuubuEtI8xcWQN2YpI4tm9mGcQScIQhCKFcDp59vm/FwxvDQ0n9z8DmdEZdCiFthC69ZeqXeyUbVDRWE+T0vm7ePr54PI+Ahni1+hOAKb8RrlOJ4ZncdP+jNNNxPjZR755rS93/7++vOKrVx5/Hksqb1mmJxIcDOaAjFBVhYAUEFxiuwoAQLS/z1MyO9245xCRemllVIAckkSlGZyU/ULfDMl8Q6dppfgf2uq9r1O4YCXA8C73vHhN5ijIMjCkLtAmUMdQayqdlztoGw899EqCeWCR70FIxbHz7jotO0apVn5dX3+pbC+Os0Fx3HPbfx3+ykrRq3C5tdbK+fsQXAFId43/utPRxo7N508DmO3aiO56kZl4z9ixm27/Z9Tjo1/gj7TIayqtCcnnQnLSaBJNEbLNiOUmrsA3C/WbeyWVAIAEzWnh/jdHCWoavd9o9hi7j3iWY97vu8j+Yh1sJ2jzt4VMwCrl6SawtcwRbf2yuydm+bxx64sBp7BV+cvcWHfa2Am32y3XuwV75eiO0W/X2vcJYwdVxVmjDT2n3J1gDWwmx+GgGzsUsr2v/7//kdgEkwLrXKMAlwCcYU3vbvHkClSt0/109w8OJrSknc3BnhRy/v6jiGPRYUwCQ4l1hebKHV4nqrL9MrVZhsw6yqXE9U8w4ABpO1etA33F/x3vpy9X9rJjLtF4txpECdnDQGn2BM9CLD9tkC9bQ7Rf26I7nVwsX/a3zc9n8D9gvHQY+01lP9Gd3Kh3GI10E1F1P7pcoX5gPVuPEXA4OQh3vDQtNq0yr1/rNmjR8Hnhwzd7gWlYBpsL1PWP2/XKKbq0jgtSXqZSv7G33Uu1IBHLYXep3hza13hXPv+XV5E4OuRbfjx63Aelav7XXudoiCbupiz5mb84Q5H/s+Z7oJRqPCvQ94Qs/A8F8vXMNPLzxw6GdxUia++9KdSCEKfG/raZR2x5OxbjZCCfzw+i6efHYdw7xEpx3g1Q/O4xWrnXpLMls/alv6Kb2jSrh8QxfyM2XEWAsoYwr/srmnNz03wl6LsKxrHZXeC5UtAMEh3/Xtqg8MD3lzDOBBc3GqV7HN6dxf09rvli2vqZmcALheB0fNYXcx+0f7cspv0+5QjVvstcEPcY06GteRid8r/+463cgm++wrfwG0S9q1cmI47Jpv7si03ztRH/Gg94kDHo16QvdEqiHBrDlS7qje+x6lJfbtaQxdF9vuRHobRFEvmuts4vq1/ASpRrcpr+OU26bR1nAHnhfP3B/Z8F2g4+bMxNHrd95cfjDzeduqrn0rdWvGe2sf38Ni1wf+4sC31JX3OP3c5g5QrtGKrSk3j28ukHRSV2mafvj3+zbpero+USE+ikshxLko8Mz2c8hF7iw72x9XKIHeXo4XN/agEokgAXKm8N0bN7FedNBtB662sZICwlix+vkSyWKBohTQlqj5oJgCD4CboxFs39ODPnb7txqfdPQd7odSQBAcPmm4+cw7zq1yHv2/z9T2UmM/ARLlCwSvnX9Nu9Cv23SWAh+b4K07kTsjyx6k7s3sLYqZSVay94/FvX0vK7NZ8vVNY1P+QX+7F9/3iMYl6VlOtWhp4ayzym2suy6t8S01/b49a1fp47osXKV0dr+C+xtm4ay88+MAlOdmZWCIVYleP4O05Uvmc1pbnsFit4V2K0JVKLetpIvN2zaP1sIzFQZO4NxIW+owg/sclNJJmyiat9t/1QG3wQ752CuYxzatbH9RAhO2OuC+fZ9ufZ4MrH49J/re9dM4nu+RgH62eclYRSjy0j12/JWXWov7Xv8suRRCvJVu45/WnzTxUO+CZ/riqioJzChwqMa3cr3YPrrTAgd4fIDWMKBSRydVAfsXhvVBjlq337mY7/qBtxOaceunOdXobBxlH6j2TZPeMfzf9q96fOvTs4v0rb77UNVuRH0fc5+jNlYYYHamkXbiVcqEkES9m42zSg8qAWpSv4/9V0Yj7ca5XPWXxSYXNewv5wWqFwLcuRNt+0MrtLWFxr33z7nXf9S8/P64t144KAVUUgKsApTXo5vZs/AEw/sy+I0jxjerYP5CwCxw/B2jkm6MiCXY3E1RKoUo5FhbaGO+G0FB79xVygqQNp7KrCa5LRCbY9xYI3nnzBoPcsaqs+rNgsh80tbm9rdZNJ8c7Ak07HI7v425u/1zsfOz6cPmxt5ee/USjcH3fuz7nvgLBOcNNcdyOuAfHwhL3bq2+XiToMoUkiDGeXIphPjprX/FoDwgXdd+R/jBAuFcKEdwkLV5IsE5eIHXvP+icdh7uojv5Rb4Utf8Tb99btbj/jVhfSS+SDWFC2gUHHvjOD58foGSL7Dj1BOSPbZ17zLvLOoXu91l37j9MrYkcMd3Vrdn5brneZsIgMFsI2jE1YmVH5OsLXTdxpC5FzOtmd1o6/deN0M0iqzroiW04kgrPOZcWf0aTsw967jZmpMBipl+17XlDMbqUizYxVG9JLNnZ1/YWWr282MMax3g2kpzlrHrlHYrQsbL+kYfT5D9cYVinqdXv3YjS3qs0U2965FZdrlSLV2PLcx9OgcGTjwV6koLd5ut3bW1Cp7wKX9/bKe3vsiivt/d2LTJ/d+UqtvN1uNb/+0viAMEEELWn4xdO3iLovPkUghxUd26QfehmnEaFfZvO8FnxRhsBVDjvCbZ7OG8scmWbsq4ZCIM7Jet8ctB3OK+5nGOJ30HOeTs9Tt+DCtQ4xFO1fh3/IgNe7khFnby8VskaleuvdUKqi8uOhGlTnyqy590fa62k6IohBSm/InVyTT+lOfX5domI/Y9uMl1vw/Ss0C52wii2cWq2dGK2/5M3q49fk/i5ojVFpe30++BlRe+dWabSChZexGauSv+45Qnhmbx4AkZvMeHOUdhdg1q1uh6S78DXgfu8ce/Fm+FL2DwFkz+ldS8z/MG+Isd77Ozdd1+4xb3u1vwsEbtt10E1fsYN1tZjl8L9ra5mTaGwxx+dzPuPfa+GWpxeWIWWnO3fsBtWG/uez9+e72oPT6HWOYXGnYJ39MEaVqK45a1+ddYLcqZNI0HQUG59VrtxWHe2Bvh81bz1u2JsUnJOHHdyknbYqopRLXH0533/mPX4ssax2suC6wdHwaBbvaA2hqz58eMaEf+BGtuC1zMVicXudaQioEF2iq11qK13pxHQtUCZXdcsj8rVemkJ6Wc29JtTTiW/GM/Axir0l8g+GV++vOpJ4sD/Shs3y3NR3qfQy0e3G2F2EoiVFzWouMsdZuhzF382G2ywLnrt845R4DQ/OQITb8E/dNsvGG6gIVuAw6OkEU60YuHCE0b1IDVn9NBYje+AcSdxFlX55yUSyHEAYIjH+NbpCexRH1Xz/jtBCZqEfty5dpG1P41+3IY/8V3rPmnsd8WhOeiqie7po1YuygBXW9Yu7x0RIzxABy1W1ILkWfloM7e9N169nc/o9OdibVKzYQa+p2dnDUX1Kt2zsCVOU8zPMJ1MKtfU6p6a8AxQ7IxUr6F5c4Fzb1xpbH/mdp/KPv3Qe5YAJAsgKhkQ7CdKKNpTbqRUY17Af8cvfOv53jfDVl/vvaefda/N+bOMoYVfi1oEYuc6FnBCewex6h7JdsOXBy1qAWMmw0XtKhxzhG5ZkEhIpvBbDKXA9doKGj0YPbFbHV5Fr3eyLzvcbEbT0K7c4XwTsYups5zzC6FEM8nXXDjovPdeHZicJMEr+N5+znk9tuwpi87aizMqdSta4jZIf8CxuVpVR2evB4w9o0p3sTkmJtAdR9c7XY0EyV4PTEGgesMZTuwcTNh2j7AnimKKAmQ56Vpq6ibxJSyctu1SaUblNgUWSsY9vi27KORJGXO242dqq0vIc1mFUoil0VDxH1Z8q1r/zWtu1C73HyhqRvkc9505QUsqF18ziqtXbZapALP6rJCZs7CeYdqYVRgfrtitFsxsqz0MpNNfamXjdz43W0K4LsWAycy3HT84u7zMglFzlqHtpbN67uxd+PuzwzeNefHNn0Le8yFbBc5vuXsFmBQphdABRMGxf75xft7fAHiPXI8Ztpej5CmxVim8thz9BPHbvUXJWh+fhgfJ/9xcNdq49F67QkXn8LYGBvvwfgz6/lUXzT1MQ6YUll9DSnm5TvY4yoGxlzgoo6DQ5nfa59MvS2qPk5nPcZwVAD+Z+qN232zr8BrVx8aP6Mz41IIsXCXYvNib7iMvH9PirWmJYwhfYHjuhPDzmHekDJAJ8B4W1Ox/V8vc5syh9D3c3jbu4G5+B2gYEtK7Le7nkprV6GbWIwI6MlNb3NYmhNWUEDpxe+g0HAzHnCedlKxrl5rncKznvwJy52dghHp2kp1MT0zduMrbwaT6GPcyQGLwHltBftWWSNxaWxZ0zwXaw1Z16l24fqfjT8pNy1KZvovB8bdGdQuTG6tNmvF2ceF4CxAxM1uOsbdubQwi7293LiRve/ruNV7oKu3KYb17d533jtOvRmCeYSsj7/f8t4fX8XY43xr3CXcHRAjtrjOUvZYRixY4702/3Yfjj8W7jXrZwkVQPz/7Z17kBzFnee/9eqe6RmNhIaReAjjXRkWW/bB2pw5xUYwBz4j7BEhW7BhfLZZWTa2OZ9xEI41MhCWTQQ2xoQJEwrsCAJYw+E4y4T8OIUM3rX2dHdC4XDwEIsWHKwWCMSg1yBpmNF0d3VV3h9ZmZXVD02Pprurevr7IdB0V3V3ZWVl1ff3++UvM8OgpoyJbzWo00Z1XO84MIxKMyxfpbB1BL/+k7a6Tz0hzMb7REu2ki275qlimd+p3l69zzDQYKEv8FAuVWoiB8rILFU6u0zsghDid8pTiVViqmnk1M4Ju7v1N/IPE4kPkujGCQGoWZ6NB5O0ItUnY+HywyAWY0DdpRAQyDtuQmqjAhi3U9ITUVapclbi7MvY8oUVxJZt9DP6gaieY4kzrr7i1UdP3sDqWHF/oyyTbVsIwqg+LBgPtapfT9gbxoMjsurjoTVa4hLennoYJBJHrDj0qTzReG1ZuypsbYi1maCkft/4bX3JEJ+PWpUmFGZYPZocIVomzhcVzFTC+DOIw+/VlVH9cPSOOAh8oQVd92XqELx5TlGEQm934NpGVMNy9bhZ7cNZavBMbAjqa2x6fkbYul43RfwOhpFlJb1qwwCq+d2a7XU8SfVfzfGqPVR1hvHsT8PDg3h7Yjr5u4nfUVGC6uPF5alb7sTxan+3VWHaRP+7fp6IRHQh8bdqm7k8asPvVP2t97nFS/px7Nh0w2Od2T/ckvNtlgUhxGcNjMh0dNTPnp63CGcY5TXKNTztaEYcD4V8H6zAAmAjjNaH1avYiCCa9StugNACFM0epm/OaIUa7RHKh/5k2UcY1t6ctg0MeHntOaj+xdiylt5AbH9H4p/wlCK5THxPeXJmCNsU9Wpxt7TIxB6hpftnhTFtkylMapIB9fCRS9pZUZ+woxNfHMuuWkBEzTeuhAI6KQbCNGjkzR6EIczQpzpPdW6JjFlAJxSph0Ug5KpWyouNr1hsZpjTDSYsfu3NJ7epvkrPyeu+TFfPrJRck1gtoiLD2rHwam8/MqbUEJehoTyOHT8JATWDXZiYTlbNC6+8PZMgrCAITY9Nep2OLRd0jz3xaJF3RB68FYu5Xp7QsmBHKywpo0AZKjWTjAhzAYgqrzlqPqE2GmUMOp6wxGi76m7QnigAYwm+5DFkJZpRG9OTPSr6MDk5E5UjNGbhEonPmpEPIZBsS+pfwwuW5ahKTItKjnpeN+Iyml5xdR3q+oJ57sk2D/09VL0WxrHN4wI1W4UuQeI4teWQ73NHXJRKvnGesTUvILByybtx9sBydIoFIcR/fPP5hiKcSQK56IMNwHXlw9yyzEaqvJK4iYSBiL5jI+966M/ltedgCTmrT0XEc2efKL4jF1gIVSdVbPVqi9nwoizL0slBptdhCxuw1MD4WCCtfh/H3ilCt3/501hUyKPPcROWt77Bon/VT2lb3LDu1VAEvdfQZONWjcOEptUrROyAa0GNztkwImLv0wZsC46wIGwVHod+KIcI4bgWiuV4RaowmgM8FEKuWhWWG3jJ8cOsGtmHa8EStvE6EsZEvSQ9Plmj0WsRf1aZIOoTqk4sWAggJ7mJk7jMdWxhlF0ZTrLsekIP86EqElcgvqiJaIdxnsYJ27aFMEyuM53wIHV/oBV5ZmarsYxxsFZ8r0CgWA4wVZR9+LZlodDnIp+L54QVugiNPTrd2lR9G55hTdITjGuU2Gb4nS3yHuvhHXHhl2ebhahJqiIX+l9je71z0nurvG3zPo6/l3hX1ZaN3zS7dYxnlSqTuVc+v+yqsjYTjYh/Y6CQx4zlJ8tsHK+TIgwsECEeLixJuwinRF1oAchxhRZgRVPi+kIuLtHoewJCho2j57JAgGIYoFQuJhqy6RGa4hf/VvSvgJw+z3iCxuWrXo0pSXwEiVuQsy5JA8GC7QAnRREzRainZqIs8j45dYDfvAHNcsc3mRrXaibxKGGVyTx2NIm8uZyf8sSC6hT4wDwnY1/00kPcJ2fBirJcoa1tWNCLl8hoQuThCCC0hZ5kQhiGQhgpXgiZzBOZEogjBfW8jbgWZ3vMx3VWKyQJYwRWXFdqEoooyQuWHS0lZxouSqjM5DOVJBVnZ4eAXAhFi3sI27Hg+xXD0zcNs7guk4kz5plHfk50SW1YKJZDvDNdgRAWABehAKangPxiD4N9uYQY6Cx8OzJ6bEt3GVSfCyzESUQivi9UAqBpyOl6teMwtlp9TUdJbEcvrepa5pKryf2u5cJ1jOVao++YIeszhxfh7benk9dK/SsLqVu9pbfHImQaDvI3qoWzfUZEluDwpTaQd732H0Q6BLK52nHDjfJM9dg7Sz1MIo82iPrSAAERRqHS6JmiX8NC3vN0/59jxcOxTkwX5YPeAiwznGoDfXk3KlocmpFOg7zRROSBxJMzVFmhxiv1sFOfkwVU35GfsbUVaptaqcOcSSs0luDk+NXoEWF44CrZx1EZzLpP1E6EEGUiE2BMoxSX1TgbkXyrN1j6pOMSxiIfb9d7LAuFQi5apaWBF4CE3WD8auuIw9HxHOgBKjLiYXjp+nXUp6u8ehVdMSfKUH28ejWyUIlko1yLOudl1mVC6JPX0LU99OdyqFgiCu2roT8WLKN/WGV0q+9aUTtRv2Nm6VZEgH969nX45YpsvbYS6hCTvo2/uHBpor87DOPzFZaIDCGhw8jSeIpD0NKAEA2upem5icQHRFV9WBYazKmczANQs3Xp4VGQY3U9y0XOycFzPOQcD0tnBlGcCZCzc+hz8rp7xHM8LeDVS7DalhT1eFgeyRoLQojfnjne1OeUnyTtSBEldViGwpqflTdHEAAzRQER2AhDNdWAhaVLPORyFsqBr5dQlA/HWGFty5bWseUg7+RweKICBA6CigeEDqzQRmjLpRAves9ilMMyipUS/MCXi6dHD0ftRBr3sxDQGbTxg8/SDzDPcxBWhMy6hbL6VQg6Guaj1lCOjIj4gWiMX4wsaSFE4qFhVz08PdtDzskhZ3vyoRG9l9s9Y3sOOcfTw4Y6QXVmdHXGbXVmrumFDQ8P4ujRd+LQeFW4NtkXaHh0Vd5c3B9XHRJOPvR1oFgnQImGx63X11ddflH1PfU71d6o2hKEgU7Mkn22FfhhgED48MMAYRhE/bpyeI4S8UCtQBbGeQjKcPBDH5Wyj7JfSaxQVj2eOnHNGr0zvFi/UITTD6hEQQsWICyUhYXjRSU88XhcB06U5GVHw6PM+wL6/jANreTSptX/Vxk65nbdhaEy5g2Jj65BdRKRul5m/EN9XmHZFsI6SyXWD6Ero8AYulaVCOfqvvPYQ5d5ADInwI1yArxI8OO+djV+Pva0E+WQbwxjN75GNfvQyDNPGjX6+1bik8nfrtmXeKcN6Wl3EMenTtYcU31ycX4I/W5fTT23iwUhxKuGL8L/Gd8TNV85CYPsc7N1GAuQ7VlZxYC6cNIqr7ZObUsm9hwrFmHZASynAj2ZoCVwvGSjD448HiLBtV0tOHIpMTkZREUE8AMfjldC6JXhWCehllJ0II38V09IYyII5SIVoYjGWNpCJkUJGyK0IEIbCOWNs2Jk2LCEI8s3SiYaHOhDaSaQYi0sIArJIfLYnQbWsW3ZWjBjQfUSQqve733lGLb/vzfw9gkfw0Me1o/+JVavOqsTlzzBnn0HsW3XfkxMljA8lMf60ZWJctT0Sc3BKRjIFXDS66L8g4xSLxQYhAH80Ec5rMAPfFTCCsphWQp3tE0tV1cJK9I4CCo6F+KpN17FjO/DipYpFbZcLzyXszCYG4iMBWk0CPjVeo56BoC5T4WcpYDHSXqe7UHNRiWzvI1ZqLTIufAcc1KWaAlCRLOJWdF49yiUHAogFNLoqQhf5npE5xlEr4MwQC5vY+pkERURyiQ2ZQhFiW/6s9GKcnLFKxkN0cZ9xRB+KOMRUeSoXr6DBUsncBrimDDcregcLR29UuesM+PteOYuM3SvkhzjGcLiIXqmQam7bXRZT5/CyTxOTjceorSsMIL/eNZfz+sYc2FBCPHivsUoeP3ww4oOv8lJFgI1/z109qiAMQZS/tW2qgCCyILXYT1UEuOWpNVtIxQyQ1P1v0DIB8vJsALhT0fNPGrWUWjZzYcol6MCCVsudCNsLCr0Y7Avh1JZ4OhxH2HFAUIXQeAAgSfFV9jRE0IW5vxzF+GCJcMIRFBXUAu5PNygkvBEk8KaMwQ23u9GWbCzsWffQfzPp15HuSLPZ2KyhJ/97mUA6KgY79l3ED/73ctROZBaOcjckRnpDk7X7zjjZPLaA0DOtfFfP3ZR4toLIaSQR6JfCcsoB/J9UvQD/b4iKvAN0TfFrhJFBfywgqIo6eVWAyP8PRd00qStumLchGCZIed+rw9OPqc9Vsd24UWZ7cqTVV5tznHhWB68yEhXK1XJ51yAiq4PGdXzo3ooBz7KYQmlii8No8BHKfBRiepLRUvk/0bWuwgjY8JHMeomMbOhT1kHCQ9eyr05lC2uj3iUgqfPVXru8nkmz113eTkuXNjas1dh+zOHF2HqRDmuWyN0b8NGIVeY0zWcLwtCiA+ePIhpX6b0y3wFW4uk6neFJRCEgU4W8UMfZZTjzGSdlKHCGfHcqUFoAaEFCEcmhgjAcWwMeP26DAICNmycLPl456SPIBBwbQdLBvNYVMjrsM/kyQoOHy2hXALybg4rz16K80aG4Fou/unZAwhKtd6XFfWLCuEAofz/8EEb7/rgipoQsBLYc5YvxbGJOitSNcFjT72MXc+PR145MHrJOfjcmosSn9m2a3/iAQgA5UqIbbv2d1QAs1IO0nlWrzoL/3bgeKKt/s0Hzqq57pZlwXOkQdrOx6vqb/cjcSuHFZSDsmEEJD39ePiWH4m+ErUKKkHkEYsAxaCEwD8p11b3LZwslSBCMWfRNxPMYo819uZdQ+hco5+53+vHovwiOZTNlqLv2kr0XHh2LtoWRQRtme8CAYRhgLKooFiZQTEooVQpyb9BGeWgLP+GPspBCX5QiesoNOoo6gbxo1EK8dSxoU6CDKsWCtGZ7Wa43vjrvuogrIQ6BK49+sgzv/CMlfjYX/yXNrWUWhaEEJ+RX4oBr4BABLF3G8rkFb9Sgc62jCbWj6o+GnNrSWvK9pB38uj3+tDn5JF3crAtB4ePT+Pfx0/IhCs7hGUHsC3gzMV96HOdxO9Ozfg4MSkQhi4AC5Wyg4migyVnD+HcpUNSMBe7yJ+XN4QzDvn+9sgUROgAgQOEtnwdOtEC4cn+1BOQIflGuPbs82/X47GnXsY/Pzeu34cC+r0pxhOT9cM6jba3i6yUg3SePfsOYve/HNRjaUMB7P6Xg3jPiiWpGGF6CKDtAMi35RgjI4tw+PCkTNpT/e+hFDAV3lei7weRtxt5+r5Qff7Kk5UCpz1bEaBYKUfjtuM+flP0mq0HlbinRN+x1Jhv+depyRL30Of0yaic7WrRdx1Xe75uFOJXfd1xlgS0910JA5RDKfCloBSJvY9yUNbdHuVKBU5OYKZY1vWY6OdHiFLAmbXmjJIolcRg2Zb2Zs2+iLyTQ7/Th4FcAQNeAf1uH1zLRUXIi1cOyihW5AU8XpqU/Syej6XLApyYKqESCLiujTMG81hU8GBHSVgFrx8D7gB2//tR+FM2hJ8HKjktpG9N9OPLG1ZHnmvjJKUzrKOYOEW/hcnwUHtu9F3Pjzfcbgrx8FC+rti1q1yNyEo5SOfp1WiIFnw4yDntGzGikshU6N03PNW4/z4KVwdxuNoXvhG29qN+70jco9eloIyTYgZBKU7sM73bZkQ/OS2lnTCElOgnho3ZDvJeDl7exdDgAE6e9BMz00lvWebpwCE2AAAQSElEQVQX/eWS89tWr/VYEEKcd/NYlB8Eov7fPqcPhVw/+uw+maFruYAFlAIfQdSQJsvv4OjM21GGchANMVLWm+wnLTh9yDmLce5gDoVzChjyBjCUH8Li/BCW5BdjSX4x8k5O96k++auddct3rAgsyg3Oeh7rR1fW9Hk5ljQsKkHcMHOujfWjK+dXaQ0IG7T/6u31ytrOcjUiK+UgnYfRkPaihc6x4cE77b78ZlALnihRNsPT5cAMV8eevq8T2nzdV51McpN9/EW/HPXhB9HwPgFvOlrMpYHovzk1jr/9q3VtPOMkC0KIC14BFy5ZqUMhavrAIPJ0p8MZBGFFhx9gAa7loOC5cHID6HP6kI/C0YVcAYPeQPx/bgAvvvIOfvOPr0dZuUWsHz0XF61aVlMO26ovZHaTWbr1+rwuv+QcvGfFklNmBbeSZs9BHb9T5WpEVspBOg+jIQsH27K14LcTFYpeurQfh46c0OF9PzC8/dDHMs41PXdybg4jhTMxWZqEH0oP1w/K0VxF0sv13D49hjXv5DGYS4rtoDeAAa9QEzbes+8g/seT/9ZUVm6z3mQjTtXn9cP/9jfNV8g8GL3knEQfsbm9mtWrahNj0iAr5SCdhdEQMlfU8NQ+rw8Fz0+7OJqmhXhqagrXX389fvrTn2LFihX4xS9+gcceewyWZeH9738/vvvd7yKXy7WzrA0pBz7emj6EUqUkM/ccD4vyi1Bw+zHgDWBRbgADhpfb7/Y1PcPMXPqh5muhZ6HPS/UDz5Y1TUjaMBpCFgpNCfHevXtxxx134LXXXgMAvPrqq3jooYewbds2DAwMYNOmTfj5z3+ODRs2tLGojck7Obx36QVwbQ+LvAEtvjln/obBXPqh5muhZ6XP63NrLqLwkq6A0RCyEGhKiLdu3YrNmzfjm9/8JgAgl8vhO9/5DgYHZQLShRdeiPHx+tm2nSDneLh45P1t+e25eLmna6GrmaFOVQZCSG8w20xxZOFhiTmMCL/yyivx6KOPYsWKFXrb22+/jeuuuw7f//73cdlll7WlkGnyv595A1t+uRclP55oI+85+O9/ezH+84fOa8vvm7TyWISQbNPu5w3JJvNK1jp06BC++MUv4tprr52zCE9MTOnl40yytjzVqnctwQ1X/1WNhbrqXUvmXc49+w7ioe3/2jCZaz7Hylo9diusx9bAemyOf9i+r8YoL/kB/mH7Pqx61xLWY4vodD3atoXh4cZDWE9biPfv348bb7wRn/3sZ7Fx48bT/ZmuoB39UGqO5FNlVHcqU5oQkg2ykidCOstpCfHU1BS+8IUv4JZbbsG6dZ0b9LyQqJchbcJ+YUJ6D46N7k1OS4ifeOIJHD16FA8//DAefvhhALL/+Otf/3pLC5cV2pE8cSoLl2MhCelNODa6N5mTEO/cKadw3LBhQ2pDlTpNu5bZa2T52hbwd1XLuBFCegOOje5N6q8+QDSnmmRjPqwfXYmcm6z+nGvjC2vfx5uOEEJ6iAUxxWU7aVfyBC1fQkg17YrAkWxDIZ6FdiZP1MvGzsJg/iyUgZBeJAvT3JLOw9D0LPyHlfVX4Wi0fT4oa1gJv7KG9+w72PJjZbkMhPQqHL7Um1CIZ+GF/RNz2j4f2tUf3W1lIKRXaRRp4/ClhQ2FeBY6aaFmwRrOQhkI6VUaJXFy+NLChkI8C520ULNgDWehDIT0KqtXnYW/+9hF+n4bHspzOGMPwGStWejkAPssDObPQhkI6WW4tGPvQSGehU4OM2rXseaSBT2XMjC7mhBC5s+clkFsJd2y+lK3ouqxelwiID3c+Ya72vW7WYPtsTWwHlsD67E1LJjVl0jraKdn2a5xiRzvSAghrYFCnDLtnkmnXVnQzK4mhJDW0DNCnNX+zEae5YP/61+xbdf+eZezXTODcbk2QtpDVp9VpH30xPClLM8WdSoPshXlbNe4RI53JKT1ZPlZRdpHTwhxVmeL2rPvIGzr1J+ZbznbNS6R4x0JaT1ZfVaR9tIToeks9mcqy7dO4ngNrVjpqV3DrSi8hLSOLD6rSPvpCY84i7NF1bN8G8F+V0J6gyw+q0j76QkhzmJ/ZrMWrmPJlZ7+/oHd2Hj3Tvz9A7vZX0TIAmX96Eo4Vd1VjgXmXixweiI03cnZsZqlUdZxNSGA//vCW6gEMobNhcIJWdhYtgUEIvmeLGh6QoiB7PVn1pvTuR5CQIuwghNnELIw2bZrf839XgkE7/cFTs8IcdZQN9XP//HPmC4Gc/4+kzcIWXgwWas36Xoh7ubB76tXnYVtu/aflhAzWkXIwoMT5fQmXZ2stRAGv5+updvMsCdCSHeRxcRS0n662iPu9oUH1IQejUR1eCiPkh9gaqZSd99cjtOtUQNCeoksJpaS9tPVQtzN/SmnmtDDXE6w0XKDzVrI7V5UghDSWrKWWEraT1cLcTf1pzz21MvY9fw4QiH7dz3XqZsxbVtITBU5Xwu526MGhBDSKdKKHna1ENcbApTF/pTHnnoZ//zcuH4fCqDk10/QCkWtpzofC7mbowaEENIp0owednWyVrcsPLDr+fHZPxTRam+eU+YRQsjspLngRld7xEB39Kc0m+HcDm++W6IGhBCSJmlGD7teiLuB2TKj29kfwSxMQgiZnTRzjijEHWD0knMSfcSKK/76HHxuzUVtP343RA0IISRN0oweUohbTHV29Oglsdg22k4IISRd0oweUohbSL3saPX+c2suovASQkiGSSt62HTW9NTUFNauXYsDBw4AAJ5++mlcc801uOqqq3Dfffe1rYDdRKPs6LlkTRNCCOktmhLivXv34tOf/jRee+01AECxWMRtt92GBx54ADt27MCLL76IXbt2tbOcXUGjhCzOC00IIaQRTQnx1q1bsXnzZixbtgwA8MILL+D888/HeeedB9d1cc011+DJJ59sa0G7gUYrInGlJEIIIY1oqo/4rrvuSrw/fPgwRkZG9Ptly5bh0KFDczrw8PBgw30jI4vm9FtZ4er/dD527Hm97vY0zqlb6zFrsB5bA+uxNbAeW0OW6vG0krWEqI21Wtbc3L6JiSmEdWK2IyOLcOTIO6dTrNS5bnQlZop+TXb0daMrO35O3VyPWYL12BpYj62B9dgaOl2Ptm2d0vk8LSFevnw5jh49qt8fPnxYh617HWZHE0IImQunNdf0xRdfjFdffRWvv/46giDA9u3bcfnll7e6bIQQQsiC57Q84nw+j7vvvhtf+9rXUCqVMDo6iquvvrrVZSOEEEIWPHMS4p07d+rXq1evxm9/+9uWF4gQQgjpJbp+Zq20FnImhBBCWkFXC3GaCzkTQgghreC0krWyQpoLORNCCCGtoKuFOM2FnAkhhJBW0NVC3GjB5k4s5EwIIYS0gq4W4vWjK5Fzk6fQqYWcCSGEkFbQ1claaS7kTAghhLSCrhZiIL2FnAkhhJBW0NWhaUIIIaTboRATQgghKUIhJoQQQlKEQkwIIYSkCIWYEEIISREKMSGEEJIiFGJCCCEkRSjEhBBCSIpQiAkhhJAU6fqZtRYae/Yd5JSdhBDSQ1CIM8SefQfxs9+9rNdYnpgs4We/exkAKMaEELJAYWg6Q2zbtV+LsKJcCbFt1/6USkQIIaTdUIgzxMRkaU7bCSGEdD8U4gwxPJSf03ZCCCHdD4U4Q6wfXYmcm7wkOdfG+tGVKZWIEEJIu2GyVoZQCVnMmiaEkN6BQpwxVq86i8JLCCE9BEPThBBCSIpQiAkhhJAUoRATQgghKUIhJoQQQlKEQkwIIYSkCIWYEEIISZHUhi/ZtnVa+0jzsB5bA+uxNbAeWwPrsTV0sh5nO5YlhBAdKgshhBBCqmBomhBCCEkRCjEhhBCSIhRiQgghJEUoxIQQQkiKUIgJIYSQFKEQE0IIISlCISaEEEJShEJMCCGEpAiFmBBCCEkRCjEhhBCSIqkJ8dTUFNauXYsDBw7U7NuyZQuuuOIKrFu3DuvWrcPjjz+eQgm7gy1btmBsbAxjY2O45557ava/9NJLuPbaa7FmzRrcfvvtqFQqKZQy+8xWj2yTzfHjH/8YH//4xzE2NoZHHnmkZj/bY3PMVo9sj3PjBz/4ATZt2lSzfXx8HJ/5zGdw9dVX46abbsL09HQKpQMgUuD5558Xa9euFatWrRJvvPFGzf4vf/nL4tlnn02hZN3F7t27xac+9SlRKpVEuVwWN9xwg/j973+f+MzY2Jh47rnnhBBCfOtb3xKPP/54GkXNNM3UI9vk7Pzxj38U119/vfB9X8zMzIgrrrhC7N+/P/EZtsfZaaYe2R6b5+mnnxaXXXaZuPXWW2v2felLXxLbt28XQgixZcsWcc8993S6eEIIIVLxiLdu3YrNmzdj2bJldfe/+OKLePDBB3HNNdfgzjvvRKlU6nAJu4ORkRFs2rQJuVwOnudh5cqVGB8f1/vffPNNFItFXHLJJQCA9evX48knn0yruJlltnoE2Cab4cMf/jAeffRRuK6LiYkJBEGAQqGg97M9Nsds9QiwPTbL8ePHcd999+ErX/lKzT7f9/GnP/0Ja9asAZBue0xFiO+66y5ceumldfdNT0/jve99L2699Vb86le/wuTkJB544IEOl7A7uOCCC/RD7bXXXsOOHTswOjqq9x8+fBgjIyP6/cjICA4dOtTxcmad2eqRbbJ5PM/D/fffj7GxMaxevRrLly/X+9gem+dU9cj22Dzf/va3ccstt2BoaKhm37FjxzA4OAjXlasBp9keM5esNTAwgAcffBDnn38+XNfFxo0bsWvXrrSLlWleeeUVbNy4Ebfeeive/e536+2izgqXlsW1TBvRqB7ZJufGzTffjD179uCtt97C1q1b9Xa2x7nRqB7ZHpvjl7/8Jc4++2ysXr267v4stcfMCfH4+DieeOIJ/V4IoS0WUsszzzyDDRs24Bvf+AY++clPJvYtX74cR48e1e+PHDnSsDug1zlVPbJNNsf+/fvx0ksvAQD6+/tx1VVX4c9//rPez/bYHLPVI9tjc+zYsQO7d+/GunXrcP/992Pnzp343ve+p/cvXboUU1NTCIIAQLrtMXNC3NfXhx/+8Id44403IITA448/jo9+9KNpFyuTvPXWW/jqV7+Ke++9F2NjYzX7zz33XOTzeTzzzDMAgF//+te4/PLLO13MzDNbPbJNNseBAwdwxx13oFwuo1wu4w9/+AM+9KEP6f1sj80xWz2yPTbHI488gu3bt+M3v/kNbr75Zlx55ZW47bbb9H7P83DppZdix44dANJtj5kxo2688UbcfPPN+MAHPoA777wTN910E3zfxwc/+EF8/vOfT7t4meShhx5CqVTC3Xffrbddf/312Llzp67Le++9F3fccQemp6fxvve9DzfccEOKJc4mzdQj2+TsjI6OYu/evfjEJz4Bx3Fw1VVXYWxsLHFvsz3OTjP1yPZ4+tx+++248sor8ZGPfASbN2/Gpk2b8JOf/ARnn302fvSjH6VSJkvUC5QTQgghpCNkLjRNCCGE9BIUYkIIISRFKMSEEEJIilCICSGEkBShEBNCCCEpQiEmhBBCUoRCTAghhKTI/wd/g6BYuYqJjQAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(8, 5))\n",
"ax.scatter('rvc_log', 'age',data=data_merged)\n",
" \n",
"for _ in range(100): # repeat 100 times\n",
" dms = data_merged.sample(frac=.5) # sample observations from the data\n",
" Y_ = dms['age'] # get the response variable\n",
" X_ = dms['rvc_log'] # get the independent variable\n",
" X_ = sm.add_constant(X_) # add constant used for estimating the intercept\n",
" \n",
" model_ = sm.OLS(Y_,X_) # instantiate the model\n",
" results_ = model_.fit() # fit the model\n",
" x = data_merged['rvc_log'] # get values for the x-axis\n",
" y = results_.params['const'] + (data_merged['rvc_log']*results_.params['rvc_log']) # y-axis value\n",
" ax.plot(x,y , '-g',alpha=.5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The values are not the same because we have a small sample and only ran a few iterations. However, it gives a more intuitive way of understanding what the p-values and confidence intervals of the coefficients mean. \n",
"\n",
"The \"bowtie\" shape is very common when plotting the outcome of a regression model: the model is fairly certain the line has to go through the mean but becomes more uncertain at the extremes because it lacks data.\n",
"\n",
"Instead of bootstrapping, you can compute the confidence intervals directly with `statsmodels`. In the figure below we plot the predictions (red) together with the confidence intervals (green)."
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [],
"source": [
"pred = results_2.get_prediction(X_2) # get predictions\n",
"df_pred = pd.DataFrame(pred.conf_int()) # get confidence interval from predictions\n",
"df_pred['mean'] = pred.predicted_mean # get the predicted values"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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9KF2+PBh7N69G1dddVVpf39/P+LxeOlxPB7HmTNnGl7OZjdbPfKcrJ4sy/j2t7+Nvr4+XHHFFVi8eHFpH8/H6s1Ujzwfq/e1r30NX/ziFxGJRCbtGxkZQSgUgiTlVwP28nxsumStYDCIH/zgB1i9ejUkScJNN92Ep556yutiNbU33ngDN910E2677TacddZZpe3uFCtcCgLXMp3OdPXIc3JubrnlFvzmN7/BqVOnsGPHjtJ2no9zM1098nysziOPPIKlS5fiiiuumHJ/M52PTReIT548iUcffbT02HXd0hULTbZ371584hOfwJe//GVcd911FfsWL16MwcHB0uOBgYFphwM63Uz1yHOyOgcOHMBrr70GAPD7/diwYQP2799f2s/zsTqz1SPPx+rs3r0bzz77LLZs2YJvf/vbeOKJJ/DNb36ztL+7uxupVAq2bQPw9nxsukCsaRr+5m/+BseOHYPruti+fTve8573eF2spnTq1Cl8/vOfx/3334++vr5J+5cvXw5VVbF3714AwM6dO3HllVc2uphNb7Z65DlZnePHj+Ouu+5CLpdDLpfD448/jvXr15f283yszmz1yPOxOj/84Q+xa9cu/PznP8ctt9yCa665BnfccUdpvyzLuPTSS7F7924A3p6PTXMZ9elPfxq33HIL3va2t2Hbtm343Oc+B9M0cckll+CTn/yk18VrSg899BAMw8C9995b2nb99dfjiSeeKNXl/fffj7vuugvpdBrnn38+brzxRg9L3JyqqUeek7O76qqrsG/fPnzgAx+Az+fDhg0b0NfXV/G3zfNxdtXUI8/H+bvzzjtxzTXX4Nprr8XWrVtx++234x/+4R+wdOlS/N3f/Z0nZRLcqTrKiYiIqCGarmuaiIiokzAQExEReYiBmIiIyEMMxERERB5iICYiIvIQAzEREZGHGIiJiIg89P8BRENOWRuVsZUAAAAASUVORK5CYII=\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(8, 5))\n",
"ax.scatter('rvc_log', 'age',data = data_merged,alpha=.5) # plot logged rvs versus age\n",
"ax.plot(data_merged['rvc_log'], df_pred['mean'] , '-ro',alpha=.75) # plot the predictions\n",
"ax.plot(data_merged['rvc_log'], df_pred[0] , '-g',alpha=.75) # plot the lower bound of the confidence intervals\n",
"ax.plot(data_merged['rvc_log'], df_pred[1] , '-g',alpha=.75) # plot the upper bound of the confidence intervals"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Please notice that coeficients and their confidence intervals are estimates of the line not the actual data. These are, as you can see, well outside the range given by the predicted values and their confidence intervals."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `.summary()` method provides other statistics that help you understanding how well the model performs."
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
OLS Regression Results
\n",
"
\n",
"
Dep. Variable:
age
R-squared:
0.019
\n",
"
\n",
"
\n",
"
Model:
OLS
Adj. R-squared:
0.008
\n",
"
\n",
"
\n",
"
Method:
Least Squares
F-statistic:
1.791
\n",
"
\n",
"
\n",
"
Date:
Thu, 03 Feb 2022
Prob (F-statistic):
0.184
\n",
"
\n",
"
\n",
"
Time:
18:13:50
Log-Likelihood:
-197.73
\n",
"
\n",
"
\n",
"
No. Observations:
94
AIC:
399.5
\n",
"
\n",
"
\n",
"
Df Residuals:
92
BIC:
404.5
\n",
"
\n",
"
\n",
"
Df Model:
1
\n",
"
\n",
"
\n",
"
Covariance Type:
nonrobust
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
coef
std err
t
P>|t|
[0.025
0.975]
\n",
"
\n",
"
\n",
"
const
11.9857
0.799
15.010
0.000
10.400
13.572
\n",
"
\n",
"
\n",
"
rvc_log
0.4809
0.359
1.338
0.184
-0.233
1.194
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
Omnibus:
7.154
Durbin-Watson:
1.761
\n",
"
\n",
"
\n",
"
Prob(Omnibus):
0.028
Jarque-Bera (JB):
6.612
\n",
"
\n",
"
\n",
"
Skew:
0.573
Prob(JB):
0.0367
\n",
"
\n",
"
\n",
"
Kurtosis:
3.614
Cond. No.
10.2
\n",
"
\n",
"
Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: age R-squared: 0.019\n",
"Model: OLS Adj. R-squared: 0.008\n",
"Method: Least Squares F-statistic: 1.791\n",
"Date: Thu, 03 Feb 2022 Prob (F-statistic): 0.184\n",
"Time: 18:13:50 Log-Likelihood: -197.73\n",
"No. Observations: 94 AIC: 399.5\n",
"Df Residuals: 92 BIC: 404.5\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 11.9857 0.799 15.010 0.000 10.400 13.572\n",
"rvc_log 0.4809 0.359 1.338 0.184 -0.233 1.194\n",
"==============================================================================\n",
"Omnibus: 7.154 Durbin-Watson: 1.761\n",
"Prob(Omnibus): 0.028 Jarque-Bera (JB): 6.612\n",
"Skew: 0.573 Prob(JB): 0.0367\n",
"Kurtosis: 3.614 Cond. No. 10.2\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results_2.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lastly, we can see what happens when we remove the influential observations or outliers. The estimate for the slope is positive, with a p-value well below 0.05. The model is confident that the association is positive, and generally, knows better where to position the line. This is also reflected in the bootstrap: the lines are tighter packed than in the previous experiments and tend not to go in unpredictable directions."
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [],
"source": [
"Y_woo = data_wo_outliers['age']\n",
"x_woo = data_wo_outliers['rvc_log']\n",
"#X_woo = np.column_stack((x_woo, np.log(data_wo_outliers['index'])))\n",
"X_woo = sm.add_constant(x_woo)\n",
"model_3 = sm.OLS(Y_woo,X_woo)\n",
"results_3 = model_3.fit()"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data_wo_outliers.sort_values('rvc_log',inplace=True)\n",
"fig, ax = plt.subplots(figsize=(8, 5))\n",
"ax.scatter('rvc_log', 'age',data=data_wo_outliers)\n",
"beta = []\n",
"for _ in range(100):\n",
" dms = data_wo_outliers.sample(frac=.5)\n",
" Y_ = dms['age']\n",
" X_ = dms['rvc_log']\n",
" X_ = sm.add_constant(X_)\n",
" model = sm.OLS(Y_,X_)\n",
" results = model.fit() \n",
" beta.append(results.params['rvc_log'])\n",
"\n",
" ax.plot(data_wo_outliers['rvc_log'], results.params['const'] + (data_wo_outliers['rvc_log']*results.params['rvc_log']) , '-g',alpha=.5)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before we close this chapter, we need to discuss a more important statistic reported in the regression summary: the R-squared. This score varies between 0 and 1 and indicates how well our model fits the data, with 1 meaning a perfect fit. You'll notice that R-squared in the summary of `results_2` is lower compared to the output of `results_3` (after removing the outliers)."
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
],
"text/plain": [
"\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: age R-squared: 0.122\n",
"Model: OLS Adj. R-squared: 0.111\n",
"Method: Least Squares F-statistic: 10.98\n",
"Date: Thu, 03 Feb 2022 Prob (F-statistic): 0.00139\n",
"Time: 18:14:06 Log-Likelihood: -160.58\n",
"No. Observations: 81 AIC: 325.2\n",
"Df Residuals: 79 BIC: 329.9\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 7.8738 1.550 5.081 0.000 4.789 10.958\n",
"rvc_log 2.6244 0.792 3.313 0.001 1.048 4.201\n",
"==============================================================================\n",
"Omnibus: 2.637 Durbin-Watson: 2.106\n",
"Prob(Omnibus): 0.268 Jarque-Bera (JB): 1.865\n",
"Skew: 0.177 Prob(JB): 0.394\n",
"Kurtosis: 2.346 Cond. No. 19.3\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results_3.summary()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, the R-squared is helpful when comparing models, but we should not attach too much importance to this score: a good fit doesn't necessarily mean that we capture and understand the (causal) mechamism of interest accurately. Firstly, we could simple add more predictors and after while we can almost perfectly fit the data. For example instead of quadratic, a polynomial of order 2, we can fit our data with polynomial of order 20. This will fit the data perfectly but doesn't learn us anything about the relation between our variables of interests. Also the weird squigly lines don't make sense and will make very poor and blatantly unrealistic predictions (a negative percentage -200 for place with a logged rateable value of 2.5. This models overfits the data. Secondly, there is a distinction between prediction and inference. Being good at perdiction, doesn't imply that the model captures the causal mechanism (or the data generation process) adequately. More intelligents thoughts about the difference between prediction and inference are available in Statistical Rethinking or consult this blog post."
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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e4YNG+b9+tixY6xdu5aVK1d6j7XeZx5cf9ClpaUBjfFsdVa25ORkrrrqKgCam5v57W9/yx133BHwOM9GZ2UD+OMf/8ioUaMYO3ZsoMPrls7KFs73EalpdJHdbmfz5s3cfvvtfPTRR/Tr148XX3wx2GF1W3NzM0888QR/+MMf+PLLL7ntttt47LHHgh1Wlxw6dIi7776bxx57jIEDB3qPq+0s5Kwoobs0dXs6KptHXV0d9957LyNGjGD27NmBD7AbOirbwYMH2bhxIw8++GDwguumjsoWzvcRSRpdZDKZGDBgAOeddx4A06ZNY+fOnUGOqvsOHjyI0WhkzJgxANx8881s3rw5yFH5btu2bdx5553893//92k3zfT0dMrLy73fWyyWDpvoQtGZygaumtRtt93GiBEjOq1NhpozlW39+vVYLBauv/565s2b5y1nuDhT2cL6PhLsTpVQdsUVV5zWYdzU1KRecskl6r59+1RVVdW33npLffTRR4MR3llrr1zV1dXqxIkT1by8PFVVVfXDDz9Ub7/99mCE12VFRUXq+PHj1a+//rrDc6ZOnapu3bpVVVVVfeKJJ9S33347UOF1S2dls9vt6uzZs9XXX389wJF1ny/vm0d+fn5YdYR3VrZwvo9In4aP7r33Xn76059y3nnn8frrr/Pkk0/S1NRERkbGGYcKhrrW5Vq6dCnz589HVVVSU1N54YUXgh2eT373u9/R0tLSpnp/yy238Omnn3rLtmzZMp588kkaGhoYNWoUc+fODWLEvuusbCUlJezduxeHw8GGDRsAOPfcc8OixuHL+xaufClbuN5HZOc+IYQQPpM+DSGEED6TpCGEEMJnkjSEEEL4TJKGEEIIn0nSEEII4TNJGkKEgEWLFvG73/0u2GEI0SlJGkIIIXwmk/uE6IJvv/2WJUuWEBcXx969e3nooYeYN28eAH/961/59ttvWb58Of/4xz/4/e9/j0ajITk5mZdeeonMzEyfnmPr1q28/PLLNDU1odfrmT9/PpMmTcLhcPDyyy/z6aefkpiYyJgxY8jLy+O9997rySIL0YbUNITookOHDvGLX/yC3/72t3z00Ufe46tXr+amm25i//79LFu2jHfeeYePPvqIK6+8kjfeeMOna1dVVfHTn/6UJ554go8++oiXXnqJhQsXkp+fz9///nf27NnDP//5T1auXEl+fn5PFVGIDklNQ4guyszMJCsriz59+tDS0sKuXbuIjY2lsrKSiRMnsmLFCi699FJvzeLOO+/0+do7d+6kf//+3qXAhw0bxgUXXMDmzZv5/PPPmTlzJkajEXAtKim1DBFokjSE6KK4uDjAtbz6DTfcQG5uLnq9nhtuuAFFUdBqtW2WXm9ubqawsJAhQ4Z0em2n03naMVVVsdvt6HRt/1w1GmkoEIEnv3VCdMPs2bP59NNP2bBhA9dddx0A48eP55tvvqGsrAyAlStX8vOf/9yn640dO5ajR496l8k+dOgQW7Zs4eKLL2by5Ml8+OGHWK1W7HY7H3zwQc8USogzkJqGEN1gMpkYNWoUdru9zZarCxcu5J577vGe4+uKwSkpKbz66qv87Gc/o7m5GUVRWLp0KYMGDWLAgAEcPXqUWbNmERcXR9++fYmNje2xsgnRHlnlVogw8eWXX1JRUcHMmTMBeP755zEajSxcuDDIkYloIklDiAA4cuQICxYsaPexQYMGsXz58k6vUVpayqJFi6ioqMDhcDBixAieffZZEhMT/R2uEB2SpCGEEMJn0hEuhBDCZ5I0hBBC+EyShhBCCJ9J0hBCCOEzSRpCCCF8JklDCCGEz/4/Zn/W9wud188AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=\"rvc_log\", y=\"age\", \n",
" data=data_wo_outliers,\n",
" scatter_kws={\"s\": 10},\n",
" order=20,ci=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This detour aside, we close this notebook with computing R-squared by hand to give you an intuition of the meaning of this statistic."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`RMSE`: First we compute the root mean squared prediction error. For each data point, "
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [],
"source": [
"Y_hat = results_2.predict() # get predicted values\n",
"Y = data_merged['age'] # get observed values"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.9828586340496166"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" \n",
"var_pred = np.sum([(y - y_hat)**2 for y,y_hat in zip(Y,Y_hat)]) # difference between observed and predicted by the power of two\n",
"rmse = np.sqrt(var_pred / len(Y)) # sum all values, divide by the number of observations and take the square root\n",
"rmse "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`R-squared`: \n",
"- we compute the variation between observed and predicted values (`var_pred`) \n",
"- we compute the total variation by subtracting the observed value with the mean."
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"var_total = np.sum([(y - np.mean(Y))**2 for y,y_hat in zip(Y,Y_hat)] )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we divided `var_pred` by `var_total`. "
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"var = var_pred / var_total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To make sure the number ranges between 0 (minimum) and 1 (maximum), we simply calculate `1 - var`."
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.019"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"round(1 - var ,3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Fin."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}