{ "cells": [ { "cell_type": "markdown", "id": "5b41ceb6-d385-4837-b5e0-5e21e643d6e6", "metadata": {}, "source": [ "# Analysis of variance (ANOVA)" ] }, { "cell_type": "code", "execution_count": 1, "id": "3a91e1db-04f3-4c28-9707-e0a7c6df2d6a", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 2, "id": "6e1aa2b2-ce9b-420f-8813-e0d0f9ac327a", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "%config InlineBackend.figure_format = 'retina'" ] }, { "cell_type": "markdown", "id": "2030c8e7-a0d8-4a4d-b227-a0a81f11e02d", "metadata": {}, "source": [ "$\\def\\stderr#1{\\mathbf{se}_{#1}}$\n", "$\\def\\stderrhat#1{\\hat{\\mathbf{se}}_{#1}}$\n", "$\\newcommand{\\Mean}{\\textbf{Mean}}$\n", "$\\newcommand{\\Var}{\\textbf{Var}}$\n", "$\\newcommand{\\Std}{\\textbf{Std}}$\n", "$\\newcommand{\\Freq}{\\textbf{Freq}}$\n", "$\\newcommand{\\RelFreq}{\\textbf{RelFreq}}$\n", "$\\newcommand{\\DMeans}{\\textbf{DMeans}}$\n", "$\\newcommand{\\Prop}{\\textbf{Prop}}$\n", "$\\newcommand{\\DProps}{\\textbf{DProps}}$" ] }, { "cell_type": "markdown", "id": "e41da4dc-40bc-4074-b3ca-5f2a2534fdcf", "metadata": {}, "source": [ "## Definitions" ] }, { "cell_type": "markdown", "id": "442020c3-458a-469b-a82e-c7f3beafb812", "metadata": {}, "source": [ "## Formulas" ] }, { "cell_type": "code", "execution_count": null, "id": "28207dfa-61a8-47a3-8fe1-9168cbc2f096", "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "markdown", "id": "60311b0a-7c91-4df0-be4a-accc69028d8c", "metadata": {}, "source": [ "## Example" ] }, { "cell_type": "markdown", "id": "2edd0ff1-e544-41a3-845a-c0471e345d41", "metadata": {}, "source": [ "## Explanations" ] }, { "cell_type": "markdown", "id": "bf5f1bcf-d993-47e8-9f1b-52902c63c9e3", "metadata": {}, "source": [ "## Discussion" ] }, { "cell_type": "markdown", "id": "c6bfa142-4e3f-46a0-bbd9-212692dd1b3d", "metadata": {}, "source": [ "## Equivalence between ANOVA and OLS\n", "\n", "via https://stats.stackexchange.com/questions/175246/why-is-anova-equivalent-to-linear-regression" ] }, { "cell_type": "code", "execution_count": 1, "id": "02532495-4998-4770-95ae-eabb34ebccb8", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.stats import randint, norm\n", "np.random.seed(124) # Fix the seed\n", "\n", "x = randint(1,6).rvs(100) # Generate 100 random integer U[1,5]\n", "y = x + norm().rvs(100) # Generate my response sample" ] }, { "cell_type": "code", "execution_count": 2, "id": "299470ef-4adb-4a09-a4f1-407fe5271a8b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x\n", "1 1.114427\n", "2 1.958159\n", "3 2.844082\n", "4 4.198083\n", "5 5.410594\n", "Name: y, dtype: float64" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Kb63e/duhcNh7d+/Xzt37lRHR4cWLlyos2fPmi7Nd8aPH69nn31WdXV1OnjwoL773e9q8eLFamhoMF2arx04cEAbNmzQrFmzTJfiWyUlJTp16lT3z969e02X5ImUHqGf6hYtWqRFixaZLgOSduzY0eufN27cqDFjxqiurk633HKLoar86a677ur1z7/61a9UXV2t/fv3q6SkxFBV/tbW1qYlS5bopZde0tNPP226HN8aNmyYioqKTJfhOVZUAAfRaFSSNHLkSMOV+FtnZ6e2bt2qs2fPau7cuabL8a1wOKw777xTCxYsMF2Krx09elTjxo3TN77xDS1ZskRffPGF6ZI8wYoK0EdXV5dWrVqlefPmaebMmabL8aXDhw9r7ty5+uc//6nc3Fxt27ZNM2bMMF2WL23dulUffPCBDhw4YLoUX7v55pu1ceNGTZ06VadOndIvfvELfec739GHH36ovLw80+W5iqAC9BEOh/Xhhx/65vmvjaZOnapDhw4pGo3q9ddf1/Lly7V7927CisdOnDihRx55RDt37tTw4cNNl+NrPbcJzJo1SzfffLMmTJig1157TT/+8Y8NVuY+ggrQw0MPPaQ333xTe/bs0fjx402X41tZWVkqLi6WJJWWlurAgQP6r//6L23YsMFwZf5SV1en06dP64Ybbui+1tnZqT179mjdunVqb29XZmamwQr9q6CgQFOmTNGxY8dMl+I6ggogKRaL6Sc/+Ym2bdum2tpaXXvttaZLQg9dXV1qb283XYbv3HbbbTp8+HCvaytWrNC0adP0+OOPE1IMamtrU2Njo5YtW2a6FNcRVAxqa2vrlYY///xzHTp0SCNHjtQ111xjsDL/CYfD2rJli7Zv3668vDxFIhFJUjAY1IgRIwxX5y9r1qzRokWLdM0116i1tVVbtmxRbW2tampqTJfmO3l5eQn7tK666iqNGjWK/Vse++lPf6q77rpLEyZM0MmTJ/Xkk08qMzNT9957r+nSXEdQMejgwYMqKyvr/ufVq1dLkpYvX66NGzcaqsqfqqurJUnz58/vdf3ll1/Wfffd531BPnb69Gn96Ec/0qlTpxQMBjVr1izV1NToe9/7nunSAGOampp077336syZMxo9erS+/e1va//+/Ro9erTp0lwXiMViMdNFAAAAOGGOCgAAsBZBBQAAWIugAgAArEVQAQAA1iKoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABYI2vvvpKRUVFeuaZZ7qv7du3T1lZWXr33XcNVgbAFA4lBGCVt956S3fffbf27dunqVOn6vrrr9fixYv1/PPPmy4NgAEEFQDWCYfDeueddzRnzhwdPnxYBw4cUHZ2tumyABhAUAFgnfPnz2vmzJk6ceKE6urqdN1115kuCYAh7FEBYJ3GxkadPHlSXV1dOn78uOlyABjEigoAq1y4cEE33XSTrr/+ek2dOlVr167V4cOHNWbMGNOlATCAoALAKo899phef/111dfXKzc3V7feequCwaDefPNN06UBMIBHPwCsUVtbq7Vr12rTpk3Kz89XRkaGNm3apD//+c+qrq42XR4AA1hRAQAA1mJFBQAAWIugAgAArEVQAQAA1iKoAAAAaxFUAACAtQgqAADAWgQVAABgLYIKAACwFkEFAABYi6ACAACsRVABAADW+v/wa/hcEeQB4AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import seaborn as sns\n", "df = pd.DataFrame({\"x\":x, \"y\":y})\n", "sns.stripplot(data=df, x=\"x\", y=\"y\")\n", "df.groupby(\"x\")[\"y\"].mean()" ] }, { "cell_type": "code", "execution_count": 3, "id": "585ab5cf-e63d-4724-89da-7ea1d224dcb7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "F_onewayResult(statistic=62.07182379512491, pvalue=1.113218183344844e-25)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# One-way ANOVA\n", "from scipy.stats import f_oneway\n", "\n", "x1 = df[x==1][\"y\"]\n", "x2 = df[x==2][\"y\"]\n", "x3 = df[x==3][\"y\"]\n", "x4 = df[x==4][\"y\"]\n", "x5 = df[x==5][\"y\"]\n", "res = f_oneway(x1, x2, x3, x4, x5)\n", "res" ] }, { "cell_type": "code", "execution_count": 4, "id": "5513855d-c644-4f70-ad71-b016d88b9310", "metadata": {}, "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", "
sum_sqdfFPR(>F)
C(x)250.9402374.062.0718241.113218e-25
Residual96.01507295.0NaNNaN
\n", "
" ], "text/plain": [ " sum_sq df F PR(>F)\n", "C(x) 250.940237 4.0 62.071824 1.113218e-25\n", "Residual 96.015072 95.0 NaN NaN" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import statsmodels.api as sm\n", "from statsmodels.formula.api import ols\n", "\n", "# get ANOVA table as R like output\n", "model = ols('y ~ C(x)', data=df).fit()\n", "anova_table = sm.stats.anova_lm(model, typ=2)\n", "anova_table" ] }, { "cell_type": "code", "execution_count": null, "id": "dabd7b14-3d1b-4f79-96a5-184d01bf2138", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 5, "id": "8b272014-a42a-457d-9f4a-ee1971dd5c28", "metadata": {}, "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", "
OLS Regression Results
Dep. Variable: y R-squared: 0.723
Model: OLS Adj. R-squared: 0.712
Method: Least Squares F-statistic: 62.07
Date: Tue, 21 Nov 2023 Prob (F-statistic): 1.11e-25
Time: 14:57:13 Log-Likelihood: -139.86
No. Observations: 100 AIC: 289.7
Df Residuals: 95 BIC: 302.7
Df Model: 4
Covariance Type: nonrobust
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
coef std err t P>|t| [0.025 0.975]
Intercept 1.1144 0.225 4.957 0.000 0.668 1.561
C(x)[T.2] 0.8437 0.304 2.772 0.007 0.239 1.448
C(x)[T.3] 1.7297 0.322 5.370 0.000 1.090 2.369
C(x)[T.4] 3.0837 0.350 8.802 0.000 2.388 3.779
C(x)[T.5] 4.2962 0.307 13.977 0.000 3.686 4.906
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
Omnibus: 3.712 Durbin-Watson: 1.985
Prob(Omnibus): 0.156 Jarque-Bera (JB): 3.318
Skew: -0.444 Prob(JB): 0.190
Kurtosis: 3.084 Cond. No. 5.87


Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." ], "text/latex": [ "\\begin{center}\n", "\\begin{tabular}{lclc}\n", "\\toprule\n", "\\textbf{Dep. Variable:} & y & \\textbf{ R-squared: } & 0.723 \\\\\n", "\\textbf{Model:} & OLS & \\textbf{ Adj. R-squared: } & 0.712 \\\\\n", "\\textbf{Method:} & Least Squares & \\textbf{ F-statistic: } & 62.07 \\\\\n", "\\textbf{Date:} & Tue, 21 Nov 2023 & \\textbf{ Prob (F-statistic):} & 1.11e-25 \\\\\n", "\\textbf{Time:} & 14:57:13 & \\textbf{ Log-Likelihood: } & -139.86 \\\\\n", "\\textbf{No. Observations:} & 100 & \\textbf{ AIC: } & 289.7 \\\\\n", "\\textbf{Df Residuals:} & 95 & \\textbf{ BIC: } & 302.7 \\\\\n", "\\textbf{Df Model:} & 4 & \\textbf{ } & \\\\\n", "\\textbf{Covariance Type:} & nonrobust & \\textbf{ } & \\\\\n", "\\bottomrule\n", "\\end{tabular}\n", "\\begin{tabular}{lcccccc}\n", " & \\textbf{coef} & \\textbf{std err} & \\textbf{t} & \\textbf{P$> |$t$|$} & \\textbf{[0.025} & \\textbf{0.975]} \\\\\n", "\\midrule\n", "\\textbf{Intercept} & 1.1144 & 0.225 & 4.957 & 0.000 & 0.668 & 1.561 \\\\\n", "\\textbf{C(x)[T.2]} & 0.8437 & 0.304 & 2.772 & 0.007 & 0.239 & 1.448 \\\\\n", "\\textbf{C(x)[T.3]} & 1.7297 & 0.322 & 5.370 & 0.000 & 1.090 & 2.369 \\\\\n", "\\textbf{C(x)[T.4]} & 3.0837 & 0.350 & 8.802 & 0.000 & 2.388 & 3.779 \\\\\n", "\\textbf{C(x)[T.5]} & 4.2962 & 0.307 & 13.977 & 0.000 & 3.686 & 4.906 \\\\\n", "\\bottomrule\n", "\\end{tabular}\n", "\\begin{tabular}{lclc}\n", "\\textbf{Omnibus:} & 3.712 & \\textbf{ Durbin-Watson: } & 1.985 \\\\\n", "\\textbf{Prob(Omnibus):} & 0.156 & \\textbf{ Jarque-Bera (JB): } & 3.318 \\\\\n", "\\textbf{Skew:} & -0.444 & \\textbf{ Prob(JB): } & 0.190 \\\\\n", "\\textbf{Kurtosis:} & 3.084 & \\textbf{ Cond. No. } & 5.87 \\\\\n", "\\bottomrule\n", "\\end{tabular}\n", "%\\caption{OLS Regression Results}\n", "\\end{center}\n", "\n", "Notes: \\newline\n", " [1] Standard Errors assume that the covariance matrix of the errors is correctly specified." ], "text/plain": [ "\n", "\"\"\"\n", " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: y R-squared: 0.723\n", "Model: OLS Adj. R-squared: 0.712\n", "Method: Least Squares F-statistic: 62.07\n", "Date: Tue, 21 Nov 2023 Prob (F-statistic): 1.11e-25\n", "Time: 14:57:13 Log-Likelihood: -139.86\n", "No. Observations: 100 AIC: 289.7\n", "Df Residuals: 95 BIC: 302.7\n", "Df Model: 4 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "Intercept 1.1144 0.225 4.957 0.000 0.668 1.561\n", "C(x)[T.2] 0.8437 0.304 2.772 0.007 0.239 1.448\n", "C(x)[T.3] 1.7297 0.322 5.370 0.000 1.090 2.369\n", "C(x)[T.4] 3.0837 0.350 8.802 0.000 2.388 3.779\n", "C(x)[T.5] 4.2962 0.307 13.977 0.000 3.686 4.906\n", "==============================================================================\n", "Omnibus: 3.712 Durbin-Watson: 1.985\n", "Prob(Omnibus): 0.156 Jarque-Bera (JB): 3.318\n", "Skew: -0.444 Prob(JB): 0.190\n", "Kurtosis: 3.084 Cond. No. 5.87\n", "==============================================================================\n", "\n", "Notes:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", "\"\"\"" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# MEANS\n", "# 1 1.114427\n", "# 2 1.958159\n", "# 3 2.844082\n", "# 4 4.198083\n", "# 5 5.410594\n", "\n", "# Ordinary Least Squares (OLS) model\n", "model = ols('y ~ C(x)', data=df).fit()\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 6, "id": "084c9936-f6f8-4f05-b934-975b3272d13f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.11442735, 0.84373124, 1.72965468, 3.0836561 , 4.29616654])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "betas = model.params.values\n", "betas" ] }, { "cell_type": "code", "execution_count": 7, "id": "5771d4d4-68d9-43a1-a8e4-d2955076cccf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.11442735, 1.95815859, 2.84408203, 4.19808345, 5.41059388])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaled_batas = np.concatenate([[betas[0]], betas[0]+betas[1:]])\n", "scaled_batas" ] }, { "cell_type": "code", "execution_count": 8, "id": "20da12e3-3d56-46a9-839f-6befa2ac2923", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, True, True, True])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check if the two results are numerically equivalent\n", "np.isclose(scaled_batas, df.groupby(\"x\")[\"y\"].mean().values)" ] }, { "cell_type": "code", "execution_count": 9, "id": "ceb6dd7a-757b-433c-bef9-6db33445d88e", "metadata": {}, "outputs": [], "source": [ "# # Ordinary Least Squares (OLS) model (no intercept)\n", "# model = ols('y ~ C(x) -1', data=df).fit()\n", "# model.summary()" ] }, { "cell_type": "code", "execution_count": null, "id": "0cfd8da5-bd7f-4126-8273-4dde11c5d2f8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 70, "id": "d101924f-1212-4fb3-840f-e749c66bde57", "metadata": {}, "outputs": [], "source": [ "from scipy.stats.mstats import argstoarray\n", "data = argstoarray(x1.values, x2.values, x3.values, x4.values, x5.values)" ] }, { "cell_type": "code", "execution_count": 48, "id": "3eb6d232-eb3f-4e39-b075-9a59f1cbf09e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "250.9402371658938" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.count(axis=1)\n", "np.sum( data.count(axis=1) * ( data.mean(axis=1) - data.mean() )**2 )" ] }, { "cell_type": "code", "execution_count": 65, "id": "a5b87e0e-58fb-41df-bbb5-1b25981eb9f6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "96.01507202947789" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sswg manual compute\n", "gmeans = data.mean(axis=1)\n", "data_minus_gmeans = np.subtract(data.T, gmeans).T\n", "(data_minus_gmeans**2).sum()" ] }, { "cell_type": "code", "execution_count": 69, "id": "7190e9f5-75da-4276-9e64-054fa1f90bdd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "96.01507202947788" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sswg via parallel axis thm\n", "gmeans = data.mean(axis=1)\n", "np.sum( (data**2).sum(axis=1) - data.count(axis=1) * gmeans**2 )" ] }, { "cell_type": "code", "execution_count": 45, "id": "66e95cb3-7eb8-4085-9679-8ba4ad9a62fd", "metadata": {}, "outputs": [], "source": [ "from scipy.stats import f as fdist\n", "\n", "def f_oneway(*args):\n", " \"\"\"\n", " Performs a 1-way ANOVA, returning an F-value and probability given\n", " any number of groups. From Heiman, pp.394-7.\n", " \"\"\"\n", " # Construct a single array of arguments: each row is a group\n", " data = argstoarray(*args)\n", " ngroups = len(data)\n", " ntot = data.count()\n", " sstot = (data**2).sum() - (data.sum())**2/float(ntot)\n", " ssbg = (data.count(-1) * (data.mean(-1)-data.mean())**2).sum()\n", " sswg = sstot-ssbg\n", " print(ssbg, sswg, sstot)\n", " dfbg = ngroups-1\n", " dfwg = ntot - ngroups\n", " msb = ssbg/float(dfbg)\n", " msw = sswg/float(dfwg)\n", " f = msb/msw\n", " prob = fdist.sf(dfbg, dfwg, f)\n", " return f, prob\n" ] }, { "cell_type": "code", "execution_count": 46, "id": "f42c02af-e16c-4084-b3e2-7247aa775253", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "250.9402371658938 96.01507202947755 346.95530919537134\n" ] }, { "data": { "text/plain": [ "(62.07182379512513, 1.697371507321727e-08)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f_oneway(x1.values, x2.values, x3.values, x4.values, x5.values)" ] }, { "cell_type": "code", "execution_count": null, "id": "d6a4ed5d-f7a5-45ef-9a03-4df3ca3b62f2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.4" } }, "nbformat": 4, "nbformat_minor": 5 }