Skip to content

Instantly share code, notes, and snippets.

@goerz
Created January 2, 2018 19:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goerz/f5f569e04e871af22d5f65f53e51b382 to your computer and use it in GitHub Desktop.
Save goerz/f5f569e04e871af22d5f65f53e51b382 to your computer and use it in GitHub Desktop.
Linear Regression Notes (Notebook)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Linear regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This note is to remind myself about some of the basic concepts of linear regression."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Bibliography**\n",
"\n",
"[1] James, Witten, Hastie, Tibshirani - Introduction to Statistical Learning"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:35.749243Z",
"start_time": "2018-01-02T19:38:34.439622Z"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import scipy.stats\n",
"import pandas as pd\n",
"import matplotlib.pylab as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:35.759968Z",
"start_time": "2018-01-02T19:38:35.751345Z"
}
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:35.768761Z",
"start_time": "2018-01-02T19:38:35.762208Z"
}
},
"outputs": [],
"source": [
"(blue, orange, red, green, purple, brown, pink, yellow, lightred, lightblue,\n",
"lightorange, lightgreen, lightpurple) = \\\n",
"('#377eb8', '#ff7f00', '#e41a1c', '#4daf4a', '#984ea3', '#a65628', '#f781bf',\n",
"'#d2d215', '#fb9a99', '#a6cee3', '#fdbf6f', '#b2df8a', '#cab2d6')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Creating some (noisy) toy data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:35.782997Z",
"start_time": "2018-01-02T19:38:35.771218Z"
}
},
"outputs": [],
"source": [
"def create_data(b0, b1, noise_sd, n=100):\n",
" \"\"\"Return a dataframe with `n` rows and columns 'X' and 'Y'\n",
" The dataframe will contain random data points that follow\n",
" ``Y = b1 * X + b0 + eps`` where the error `eps` is drawn from\n",
" a normal distribution with standard deviation `noise_sd`\n",
" \"\"\"\n",
" x = np.sort(10 * np.random.rand(n))\n",
" y = b1 * x + b0\n",
" noise = scipy.stats.norm(scale=noise_sd)\n",
" y += noise.rvs(len(x))\n",
" return pd.DataFrame({'X': x, 'Y': y})"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.107134Z",
"start_time": "2018-01-02T19:38:35.785315Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1149a5f60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"b0_true = 0.3\n",
"b1_true = 1.2\n",
"noise_sd = 2.0 # σ in the standard distribution\n",
"\n",
"data = create_data(b0_true, b1_true, noise_sd)\n",
"\n",
"def plot_data(data, *lines, show=True, **kwargs):\n",
" fig, ax = plt.subplots(**kwargs)\n",
" data.plot.scatter('X', 'Y', ax=ax)\n",
" for (b0, b1, label, color) in lines:\n",
" ax.plot(\n",
" np.linspace(0, 10, 5),\n",
" b0 + np.linspace(0, 10, 5) * b1,\n",
" color=color, label=label)\n",
" ax.legend()\n",
" if show:\n",
" plt.show(fig)\n",
" else:\n",
" return fig, ax\n",
" \n",
"plot_data(data, (b0_true, b1_true, 'true line', 'red'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Linear Regression with statsmodels"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.545984Z",
"start_time": "2018-01-02T19:38:36.109704Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/goerz/anaconda3/lib/python3.5/site-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n",
" from pandas.core import datetools\n"
]
}
],
"source": [
"import statsmodels.api as sm"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.554623Z",
"start_time": "2018-01-02T19:38:36.548403Z"
}
},
"outputs": [],
"source": [
"mod = sm.OLS(data['Y'], sm.add_constant(data['X']))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.589451Z",
"start_time": "2018-01-02T19:38:36.557567Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<table class=\"simpletable\">\n",
"<caption>OLS Regression Results</caption>\n",
"<tr>\n",
" <th>Dep. Variable:</th> <td>Y</td> <th> R-squared: </th> <td> 0.710</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Model:</th> <td>OLS</td> <th> Adj. R-squared: </th> <td> 0.707</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Method:</th> <td>Least Squares</td> <th> F-statistic: </th> <td> 239.8</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Date:</th> <td>Tue, 02 Jan 2018</td> <th> Prob (F-statistic):</th> <td>4.39e-28</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Time:</th> <td>14:38:36</td> <th> Log-Likelihood: </th> <td> -213.37</td>\n",
"</tr>\n",
"<tr>\n",
" <th>No. Observations:</th> <td> 100</td> <th> AIC: </th> <td> 430.7</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Df Residuals:</th> <td> 98</td> <th> BIC: </th> <td> 436.0</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Df Model:</th> <td> 1</td> <th> </th> <td> </td> \n",
"</tr>\n",
"<tr>\n",
" <th>Covariance Type:</th> <td>nonrobust</td> <th> </th> <td> </td> \n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <td></td> <th>coef</th> <th>std err</th> <th>t</th> <th>P>|t|</th> <th>[0.025</th> <th>0.975]</th> \n",
"</tr>\n",
"<tr>\n",
" <th>const</th> <td> 0.5642</td> <td> 0.396</td> <td> 1.424</td> <td> 0.158</td> <td> -0.222</td> <td> 1.350</td>\n",
"</tr>\n",
"<tr>\n",
" <th>X</th> <td> 1.1292</td> <td> 0.073</td> <td> 15.486</td> <td> 0.000</td> <td> 0.984</td> <td> 1.274</td>\n",
"</tr>\n",
"</table>\n",
"<table class=\"simpletable\">\n",
"<tr>\n",
" <th>Omnibus:</th> <td> 5.086</td> <th> Durbin-Watson: </th> <td> 2.139</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Prob(Omnibus):</th> <td> 0.079</td> <th> Jarque-Bera (JB): </th> <td> 3.690</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Skew:</th> <td> 0.332</td> <th> Prob(JB): </th> <td> 0.158</td>\n",
"</tr>\n",
"<tr>\n",
" <th>Kurtosis:</th> <td> 2.332</td> <th> Cond. No. </th> <td> 10.7</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<class 'statsmodels.iolib.summary.Summary'>\n",
"\"\"\"\n",
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: Y R-squared: 0.710\n",
"Model: OLS Adj. R-squared: 0.707\n",
"Method: Least Squares F-statistic: 239.8\n",
"Date: Tue, 02 Jan 2018 Prob (F-statistic): 4.39e-28\n",
"Time: 14:38:36 Log-Likelihood: -213.37\n",
"No. Observations: 100 AIC: 430.7\n",
"Df Residuals: 98 BIC: 436.0\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"const 0.5642 0.396 1.424 0.158 -0.222 1.350\n",
"X 1.1292 0.073 15.486 0.000 0.984 1.274\n",
"==============================================================================\n",
"Omnibus: 5.086 Durbin-Watson: 2.139\n",
"Prob(Omnibus): 0.079 Jarque-Bera (JB): 3.690\n",
"Skew: 0.332 Prob(JB): 0.158\n",
"Kurtosis: 2.332 Cond. No. 10.7\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
"\"\"\""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res = mod.fit()\n",
"res.summary()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.599773Z",
"start_time": "2018-01-02T19:38:36.592172Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"const 0.564158\n",
"X 1.129185\n",
"dtype: float64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res.params"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Manual Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.615026Z",
"start_time": "2018-01-02T19:38:36.602392Z"
}
},
"outputs": [],
"source": [
"def linear_regression(data):\n",
" \"\"\"Estimated b0_hat, b1_hat for the given data.\n",
"\n",
" See [1] Eq. (3.4)\n",
" \"\"\"\n",
" xbar = data['X'].mean()\n",
" ybar = data['Y'].mean()\n",
" delta_x = data['X'] - xbar\n",
" delta_y = data['Y'] - ybar\n",
" b1_hat = np.dot(delta_x, delta_y) / np.dot(delta_x, delta_x)\n",
" b0_hat = ybar - b1_hat * xbar\n",
" return b0_hat, b1_hat"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.665422Z",
"start_time": "2018-01-02T19:38:36.617996Z"
}
},
"outputs": [],
"source": [
"b0_hat, b1_hat = linear_regression(data)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.675568Z",
"start_time": "2018-01-02T19:38:36.669422Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.56415800312160069, 1.1291854795890905)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b0_hat, b1_hat"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.684242Z",
"start_time": "2018-01-02T19:38:36.678864Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.3, 1.2)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b0_true, b1_true"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.850907Z",
"start_time": "2018-01-02T19:38:36.687183Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c1f0c63c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_data(\n",
" data,\n",
" (b0_true, b1_true, 'true line (\"population regression line\")', red),\n",
" (b0_hat, b1_hat, 'fit (\"least squares line\")', blue)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Goodness of Fit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Standard Error"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Standard Error describes how close an estimated quantity is expected to be to the actual quantity.\n",
"\n",
"It is the standard deviation of the \"sampling distribution\" of a statistical quantity: If you take a large number of independent samples, each of size $n$, and calculate the statistical quantity for each sample individually, then the standard errror is the standard deviation of the distribution of those results. It is always $\\sigma/\\sqrt{n}$, where $\\sigma$ is the (possibly unknown) standard deviation of the original distribution. Standard errors go to zero as sample sizes go to infinity; standard deviations do not."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.858780Z",
"start_time": "2018-01-02T19:38:36.853625Z"
}
},
"outputs": [],
"source": [
"def residuals(data, b0, b1):\n",
" \"\"\"Array of residuals from the perfect linear relation ``Y=b1*X+b0``\"\"\"\n",
" Y_hat = b1 * data['X'] + b0\n",
" return data['Y'] - Y_hat"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.867731Z",
"start_time": "2018-01-02T19:38:36.861675Z"
}
},
"outputs": [],
"source": [
"def RSS(data, b0, b1):\n",
" \"\"\"Residual Sum of Squares\n",
" \n",
" How much the Y values vary around the predicted Y values \n",
" \"\"\"\n",
" return (residuals(data, b0, b1)**2).sum()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.875343Z",
"start_time": "2018-01-02T19:38:36.870415Z"
}
},
"outputs": [],
"source": [
"def TSS(data):\n",
" \"\"\"Total Sum of Squares\n",
" \n",
" How much the Y values vary around the mean Y value\n",
" \"\"\"\n",
" return ((data['Y'] - data['Y'].mean())**2).sum()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.882082Z",
"start_time": "2018-01-02T19:38:36.877614Z"
}
},
"outputs": [],
"source": [
"def RSE(data, b0, b1):\n",
" \"\"\"Residual standard error\n",
" \n",
" This is an estimate for the standard deviation σ of the true\n",
" distribution (noise_sd). The y-values in the sample deviate from the \n",
" from the true regression line by about RSE units on average.\n",
" \"\"\"\n",
" return np.sqrt(RSS(data, b0, b1) / (len(data)-2))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.894986Z",
"start_time": "2018-01-02T19:38:36.884993Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"417.67279110404758"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RSS(data, b0_hat, b1_hat)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.904952Z",
"start_time": "2018-01-02T19:38:36.898947Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2.0644532584109894"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RSE(data, b0_hat, b1_hat)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.913057Z",
"start_time": "2018-01-02T19:38:36.907079Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"2.0"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noise_sd"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:36.992202Z",
"start_time": "2018-01-02T19:38:36.916145Z"
}
},
"outputs": [],
"source": [
"def linear_regression_SE(data, sig):\n",
" \"\"\"Calculate the standard error for the estimate of b0, b1 in a\n",
" linear regression for the given data, assuming a standard deviation of\n",
" `sig` for the distribution of noise on Y. As `sig` is generally not known,\n",
" it should be estimated by the RSE.\n",
" \n",
" Note that the standard error is a property of the sampling only:\n",
" The `Y`-values do not enter!\n",
" \n",
" See [1] Eq. (3.8)\n",
" \"\"\"\n",
" n = len(data)\n",
" xbar = data['X'].mean()\n",
" delta_x = data['X'] - xbar\n",
" denom = np.dot(delta_x, delta_x)\n",
" se_b0_sq = sig**2 * (1.0 / n + xbar**2/denom)\n",
" se_b1_sq = sig**2 / denom\n",
" return np.sqrt(se_b0_sq), np.sqrt(se_b1_sq)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.004180Z",
"start_time": "2018-01-02T19:38:36.995917Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.39617022407597224, 0.072915570947221814)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"linear_regression_SE(data, RSE(data, b0_hat, b1_hat))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The 95% confidence intervals is $\\pm$ two standard errors (probability that the true value is in the range of the confidence interval)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Confidence Interval plot"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T06:05:40.021141Z",
"start_time": "2018-01-02T06:05:40.011587Z"
}
},
"source": [
"See https://stats.stackexchange.com/questions/85560/shape-of-confidence-interval-for-predicted-values-in-linear-regression/85565#85565m for the full explanation and derivation."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.018039Z",
"start_time": "2018-01-02T19:38:37.008279Z"
}
},
"outputs": [],
"source": [
"def regline_SE(data, sig, xgrid):\n",
" \"\"\"The standard error of the full regression line, assuming \n",
" a standard deviation of `sig` for the distribution of noise on Y. As\n",
" `sig` is generally not known, it should be estimated by the RSE.\n",
" \"\"\"\n",
" n = len(data)\n",
" return sig * np.sqrt(\n",
" (1.0 / n) + (\n",
" (xgrid - data['X'].mean())**2 /\n",
" ((data['X'] - data['X'].mean())**2).sum()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The 95% confidence band can be calculated as:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.035532Z",
"start_time": "2018-01-02T19:38:37.021066Z"
}
},
"outputs": [],
"source": [
"def regline_confidence_bands(data, b0_hat, b1_hat, xgrid, confidence=0.95):\n",
" \"\"\"Return two lines (arrays of y-values), the lower and upper boundary\n",
" of the confidence band\"\"\"\n",
" Y_hat = b0_hat + b1_hat * xgrid # the fitted line, on the given xgrid\n",
" n = len(data)\n",
" sig = RSE(data, b0_hat, b1_hat)\n",
" se = regline_SE(data, sig, xgrid)\n",
" t_minus, t_plus = scipy.stats.t(df=n-2).interval(confidence)\n",
" return Y_hat + t_minus * se, Y_hat + t_plus * se"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.248746Z",
"start_time": "2018-01-02T19:38:37.039111Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAm0AAAF3CAYAAAD3rnzeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJzs3Xl8VOXZ+P/PmSwzmey7IWGz7IQsEMIqICqgUFpcithWLSouj9rlKWprVdT2Vx+0dV+q1WJbfpan4ta6UaQU2Qwgiz6iQiArgYSQZSazz9zfPyYZkzBZyDaT5Hq/Xr5kZs6cc89JJnPNfZ/rujSlFEIIIYQQIrjpAj0AIYQQQgjRMQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6AQnahBBCCCH6gdBAD6A3JCUlqREjRgR6GEIIIYQQHdq3b99ppVRyR9sNyKBtxIgR7N27N9DDEEIIIYTokKZpxZ3ZTpZHhRBCCCH6AQnahBBCCCH6AQnahBBCCCH6gQF5TZs/TqeTsrIybDZboIcixKBmMBjIyMggLCws0EMRQoh+ZdAEbWVlZURHRzNixAg0TQv0cIQYlJRSVFdXU1ZWxsiRIwM9HCGE6FcGzfKozWYjMTFRAjYhAkjTNBITE2XGWwghumDQBG2ABGxCBAF5HwohRNcMqqAtkGpra3nuued6bf/r1q3j9ttvB+CFF17gz3/+c4/s12q1MnfuXNxuN0VFRcybN4+tW7dy/fXX98j+O2PNmjU89thj7W7z1ltv8cUXX/hu33///WzevLm3hxYwl112GbW1td3eT/Nz251z1vQ7sW7dOtasWQPAM888w5/+9Kduj1EIIYTXoLmmLdCagrbbbrvtrMfcbjchISE9dqxbbrmlx/b1yiuvcPnll/fo+HrDW2+9xZIlS5gwYQIADz30UI8fw+VyERravbdMT+wD4L333uv2Plrr6XO2cuVKZs2axY9+9KMe3a8QQgxWMtPWR+655x4KCwvJyclh9erVbN26lQsvvJBrrrmGSZMmUVRURGZmpm/7xx57zDdjUVhYyKJFi5gyZQoXXHABX375ZbvHaj57Mm/ePO6++27y8/MZM2YMH3/8MeANFFevXs3UqVPJysriD3/4g999rV+/nu985zsAhISEkJCQQHh4OLGxsb5j/fCHP2T+/PmMHj2al156CfBecL569WoyMzOZNGkSGzZsALwzMnPmzGHZsmVMmDCBW265BY/HA0BUVJTvuK+//rrf2byXXnqJqVOnkp2dzRVXXIHFYmHnzp288847rF69mpycHAoLC7n++ut5/fXXAfjoo4/Izc1l0qRJrFy5ErvdDng7ZzzwwANMnjyZSZMm+T2v69at46qrruLb3/42CxYsAODRRx/1nbcHHnjAt+3DDz/MuHHjuOSSS1ixYkWLn8Evf/lL5s6dy5NPPklVVRVXXHEFU6dOZerUqezYsQOA//znP+Tk5JCTk0Nubi4mk4mKigrmzJlDTk4OmZmZvp/fiBEjOH36NAC///3vyczMJDMzkyeeeAKAoqIixo8fz0033cTEiRNZsGABVqvV78+4SfNz1ta5aWhoYOXKlUydOpXc3FzefvttAN/vREREhO/naDQaGTFiBAUFBe0eVwghROcMypm22vvX4Pzi/3p0n2ETJhL30Jo2H3/kkUf4/PPPOXDgAOANXgoKCvj8888ZOXIkRUVFbT531apVvPDCC4wePZpPPvmE2267jS1btnR6bC6Xi4KCAt577z0efPBBNm/ezMsvv0xsbCx79uzBbrcza9YsFixY0CKjz+FwcOzYMZr6uA4dOpQ33ngDgJkzZ/q2O3ToELt376ahoYHc3FwWL17Mrl27OHDgAAcPHuT06dNMnTqVOXPmAFBQUMAXX3zB8OHDWbRoEW+88QZXXnllp17L5Zdfzk033QTAr371K15++WXuuOMOli5dypIlS87aj81m4/rrr+ejjz5izJgxXHvttTz//PP85Cc/ASApKYlPP/2U5557jscee4w//vGPZx1z165dHDp0iISEBDZt2sSRI0coKChAKcXSpUvZtm0bRqORjRs3sn//flwuF5MnT2bKlCm+fdTW1vKf//wHgGuuuYaf/vSnzJ49m5KSEhYuXMjhw4d57LHHePbZZ5k1axZmsxmDwcCLL77IwoULuffee3G73VgslhZj27dvH3/605/45JNPUEoxbdo05s6dS3x8PEeOHOG1117jpZde4nvf+x4bN27kBz/4QafOc1vn5je/+Q3z58/nlVdeoba2lvz8fC6++GJmzpzZ4neiSV5eHh9//DH5+fmd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2khN08KBq4F3+mJ8QgghhBDBptevadM07TVgHpCkaVoZ8AAwT9O0HLzLo0XAzY3bDgH+qJS6TCnl0jTtduBDIAR4RSnVs20MhBBCCCH6iV4P2pRSK/zc/XIb254ALmt2+z2g5ztjCyGEEEL0M9Iwvg899dRTjB8/nu9///u88847PPLIIwC89dZbLdoatfbEE0/w5z//GfB2BNi6dSvz5s3ztSVq3jy8J3Q0nv5i3rx5NJV+ueyyy6itre3SftasWcO6det85x68deGOHDnSU0MVQgghOiRBWx967rnneO+991i/fj1Lly7lnnu8TR7aC5JcLhevvPIK11xzTZ+NM1iCtrbaSnXFe++916k+qp116623snbt2h7bnxBCCNERCdr6yC233MKxY8dYunQpjz/+OOvWreP2229n586dvPPOO6xevZqcnJwW1fwBtmzZwuTJkwkN9a5kx8bGEh4eTkJCgt+6aX/961/Jz88nJyeHm2++GbfbDXiDjLy8PCZOnMgDDzzg2/6ee+5hwoQJZGVl8fOf/7zD8fz973/3Ve2fM2cOAFarlauvvpqsrCyWL1/OtGnTfDNcUVFRvue+/vrrXH/99QD84x//YNq0aeTm5nLxxRdz6tQpwDurtWrVKhYsWMC1116L2+1m9erVTJ06laysLP7whz8AUFFRwZw5c8jJySEzM5OPP/643fPfNBtZVFTE+PHjuemmm5g4cSILFizw9eQsLCxk0aJFTJkyhQsuuMDX6DwqKoqIiAjfuQe44IIL2Lx5c48GlkIIIUR7BmXD+MffP8zXJ9vuA9oVY86L5qeXtl136oUXXuCDDz7g3//+N0lJSaxbtw6AmTNnsnTpUpYsWcKVV1551vN27NjBlClTfLeffPJJAN54442ztj18+DAbNmxgx44dhIWFcdttt7F+/XquvfZafvOb35CQkIDb7eaiiy7i0KFDZGRk8Oabb/Lll1+iaRq1tbXExcW1O56HHnqIDz/8kPT0dN9y4/PPP4/RaOTQoUMcOnSoU0VlZ8+eze7du9E0jT/+8Y+sXbuW3/3udwDs27eP7du3ExERwYsvvkhsbCx79uzBbrcza9YsFixYwBtvvMHChQu59957cbvdWCyWDo/Z5MiRI7z22mu89NJLfO9732Pjxo384Ac/YNWqVbzwwguMHj2aTz75hNtuu40tW7b4uj0s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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c1f1c17f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plot_data(\n",
" data,\n",
" (b0_true, b1_true, 'true line (\"population regression line\")', red),\n",
" (b0_hat, b1_hat, 'fit (\"least squares line\")', blue),\n",
" show=False, figsize=(10, 6)\n",
")\n",
"xgrid = np.linspace(0, 10, 100)\n",
"lm, lp = regline_confidence_bands(data, b0_hat, b1_hat, xgrid)\n",
"ax.fill_between(\n",
" xgrid, lm, lp,\n",
" color='black', alpha=0.2, label='95% confidence band')\n",
"ax.legend()\n",
"plt.show(fig)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The confidence band should be interpreted as follows: There is a 95% probability that a fit based on any given sampling of the same distribution will land in the interval."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Testing the null hypothesis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The null-hypthesis is that Y and X have no reltionship, i.e. b1 = 0. The $t$-value is the b1 in units of the standard error:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.258211Z",
"start_time": "2018-01-02T19:38:37.251186Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"15.48620500285768"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t = b1_hat / linear_regression_SE(data, RSE(data, b0_hat, b1_hat))[1]\n",
"t"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The $t$-value follows a student distribution, and we can calculate a p-value (probability that $t$ has the given value, instead of 0)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.267411Z",
"start_time": "2018-01-02T19:38:37.260879Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"4.387286482055839e-28"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2 * scipy.stats.t(df=len(data)-2).sf(t) # = 1 - (cdf(t) - cdf(-t))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The $R^2$ statistic"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.275512Z",
"start_time": "2018-01-02T19:38:37.269976Z"
}
},
"outputs": [],
"source": [
"def R_sq(data, b0, b1):\n",
" \"\"\"R^2 in [0, 1] measures how well the variation in Y around the mean\n",
" matches the variation in Y around the predicted value.\n",
" \n",
" That is, how much of the variability can be explained by the sampling\"\"\"\n",
" return 1 - RSS(data, b0, b1) / TSS(data)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.287448Z",
"start_time": "2018-01-02T19:38:37.278501Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.70990686874758846"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"R_sq(data, b0_hat, b1_hat)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A value close to 1 means that the linear fit is very good"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Normality of the residuals"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A graphical way to check that the residuals are normal-distributed is to plot the quantiles of the residules against the quantiles of a normal distribution,\n",
"see https://stats.stackexchange.com/questions/321061/probability-that-residuals-are-normal/321071#321071"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.480570Z",
"start_time": "2018-01-02T19:38:37.290073Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1c1f1c14e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(\n",
" scipy.stats.norm().ppf(np.linspace(0, 1, len(data))),\n",
" residuals(data, b0_hat, b1_hat).sort_values() / RSE(data, b0_hat, b1_hat))\n",
"ax.set_title('QQ plot')\n",
"ax.plot(\n",
" np.linspace(-3, 3, 10), np.linspace(-3, 3, 10), color='black',\n",
" ls='dashed')\n",
"ax.set_xlabel('theoretical quantiles')\n",
"ax.set_ylabel('sample quantiles')\n",
"plt.show(fig)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fit with known slope"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.488513Z",
"start_time": "2018-01-02T19:38:37.483426Z"
}
},
"outputs": [],
"source": [
"b0_known_slope = np.mean(data['Y'] - b1_true*data['X'])"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.496571Z",
"start_time": "2018-01-02T19:38:37.491392Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.23577220342661306"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b0_known_slope"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.504172Z",
"start_time": "2018-01-02T19:38:37.499078Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0.3"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"b0_true"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"ExecuteTime": {
"end_time": "2018-01-02T19:38:37.708971Z",
"start_time": "2018-01-02T19:38:37.506666Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1149953c8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_data(\n",
" data,\n",
" (b0_true, b1_true, 'true line', red),\n",
" (b0_hat, b1_hat, 'fit', blue),\n",
" (b0_known_slope, b1_true, 'fit with known slope', orange),\n",
" show=True,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"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.5.4"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"toc_cell": false,
"toc_position": {},
"toc_section_display": "block",
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"oldHeight": 364,
"position": {
"height": "40px",
"left": "590px",
"right": "20px",
"top": "120px",
"width": "343px"
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"varInspector_section_display": "none",
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment