{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "hide_input": true, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib as mp\n", "import sklearn\n", "from IPython.display import Image, HTML\n", "import statsmodels.api as sm\n", "from sklearn import model_selection\n", "from sklearn import metrics\n", "\n", "import laUtilities as ut\n", "\n", "%matplotlib inline\n", "\n", "from statsmodels.sandbox.regression.predstd import wls_prediction_std\n", "from statsmodels.regression.linear_model import OLS\n", "import statsmodels.formula.api as smf\n", "\n", "import warnings\n", "\n", "np.random.seed(9876789)" ] }, { "cell_type": "markdown", "metadata": { "hide_input": true, "slideshow": { "slide_type": "slide" } }, "source": [ "# Regularization" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Today, we'll look at some additional aspects of Linear Regression.\n", "\n", "Our first topic is multicollinearity." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Multicollinearity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To illustrate the multcollinearity problem, we'll load a standard dataset.\n", "\n", "The Longley dataset contains various US macroeconomic variables from 1947–1962." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "```{note}\n", "A good reference for the following is \n", "https://www.sjsu.edu/faculty/guangliang.chen/Math261a/Ch9slides-multicollinearity.pdf\n", "and\n", "https://www.stat.cmu.edu/~ryantibs/datamining/lectures/17-modr2.pdf\n", "```" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GNPDEFLGNPUNEMPARMEDPOPconst
YEAR
1947.083.0234289.02356.01590.0107608.01.0
1948.088.5259426.02325.01456.0108632.01.0
1949.088.2258054.03682.01616.0109773.01.0
1950.089.5284599.03351.01650.0110929.01.0
1951.096.2328975.02099.03099.0112075.01.0
1952.098.1346999.01932.03594.0113270.01.0
1953.099.0365385.01870.03547.0115094.01.0
1954.0100.0363112.03578.03350.0116219.01.0
1955.0101.2397469.02904.03048.0117388.01.0
1956.0104.6419180.02822.02857.0118734.01.0
1957.0108.4442769.02936.02798.0120445.01.0
1958.0110.8444546.04681.02637.0121950.01.0
1959.0112.6482704.03813.02552.0123366.01.0
1960.0114.2502601.03931.02514.0125368.01.0
1961.0115.7518173.04806.02572.0127852.01.0
1962.0116.9554894.04007.02827.0130081.01.0
\n", "
" ], "text/plain": [ " GNPDEFL GNP UNEMP ARMED POP const\n", "YEAR \n", "1947.0 83.0 234289.0 2356.0 1590.0 107608.0 1.0\n", "1948.0 88.5 259426.0 2325.0 1456.0 108632.0 1.0\n", "1949.0 88.2 258054.0 3682.0 1616.0 109773.0 1.0\n", "1950.0 89.5 284599.0 3351.0 1650.0 110929.0 1.0\n", "1951.0 96.2 328975.0 2099.0 3099.0 112075.0 1.0\n", "1952.0 98.1 346999.0 1932.0 3594.0 113270.0 1.0\n", "1953.0 99.0 365385.0 1870.0 3547.0 115094.0 1.0\n", "1954.0 100.0 363112.0 3578.0 3350.0 116219.0 1.0\n", "1955.0 101.2 397469.0 2904.0 3048.0 117388.0 1.0\n", "1956.0 104.6 419180.0 2822.0 2857.0 118734.0 1.0\n", "1957.0 108.4 442769.0 2936.0 2798.0 120445.0 1.0\n", "1958.0 110.8 444546.0 4681.0 2637.0 121950.0 1.0\n", "1959.0 112.6 482704.0 3813.0 2552.0 123366.0 1.0\n", "1960.0 114.2 502601.0 3931.0 2514.0 125368.0 1.0\n", "1961.0 115.7 518173.0 4806.0 2572.0 127852.0 1.0\n", "1962.0 116.9 554894.0 4007.0 2827.0 130081.0 1.0" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from statsmodels.datasets.longley import load_pandas\n", "y = load_pandas().endog\n", "X = load_pandas().exog\n", "X['const'] = 1.0\n", "X.index = X['YEAR']\n", "y.index = X['YEAR']\n", "X.drop('YEAR', axis = 1, inplace = True)\n", "X" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: TOTEMP R-squared: 0.987\n", "Model: OLS Adj. R-squared: 0.981\n", "Method: Least Squares F-statistic: 156.4\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 3.70e-09\n", "Time: 09:10:53 Log-Likelihood: -117.83\n", "No. Observations: 16 AIC: 247.7\n", "Df Residuals: 10 BIC: 252.3\n", "Df Model: 5 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "GNPDEFL -48.4628 132.248 -0.366 0.722 -343.129 246.204\n", "GNP 0.0720 0.032 2.269 0.047 0.001 0.143\n", "UNEMP -0.4039 0.439 -0.921 0.379 -1.381 0.573\n", "ARMED -0.5605 0.284 -1.975 0.077 -1.193 0.072\n", "POP -0.4035 0.330 -1.222 0.250 -1.139 0.332\n", "const 9.246e+04 3.52e+04 2.629 0.025 1.41e+04 1.71e+05\n", "==============================================================================\n", "Omnibus: 1.572 Durbin-Watson: 1.248\n", "Prob(Omnibus): 0.456 Jarque-Bera (JB): 0.642\n", "Skew: 0.489 Prob(JB): 0.725\n", "Kurtosis: 3.079 Cond. No. 1.21e+08\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", "[2] The condition number is large, 1.21e+08. This might indicate that there are\n", "strong multicollinearity or other numerical problems.\n" ] } ], "source": [ "ols_model = sm.OLS(y, X)\n", "ols_results = ols_model.fit()\n", "with warnings.catch_warnings():\n", " warnings.simplefilter('ignore')\n", " print(ols_results.summary())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "What does this mean?\n", "\n", ">In statistics, multicollinearity (also collinearity) is a phenomenon in which two or more predictor variables in a multiple regression model are highly correlated, meaning that one can be linearly predicted from the others with a substantial degree of accuracy.\n", "\n", "(Wikipedia)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Condition Number" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The condition number being referred to is the condition number of the design matrix.\n", "\n", "That is the $X$ in $X\\beta = y$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Remember that to solve a least-squares problem $X\\beta = y$, we solve the normal equations\n", "\n", "$$X^TX\\beta = X^Ty.$$\n", "\n", "These equations always have at least one solution." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "However, the \"at least one\" part is problematic!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "If there are multiple solutions, they are in a sense all equivalent in that they yield the same value of $\\Vert X\\beta - y\\Vert$.\n", "\n", "However, the actual values of $\\beta$ can vary tremendously and so it is not clear how best to interpret the case when $X$ does not have full column rank." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "When does this problem occur? Look at the normal equations:\n", "\n", "$$X^TX\\beta = X^Ty.$$\n", "\n", "It occurs when $X^TX$ is __not invertible.__\n", "\n", "In that case, we cannot simply solve the normal equations by computing $\\hat{\\beta} = (X^TX)^{-1}X^Ty.$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "When is $(X^TX)$ not invertible?\n", "\n", "This happens when the columns of $X$ are linearly dependent --\n", "\n", "That is, one column can be expressed as a linear combination of the other columns.\n", "\n", "This is the simplest kind of __multicollinearity__." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Sources of Multicollinearity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "One obvious case is if $X$ has more columns than rows. That is, if data have __more features than there are observations__.\n", "\n", "This case is easy to recognize. \n", "\n", "However, a more insidious case occurs when the columns of $X$ happen to be linearly dependent because of the nature of the data itself." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "This happens when one column is a linear function of the other columns. \n", "\n", "In other words, one independent variable is a linear function of one or more of the others." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Unfortunately, in practice we will run into trouble even if variables are __almost__ linearly dependent. \n", "\n", "Near-dependence causes problems because measurements are not exact, and small errors are magnified when computing $(X^TX)^{-1}$. \n", "\n", "So, more simply, when two or more columns are __strongly correlated__, we will have problems with linear regression." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Consider an experiment with the following predictors:\n", " \n", "$$ x_1 = \\text{arm length} $$\n", "\n", "$$ x_2 = \\text{leg length} $$\n", "\n", "$$ x_3 = \\text{height} $$\n", "\n", "$$ \\dots $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Condition number is a measure of whether $X$ is __nearly__ lacking full column rank.\n", "\n", "In other words, whether some column is __close to__ being a linear combination of the other columns.\n", "\n", "In this case, the actual values of $\\beta$ can vary a lot due to noise in the measurements." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "One way to say that $X^TX$ is not invertible is to say that it has at least one zero eigenvalue. \n", "\n", "Condition number relaxes this -- it asks if $X^TX$ has a __very small__ eigenvalue (compared to its largest eigenvalue)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "An easy way to assess this is using the SVD of $X$.\n", "\n", "(Thank you, \"swiss army knife\"!)\n", "\n", "The eigenvalues of $X^TX$ are the squares of the singular values of $X$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "So the condition number of $X$ is defined as:\n", "\n", "$$\\kappa(X) = \\frac{\\sigma_{\\mbox{max}}}{\\sigma_{\\mbox{min}}}$$\n", "\n", "where $\\sigma_{\\mbox{max}}$ and $\\sigma_{\\mbox{min}}$ are the largest and smallest singular values of $X$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "A large condition number is evidence of a problem. \n", "\n", "* If the condition number is less than 100, there is no serious problem\n", "with multicollinearity.\n", "* Condition numbers between 100 and 1000 imply moderate to strong multicollinearity.\n", "* Condition numbers bigger than 1000 indicate severe multicollinearity." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Recall that the condition number of our data is around $10^8$. \n", "\n", "Let's look at pairwise scatterplots of the Longley data:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "hide_input": true, "slideshow": { "slide_type": "fragment" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.pairplot(X[['GNPDEFL', 'GNP', 'UNEMP', 'ARMED', 'POP']]);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can see __very__ strong linear relationships between, eg, __GNP Deflator__, __GNP__, and __Population.__" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Addressing Multicollinearity" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "There are some things that can be done if it does happen.\n", "\n", "We will review two strategies:\n", "\n", "1. Ridge Regression\n", "2. Model Selection via LASSO" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Ridge Regression" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The first thing to note is that when columns of $X$ are nearly dependent, the components of $\\hat{\\beta}$ tend to be __large in magnitude__." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Consider a regression in which we are predicting the point $\\mathbf{y}$ as a linear function of two $X$ columns, which we'll denote $\\mathbf{u}$ and $\\mathbf{v}$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "hide_input": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = ut.plotSetup(size=(6,3))\n", "ut.centerAxes(ax)\n", "u = np.array([1, 2])\n", "v = np.array([4, 1])\n", "alph = 1.6\n", "beta = -1.25\n", "sum_uv = (alph * u) + (beta * v)\n", "ax.arrow(0, 0, u[0], u[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.arrow(0, 0, v[0], v[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.text(sum_uv[0]-.5, sum_uv[1]+0.25, r'$\\mathbf{y}$',size=12)\n", "ax.text(u[0]+0.25, u[1]-0.25, r'${\\bf u}$', size=12)\n", "ax.text(v[0]+0.25, v[1]+0.25, r'${\\bf v}$',size=12)\n", "ut.plotPoint(ax, sum_uv[0], sum_uv[1])\n", "ax.plot(0, 0, '');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Via least-squares, we determine the coefficients $\\beta_1$ and $\\beta_2$:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "hide_input": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = ut.plotSetup(size=(6,3))\n", "ut.centerAxes(ax)\n", "u = np.array([1, 2])\n", "v = np.array([4, 1])\n", "alph = 1.6\n", "beta = -1.25\n", "sum_uv = (alph * u) + (beta * v)\n", "ax.arrow(0, 0, u[0], u[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.arrow(0, 0, v[0], v[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.arrow(0, 0, alph * u[0], alph * u[1], head_width=0.2, \n", " head_length=0.2, length_includes_head = True)\n", "ax.arrow(alph * u[0], alph * u[1], sum_uv[0] - alph * u[0], sum_uv[1] - alph * u[1], \n", " head_width=0.2, \n", " head_length=0.2, length_includes_head = True, color = 'r')\n", "ax.text(sum_uv[0]-2, sum_uv[1]+0.25, r'$\\beta_1{\\bf u}$+$\\beta_2{\\bf v}$',size=12)\n", "ax.text(u[0]+0.25, u[1]-0.25, r'${\\bf u}$', size=12)\n", "ax.text(alph * u[0]+0.25, alph * u[1]-0.25, r'$\\beta_1{\\bf u}$', size=12)\n", "ax.text(-2, 2.75, r'$\\beta_2{\\bf v}$', size=12)\n", "ax.text(v[0]+0.25, v[1]+0.25, r'${\\bf v}$',size=12)\n", "ut.plotPoint(ax, sum_uv[0], sum_uv[1])\n", "ax.plot(0, 0, '');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now consider if the columns of $X$ are __nearly dependent__: ie, they are almost in the same direction:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "hide_input": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = ut.plotSetup(size=(6,3))\n", "ut.centerAxes(ax)\n", "u = np.array([2, 1])\n", "v = np.array([4, 1])\n", "ax.arrow(0, 0, u[0], u[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.arrow(0, 0, v[0], v[1], head_width=0.2, head_length=0.2, length_includes_head = True)\n", "ax.text(sum_uv[0]-.5, sum_uv[1]+0.25, r'$\\mathbf{y}$',size=12)\n", "ax.text(u[0]+0.25, u[1]-0.25, r'${\\bf u}$', size=12)\n", "ax.text(v[0]+0.25, v[1]+0.25, r'${\\bf v}$',size=12)\n", "ut.plotPoint(ax, sum_uv[0], sum_uv[1])\n", "ax.plot(0, 0, '');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "If you imagine the values of $\\beta_1$ and $\\beta_2$ necessary to create $\\mathbf{y} = \\beta_1{\\bf u}$+$\\beta_2{\\bf v}$, you can see that $\\beta_1$ and $\\beta_2$ will be __very large__ in magnitude." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "This geometric argument illustrates why the regression coefficients will be very large under multicollinearity.\n", "\n", "Put another way, the value of $\\Vert\\beta\\Vert$ will be very large." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Ridge Regression" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ridge regression adjusts least squares regression by shrinking the estimated coefficients towards zero.\n", "\n", "The purpose is to fix the magnitude inflation of $\\Vert\\beta\\Vert$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To do this, Ridge regression assumes that the model has no intercept term --\n", "\n", "both the response and the predictors have been centered so that $\\beta_0 = 0$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Ridge regression then consists of adding a penalty term to the regression:\n", "\n", "$$ \\hat{\\beta} = \\arg \\min_\\beta \\Vert X\\beta - y \\Vert^2 + \\lambda \\Vert\\beta\\Vert^2.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "For any given $\\lambda$ this has a closed-form solution in which $\\hat{\\beta}$ is a linear function of $X$ (just as in ordinary least squares).\n", "\n", "The solution to the Ridge regression problem always exists and is unique, even when the data contains multicollinearity." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "Here, $\\lambda \\geq 0$ is a tradeoff parameter (amount of shrinkage).\n", "\n", "It controls the strength of the penalty term:\n", "* When $\\lambda = 0$, we get the least squares estimator: $\\hat{\\beta} = (X^TX)^{−1}X^T\\mathbf{y}$\n", "* When $\\lambda = \\infty$, we get $\\hat{\\beta} = 0.$\n", "* Increasing the value of $\\lambda$ forces the norm of $\\hat{\\beta}$ to decrease, yielding smaller coefficient estimates (in magnitude)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "For a finite, positive value of $\\lambda$, we are balancing two tasks: fitting\n", "a linear model and shrinking the coefficients." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "So once again, we have a __hyperparameter__ that controls model complexity:\n", "* hence, we typically set $\\lambda$ by holding out data, ie, __cross-validation.__" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Note that the penalty term $\\Vert\\beta\\Vert^2$ would be unfair to the different predictors, if they are not on the same scale. \n", "\n", "Therefore, if we know that the variables are not measured in the same units, we typically first perform unit normal scaling on the columns of $X$ and on $\\mathbf{y}$ (to standardize the predictors), and then perform ridge regression.\n", "\n", "Note that by scaling $\\mathbf{y}$ to zero-mean, we do not need (or include) an intercept in the model." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The general strategy of including extra criteria to improve the behavior of a model is called \"regularization.\"\n", "\n", "Accordingly, Ridge regression is also known as __Tikhanov regularization__." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Here is the performance of Ridge regression on the Longley data.\n", "\n", "We are training on half of the data, and using the other half for testing." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "hide_input": true, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "from sklearn.metrics import r2_score\n", "nreps = 1000\n", "\n", "from sklearn.preprocessing import StandardScaler\n", "scaler = StandardScaler()\n", "X_std = scaler.fit_transform(X[['GNPDEFL', 'GNP', 'UNEMP', 'ARMED', 'POP']])\n", "y_std = scaler.fit_transform(y.values.reshape(-1, 1))\n", "\n", "np.random.seed(1)\n", "\n", "vals = []\n", "for alpha in np.r_[np.array([0]), 10**np.linspace(-8.5, -0.5, 20)]:\n", " res = []\n", " for rep in range(nreps):\n", " X_train, X_test, y_train, y_test = model_selection.train_test_split(\n", " X_std, y_std,\n", " test_size=0.5)\n", " model = sm.OLS(y_train, X_train)\n", " results = model.fit_regularized(alpha = alpha, L1_wt = 0)\n", " y_oos_predict = results.predict(X_test)\n", " r2_test = r2_score(y_test, y_oos_predict)\n", " res.append(r2_test)\n", " vals.append([alpha, np.mean(res), np.std(res)/np.sqrt(nreps)])\n", "\n", "results = np.array(vals)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "hide_input": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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5581axbZ2dlkZWXx1VdfMWzYsHI/j6p/Xp63ja2HMnnusngiwgKdDsejUV2jyC8sJmFnstOheI0mHh/Xt29fevfuzSeffHLc9Ntvv53MzEzi4+N5/vnnGThwIACtW7fm0Ucf5fTTT+fss8+me/fuREREADB16lSWL19OfHw83bt3580336xw/bfddhsLFy4kMzOTGTNmMGHCBOLj4znjjDPYvHkzoaGhvP7665x33nkMHTqU5s2bl67PXVnrf/nll+nZsye9e/cmNDSU888/nwULFpR2Nvjyyy+59957j1tWv379uP766xk4cCCnn346N910E3379q3y9lV118o9aUz/ZQdX9o9hVFffHYpgYPsmhAb616vebTosQjUMi1DdTW2nKjMzk4YNG1JYWMgll1zCDTfcwCWXXFLj6zPGcOedd9K5c2fuu+++GltfbaTDInhXbkERF0xdRF5BMd//dRjhIb5Z2ylx0/u/s/lgBov+NspnetyV51SHRdAaTzX49NZBPpN0wOrGXNINuX379owdO7ZG1/f222/Tp08fevToQXp6OrfeemuNrk+pivzfD1vYmZTF85fH+3zSARgZF01iWg47kupHt2rtXFAHTZkyxavru++++7SGo3zGbztT+PeSP7j2jHYM6XTiiL2+aGRcFGA9rbpTdEOHo6l5WuPxoD43P6rqp/uT92TlFfLgF2toExnGxPNPHELdV8VEhtE5umG9uc6jicdNSEgIKSkperBQ1cIYQ0pKCiEhIU6HUi88890mEtNymHJFbxoE164GnVFdo1n2RypZedXzeClf5vg3IyJNgHeBc4Bk4BFjzH89lAsGngXGAaHAx8C9xpgClzLjgSeAtsBB4HpjzKKqxBMTE0NiYiJJSfXjzEPVvJCQEGJiYpwOo85bvC2Zj37dw01D2zOwfROnw6mykXFRvLVwJ0t3pDC6e3Onw6lRjiceYBqQDzQH+gDfisgaY8wGt3ITgf5AT8Af+Ab4B1aiQURGA89hJaZlwEndohwYGFh6F75SqnY4mlvA375YQ8eoBjx4bpzT4ZyU/u2a0DA4gPlbDtf5xONoU5uINAAuAx4zxmQaYxYDs4FrPRQfA0w1xqQaY5KAqcANLu9PBv5pjPnVGFNsjNlnjNlX059BKeW8p+Zs5ODRXKZc0bvWDqoWFODHkE5NWbD5cJ1v6nf6Gk8X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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = plt.figure(figsize = (6, 4)).add_subplot()\n", "ax.errorbar(np.log10(results[1:][:, 0]), results[1:][:, 1], \n", " results[1:][:, 2],\n", " label = 'Ridge Regression')\n", "ax.hlines(results[0,1], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dashed',\n", " label = 'Without Regularization')\n", "ax.hlines(results[0,1]+results[0,2], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dotted')\n", "ax.hlines(results[0,1]-results[0,2], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dotted')\n", "ax.tick_params(labelsize=12)\n", "ax.set_ylabel('$R^2$', fontsize = 14)\n", "plt.legend(loc = 'best')\n", "ax.set_xlabel('$\\log_{10}(\\lambda)$', fontsize = 14)\n", "ax.set_title('Ridge Regression Accuracy on Longley Data', fontsize = 16);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To sum up the idea behind Ridge regression: \n", "\n", "1. There may be many $\\beta$ values that are (approximately) consistent with the equations. \n", "2. However over-fit $\\beta$ values tend to have large magnitudes \n", "3. We apply shrinkage to avoid those solutions\n", "4. We do so by tuning $\\lambda$ via cross-validation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Model Selection" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Of course, one might attack the problem of multicollinearity as follows:\n", " \n", "1. Multicollinearity occurs because there are near-dependences among variables (features)\n", "2. The extra variables do not contribute anything \"meaningful\" to the quality of the model\n", "3. Hence, why not simply remove variables from the model that are causing dependences?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "If we remove variables from our regression, we are creating a new model.\n", "\n", "Hence this strategy is called \"model selection.\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "One of the advantages of model selection is __interpretability__: by eliminating variables, we get a clearer picture of the relationship between truly useful features and dependent variables." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "However, there is a big challenge inherent in model selection:\n", " \n", "in general, the possibilities to consider are exponential in the number of features.\n", "\n", "That is, if we have $n$ features to consider, then there are $2^n-1$ possible models that incorporate one or more of those features.\n", "\n", "This space is usually too big to search directly." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Can we use Ridge regression for this problem?\n", "\n", "Ridge regression does not set any coefficients exactly to zero unless $\\lambda = \\infty$ (in which case they’re all zero). \n", "\n", "Hence, Ridge regression cannot perform variable selection, and even though it performs well in terms of prediction accuracy, it does not offer a clear interpretation" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### The LASSO\n", "\n", "LASSO differs from Ridge regression __only in terms of the norm__ used by the penalty term." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "__Ridge regression:__\n", "\n", "$$ \\hat{\\beta} = \\arg \\min_\\beta \\Vert X\\beta - y \\Vert^2 + \\lambda \\Vert\\beta\\Vert_2^2.$$\n", "\n", "__LASSO:__\n", "\n", "$$ \\hat{\\beta} = \\arg \\min_\\beta \\Vert X\\beta - y \\Vert^2 + \\lambda \\Vert\\beta\\Vert_1.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "However, this small change in the norm makes a __big difference__ in practice.\n", "\n", "The nature of the $\\ell_1$ penalty will cause some coefficients to be shrunken to zero exactly!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "This means that LASSO can perform model selection: it can tell us which variables to keep and which to set aside." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "As $\\lambda$ increases, more coefficients are set to zero (fewer variables are selected)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "In terms of prediction error, LASSO performs comparably to Ridge regression, \n", "\n", "... but it has a __big advantage with respect to interpretation.__" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "hide_input": true, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "from sklearn.metrics import r2_score\n", "nreps = 200\n", "\n", "from sklearn.preprocessing import StandardScaler\n", "scaler = StandardScaler()\n", "X_std = scaler.fit_transform(X[['GNPDEFL', 'GNP', 'UNEMP', 'ARMED', 'POP']])\n", "X_std = np.column_stack([X_std, np.ones(X_std.shape[0])])\n", "y_std = scaler.fit_transform(y.values.reshape(-1, 1))\n", "\n", "np.random.seed(1)\n", "\n", "vals = []\n", "mean_params = []\n", "for alpha in np.r_[np.array([0]), 10**np.linspace(-5, -0.75, 10)]:\n", " res = []\n", " params = []\n", " for rep in range(nreps):\n", " X_train, X_test, y_train, y_test = model_selection.train_test_split(\n", " X_std, y_std,\n", " test_size=0.5)\n", " model = sm.OLS(y_train, X_train)\n", " results = model.fit_regularized(alpha = alpha, L1_wt = 1.0)\n", " y_oos_predict = results.predict(X_test)\n", " r2_test = r2_score(y_test, y_oos_predict)\n", " res.append(r2_test)\n", " params.append(results.params)\n", " vals.append([alpha, np.mean(res), np.std(res)/np.sqrt(nreps)])\n", " mean_params.append(np.r_[alpha, np.mean(params, axis = 0)])\n", "results = np.array(vals)\n", "mean_params = np.array(mean_params)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "hide_input": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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P//8s/08ABs2bGDUqFEMGTKEq666iqNHj9pf+89//vNJ11qp5srdQ4o9XlVV5olDunHz6DAKS8qZ+n7iScd/NzyEa0f0IPt4CffMTzrh2Md3ja7x9bp37463tzdpaWmsXLnS/mWdkJBAYGAgQ4YMwdfX115+zJgxXH755UycOJHf/e63pazLyspITEzk22+/5cknn+T777/njTfeAGDTpk1s376diy66iJ07d54UQ6Vnn32W119/nQ0bNtQYM8DixYu58sorAZg+fTp/+MMfOOuss0hLS2PChAls27aNJ598kvPOO49HH32UxYsXM2vWrFOe19F9993HjBkzALj55pv5+uuvmTRpEgA5OTn89NNPAPaE1L17d3vsb7zxBj/99BOhoaEEBASwatUqRIR3332X559/nhdffJG7776bNm3a8NBDDwGwdOlS+2tPmTKFf/3rX5xzzjnMmDGDJ5980t5MWdW1Vqq50qTigSprKytXruSPf/wj+/fvZ+XKlQQGBjJmzJhanePqq68GYPjw4aSkpACwYsUK7r//fgAGDBhAaGhojUmlNs4991wOHTpE586d7c1f33///QnNcceOHSMvL48VK1awcOFCAC6++GLat29/Wq/1448/8vzzz1NQUEB2djaDBw+2J5W4uLhqn/fLL7/w7rvv2msR6enpxMXFceDAAUpKSk55/0hubi45OTmcc451+9Qtt9zCtddeaz9e1bVWqrnSpHIKNdUs/H29ajwe1Nr3lDWTqlT2q2zatImIiAh69OjBiy++SEBAALfddlutztGyZUsAvLy8KCsrA7A3Fznz9vamoqLCvn0691T8+OOPtG7dmqlTpzJjxgxeeuklKioqSEhIwN/f/4SydXn9oqIi7r33XtauXUuPHj2YOXPmCeVat25d5bkPHDjA7bffzldffUWbNm0AuP/++/njH//I5ZdfzrJly6psajsdVV1rpZort/epqJONHTuWr7/+mqCgILy8vAgKCiInJ4eEhARGjz45SbVt25a8vKpu7TnR2WefzYcfWl1RO3fuJC0tjf79+xMWFsaGDRuoqKhg3759JCb+1qTn4+NDaWlpjef19/fnlVde4YMPPiA7O5uLLrqI119/3X68sgnqrLPO4j//+Q8AS5YssfdLdOnShcOHD5OVlUVxcTFff/31Sa9RmUA6duxIfn5+rUaElZaWct111/Hcc8/Rr18/+/7c3FyCg4MBmDt3rn1/ddcxMDCQ9u3b22s68+bNs9dalFIn0qTigSIjIzly5AijRo06YV9gYCAdO3Y8qfz111/PP//5T6Kjo+0d9VW59957KS8vJzIykri4OObMmUPLli0ZO3Ys4eHhREZG8tBDDzFs2DD7c+68806GDBlyyo76bt26ccMNN/DGG2/w2muvsXbtWoYMGcKgQYN4++23AXjiiSdYsmQJw4YN47///S/dunWjbdu2+Pj4MGPGDGJjY5k4cSIDBgw46fzt2rXjjjvuIDIykiuvvJKRI0ee8jquXLmSNWvW8MQTT9g76zMyMpg5cybXXnst48aNO+F6Tpo0iYULF9o76h3NnTuXhx9+mCFDhrBhwwZ7345S6kTNeo36ESNGGOf7ObZt28bAgQPdFFHTVlxcjJeXF97e3iQkJHDPPffUahBAU6CfK/eqHHBzJs3R6mQikmSMGVHVMe1TUQ0mLS2N6667joqKCnx9fXnnnXfcHZJSysU0qagG07dvX9avX+/uMJRS9Uj7VJRSSrmMJhWlVJNXWl5BRk4hhSXVzT+rXEWTilKqyUs/Wsi+o4VM+2CNJpZ6pknFBXQGVKU8V25BKUfyi2nl68XKPVncNmcNBSV6k2p90aTigSrv/K7K9OnTCQ4OPuEO9EOHDjFx4kSGDh3KoEGDuPRSa22yiooKHnjgASIiIoiMjGTkyJEkJycD1g2AU6ZMoXfv3vTu3ZspU6aQm+u8CKfFy8uLqKgoIiIimDRpEjk5Oa57s3U0Y8YMnWtL1eiTpH1UGOjVsTUvXTeU1cmaWOqTJpVGpKKigoULF9KjRw+WL19u3z9jxgwuvPBCNm7cyNatW+3rrHz88cdkZGTw66+/smnTJhYuXEi7du0AuP322+nVqxd79uxhz549hIeHn7BuiyN/f382bNjA5s2bCQoKsk9MWRfl5a5pgnjqqae44IILXHIu1fSUVxg+SEilbUtvWrf05qroEF66LorE5Gymvr+G48WaWFxNk0oj8uOPPxIREcE999zDggUL7PsPHDhASEiIfXvIkCH2/d26daNFC+ufOSQkhPbt27N7926SkpJ4/PHH7c+ZMWMGa9eurfGOfDhxivs9e/Zw8cUXM3z4cMaNG8f27dvt+0eNGsXIkSOZMWOGvea1bNkyzj33XCZPnkxkZCTl5eU8/PDDjBw5kiFDhhAfH2+P++yzz7bXjn7++WfKy8uZOnWqvdb18ssvAycu4rV06VKio6OJjIzktttuo7i4GLAWE3viiScYNmwYkZGR9jhV07dsx2HSsgvoEtDSvu/K6GBejotibUo2t2picTm9T6UGTy7awtaMY6cst/WAVaY2/SqDugfwxKTBZxTPggULuOGGG7jiiit47LHHKC0txcfHh9///vfExcXx+uuvc8EFF3DrrbfSvXt3rrvuOs466yx+/vlnzj//fG666Saio6PZunWrfX2RSpVNXFu2bKF3795Vvn55eTlLly7l9ttvB6wpXN5++2369u3L6tWruffee/nhhx+YPn0606dP54YbbrBP0VIpMTGRzZs3Ex4ezqxZswgMDGTNmjUUFxczduxYLrroIj7//HMmTJjAX/7yF8rLyykoKGDDhg3s37+fzZs3A5zUBFdUVMTUqVNZunQp/fr1Y8qUKbz11ls8+OCDgDVn2Lp163jzzTd54YUXePfdd8/o30A1LnNWptA1wI/2rX1P2H9FVDAtRHjw4w1MfT+R92+NoU1L/Tp0Ba2pNBIlJSV8++23XHnllQQEBBAbG8uSJdbClxMmTGDv3r3ccccdbN++nejoaDIzMwkJCWHHjh0888wztGjRgvPPP5+lS5dijEFETnqN6vZXLtTVoUMHsrOzufDCC8nPz2flypVce+21REVFcdddd3HgwAEAEhIS7FPDT548+YRzxcTE2KeaX7JkCR988AFRUVHExsaSlZXFrl27GDlyJO+//z4zZ85k06ZNtG3bll69erF3717uv/9+Fi9eTEBAwAnn3bFjB+Hh4faJI2+55ZYTmgh1evrmZ/fhfH7edYSbRvWkRRWf60lDu/Pq9VGsS8th6nuJ5GuNxSU0NdegtjWKhphXaPHixeTm5hIZGQlAQUEBrVq14rLLLgMgKCiIyZMnM3nyZCZOnMjy5cu55ppraNmyJZdccgmXXHIJXbp04YsvvmD69OmsX7+eiooKe9NYRUUFGzdurHJ+qso+ldzcXCZOnMgbb7zB1KlTadeu3WnP3eU4Rb0xhn/9619MmDDhpHLLly/nm2++4eabb+bhhx9mypQpbNy4ke+++4433niD//znP7z33nsnnKsmOj198/NBQgq+Xi24PqYnP+86UmWZiUO600KE+xes55b3Eplz60ja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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = plt.figure(figsize = (6, 4)).add_subplot()\n", "ax.errorbar(np.log10(results[1:][:, 0]), results[1:][:, 1], \n", " results[1:][:, 2],\n", " label = 'LASSO Regression')\n", "ax.hlines(results[0,1], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dashed',\n", " label = 'Without Regularization')\n", "ax.hlines(results[0,1]+results[0,2], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dotted')\n", "ax.hlines(results[0,1]-results[0,2], np.log10(results[1, 0]), \n", " np.log10(results[-1, 0]), linestyles = 'dotted')\n", "ax.tick_params(labelsize=12)\n", "ax.set_ylabel('$R^2$', fontsize = 14)\n", "#ax.set_xlim([-4, -1])\n", "plt.legend(loc = 'best')\n", "ax.set_xlabel('$\\log_{10}(\\lambda)$', fontsize = 14)\n", "ax.set_title('LASSO Accuracy on Longley Data', fontsize = 16);" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "hide_input": true, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "df = pd.DataFrame(mean_params, columns = ['$\\log_{10}(\\lambda)$', 'GNPDEFL', 'GNP', 'UNEMP', 'ARMED', 'POP', 'const'])\n", "param_df = df[['GNPDEFL', 'GNP', 'UNEMP', 'ARMED', 'POP', 'const']].iloc[1:].copy()\n", "param_df.index = np.log10(df.iloc[1:]['$\\log_{10}(\\lambda)$'])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "hide_input": true, "slideshow": { "slide_type": "fragment" }, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "param_df.plot()\n", "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), prop={'size': 16})\n", "plt.title('LASSO Coefficients vs $\\lambda$');" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can use another version of the module that can directly type formulas and expressions in the functions of the models.\n", "\n", "\n", "We can specify the name of the columns to be used to predict another column, remove columns, etc." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "hide_input": true, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "X['TOTEMP'] = y" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "hide_input": false, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: TOTEMP R-squared: 0.987\n", "Model: OLS Adj. R-squared: 0.981\n", "Method: Least Squares F-statistic: 156.4\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 3.70e-09\n", "Time: 09:11:41 Log-Likelihood: -117.83\n", "No. Observations: 16 AIC: 247.7\n", "Df Residuals: 10 BIC: 252.3\n", "Df Model: 5 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "Intercept 9.246e+04 3.52e+04 2.629 0.025 1.41e+04 1.71e+05\n", "GNPDEFL -48.4628 132.248 -0.366 0.722 -343.129 246.204\n", "GNP 0.0720 0.032 2.269 0.047 0.001 0.143\n", "UNEMP -0.4039 0.439 -0.921 0.379 -1.381 0.573\n", "ARMED -0.5605 0.284 -1.975 0.077 -1.193 0.072\n", "POP -0.4035 0.330 -1.222 0.250 -1.139 0.332\n", "==============================================================================\n", "Omnibus: 1.572 Durbin-Watson: 1.248\n", "Prob(Omnibus): 0.456 Jarque-Bera (JB): 0.642\n", "Skew: 0.489 Prob(JB): 0.725\n", "Kurtosis: 3.079 Cond. No. 1.21e+08\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", "[2] The condition number is large, 1.21e+08. This might indicate that there are\n", "strong multicollinearity or other numerical problems.\n" ] } ], "source": [ "mod = smf.ols(formula='TOTEMP ~ GNPDEFL + GNP + UNEMP + ARMED + POP', data=X)\n", "res = mod.fit() \n", "with warnings.catch_warnings():\n", " warnings.simplefilter('ignore')\n", " print(res.summary())" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "hide_input": false, "slideshow": { "slide_type": "skip" }, "tags": [ "hide-cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "=======================================================================================\n", "Dep. Variable: TOTEMP R-squared (uncentered): 1.000\n", "Model: OLS Adj. R-squared (uncentered): 1.000\n", "Method: Least Squares F-statistic: 1.127e+04\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 1.92e-22\n", "Time: 09:11:41 Log-Likelihood: -137.20\n", "No. Observations: 16 AIC: 280.4\n", "Df Residuals: 13 BIC: 282.7\n", "Df Model: 3 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "GNPDEFL 871.0961 25.984 33.525 0.000 814.961 927.231\n", "GNP -0.0532 0.007 -8.139 0.000 -0.067 -0.039\n", "UNEMP -0.8333 0.496 -1.679 0.117 -1.905 0.239\n", "==============================================================================\n", "Omnibus: 0.046 Durbin-Watson: 1.422\n", "Prob(Omnibus): 0.977 Jarque-Bera (JB): 0.274\n", "Skew: -0.010 Prob(JB): 0.872\n", "Kurtosis: 2.359 Cond. No. 2.92e+04\n", "==============================================================================\n", "\n", "Notes:\n", "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", "[2] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", "[3] The condition number is large, 2.92e+04. This might indicate that there are\n", "strong multicollinearity or other numerical problems.\n" ] } ], "source": [ "mod = smf.ols(formula='TOTEMP ~ GNPDEFL + GNP + UNEMP - 1', data=X)\n", "res = mod.fit()\n", "with warnings.catch_warnings():\n", " warnings.simplefilter('ignore')\n", " print(res.summary())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Flexible Modeling" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "To look at model selection in practice, we will consider another famous dataset." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "The Guerry dataset is a collection of historical data used in support of Andre-Michel Guerry’s 1833 \"Essay on the Moral Statistics of France.\"\n", "\n", ">Andre-Michel Guerry’s (1833) Essai sur la Statistique Morale\n", "de la France was one of the foundation studies of modern social science.\n", "Guerry assembled data on crimes, suicides, literacy and other “moral\n", "statistics,” and used tables and maps to analyze a variety of social issues\n", "in perhaps the first comprehensive study relating such variables.\n", "\n", "Wikipedia\n", "\n", ">Guerry’s results were startling for two reasons.\n", "First he showed that rates of crime and suicide remained\n", "remarkably stable over time, when broken\n", "down by age, sex, region of France and even season\n", "of the year; yet these numbers varied systematically\n", "across departements of France. This regularity\n", "of social numbers created the possibility to\n", "conceive, for the first time, that human actions in\n", "the social world were governed by social laws, just\n", "as inanimate objects were governed by laws of the\n", "physical world.\n", "\n", "Source: \"A.-M. Guerry’s Moral Statistics of France: Challenges for Multivariable\n", "Spatial Analysis\", Michael Friendly. Statistical Science 2007, Vol. 22, No. 3, 368–399." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
LotteryLiteracyWealthRegion
0413773E
1385122N
2661361C
3804676E
4796983E
\n", "
" ], "text/plain": [ " Lottery Literacy Wealth Region\n", "0 41 37 73 E\n", "1 38 51 22 N\n", "2 66 13 61 C\n", "3 80 46 76 E\n", "4 79 69 83 E" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lottery is per-capital wager on Royal Lottery\n", "df = sm.datasets.get_rdataset(\"Guerry\", \"HistData\").data\n", "df = df[['Lottery', 'Literacy', 'Wealth', 'Region']].dropna()\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: Lottery R-squared: 0.338\n", "Model: OLS Adj. R-squared: 0.287\n", "Method: Least Squares F-statistic: 6.636\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 1.07e-05\n", "Time: 09:11:41 Log-Likelihood: -375.30\n", "No. Observations: 85 AIC: 764.6\n", "Df Residuals: 78 BIC: 781.7\n", "Df Model: 6 \n", "Covariance Type: nonrobust \n", "===============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "-------------------------------------------------------------------------------\n", "Intercept 38.6517 9.456 4.087 0.000 19.826 57.478\n", "Region[T.E] -15.4278 9.727 -1.586 0.117 -34.793 3.938\n", "Region[T.N] -10.0170 9.260 -1.082 0.283 -28.453 8.419\n", "Region[T.S] -4.5483 7.279 -0.625 0.534 -19.039 9.943\n", "Region[T.W] -10.0913 7.196 -1.402 0.165 -24.418 4.235\n", "Literacy -0.1858 0.210 -0.886 0.378 -0.603 0.232\n", "Wealth 0.4515 0.103 4.390 0.000 0.247 0.656\n", "==============================================================================\n", "Omnibus: 3.049 Durbin-Watson: 1.785\n", "Prob(Omnibus): 0.218 Jarque-Bera (JB): 2.694\n", "Skew: -0.340 Prob(JB): 0.260\n", "Kurtosis: 2.454 Cond. No. 371.\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" ] } ], "source": [ "mod = smf.ols(formula='Lottery ~ Literacy + Wealth + Region', data=df)\n", "res = mod.fit()\n", "print(res.summary())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "__Categorical variables__\n", "\n", "Patsy is the name of the interpreter that parses the formulas.\n", "\n", "Looking at the summary printed above, notice that patsy determined that elements of Region were text strings, so it treated Region as a categorical variable. \n", "\n", "Patsy‘s default is also to include an intercept, so we automatically dropped one of the Region categories." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "__Removing variables__\n", "\n", "The “-” sign can be used to remove columns/variables. For instance, we can remove the intercept from a model by:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: Lottery R-squared: 0.338\n", "Model: OLS Adj. R-squared: 0.287\n", "Method: Least Squares F-statistic: 6.636\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 1.07e-05\n", "Time: 09:11:42 Log-Likelihood: -375.30\n", "No. Observations: 85 AIC: 764.6\n", "Df Residuals: 78 BIC: 781.7\n", "Df Model: 6 \n", "Covariance Type: nonrobust \n", "================================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "--------------------------------------------------------------------------------\n", "C(Region)[C] 38.6517 9.456 4.087 0.000 19.826 57.478\n", "C(Region)[E] 23.2239 14.931 1.555 0.124 -6.501 52.949\n", "C(Region)[N] 28.6347 13.127 2.181 0.032 2.501 54.769\n", "C(Region)[S] 34.1034 10.370 3.289 0.002 13.459 54.748\n", "C(Region)[W] 28.5604 10.018 2.851 0.006 8.616 48.505\n", "Literacy -0.1858 0.210 -0.886 0.378 -0.603 0.232\n", "Wealth 0.4515 0.103 4.390 0.000 0.247 0.656\n", "==============================================================================\n", "Omnibus: 3.049 Durbin-Watson: 1.785\n", "Prob(Omnibus): 0.218 Jarque-Bera (JB): 2.694\n", "Skew: -0.340 Prob(JB): 0.260\n", "Kurtosis: 2.454 Cond. No. 653.\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" ] } ], "source": [ "res = smf.ols(formula='Lottery ~ Literacy + Wealth + C(Region) -1 ', data=df).fit()\n", "print(res.summary())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "__Functions__\n", "\n", "We can also apply vectorized functions to the variables in our model:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: Lottery R-squared: 0.161\n", "Model: OLS Adj. R-squared: 0.151\n", "Method: Least Squares F-statistic: 15.89\n", "Date: Thu, 09 Nov 2023 Prob (F-statistic): 0.000144\n", "Time: 09:11:42 Log-Likelihood: -385.38\n", "No. Observations: 85 AIC: 774.8\n", "Df Residuals: 83 BIC: 779.7\n", "Df Model: 1 \n", "Covariance Type: nonrobust \n", "====================================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------------\n", "Intercept 115.6091 18.374 6.292 0.000 79.064 152.155\n", "np.log(Literacy) -20.3940 5.116 -3.986 0.000 -30.570 -10.218\n", "==============================================================================\n", "Omnibus: 8.907 Durbin-Watson: 2.019\n", "Prob(Omnibus): 0.012 Jarque-Bera (JB): 3.299\n", "Skew: 0.108 Prob(JB): 0.192\n", "Kurtosis: 2.059 Cond. No. 28.7\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" ] } ], "source": [ "res = smf.ols(formula='Lottery ~ np.log(Literacy)', data=df).fit()\n", "print(res.summary())" ] } ], "metadata": { "anaconda-cloud": {}, "celltoolbar": "Slideshow", "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.9.12" }, "rise": { "scroll": true, "theme": "beige", "transition": "fade" } }, "nbformat": 4, "nbformat_minor": 1 }