{ "cells": [ { "cell_type": "markdown", "id": "651019ae-1bd8-41b3-be75-474a841f1f8c", "metadata": {}, "source": [ "# Example of Multiple Linear Regression in Python\n", "https://datatofish.com/multiple-linear-regression-python/" ] }, { "cell_type": "markdown", "id": "de3b5be7-792e-4a94-8cd0-a17df627c419", "metadata": {}, "source": [ "## About Linear Regression\n", "Linear regression is used as a predictive model that assumes a linear relationship between the dependent variable (which is the variable we are trying to predict/estimate) and the independent variable/s (input variable/s used in the prediction)." ] }, { "cell_type": "markdown", "id": "efd67629-b49f-47e2-9305-a7abb6f10366", "metadata": {}, "source": [ "## Example of Multiple Linear Regression in Python\n", "\n", "In the following example, we will perform multiple linear regression for a fictitious economy, where the index_price is the dependent variable, and the 2 independent/input variables are:\n", "\n", "* interest_rate\n", "* unemployment_rate\n", "\n", "Please note that you will have to validate that several assumptions are met before you apply linear regression models. Most notably, you have to make sure that a linear relationship exists between the dependent variable and the independent variable/s (more on that under the checking for linearity section)." ] }, { "cell_type": "code", "execution_count": 16, "id": "3dacd2dc-aa3e-40f3-a66d-252b7512bef7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " year month interest_rate unemployment_rate index_price\n", "0 2017 12 2.75 5.3 1464\n", "1 2017 11 2.50 5.3 1394\n", "2 2017 10 2.50 5.3 1357\n", "3 2017 9 2.50 5.3 1293\n", "4 2017 8 2.50 5.4 1256\n", "5 2017 7 2.50 5.6 1254\n", "6 2017 6 2.50 5.5 1234\n", "7 2017 5 2.25 5.5 1195\n", "8 2017 4 2.25 5.5 1159\n", "9 2017 3 2.25 5.6 1167\n", "10 2017 2 2.00 5.7 1130\n", "11 2017 1 2.00 5.9 1075\n", "12 2016 12 2.00 6.0 1047\n", "13 2016 11 1.75 5.9 965\n", "14 2016 10 1.75 5.8 943\n", "15 2016 9 1.75 6.1 958\n", "16 2016 8 1.75 6.2 971\n", "17 2016 7 1.75 6.1 949\n", "18 2016 6 1.75 6.1 884\n", "19 2016 5 1.75 6.1 866\n", "20 2016 4 1.75 5.9 876\n", "21 2016 3 1.75 6.2 822\n", "22 2016 2 1.75 6.2 704\n", "23 2016 1 1.75 6.1 719\n" ] } ], "source": [ "import pandas as pd\n", "\n", "data = {'year': [2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2017,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016,2016],\n", " 'month': [12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1],\n", " 'interest_rate': [2.75,2.5,2.5,2.5,2.5,2.5,2.5,2.25,2.25,2.25,2,2,2,1.75,1.75,1.75,1.75,1.75,1.75,1.75,1.75,1.75,1.75,1.75],\n", " 'unemployment_rate': [5.3,5.3,5.3,5.3,5.4,5.6,5.5,5.5,5.5,5.6,5.7,5.9,6,5.9,5.8,6.1,6.2,6.1,6.1,6.1,5.9,6.2,6.2,6.1],\n", " 'index_price': [1464,1394,1357,1293,1256,1254,1234,1195,1159,1167,1130,1075,1047,965,943,958,971,949,884,866,876,822,704,719] \n", " }\n", "\n", "df = pd.DataFrame(data) \n", "\n", "print(df)" ] }, { "cell_type": "markdown", "id": "545f4540-581f-4fc9-89e8-02150f40cabd", "metadata": {}, "source": [ "## Checking for Linearity" ] }, { "cell_type": "code", "execution_count": 17, "id": "9a3bfbae-0877-442b-86fa-d477cf6153a2", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.scatter(df['interest_rate'], df['index_price'], color='red')\n", "plt.title('Index Price Vs Interest Rate', fontsize=14)\n", "plt.xlabel('Interest Rate', fontsize=14)\n", "plt.ylabel('Index Price', fontsize=14)\n", "plt.grid(True)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "61835a39-e63e-430a-b5df-e614d96776d0", "metadata": {}, "source": [ "## Performing the Multiple Linear Regression" ] }, { "cell_type": "code", "execution_count": 18, "id": "4658f05a-3adc-44e4-a576-eed94de204d0", "metadata": {}, "outputs": [], "source": [ "x = df[['interest_rate','unemployment_rate']]\n", "y = df['index_price']" ] }, { "cell_type": "markdown", "id": "6b7443b5-1c4a-49ac-89e4-4d3bd29f584a", "metadata": {}, "source": [ "### The Python Code using Statsmodels" ] }, { "cell_type": "code", "execution_count": 19, "id": "9d2f8b51-ee14-4e3e-bd86-75343644d1e1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: index_price R-squared: 0.898\n", "Model: OLS Adj. R-squared: 0.888\n", "Method: Least Squares F-statistic: 92.07\n", "Date: Sun, 09 Jul 2023 Prob (F-statistic): 4.04e-11\n", "Time: 17:15:55 Log-Likelihood: -134.61\n", "No. Observations: 24 AIC: 275.2\n", "Df Residuals: 21 BIC: 278.8\n", "Df Model: 2 \n", "Covariance Type: nonrobust \n", "=====================================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "-------------------------------------------------------------------------------------\n", "const 1798.4040 899.248 2.000 0.059 -71.685 3668.493\n", "interest_rate 345.5401 111.367 3.103 0.005 113.940 577.140\n", "unemployment_rate -250.1466 117.950 -2.121 0.046 -495.437 -4.856\n", "==============================================================================\n", "Omnibus: 2.691 Durbin-Watson: 0.530\n", "Prob(Omnibus): 0.260 Jarque-Bera (JB): 1.551\n", "Skew: -0.612 Prob(JB): 0.461\n", "Kurtosis: 3.226 Cond. No. 394.\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n" ] } ], "source": [ "import statsmodels.api as sm\n", "\n", "x = sm.add_constant(x)\n", " \n", "model = sm.OLS(y, x).fit()\n", "predictions = model.predict(x) \n", " \n", "print_model = model.summary()\n", "print(print_model)" ] }, { "cell_type": "markdown", "id": "80f3744a-6b0f-4fef-bd77-587bdf7bbed0", "metadata": {}, "source": [ "### The Python Code using Sklearn" ] }, { "cell_type": "code", "execution_count": 20, "id": "3c6d8a8d-ba24-477a-bda4-c54e74e76be4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearRegression()" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import linear_model\n", "\n", "regr = linear_model.LinearRegression()\n", "regr.fit(x, y)" ] }, { "cell_type": "code", "execution_count": 21, "id": "cd5a8b11-a49c-4fcd-bfdb-059b6b3e2ab5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Intercept: \n", " 1798.4039776258558\n", "Coefficients: \n", " [ 0. 345.54008701 -250.14657137]\n" ] } ], "source": [ "print('Intercept: \\n', regr.intercept_)\n", "print('Coefficients: \\n', regr.coef_)" ] }, { "cell_type": "markdown", "id": "722a577e-9e89-4808-841e-0c9535b8fd99", "metadata": {}, "source": [ "### Conclusion\n", "\n", "Linear regression is often used in Machine Learning. You have seen some examples of how to perform multiple linear regression in Python using both sklearn and statsmodels.\n", "\\\n", "Before applying linear regression models, make sure to check that a linear relationship exists between the dependent variable (i.e., what you are trying to predict) and the independent variable/s (i.e., the input variable/s)" ] }, { "cell_type": "code", "execution_count": null, "id": "0b683e7d-d9ca-4ab2-87f9-c8c0d992ada3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }