Skip to content

Instantly share code, notes, and snippets.

@gdscbot
Created November 18, 2023 03:17
Show Gist options
  • Save gdscbot/fbdc3aebf87127f9a47aa4a8770549a5 to your computer and use it in GitHub Desktop.
Save gdscbot/fbdc3aebf87127f9a47aa4a8770549a5 to your computer and use it in GitHub Desktop.
Linear_Regression_Workshop_1.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "eduw9yH3dAMz",
"outputId": "2cf3c559-a0ee-4143-c5ca-66a81be1f135",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: ISLP in /opt/conda/lib/python3.10/site-packages (0.3.21)\n",
"Requirement already satisfied: numpy<1.25,>=1.7.1 in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.24.4)\n",
"Requirement already satisfied: scipy>=0.9 in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.10.1)\n",
"Requirement already satisfied: pandas<=1.9,>=0.20 in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.5.3)\n",
"Requirement already satisfied: lxml in /opt/conda/lib/python3.10/site-packages (from ISLP) (4.9.2)\n",
"Requirement already satisfied: scikit-learn>=1.2 in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.2.2)\n",
"Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.2.0)\n",
"Requirement already satisfied: statsmodels>=0.13 in /opt/conda/lib/python3.10/site-packages (from ISLP) (0.13.5)\n",
"Requirement already satisfied: lifelines in /opt/conda/lib/python3.10/site-packages (from ISLP) (0.27.8)\n",
"Requirement already satisfied: pygam in /opt/conda/lib/python3.10/site-packages (from ISLP) (0.9.0)\n",
"Requirement already satisfied: torch in /opt/conda/lib/python3.10/site-packages (from ISLP) (2.1.1)\n",
"Requirement already satisfied: pytorch-lightning in /opt/conda/lib/python3.10/site-packages (from ISLP) (2.1.2)\n",
"Requirement already satisfied: torchmetrics in /opt/conda/lib/python3.10/site-packages (from ISLP) (1.2.0)\n",
"Requirement already satisfied: python-dateutil>=2.8.1 in /opt/conda/lib/python3.10/site-packages (from pandas<=1.9,>=0.20->ISLP) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas<=1.9,>=0.20->ISLP) (2023.3)\n",
"Requirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from scikit-learn>=1.2->ISLP) (3.1.0)\n",
"Requirement already satisfied: patsy>=0.5.2 in /opt/conda/lib/python3.10/site-packages (from statsmodels>=0.13->ISLP) (0.5.3)\n",
"Requirement already satisfied: packaging>=21.3 in /opt/conda/lib/python3.10/site-packages (from statsmodels>=0.13->ISLP) (23.1)\n",
"Requirement already satisfied: matplotlib>=3.0 in /opt/conda/lib/python3.10/site-packages (from lifelines->ISLP) (3.6.3)\n",
"Requirement already satisfied: autograd>=1.5 in /opt/conda/lib/python3.10/site-packages (from lifelines->ISLP) (1.6.2)\n",
"Requirement already satisfied: autograd-gamma>=0.3 in /opt/conda/lib/python3.10/site-packages (from lifelines->ISLP) (0.5.0)\n",
"Requirement already satisfied: formulaic>=0.2.2 in /opt/conda/lib/python3.10/site-packages (from lifelines->ISLP) (0.6.6)\n",
"Requirement already satisfied: progressbar2<5.0.0,>=4.2.0 in /opt/conda/lib/python3.10/site-packages (from pygam->ISLP) (4.2.0)\n",
"Requirement already satisfied: tqdm>=4.57.0 in /opt/conda/lib/python3.10/site-packages (from pytorch-lightning->ISLP) (4.65.0)\n",
"Requirement already satisfied: PyYAML>=5.4 in /opt/conda/lib/python3.10/site-packages (from pytorch-lightning->ISLP) (6.0)\n",
"Requirement already satisfied: fsspec[http]>2021.06.0 in /opt/conda/lib/python3.10/site-packages (from pytorch-lightning->ISLP) (2023.10.0)\n",
"Requirement already satisfied: typing-extensions>=4.0.0 in /opt/conda/lib/python3.10/site-packages (from pytorch-lightning->ISLP) (4.6.3)\n",
"Requirement already satisfied: lightning-utilities>=0.8.0 in /opt/conda/lib/python3.10/site-packages (from pytorch-lightning->ISLP) (0.9.0)\n",
"Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (3.13.1)\n",
"Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (1.11.1)\n",
"Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (2.8.8)\n",
"Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (3.1.2)\n",
"Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.105)\n",
"Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.105)\n",
"Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.105)\n",
"Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (8.9.2.26)\n",
"Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.3.1)\n",
"Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (11.0.2.54)\n",
"Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (10.3.2.106)\n",
"Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (11.4.5.107)\n",
"Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.0.106)\n",
"Requirement already satisfied: nvidia-nccl-cu12==2.18.1 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (2.18.1)\n",
"Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (12.1.105)\n",
"Requirement already satisfied: triton==2.1.0 in /opt/conda/lib/python3.10/site-packages (from torch->ISLP) (2.1.0)\n",
"Requirement already satisfied: nvidia-nvjitlink-cu12 in /opt/conda/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch->ISLP) (12.3.101)\n",
"Requirement already satisfied: future>=0.15.2 in /opt/conda/lib/python3.10/site-packages (from autograd>=1.5->lifelines->ISLP) (0.18.3)\n",
"Requirement already satisfied: astor>=0.8 in /opt/conda/lib/python3.10/site-packages (from formulaic>=0.2.2->lifelines->ISLP) (0.8.1)\n",
"Requirement already satisfied: interface-meta>=1.2.0 in /opt/conda/lib/python3.10/site-packages (from formulaic>=0.2.2->lifelines->ISLP) (1.3.0)\n",
"Requirement already satisfied: wrapt>=1.0 in /opt/conda/lib/python3.10/site-packages (from formulaic>=0.2.2->lifelines->ISLP) (1.15.0)\n",
"Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (2.28.1)\n",
"Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /opt/conda/lib/python3.10/site-packages (from fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (3.8.4)\n",
"Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (1.1.0)\n",
"Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (0.11.0)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (4.40.0)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (1.4.4)\n",
"Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (9.4.0)\n",
"Requirement already satisfied: pyparsing>=2.2.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib>=3.0->lifelines->ISLP) (3.1.0)\n",
"Requirement already satisfied: six in /opt/conda/lib/python3.10/site-packages (from patsy>=0.5.2->statsmodels>=0.13->ISLP) (1.16.0)\n",
"Requirement already satisfied: python-utils>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from progressbar2<5.0.0,>=4.2.0->pygam->ISLP) (3.8.1)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch->ISLP) (2.1.3)\n",
"Requirement already satisfied: mpmath>=0.19 in /opt/conda/lib/python3.10/site-packages (from sympy->torch->ISLP) (1.3.0)\n",
"Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (23.1.0)\n",
"Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (2.1.1)\n",
"Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (6.0.4)\n",
"Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (4.0.2)\n",
"Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (1.9.2)\n",
"Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (1.3.3)\n",
"Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (1.3.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (3.4)\r\n",
"Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (1.26.13)\r\n",
"Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->fsspec[http]>2021.06.0->pytorch-lightning->ISLP) (2022.12.7)\r\n"
]
}
],
"source": [
"!pip install ISLP"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XMUK3Ua3dFtG"
},
"source": [
"# Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 391
},
"id": "LqkqoWsic3lK",
"outputId": "dac62f23-e318-4866-b5b3-43bd5c0d2be6"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from scipy import stats\n",
"from matplotlib.pyplot import subplots\n",
"import statsmodels.api as sm\n",
"from statsmodels.stats.outliers_influence import variance_inflation_factor as VIF\n",
"from statsmodels.stats.anova import anova_lm\n",
"from ISLP import load_data\n",
"from ISLP.models import (ModelSpec as MS, summarize, poly)\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LEVc-q4hdLGF"
},
"source": [
"# Loading Dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 211
},
"id": "wNSQx3erdOdt",
"outputId": "13e9d601-52a3-479c-a879-cfbcf90c19e4"
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',\n",
" 'ptratio', 'lstat', 'medv'],\n",
" dtype='object')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Loading a dataset from ISLP\n",
"dataset = load_data(\"Boston\")\n",
"dataset.columns"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "WQ2RLrRodOD1"
},
"source": [
"# Base Simple Linear Regression to use for all the activities"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 211
},
"id": "abTi40hEdpXX",
"outputId": "e7dd35e0-c659-47f0-ea4a-97d1339f8694"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>const</th>\n",
" <th>lstat</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.0</td>\n",
" <td>4.98</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.0</td>\n",
" <td>9.14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.0</td>\n",
" <td>4.03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.0</td>\n",
" <td>2.94</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" const lstat\n",
"0 1.0 4.98\n",
"1 1.0 9.14\n",
"2 1.0 4.03\n",
"3 1.0 2.94"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# from the dataset we select a column to use for our x-axis\n",
"X = dataset['lstat']\n",
"X = sm.add_constant(X) # adding a constant term using lib, this constant term is needed for the linear regression model intercept\n",
"X[:4]"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 228
},
"id": "R7aJ-PKIdr9j",
"outputId": "5f89345e-6a0a-406f-d57b-ab4200b1d096"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>coef</th>\n",
" <th>std err</th>\n",
" <th>t</th>\n",
" <th>P&gt;|t|</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>const</th>\n",
" <td>34.5538</td>\n",
" <td>0.563</td>\n",
" <td>61.415</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lstat</th>\n",
" <td>-0.9500</td>\n",
" <td>0.039</td>\n",
" <td>-24.528</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" coef std err t P>|t|\n",
"const 34.5538 0.563 61.415 0.0\n",
"lstat -0.9500 0.039 -24.528 0.0"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# from the dataset we select a column to use for our y-axis (dependant variable)\n",
"y = dataset['medv']\n",
"model = sm.OLS(y, X) # Uses Ordinary Least Squares (OLS) regression from lib to fit a linear regression model (sm.OLS) with 'medv' as the dependent variable and 'lstat' (plus the constant term) as the independent variable\n",
"results = model.fit()\n",
"summarize(results)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 246
},
"id": "7IXPDrkzd0FT",
"outputId": "34f78522-263c-4173-bcac-b643484704bd",
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7fba76d0d6c0>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAHFCAYAAAAHcXhbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACKw0lEQVR4nO3deVwU9f8H8NeyAiKXciggCGjeV2aZR+atmZr+SDOv1MoONUXTvpka0KFmeZWpHZ6ZZ2CXVoqBWmpfSy2vzAPUDMQr8EJlef/+mO8su8seM7uzO7vL+/l4zAOZnZ35zMzKvPdzvD8aIiIwxhhjjHkoH7ULwBhjjDHmCA5mGGOMMebROJhhjDHGmEfjYIYxxhhjHo2DGcYYY4x5NA5mGGOMMebROJhhjDHGmEfjYIYxxhhjHo2DGcYYY4x5NA5mmMf75Zdf8H//93+oVasW/P39UaNGDbRp0wYvv/yy0465e/dupKam4t9//y332qJFi7BixQqnHdsRubm50Gg0dpXv6NGjSE1NRW5uruLlMtSxY0d07NhR//vNmzeRmpqK7OzsctumpqZCo9Hg0qVLdh1rxIgRSEhIMFqXkJCAESNG2LU/V8nNzUWvXr0QFhYGjUaD5ORki9tqNBqMHTvWdYWDfZ+V9evXo3HjxggICIBGo8HBgwf199eQO///YurhYIZ5tM2bN6Nt27YoKirC7NmzsXXrVixYsADt2rXD+vXrnXbc3bt3Iy0tzeOCGUccPXoUaWlpTg9mFi1ahEWLFul/v3nzJtLS0swGM86wadMmTJ8+3SXHsteECRPwyy+/YNmyZdizZw8mTJigdpGMyP2sXLx4EcOGDUOdOnXw/fffY8+ePahXrx6effZZ7Nmzx2hbb/3/xRxTSe0CMOaI2bNnIzExET/88AMqVSr7OD/55JOYPXu2iiVTFhGhuLgYAQEBahfF6Ro1aqTq8Vu0aKHq8aU4fPgwWrVqhX79+qldFEX89ddfuHv3LoYOHYoOHTro11epUgWxsbEqlox5Cq6ZYR7t8uXLiIiIMApkRD4+5T/ea9asQZs2bRAUFISgoCDce++9WLp0qf71bdu2oW/fvoiNjUXlypVxzz334PnnnzdqxkhNTcXkyZMBAImJidBoNNBoNMjOzkZCQgKOHDmCHTt26NcbNmMUFRVh0qRJSExMhJ+fH2rWrInk5GTcuHHDqJxi08CSJUvQsGFD+Pv7Y+XKlRavQ0JCAnr37o1NmzahWbNmqFy5MmrXro33339f0nX86aef0KVLFwQHB6NKlSpo27YtNm/erH99xYoVGDBgAACgU6dO+nOz9A35yJEj0Gg02Lhxo37db7/9Bo1Gg8aNGxtt+9hjj6Fly5b63w2bmXJzcxEZGQkASEtL0x/XtBnowoULGDRoEEJDQ1GjRg08/fTTKCwslHTupkybmbKzs6HRaLB27VpMnToVMTExCAkJQdeuXXH8+PFy78/MzESXLl0QEhKCKlWqoF27dti+fbukY589exZDhw5F9erV4e/vj4YNG2LOnDkoLS01KsvJkyfx3Xff6a+HlBqQjz76CPXq1YO/vz8aNWqEdevWldsmPz8fzz//PGJjY+Hn54fExESkpaWhpKTEaLvFixejefPmCAoKQnBwMBo0aIDXXnsNgPzPyogRI/DQQw8BAAYOHAiNRqO//6bNTLb+f7EKjBjzYM8++ywBoJdeeon27t1Ld+7csbjt9OnTCQAlJSXRxo0baevWrTR37lyaPn26fpvFixfTzJkz6euvv6YdO3bQypUrqXnz5lS/fn39vs+dO0cvvfQSAaCMjAzas2cP7dmzhwoLC2n//v1Uu3ZtatGihX79/v37iYjoxo0bdO+991JERATNnTuXMjMzacGCBRQaGkqdO3em0tJSfTkAUM2aNalZs2a0Zs0a+vHHH+nw4cMWzy0+Pp5q1qxJtWrVomXLltGWLVtoyJAhBIDeffdd/XY5OTkEgJYvX65fl52dTb6+vtSyZUtav349ffnll9S9e3fSaDS0bt06IiIqKCigGTNmEAD68MMP9edWUFBgsUzR0dH03HPP6X+fNWsWBQQEEAA6f/48ERHdvXuXQkJC6JVXXtFv16FDB+rQoQMRERUXF9P3339PAOiZZ57RH/fkyZNERJSSkkIAqH79+vT666/Ttm3baO7cueTv708jR460WDbR8OHDKT4+vty1HD58uP73rKwsAkAJCQk0ZMgQ2rx5M61du5Zq1apFdevWpZKSEv22n332GWk0GurXrx9lZGTQN998Q7179yatVkuZmZlWy1JQUEA1a9akyMhIWrJkCX3//fc0duxYAkAvvvgiEREVFhbSnj17KCoqitq1a6e/HsXFxRb3C4Di4uKoUaNGtHbtWvr666/pkUce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H+rXr4/PPvtM/1pCQgLS09OxatUqaDQajBgxwuq+0tLSUL16dYSEhOD555/HnTt39K8REWbPno3atWsjICAAzZs3xxdffKF//erVqxgyZAgiIyMREBCAunXrYvny5QCAxMREAECLFi2g0WjQ0cwwV/EaXb58GU8//TQ0Gg1WrFhh1MyUnZ2NkSNHorCwEBqNBhqNBqmpqVbPyRHcAVgFOp3tnC48CSRjzO0RATdvqnPsKlXKpy5X0NSpU/Hee++hbt26mDp1KgYNGoSTJ0+iUqVKOHToEHr06IE333wTS5cuxcWLFzF27FiMHTtWHxSY2rRpE8aPH4/58+eja9eu+PbbbzFy5EjExsaiU6dO2LdvH5566imEhIRgwYIFCAgIsFi27du3o3LlysjKykJubi5GjhyJiIgIvP322wCAadOmISMjA4sXL0bdunWxc+dODB06FJGRkejQoQOmT5+Oo0eP4rvvvkNERAROnjyJW7duAQD++9//olWrVsjMzETjxo3hZ2a0SVxcHPLy8lC/fn288cYbGDhwIEJDQ/HLL7/ot2nbti3mz5+P119/HcePHwcABAUF2X0/bCIvV1hYSACosLBQ7aIQEVF6OlFsLJHwV0BYYmOF9Yaysoy3sbRkZalxFoyxiubWrVt09OhRunXrVtnK69el/aFyxnL9uuSyDx8+nPr27WvxdQC0adMmIiLKyckhAPTpp5/qXz9y5AgBoGPHjhER0bBhw+i5554z2seuXbvIx8fH+PoYaNu2LY0aNcpo3YABA+jRRx/V/963b18aPny4zXMJCwujGzdu6NctXryYgoKCSKfT0fXr16ly5cq0e/duo/c988wzNGjQICIi6tOnD40cOdLs/sXzP3DggNVyEBGFhobS8uXL9b9nZWURALp69SoRES1fvpxCQ0Ot7sPs5+p/5Dy/uZnJheR06BWnNbD0xUOjAeLieBJIxhhzhmbNmun/Hf2/eWMKCgoAAL/99htWrFiBoKAg/dKjRw+UlpYiJyfH7P6OHTuGdu3aGa1r164djh07JrtszZs3R5UqVfS/t2nTBtevX8e5c+dw9OhRFBcXo1u3bkblW7VqFU6dOgUAePHFF7Fu3Trce++9eOWVV7B7927ZZXA33MzkIrY69Go0Qofevn2FJidxWoP+/YXXDN/Hk0AyxtxClSrA9evqHduJfH199f8W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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(dataset['lstat'], dataset['medv'], color='blue', label='Data points') # basically plots the blue plots on the graph\n",
"\n",
"lstat_line = np.linspace(dataset['lstat'].min(), dataset['lstat'].max()) # creates a list of numbers evenly spaced between min and max \n",
"\n",
"# IMPORTANT\n",
"# results.params['const'] retrieves the estimated coefficient (parameter) of the constant term from the linear regression model {hence B_0}\n",
"# results.params['lstat'] retrieves the estimated coefficient of the 'lstat' variable from the linear regression model {hence B_1}\n",
"# results.params['const'] + results.params['lstat'] * lstat_line computes the predicted 'medv' values based on the linear regression equation {hence B_1 * x}\n",
"# This line calculates the values for the 'medv' variable using the coefficients obtained from the regression results and the 'lstat' values in lstat_line\n",
"# It essentially represents the regression line or line of best fit based on the model's coefficients and the range of 'lstat' values\n",
"# RECALL: this is essentially the equation we just learnt y^ = B_0 + B_1*x\n",
"medv_line = results.params['const'] + results.params['lstat'] * lstat_line\n",
"\n",
"plt.plot(lstat_line, medv_line, color='red', label='Line of best fit') # plotting best fit by plotting the 'lstat_line' values along the x-axis against the 'medv_line' values along the y-axis\n",
"\n",
"plt.xlabel('LSTAT')\n",
"plt.ylabel('MEDV')\n",
"plt.title('Scatter plot with line of best fit')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple Linear Regression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 1:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['AtBat', 'Hits', 'HmRun', 'Runs', 'RBI', 'Walks', 'Years', 'CAtBat',\n",
" 'CHits', 'CHmRun', 'CRuns', 'CRBI', 'CWalks', 'League', 'Division',\n",
" 'PutOuts', 'Assists', 'Errors', 'Salary', 'NewLeague'],\n",
" dtype='object')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# this time we're gonna use another dataset from ISLP\n",
"# TODO: import the dataset Hitters (Hint -- look at the Loading Dataset section)\n",
"new_dataset = 0\n",
"new_dataset.columns"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>const</th>\n",
" <th>CRuns</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.0</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.0</td>\n",
" <td>321</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.0</td>\n",
" <td>224</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.0</td>\n",
" <td>828</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" const CRuns\n",
"0 1.0 30\n",
"1 1.0 321\n",
"2 1.0 224\n",
"3 1.0 828"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_2 = 0 # TODO: set the column CRuns as the independent variable along the x-axis\n",
"X_2 = 0 # add a constant term using lib, this constant term is needed for the linear regression model intercept\n",
"X_2[:4]"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>coef</th>\n",
" <th>std err</th>\n",
" <th>t</th>\n",
" <th>P&gt;|t|</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>const</th>\n",
" <td>87.9649</td>\n",
" <td>3.675</td>\n",
" <td>23.935</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>CRuns</th>\n",
" <td>0.0364</td>\n",
" <td>0.008</td>\n",
" <td>4.852</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" coef std err t P>|t|\n",
"const 87.9649 3.675 23.935 0.0\n",
"CRuns 0.0364 0.008 4.852 0.0"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_2 = 0 # TODO: set the column Hits as the dependent variable along the y-axis\n",
"second_model = 0 # TODO: Use Ordinary Least Squares (OLS) regression from lib to fit a linear regression model\n",
"second_results = 0 # TODO: replace\n",
"summarize(0) # TODO: replace"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO: calculate the linear regression and plot the graph"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise 2:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_3 = 0 # TODO: set the column Walks as the independent variable along the x-axis\n",
"X_3 = 0 # add a constant term using lib, this constant term is needed for the linear regression model intercept\n",
"X_3[:4]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"y_3 = 0 # TODO: set the column as the dependent variable along the y-axis\n",
"third_model = 0 # TODO: Use Ordinary Least Squares (OLS) regression from lib to fit a linear regression model\n",
"third_results = 0 # TODO: replace\n",
"summarize(0) # TODO: replace"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO: calculate the linear regression and plot the graph\n",
"# TODO: name the graph something unique"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1ZgEJWbPKG7u"
},
"source": [
"# Standard Error and Confidence Intervals"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "B5dEy_2RQHvz"
},
"source": [
"Standard Error"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "NNO2Y55eeUxj",
"outputId": "cff92025-00e8-4d42-9d07-3ca942498fed"
},
"outputs": [
{
"data": {
"text/plain": [
"const 0.563\n",
"lstat 0.039\n",
"Name: std err, dtype: float64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating S.E using lib\n",
"summarize(results)['std err']"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "Wg7spDInOqqR"
},
"outputs": [],
"source": [
"# Get the residuals\n",
"e_terms = results.resid"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "-pQEzW3dOqqS",
"outputId": "f9f26835-5cdd-45b2-ea04-38210906a142"
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = 0 # TODO - hint: number of observations\n",
"p = 0 # TODO - hint: number of parameters estimated (intercept and slope)\n",
"SSR = 0 # TODO\n",
"sigma_squared = 0 # TODO\n",
"sigma_squared"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4fo1GJwgOqqS",
"outputId": "52657cad-78db-4d11-84fb-e8cb9c870c61"
},
"outputs": [
{
"data": {
"text/plain": [
"(0, 0)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# y_hat = beta_0_hat + beta_1_hat*x\n",
"# Calculate the sum of squares of the differences from the mean of 'lstat'\n",
"lstat_mean = 0 # TODO\n",
"sum_squares = 0 # TODO\n",
"\n",
"# Calculate SE(beta_1_hat) - the standard error of the slope\n",
"SE_beta_1_hat = 0 # TODO\n",
"\n",
"# Calculate SE(beta_0_hat) - the standard error of the intercept\n",
"SE_beta_0_hat = 0 # TODO\n",
"\n",
"SE_beta_1_hat, SE_beta_0_hat"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zmojB4r6QMaX"
},
"source": [
"Confidence Intervals"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 112
},
"id": "oSQ-6lRJQN8P",
"outputId": "94d5c379-5016-4133-dcce-2c814d58f8a6"
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>const</th>\n",
" <td>33.448457</td>\n",
" <td>35.659225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lstat</th>\n",
" <td>-1.026148</td>\n",
" <td>-0.873951</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 1\n",
"const 33.448457 35.659225\n",
"lstat -1.026148 -0.873951"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Using the library\n",
"results.conf_int()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "fk0n12ABQick",
"outputId": "b8dccf8c-e9af-449b-9df3-629703e7cabb"
},
"outputs": [
{
"data": {
"text/plain": [
"((0, 0), (0, 0))"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating it manually\n",
"beta_0_hat = results.params[0]\n",
"beta_1_hat = results.params[1]\n",
"\n",
"beta_0_min_val = 0 # TODO\n",
"beta_0_max_val = 0 # TODO\n",
"\n",
"\n",
"beta_1_min_val = 0 # TODO\n",
"beta_1_max_val = 0 # TODO\n",
"\n",
"((beta_0_min_val, beta_0_max_val), (beta_1_min_val, beta_1_max_val))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Hypothesis Testing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Null Hypothesis"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# H₀: The data is normally distributed.\n",
"# H₁: The data is not normally distributed\n",
"# Assume that α=0.05. If the p-value is >0.05, it can be said that data is normally distributed.n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### t-statistic"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# calculate the t-statistic for beta_hat_1\n",
"t_stat_beta_1 = 0 # TODO: use formula (beta_hat_1 - 0) / SE(beta_hat_1)\n",
"t_stat_beta_1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### p-value"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# calculate the degrees of freedom\n",
"degrees_freedom = # TODO (Hint -- Two parameters intercept and slope)\n",
"\n",
"# Calculate the p-value for beta_1_hat\n",
"p_value_beta_1 = 0 # TODO: use formula p = 2×(1−cdf(∣t-statistic∣))\n",
"# HINT: look into stats.t.cdf() from the scipy lib\n",
"p_value_beta_1"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bM8yekHhSNOD"
},
"source": [
"# RSE, R^2 and F-Statistic"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2T4BAxZaXAps"
},
"source": [
"### RSE"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0IiynYXuSTrf",
"outputId": "7b4036e3-0b97-43df-8f29-94daf6b29df8"
},
"outputs": [
{
"data": {
"text/plain": [
"19472.381418326437"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# RSS using lib\n",
"np.sum(results.resid**2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zVyj5fW6UIl7",
"outputId": "d1e6f1b2-7a5d-4382-b546-891a98ebef39"
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating RSS manually\n",
"beta_0_hat = results.params[0]\n",
"beta_1_hat = results.params[1]\n",
"x = None # TODO\n",
"y = None # TODO\n",
"y_hat = None # TODO\n",
"RSS = 0 # TODO\n",
"RSS"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "fA1KtfVeWwqY",
"outputId": "0fe76997-1636-4d6c-e96f-51490d26a9fe"
},
"outputs": [
{
"data": {
"text/plain": [
"6.215760405398068"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# RSE using lib\n",
"np.sqrt(results.mse_resid)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0Jog7PgFWEKK",
"outputId": "cd6d891c-aa57-406f-fbd7-de820e5d413c"
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating RSE manually\n",
"n = 0 # TODO\n",
"RSE = 0 # TODO\n",
"RSE"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gY7jG9hqW88C"
},
"source": [
"### R-squared"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "J3k9JDcrWUhy",
"outputId": "5d336701-daa7-4d46-a18c-baead7b9aa13"
},
"outputs": [
{
"data": {
"text/plain": [
"0.5441462975864799"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# R-squared using lib\n",
"results.rsquared"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6Wke4rJLXTXM",
"outputId": "4bcb3fe6-8c05-4432-e14f-22a5c6091188"
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating R squared manually\n",
"\n",
"# Calculating TSS\n",
"y_mean = 0 # TODO\n",
"TSS = 0 # TODO\n",
"\n",
"# Calculating R-squared\n",
"r_squared = 0 #TODO\n",
"\n",
"r_squared"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c-yfznNtUIFm"
},
"source": [
"### F-statistic"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "OvUdArtTYpPO",
"outputId": "963526fc-3ba8-4257-829d-a5d5c5ff6266"
},
"outputs": [
{
"data": {
"text/plain": [
"601.6178711098955"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculating it manually\n",
"results.fvalue"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "GOadTApmYckv"
},
"outputs": [],
"source": [
"p = 0 # TODO - number of predictors including the intercept\n",
"n = 0 # TODO - number of observations"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Hm1deb0TYgT7",
"outputId": "d2c52527-433c-4c2b-9bee-0195e86f7998"
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f_value = 0 # TODO\n",
"f_value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Multiple Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# imports\n",
"from mpl_toolkits.mplot3d import Axes3D"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# from the dataset we select multiple columns to use for our x-axis (independent variables)\n",
"X = dataset[['lstat', 'age']]\n",
"X = 0 # add a constant term using lib, this constant term is needed for the linear regression model intercept"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO: set the dependent variable along the y-axis\n",
"summarize(results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Get the coefficients from the fitted model\n",
"coef = results.params\n",
"\n",
"# Generate coordinates for the plane using lstat and age values\n",
"lstat_vals = 0 # TODO: Use Ordinary Least Squares (OLS) regression from lib to fit a linear regression model, only 100 intervals\n",
"age_vals = 0 # TODO: Use Ordinary Least Squares (OLS) regression from lib to fit a linear regression model, only 100 intervals\n",
"lstat_vals, age_vals = np.meshgrid(lstat_vals, age_vals)\n",
"medv_vals = coef[0] + coef[1] * lstat_vals + coef[2] * age_vals"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Create a 3D plot\n",
"fig = plt.figure(figsize=(10, 8))\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"\n",
"# Plot the data points\n",
"ax.scatter(dataset['lstat'], dataset['age'], dataset['medv'], color='blue', label='Data points')\n",
"\n",
"# Plot the fitted plane\n",
"ax.plot_surface(lstat_vals, age_vals, medv_vals, alpha=0.5, cmap='viridis')\n",
"\n",
"# Set labels and title\n",
"ax.set_xlabel('LSTAT')\n",
"ax.set_ylabel('AGE')\n",
"ax.set_zlabel('MEDV')\n",
"ax.set_title('3D Scatter plot with fitted plane')\n",
"\n",
"# Show the plot\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "B_f1RtafaBhb"
},
"source": [
"## Polynomial Regression"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wsCyoDa8gKaT"
},
"source": [
"TODO: in the below cell, make your dataframe look like this when you print out the first 4 records\n",
"\n",
"![image.png](data:image/png;base64,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)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "AyCfeEqLaFsP"
},
"outputs": [],
"source": [
"# TODO"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "nDr6lzA3cDGv"
},
"outputs": [],
"source": [
"y = dataset['medv']\n",
"model = sm.OLS(y, X)\n",
"results = model.fit()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 112
},
"id": "a3Po2LqJcIP8",
"outputId": "f305e89b-121e-4594-c5f8-a58d790ab4e9"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div id=\"df-e2261824-735c-4e4a-9a6e-9ad267684667\" class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>coef</th>\n",
" <th>std err</th>\n",
" <th>t</th>\n",
" <th>P&gt;|t|</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>const</th>\n",
" <td>34.5538</td>\n",
" <td>0.563</td>\n",
" <td>61.415</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>lstat</th>\n",
" <td>-0.9500</td>\n",
" <td>0.039</td>\n",
" <td>-24.528</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <div class=\"colab-df-buttons\">\n",
"\n",
" <div class=\"colab-df-container\">\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e2261824-735c-4e4a-9a6e-9ad267684667')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
"\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
" <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
" </svg>\n",
" </button>\n",
"\n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" .colab-df-buttons div {\n",
" margin-bottom: 4px;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-e2261824-735c-4e4a-9a6e-9ad267684667 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-e2261824-735c-4e4a-9a6e-9ad267684667');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
"\n",
"\n",
"<div id=\"df-e3058760-e7de-4c09-8e3a-2f8d594ecd0a\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-e3058760-e7de-4c09-8e3a-2f8d594ecd0a')\"\n",
" title=\"Suggest charts\"\n",
" style=\"display:none;\">\n",
"\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <g>\n",
" <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
" </g>\n",
"</svg>\n",
" </button>\n",
"\n",
"<style>\n",
" .colab-df-quickchart {\n",
" --bg-color: #E8F0FE;\n",
" --fill-color: #1967D2;\n",
" --hover-bg-color: #E2EBFA;\n",
" --hover-fill-color: #174EA6;\n",
" --disabled-fill-color: #AAA;\n",
" --disabled-bg-color: #DDD;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-quickchart {\n",
" --bg-color: #3B4455;\n",
" --fill-color: #D2E3FC;\n",
" --hover-bg-color: #434B5C;\n",
" --hover-fill-color: #FFFFFF;\n",
" --disabled-bg-color: #3B4455;\n",
" --disabled-fill-color: #666;\n",
" }\n",
"\n",
" .colab-df-quickchart {\n",
" background-color: var(--bg-color);\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: var(--fill-color);\n",
" height: 32px;\n",
" padding: 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-quickchart:hover {\n",
" background-color: var(--hover-bg-color);\n",
" box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: var(--button-hover-fill-color);\n",
" }\n",
"\n",
" .colab-df-quickchart-complete:disabled,\n",
" .colab-df-quickchart-complete:disabled:hover {\n",
" background-color: var(--disabled-bg-color);\n",
" fill: var(--disabled-fill-color);\n",
" box-shadow: none;\n",
" }\n",
"\n",
" .colab-df-spinner {\n",
" border: 2px solid var(--fill-color);\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" animation:\n",
" spin 1s steps(1) infinite;\n",
" }\n",
"\n",
" @keyframes spin {\n",
" 0% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" border-left-color: var(--fill-color);\n",
" }\n",
" 20% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 30% {\n",
" border-color: transparent;\n",
" border-left-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 40% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-top-color: var(--fill-color);\n",
" }\n",
" 60% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" }\n",
" 80% {\n",
" border-color: transparent;\n",
" border-right-color: var(--fill-color);\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" 90% {\n",
" border-color: transparent;\n",
" border-bottom-color: var(--fill-color);\n",
" }\n",
" }\n",
"</style>\n",
"\n",
" <script>\n",
" async function quickchart(key) {\n",
" const quickchartButtonEl =\n",
" document.querySelector('#' + key + ' button');\n",
" quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n",
" quickchartButtonEl.classList.add('colab-df-spinner');\n",
" try {\n",
" const charts = await google.colab.kernel.invokeFunction(\n",
" 'suggestCharts', [key], {});\n",
" } catch (error) {\n",
" console.error('Error during call to suggestCharts:', error);\n",
" }\n",
" quickchartButtonEl.classList.remove('colab-df-spinner');\n",
" quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
" }\n",
" (() => {\n",
" let quickchartButtonEl =\n",
" document.querySelector('#df-e3058760-e7de-4c09-8e3a-2f8d594ecd0a button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
" </div>\n",
" </div>\n"
],
"text/plain": [
" coef std err t P>|t|\n",
"const 34.5538 0.563 61.415 0.0\n",
"lstat -0.9500 0.039 -24.528 0.0"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"summarize(results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kxQyFtg8cQ-C",
"outputId": "b6a924f1-c4d7-47bd-8a2e-fe6d08491008"
},
"outputs": [
{
"data": {
"text/plain": [
"const 34.553841\n",
"lstat -0.950049\n",
"dtype: float64"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results.params"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"id": "nwkPGQsWcSNS",
"scrolled": true
},
"outputs": [
{
"ename": "KeyError",
"evalue": "'lstat_2'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/indexes/base.py:3802\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3801\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
"File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
"File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: 'lstat_2'",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[25], line 9\u001b[0m\n\u001b[1;32m 5\u001b[0m lstat_line \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mlinspace(dataset[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlstat\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmin(), dataset[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlstat\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmax(), \u001b[38;5;241m100\u001b[39m)\n\u001b[1;32m 7\u001b[0m \u001b[38;5;66;03m# Calculate the corresponding medv values using the regression results\u001b[39;00m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# Include the quadratic term in the prediction\u001b[39;00m\n\u001b[0;32m----> 9\u001b[0m medv_line \u001b[38;5;241m=\u001b[39m results\u001b[38;5;241m.\u001b[39mparams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mconst\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m+\u001b[39m results\u001b[38;5;241m.\u001b[39mparams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlstat\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m*\u001b[39m lstat_line \u001b[38;5;241m+\u001b[39m \u001b[43mresults\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlstat_2\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m*\u001b[39m lstat_line\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Plot the quadratic curve\u001b[39;00m\n\u001b[1;32m 12\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(lstat_line, medv_line, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mred\u001b[39m\u001b[38;5;124m'\u001b[39m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQuadratic fit\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/series.py:981\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 978\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[1;32m 980\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[0;32m--> 981\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 983\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_hashable(key):\n\u001b[1;32m 984\u001b[0m \u001b[38;5;66;03m# Otherwise index.get_value will raise InvalidIndexError\u001b[39;00m\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 986\u001b[0m \u001b[38;5;66;03m# For labels that don't resolve as scalars like tuples and frozensets\u001b[39;00m\n",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/series.py:1089\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 1086\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[1;32m 1088\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[0;32m-> 1089\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1090\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39m_get_values_for_loc(\u001b[38;5;28mself\u001b[39m, loc, label)\n",
"File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/indexes/base.py:3804\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3803\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3804\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3805\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n",
"\u001b[0;31mKeyError\u001b[0m: 'lstat_2'"
]
},
{
"data": {
"image/png": "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r7wSM2bMQH9/P/7pn/4JH/3oR/HrX/+6LCojCiGwcuVKfOQjH8Hs2bMBVM71tjt3oHyv+e7duzFnzhycPHkS55xzDn74wx/iggsuGAswyvV6O503UL7XOohEBR+WTCZT9G8hxIT7yskVV1wx9t8XXngh5syZg/PPPx/f+973sHLlyhhbFo9Ku/4AsGzZsrH/nj17Ni6++GLMmDEDTz31FNra2mJsmRk333wzXnrpJfziF7+Y8Ltyv95O516u1/x973sfXnzxRfznf/4nuru7cc0112DHjh1jvy/X6+103hdccEHZXusgEjXtMm3aNGSz2QmjHIODgxOi5XJ29tln48ILL8S+ffvibkqkrBU+lX79AaCxsREzZswoi7+BL37xi/jxj3+M3t5e5HK5sfsr4Xo7nbudcrnmkydPxnve8x5cfPHFWLNmDS666CI88MADZX+9nc7bTrlc6yASFXxMnjwZH/zgB7Ft27ai+7dt24a5c+fG1KrojYyM4Pe//z0aGxvjbkqkZs6ciYaGhqLrf+rUKezYsaOirj8AHDt2DAcOHEj134AQAjfffDN6enrw85//HDNnziz6fTlfb69zt1MO19yOEAIjIyNlfb3tWOdtp1yvtZa4Ml2dPPbYY+KMM84Q//Zv/yZ+97vfifb2dnH22WeL/fv3x9200Nx2222ir69PvPrqq+K5554TH//4x8WUKVPK8pxPnDghXnjhBfHCCy8IAGL9+vXihRdeEH/4wx+EEEKsXbtWVFdXi56eHrF7926xfPly0djYKIaHh2NueTBu533ixAlx2223iV27don+/n7R29sr5syZI5qbm1N93jfccIOorq4WfX194vDhw2O3t956a+wx5Xq9vc69XK/5nXfeKZ599lnR398vXnrpJXHXXXeJSZMmiaeffloIUb7X2+28y/VaB5W44EMIIb75zW+KGTNmiMmTJ4u/+Iu/KFqeVo6WLVsmGhsbxRlnnCGamppEW1ub2LNnT9zNCkVvb68AMOF2zTXXCCHk8suOjg7R0NAgqqqqxKWXXip2794db6MNcDvvt956SyxevFjU1dWJM844Q7z73e8W11xzjfjjH/8Yd7MDsTtfAOLRRx8de0y5Xm+vcy/Xa/7Zz3527LO7rq5OLFy4cCzwEKJ8r7fbeZfrtQ4qI4QQ0Y2zEBERUaVLVM4HERERlT8GH0RERBQpBh9EREQUKQYfREREFCkGH0RERBQpBh9EREQUKQYfREREFCkGH0RERBQpBh9EREQUKQYfREREFCkGH0RERBQpBh9EREQUqf8PTombqs97PhIAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Scatter plot of the data points\n",
"plt.scatter(dataset['lstat'], dataset['medv'], color='blue', label='Data points')\n",
"\n",
"# Generate a range of values for lstat to plot the curve\n",
"lstat_line = np.linspace(dataset['lstat'].min(), dataset['lstat'].max(), 100)\n",
"\n",
"# Calculate the corresponding medv values using the regression results\n",
"# Include the quadratic term in the prediction\n",
"medv_line = results.params['const'] + results.params['lstat'] * lstat_line + results.params['lstat_2'] * lstat_line**2\n",
"\n",
"# Plot the quadratic curve\n",
"plt.plot(lstat_line, medv_line, color='red', label='Quadratic fit')\n",
"\n",
"# Label the axes and add a title\n",
"plt.xlabel('LSTAT')\n",
"plt.ylabel('MEDV')\n",
"plt.title('Scatter plot with quadratic fit')\n",
"\n",
"# Show the legend\n",
"plt.legend()\n",
"\n",
"# Display the plot\n",
"plt.show()"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"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.10.8"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment