{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "remove-input" ] }, "outputs": [], "source": [ "from datascience import *\n", "%matplotlib inline\n", "path_data = 'https://raw.githubusercontent.com/ChemeketaCS/datasci-textbook/main/assets/data/'\n", "import matplotlib.pyplot as plots\n", "plots.style.use('fivethirtyeight')\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Least Squares Regression\n", "In an earlier section, we developed formulas for the slope and intercept of the regression line through a *football shaped* scatter diagram. It turns out that the slope and intercept of the least squares line have the same formulas as those we developed, *regardless of the shape of the scatter plot*.\n", "\n", "We saw this in the example about Little Women, but let's confirm it in an example where the scatter plot clearly isn't football shaped. For the data, we are once again indebted to the rich [data archive of Prof. Larry Winner](http://www.stat.ufl.edu/~winner/datasets.html) of the University of Florida. A [2013 study](http://digitalcommons.wku.edu/ijes/vol6/iss2/10/) in the International Journal of Exercise Science studied collegiate shot put athletes and examined the relation between strength and shot put distance. The population consists of 28 female collegiate athletes. Strength was measured by the the biggest amount (in kilograms) that the athlete lifted in the \"1RM power clean\" in the pre-season. The distance (in meters) was the athlete's personal best." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "remove-input" ] }, "outputs": [], "source": [ "def standard_units(any_numbers):\n", " \"Convert any array of numbers to standard units.\"\n", " return (any_numbers - np.mean(any_numbers))/np.std(any_numbers) \n", "\n", "def correlation(t, x, y):\n", " return np.mean(standard_units(t.column(x))*standard_units(t.column(y)))\n", "\n", "def slope(table, x, y):\n", " r = correlation(table, x, y)\n", " return r * np.std(table.column(y))/np.std(table.column(x))\n", "\n", "def intercept(table, x, y):\n", " a = slope(table, x, y)\n", " return np.mean(table.column(y)) - a * np.mean(table.column(x))\n", "\n", "def fit(table, x, y):\n", " \"\"\"Return the height of the regression line at each x value.\"\"\"\n", " a = slope(table, x, y)\n", " b = intercept(table, x, y)\n", " return a * table.column(x) + b" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "shotput = Table.read_table(path_data + 'shotput.csv')" ] }, { "cell_type": "code", "execution_count": 4, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Weight Lifted Shot Put Distance
37.5 6.4
51.5 10.2
61.3 12.4
61.3 13
63.6 13.2
66.1 13
70 12.7
92.7 13.9
90.5 15.5
90.5 15.8
\n", "

... (18 rows omitted)

" ], "text/plain": [ "Weight Lifted | Shot Put Distance\n", "37.5 | 6.4\n", "51.5 | 10.2\n", "61.3 | 12.4\n", "61.3 | 13\n", "63.6 | 13.2\n", "66.1 | 13\n", "70 | 12.7\n", "92.7 | 13.9\n", "90.5 | 15.5\n", "90.5 | 15.8\n", "... (18 rows omitted)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shotput" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shotput.scatter('Weight Lifted')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's not a football shaped scatter plot. In fact, it seems to have a slight non-linear component. But if we insist on using a straight line to make our predictions, there is still one best straight line among all straight lines.\n", "\n", "Our formulas for the slope and intercept of the regression line, derived for football shaped scatter plots, give the following values." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.09834382159781997" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "slope(shotput, 'Weight Lifted', 'Shot Put Distance')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5.959629098373952" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "intercept(shotput, 'Weight Lifted', 'Shot Put Distance')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Does it still make sense to use these formulas even though the scatter plot isn't football shaped? We can answer this by finding the slope and intercept of the line that minimizes the mse.\n", "\n", "We will define the function `shotput_linear_mse` to take an arbirtary slope and intercept as arguments and return the corresponding mse. Then `minimize` applied to `shotput_linear_mse` will return the best slope and intercept." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def shotput_linear_mse(any_slope, any_intercept):\n", " x = shotput.column('Weight Lifted')\n", " y = shotput.column('Shot Put Distance')\n", " fitted = any_slope*x + any_intercept\n", " return np.mean((y - fitted) ** 2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.09834382, 5.95962911])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minimize(shotput_linear_mse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These values are the same as those we got by using our formulas. To summarize:\n", "\n", "**No matter what the shape of the scatter plot, there is a unique line that minimizes the mean squared error of estimation. It is called the regression line, and its slope and intercept are given by**\n", "\n", "$$\n", "\\mathbf{\\mbox{slope of the regression line}} ~=~ r \\cdot\n", "\\frac{\\mbox{SD of }y}{\\mbox{SD of }x}\n", "$$\n", "\n", "$$\n", "\\mathbf{\\mbox{intercept of the regression line}} ~=~\n", "\\mbox{average of }y ~-~ \\mbox{slope} \\cdot \\mbox{average of }x\n", "$$" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAFZCAYAAABKey+LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de3zP9f//8dt7R4c2b7PtbXbyiTWm5RhLH5KKSkiUUwe+TCGpPiIRHyVDKdEcPqZSifrhk859KiWWwycJFWsSOU7D2MYO773fvz9m709rB5u9t9fe2/16ubjU6/x4vGfbw/P5fD2fprS0NDsiIiIiBnEzOgARERGp3VSMiIiIiKFUjIiIiIihVIyIiIiIoVSMiIiIiKFUjIiIiIihVIyIiIiIoVSMiIiIiKFqXDGSnJxsdAiVQnm5FuXlWmpqXiKuosYVIyIiIuJaVIyIiIiIoVSMiIiIiKFUjIiIiIihPIwOQEREys5qtZKZmWl0GCLlUr9+fTw8Si45LlmMvPjii3zwwQfs378fLy8vOnTowPTp04mKinKcY7fbmT17NitWrCAtLY327dvzwgsv0LJlS+dkISIiWK1W0tPTMZvNmEwmo8MRKRO73U5aWho+Pj4lFiSX7KbZvHkzI0aM4LPPPuP999/Hw8ODO++8kzNnzjjOefnll4mPj2fOnDls2LCBgIAA+vXrR3p6uvOyERGp5TIzM1WIiMsxmUyYzeZSW/Qu2TKybt26QttLly4lLCyMrVu3ctttt2G321m8eDGPPvooffv2BWDx4sVERESwZs0ahg8fXsE0RESkgAoRcUWX+ntb7gGsGRkZ2Gw2zGYzAIcOHSIlJYXu3bs7zqlbty6dO3dm27Zt5b29iIiI1DLlHsD65JNPEh0dTceOHQFISUkBICAgoNB5AQEBHD9+vMT7VOaMhzV1NkXl5VqUl2txVl4RERFOuY9IbVKuYuSpp55i69atfPrpp7i7uxc69tcmGLvdXmqzTGV9wyYnJ9fIHwbKy7UoL9eSnJzMVU398E5NwGQ9h93Dl2z/WOyefkaHVmtER0czatQoxo0bZ3QohjKbzaxYscIx7KG2KHM3zeTJk1m7di3vv/8+TZs2dey3WCwAnDx5stD5qampRVpLRESqK+/UBNxyUzGRi1tuKt6py4wOqcZITU3lH//4B9HR0QQGBhIREUGfPn346quvnPqcuLg4rrvuukuet3LlSsxms+NPZGQkw4YN4+DBg+V6ntlsZv369Zc8Lzo62vEsi8VCq1atGDp0KJ988kmRc5OSkrj11lvL9PxevXrxxBNPlCvm6qpMxcikSZNYs2YN77//PldddVWhY+Hh4VgslkJ/qbKystiyZQudOnVybrQiIpXEZD0HBa25JlP+tjjFfffdx44dO3jllVf47rvveOedd7jllls4ffq0YTHVq1ePpKQk9u3bx7Jly9izZw9DhgwhLy+vUp43ceJEkpKS+O6771i+fDlhYWHce++9RYoJi8WCt7d3pcRQnV2yGJkwYQJvv/02CQkJmM1mUlJSSElJISMjA8jvnhk9ejTz58/n/fff5+eff2bMmDHUr1+fAQMGVHoCIiLOYPfwBbv94oY9f1sqLC0tjS1btvDPf/6TG264gbCwMNq1a8e4cePo379/oXOzsrJ49NFHCQ0NJSoqigULFhQ6fvjwYYYOHUpISAghISHce++9HD16FMhv7ZgzZw579+51tEKsXLmyxLhMJhMWi4XGjRvTtWtXJk2axM8//8yBAweA4ls9oqOjWbhwoeP/AR544AHMZrNjuyQ+Pj5YLBZCQ0OJiYkhLi6OefPmsWzZMr755hvHeX997pw5c7j66qsJDAzkqquu4sEHHwRg9OjRJCYmsmzZMke+hw4dIi8vj4cffphrrrmGxo0b065dO15++WVsNpvjnqNHj2bgwIEsXryYli1bEh4ezpgxYzh//rzjHLvdzsKFC2nXrh2BgYFERUUxY8YMx/Fjx47xf//3f4SHhxMeHs4999zDr7/+WupnUJpLFiMJCQmkp6fTt29fIiMjHX8KviAA48ePZ8yYMTzxxBPceOONnDhxgnXr1uHj43PZgYmIVKVs/1hsnv7Y8cTm6U+2f6zRIdUIV1xxBVdccQUff/wxWVlZpZ67aNEioqKi2LhxI+PHj2fatGls374dyP/lOHToUP744w/ef/99PvjgA06cOMHQoUOx2+3cddddPPzww0RERJCUlERSUhJ33XVXmeOsU6cOALm5uWU6v6A3YMGCBSQlJV1Wl9N9992H2Wzmgw8+KPb4+vXreeWVV5g3bx47duzgnXfeoX379gDMnj2bjh07MnToUEe+ISEh2Gw2goKCeP3119m2bRtPP/008+bN46233ip07y1btrB3717ee+89XnvtNT788EOWLFniOP7MM8/w/PPP89hjj7F161Zef/11goODATh//jy9e/fG29ubjz76iM8//xyLxULfvn0LFTTlcckBrGlpaZe8iclkYvLkyUyePPmyghARMZrd04+soElGh1ElUlLPMCt+NafPpuPXwIcpYwcT6G+ulGd5eHgQHx/P+PHjWbFiBddccw2dOnXizjvvpEOHDoXO7d69O6NGjQLgwQcfZOnSpWzcuJGOHTvy9ddf8+OPP7Jz507Cw8OB/H8st23blo0bN9KtWzfHlOMFYxnL6ujRoyxcuJDg4GCaN29epmv8/f0BaNCgQbmfV8Dd3Z3mzZuXOFbl8OHDWCwWunfvjqenJ6GhobRt29bxXE9PT+rVq1fo+e7u7kyZMsWxHR4ezq5du1i7di3333+/Y7+Pjw8vvvgiHh4eREZGcuedd7Jx40Yef/xxMjIyWLRoEXFxcdx3330AXHnllY63aNeuXYvdbmfRokWOF1Xmz59P8+bN+eyzz+jXr1+5PwstlCciUsvMil/NsZOnycmxcuzkaWYtWlWpz+vbty/79u1j9erV3HzzzWzfvp2bb76ZefPmFTqvVatWhbYbN27MH3/8AeQP7AwKCnIUIgBNmzYlKCiIffv2lTumzMxMgoODadKkCa1atSInJ4c333wTLy+vy8jw8pX25umdd95JVlYWrVu35uGHH+a9994jOzv7kvd89dVX6datG82aNSM4OJhFixZx5MiRQudERkYWmpr9r591dnY2N9xwQ7H337VrF4cOHSIkJITg4GCCg4MJCwsjLS2N3377raypF6KF8kREapnTZ9Nxu/gL0M1k4lRa5S/dUadOHW688UZuvPFGJk2axLhx45g9ezbjxo1zFACenp6FrjGZTNgvjuMp7Zf25cxKW69ePTZt2oSbmxsBAQHUr1+/xGcXsFqt5X5OafLy8ti/fz/t2rUr9nhISAjfffcdGzdu5Ouvv2bq1KnMmTOHL774oki8BdatW8fkyZN59tln6dixI76+vixbtowPP/yw0HmX+qxLY7PZiI6O5tVXXy1yrGHDhqVeWxIVIyIitYxfAx+OnTyNm8mEzW7Hr0HVj++LjIzEarWSlZVVptaIFi1acOzYMQ4dOuRoHTl48CDHjx+nRYsWAHh5eZX5bRiTycSVV15Z4nF/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q8By+Wz1mpHZ7G2jwxAREXGqMrWM7Ny5k65du9K1a1cuXLhAXFwcXbt2ZdasWRw9epSPP/6Y48eP061bNyIjIx1/1q1bV9nxi4iIiIsrU8tIly5dSEtLK/F4acdERERESqO1aURERMRQKkZERETEUCpGRERExFAqRkRERMRQKkZERETEUCpGRERExFAqRkRERMRQKkZERETEUCpGRERExFAqRkRERMRQZZoOXkpnyj2Fd2oCJus57B6+ZPvHYvf0MzosERERl6CWESfwTk3ALTcVE7m45abinbrM6JBERERchooRJzBZz4HJdHHDlL8tIiIiZaJixAnsHr5gt1/csOdvi4iISJmoGHGCbP9YbJ7+2PHE5ulPtn+s0SGJiIi4DA1gdQK7px9ZQZOMDkNERMQlqWVEREREDKViRERERAylYkREREQMpWJEREREDKViRERERAylYkREREQMpWJEREREDKViRERERAylYkREREQMpWJEREREDKViRERERAyltWmcICX1DLPiV3P6bDp+DXyYMnYwgf5mo8MSERFxCWVqGUlMTGTQoEG0bNkSs9nMypUrCx232+3ExcXRokULGjduTK9evdi7d2+lBFwdzYpfzbGTp8nJsXLs5GlmLVpldEgiIiIuo0zFSGZmJlFRUcyePZu6desWOf7yyy8THx/PnDlz2LBhAwEBAfTr14/09HSnB1wdnT6bjpvJBICbycSptNqRt4iIiDOUqRjp0aMH06ZNo2/fvri5Fb7EbrezePFiHn30Ufr27UtUVBSLFy8mIyODNWvWVErQ1Y1fAx9sdjsANrsdvwY+BkckIiLiOio8gPXQoUOkpKTQvXt3x766devSuXNntm3bVtHbu4QpYwcTbPHDy8uDJoF+TBk72OiQREREXEaFB7CmpKQAEBAQUGh/QEAAx48fL/G65OTkij7akHuXZOzgmx3/f/bMH5w984fTn2FEXlVBebkW5VW6iIgIp9xHpDZx2ts0potjJgrY7fYi+/6ssr5hk5OTa+QPA+XlWpSXa6mpeYm4igp301gsFgBOnjxZaH9qamqR1hIRERGRv6pwMRIeHo7FYuGrr75y7MvKymLLli106tSporcXERGRGq5M3TQZGRkcOHAAAJvNxpEjR9i9ezcNGzYkNDSU0aNHM2/ePCIiImjevDkvvPAC9evXZ8CAAZUavIiIiLi+MhUjO3fupHfv3o7tuLg44uLiGDx4MIsXL2b8+PFcuHCBJ554grS0NNq3b8+6devw8XHuK66m3FN4pyZgsp7D7uFLtn8sdk8/pz5DREREqlaZipEuXbqQlpZW4nGTycTkyZOZPHmy0wIrjndqAm65qWAyYcpNxTt1GVlBkyr1mSIiIlK5XGqhPJP1HBS8oWMy5W+LiIiIS3OpYsTu4QsXZzrFbs/fFhEREZfmUsVItn8sNk9/7Hhi8/Qn2z/W6JBERESkgpw26VlVsHv6aYyIiIhIDeNSLSMiIiJS86gYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQ6kYEREREUOpGBERERFDqRgRERERQzmlGMnLy2PmzJlcc801WCwWrrnmGmbOnInVanXG7UVERKQG83DGTebPn09CQgKLFy8mKiqKn376idGjR+Pl5cXEiROd8QgRERGpoZxSjGzfvp1bb72V2267DYDw8HBuu+02duzY4Yzbi4iISA3mlG6amJgYNm/ezC+//ALAvn372LRpE7fccoszbi8iIiI1mCktLc1e0ZvY7XZmzpzJiy++iLu7O1arlQkTJjB16tQSr0lOTq7oY0VEqp2IiAijQxBxOU7pplm3bh2rV68mISGBFi1asGfPHp588knCwsK4//77i72msr5hk5OTa+QPA+XlWpSXa6mpeYm4CqcUI9OmTePhhx+mf//+ALRq1YrDhw/z0ksvlViMiIiIiICTxoycP38ed3f3Qvvc3d2x2WzOuL2IiIjUYE5pGbn11luZP38+4eHhtGjRgt27dxMfH8+gQYOccXsRERGpwZxSjMydO5fnnnuOf/zjH6SmpmKxWHjggQc0x4iIiIhcklOKER8fH2bPns3s2bOdcTsRERGpRbQ2jYiIiBhKxYiIiIgYSsWIiIiIGErFiIiIiBhKxYiIiIgYSsWIiIiIGErFiIiIiBhKxYiIiIgYSsWIiIiIGErFiIiIiBhKxYiIiIgYSsWIiIiIGErFiIiIiBhKxYiIiIgYSsWIiIiIGErF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rRwHDhyga9euhY4dOHDgclIBiv8lXpVKen5ZPyuLxUKdOnVITk4ucuzXX391SowiItWBxoyIQ3R0NFdccQUfffQRycnJReYQ6dSpU4nHbrnlFnx9fXn++efJyckpcu/U1NQSn9uhQwfMZjOvvfYaubm5jv1ffvllsb+Iy6pevXoAhV5JrkolPb+sn5WnpyfdunXj448/5tChQ47jJ0+eZO3atZUYuYhI1VLLiDi4u7vToUMHvv76a9zc3OjQoUOh4506deKpp54CKDR4FfIn/HrppZcYNWoUf//73xkwYAAWi4WjR4/yzTff0KBBgyLruRTw9vbmqaeeYuLEidxxxx3069ePP/74g4SEBKKiosjKyrqsfApej50xYwb9+vXDy8uLbt260ahRo1Kve+utt/jiiy+K7B8+fLjTnl/Wz2rKlCls3LiR2267jREjRuDh4cGrr75KtsQbrQAAAWBJREFUeHg4P/74Y7niERGprlSMSCHXXXcdX3/9NS1btiwyo+ifW0OKm3m1f//+NGnShJdeeon4+HiysrKwWCxce+213H///aU+d9SoUZhMJl555RWmT59OREQECQkJvPbaa5f9hsx1113HU089xYoVK/jiiy+w2Wx88sknRSZq+6vly5cXu79Xr15FZl+93OeX9bOKjo5m3bp1TJ06lblz5xIQEEBsbCxms5nx48eXORYRkerMlJaWppFwUm3FxMQQEhJS7EJ9IiJSM2jMiFQLxXXFfPHFF+zbt6/IoFYREalZ1DIi1cLXX3/NU089Rd++fbFYLPz888+sWLGCgIAAEhMTtQidiEgNpjEjUi00bdqUsLAwli9fzpkzZ/D19aVPnz5MmzZNhYiISA2nlhERERExlMaMiIiIiKFUjIiIiIihVIyIiIiIoVSMiIiIiKFUjIiIiIihVIyIiIiIof4/Fg9qS8omAyYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fitted = fit(shotput, 'Weight Lifted', 'Shot Put Distance')\n", "shotput.with_column('Best Straight Line', fitted).scatter('Weight Lifted')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nonlinear Regression\n", "The graph above reinforces our earlier observation that the scatter plot is a bit curved. So it is better to fit a curve than a straight line. The [study](http://digitalcommons.wku.edu/ijes/vol6/iss2/10/) postulated a quadratic relation between the weight lifted and the shot put distance. So let's use quadratic functions as our predictors and see if we can find the best one. \n", "\n", "We have to find the best quadratic function among all quadratic functions, instead of the best straight line among all straight lines. The method of least squares allows us to do this.\n", "\n", "The mathematics of this minimization is complicated and not easy to see just by examining the scatter plot. But numerical minimization is just as easy as it was with linear predictors! We can get the best quadratic predictor by once again using `minimize`. Let's see how this works." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that a quadratic function has the form\n", "\n", "$$\n", "f(x) ~=~ ax^2 + bx + c\n", "$$\n", "\n", "for constants $a$, $b$, and $c$.\n", "\n", "To find the best quadratic function to predict distance based on weight lifted, using the criterion of least squares, we will first write a function that takes the three constants as its arguments, calculates the fitted values by using the quadratic function above, and then returns the mean squared error. \n", "\n", "The function is called `shotput_quadratic_mse`. Notice that the definition is analogous to that of `lw_mse`, except that the fitted values are based on a quadratic function instead of linear." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def shotput_quadratic_mse(a, b, c):\n", " x = shotput.column('Weight Lifted')\n", " y = shotput.column('Shot Put Distance')\n", " fitted = a*(x**2) + b*x + c\n", " return np.mean((y - fitted) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now use `minimize` just as before to find the constants that minimize the mean squared error. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.04004838e-03, 2.82708045e-01, -1.53182115e+00])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "best = minimize(shotput_quadratic_mse)\n", "best" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our prediction of the shot put distance for an athlete who lifts $x$ kilograms is about\n", "\n", "$$\n", "-0.00104x^2 ~+~ 0.2827x - 1.5318\n", "$$\n", "\n", "meters. For example, if the athlete can lift 100 kilograms, the predicted distance is 16.33 meters. On the scatter plot, that's near the center of a vertical strip around 100 kilograms." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16.3382" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(-0.00104)*(100**2) + 0.2827*100 - 1.5318" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the predictions for all the values of `Weight Lifted`. You can see that they go through the center of the scatter plot, to a rough approximation." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "x = shotput.column(0)\n", "shotput_fit = best.item(0)*(x**2) + best.item(1)*x + best.item(2)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAAFZCAYAAACc3vXuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deVzU1f7H8dewioaMCI4IgqmIYmguKdV1yUozt1JLyTZTySVbTXPPFZcsl5C8YtcW00r9aZZtVppS6s1MrFuEkuZuoLigIDDz+0OdJEBZBoYZ38/Hw8ej+a6fMyq+O99zvseQnp5uQURERMSJudi7ABEREZGypsAjIiIiTk+BR0RERJyeAo+IiIg4PQUeERERcXoKPCIiIuL0FHhERETE6SnwiIiIiNNzusCTnJxs7xLKhNrlWNQux+Ks7RKRvzld4BERERH5JwUeERERcXoKPCIiIuL0FHhERETE6bnZuwARESm6nJwcMjIy7F2GSIVTpUoV3NwKjzUKPCIiDiInJ4czZ85gNBoxGAz2LkekwrBYLKSnp+Pt7V1o6NEjLRERB5GRkaGwI1IAg8GA0Wi8au+nAo+IiANR2BEp2LX+buiRlogU6FjqSabHruDEqTP4+ngzdliUvUsSESkx9fCISIGmx67g8PETXLiQw+HjJ5i+cLm9SxIRKTEFHhEp0IlTZ3C51EXsYjCQln7GzhWJM4uIiGDBggX2LsPujEYja9eutXcZTkmBR0QK5OvjjdliAcBsseDr423nisRRpaam8sILLxAREUGNGjUIDQ2le/fufPPNNza9T0xMDLfeeus1j1u2bBlGo9H6KywsjMcff5x9+/YV635FDScRERHWe5lMJho3bky/fv349NNP8x2blJTEPffcU6T7d+nShRdffLFYNV/PFHhEpEBjh0URaPLFw8ONWjV8NYZHSuyRRx5hx44dvP766/zwww+8//773H333Zw4ccJuNVWuXJmkpCR+++03Fi9ezO7du3nooYfIzc0tk/uNHDmSpKQkfvjhB5YsWUJwcDAPP/xwvsBiMpnw9PQskxqudwo8IlKgGn5G5k4YwjuvjmTexCHU8DPauyRxQOnp6Xz//fe8/PLLtGvXjuDgYJo3b87w4cPp1atXnmMzMzN59tlnqV27NuHh4cyfPz/P/gMHDtCvXz+CgoIICgri4Ycf5tChQ8DFXpuZM2fy66+/WntTli1bVmhdBoMBk8lEzZo1adu2LaNGjeJ///sfKSkpQMG9N1c+douIiADgsccew2g0Wj8XxtvbG5PJRO3atYmMjCQmJoY5c+awePFivv32W+tx/7zvzJkzuemmm6hRowYNGjTgySefBGDIkCEkJCSwePFia3v3799Pbm4uTz31FE2aNKFmzZo0b96cefPmYTabrdccMmQIffr0IS4ujkaNGhESEsLQoUM5d+6c9RiLxcKCBQto3rw5NWrUIDw8nEmTJln3Hz58mCeeeIKQkBBCQkJ48MEH2bt371W/A3tT4BERkTJzww03cMMNN7B+/XoyMzOveuzChQsJDw9n06ZNPPPMM0yYMIHt27cDF/8B7tevH3/99RcfffQR69at4+jRo/Tr1w+LxULPnj156qmnCA0NJSkpiaSkJHr27FnkOitVqgRAdnZ2kY6//Dhu/vz5JCUllejx3COPPILRaGTdunUF7l+7di2vv/46c+bMYceOHbz//vu0aNECgBkzZtCqVSv69etnbW9QUBBms5mAgACWLl3Ktm3bGD9+PHPmzOHdd9/Nc+3vv/+eX3/9lTVr1vCf//yHjz/+mDfeeMO6f/LkycyePZvnnnuOrVu3snTpUgIDAwE4d+4c3bp1w9PTk08++YQvv/wSk8lEjx498oSmikbT0kVErjMFvXKgrHrw3NzciI2N5ZlnnuGtt96iSZMmtG7dmvvuu4+WLVvmObZDhw5ER0cD8OSTT7Jo0SI2bdpEq1at2LhxIz///DM7d+4kJCQEgPj4eJo1a8amTZto3769dWkBk8lUrBoPHTrEggULCAwMpH79+kU6x8/PDwAfH59i3+8yV1dX6tevX+jYoQMHDmAymejQoQPu7u7Url2bZs2aWe/r7u5O5cqV89zf1dWVsWPHWj+HhISwa9cuVq1axaOPPmrd7u3tzauvvoqbmxthYWHcd999bNq0ieeff56zZ8+ycOFCYmJieOSRRwCoW7curVq1AmDVqlVYLBYWLlxofffN3LlzqV+/Pp9//jn3339/ib6PsqYeHhGR60x5v3KgR48e/Pbbb6xYsYK77rqL7du3c9dddzFnzpw8xzVu3DjP55o1a/LXX38BFwfzBgQEWMMOQJ06dQgICOC3334rdk0ZGRkEBgZSq1YtGjduzIUL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p8AjIiIiTk+BR0RERJyeAo+IiIg4PQUeERERcXoKPCIiIuL0FHhERETE6SnwiIiIiNNT4BERERGnp8AjIiIiTs8mgSc3N5epU6fSpEkTTCYTTZo0YerUqeTk5Nji8iIiIiKl4maLi8ydO5f4+Hji4uIIDw/nl19+YciQIXh4eDBy5Ehb3EJERESkxGwSeLZv384999xD586dAQgJCaFz587s2LHDFpcXERERKRWbPNKKjIxky5Yt/P777wD89ttvbN68mbvvvtsWlxcREREpFUN6erqltBexWCxMnTqVV199FVdXV3JychgxYgTjxo0r9Jzk5OTS3lZEpMIJDQ21dwkiUgCbPNJavXo1K1asID4+noYNG7J7925eeuklgoODefTRRws8p6x+KCQnJzvlDxy1y7GoXY7FWdslIn+zSeCZMGECTz31FL169QKgcePGHDhwgNdee63QwCMiIiJSXmwyhufcuXO4urrm2ebq6orZbLbF5UVERERKxSY9PPfccw9z584lJCSEhg0bkpiYSGxsLH379rXF5UVERERKxSaBZ9asWUybNo0XXniB1NRUTCYTjz32mN7BIyIiIhWCTQKPt7c3M2bMYMaMGba4XKEM2Wl4psZjyDmNxa0qWX6DsLj7luk9RURExPE51FpanqnxuGSnYiAbl+xUPFMX27skERERcQAOFXgMOafBYLj0wXDxs4iIiMg1OFTgsbhVBcul9yRaLBc/i4iIiFyDQwWeLL9BmN39sOCO2d2PLL9B9i5JREREHIBNBi2XF4u7L5kBo+xdhoiIiDgYh+rhERERESkJBR4RERFxego8IiIi4vQUeERERMTpKfCIiIiI01PgEREREaenwCMiIiJOT4FHREREnJ4Cj4iIiDg9BR4RERFxego8IiIi4vQUeERERMTpKfCIiIiI01PgEREREaenwCMiIiJOT4FHREREnJ4Cj4iIiDg9BR4RERFxego8IiIi4vTc7F1AcRxLPcn02BWcOHUGXx9vxg6Looaf0d5liYiISAXnUD0802NXcPj4CS5cyOHw8RNMX7jc3iWJiIiIA3CowHPi1BlcDAYAXAwG0tLP2LkiERERcQQOFXh8fbwxWywAmC0WfH287VyRiIiIOAKHCjxjh0URaPLFw8ONWjV8GTssyt4liYiIiANwqEHLNfyMzJ0wxN5liIiIiIOxWQ/P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zqBBgwp97LVq1SpOnjzJ448/joeHB3FxcfTr14/du3djNBrp0aMHycnJrF27lpkzZ2I0GgGsq2HbyoABAwgJCWH27NkMGDCAVq1accMNNxAcHHzV+xf1u/rll1+4//77MRqNjBgxAjc3N5YsWYK3t7dN2yEi4uwUeAT4u6dm69at1lCzbds2nnvuOapWrUrDhg3z7WvWrBmenp7AxVXRR44cycMPP5xnBtXjjz9OZGQkU6ZMYfXq1QXeOysri2nTptG0aVM+/vhjPDw8ALj99tvp1asXN954Y75z9u/fz44dO/D19QXgtttu44477uD//u//6N+/PxEREdx0002sXbuWrl27ltl4odatW2M2m5k9ezatWrWiT58+1n2F3b8439XUqVPJzc3l008/JSQkBICHHnqIFi1alEl7RESclR5pCQD16tXDZDJZH7ns3buX48ePW8foREZG5tt32223Wc//+uuvOX36NA888ABpaWnWX1lZWbRt25aEhATMZnOB9/7hhx84efIk/fv3t4YdgDvvvLPQHpmePXtaww5As2bNqFy5Mvv27SvV91AeivpdZWdn880333Dvvfdaww5AjRo16NWrlx1bICLieNTDI1atW7fmiy++4MKFC2zdupXKlSsTERFh3ffee+9Z9wF5Bizv2bMHgO7duxd6/dOnT1sf7VzpwIEDANStWzffvnr16pGUlJRve+3atfNtMxqNnDx58mpNrBCK+l1lZGSQmZlJ/fr18+0vaJuIiBROgUesIiMj+eijj9i5cydbt26lRYsWuLld/CPSunVrMjMzrftcXFxo1aqV9dzLvTeLFi3CZDIVeP0qVaoUu6bCBucWNsvLEQbzFvW7Onv2LECB0/4doZ0iIhWJAo9YXX5EtXXrVrZu3cp9991n3VenTh1q1qxp3de4ceM807Avj7Px9/enffv2xbrv5d6alJQU2rZtm2dfSkpKSZoCFBwUylNh9y/qd2UymahUqRLJycn59u3du9cmNYqIXC80hkesIiIiuOGGG/jkk09ITk7O946d1q1bF7rv7rvvpmrVqsyePZsLFy7ku3Zqamqh923ZsiVGo5H//Oc/ZGdnW7d/9dVXBf5jX1SVK1cGyDOdvjwVdv+iflfu7u60b9+e9evXs3//fuv+48ePs2rVqjKsXETE+aiHR6xcXV1p2bIlGzduxMXFhZYtW+bZ37p1a8aMGQOQZ8AyXHzp3muvvUZ0dDT/+te/6N27NyaTiUOHDvHtt9/i4+OTb/2pyzw9PRkzZgwjR46ka9eu3H///fz111/Ex8cTHh5OZmZmidpzeWr3pEmTuP/++/Hw8KB9+/ZUr179que9++67bNiwId/2/v372+z+Rf2uxo4dy6ZNm+jcuTMDBgzAzc2NN998k5CQEH7++edi1SMicj1T4JE8br31VjZu3EijRo3yvTn4yl6dgt6w3KtXL2rVqsVrr71GbGwsmZmZmEwmbrnlFh599NGr3jc6OhqDwcDrr7/OxIkTCQ0NJT4+nv/85z8lnnl16623MmbMGN566y02bNiA2Wzm008/zfeyxH9asmRJgdu7dOmS7y3LJb1/Ub+riIgIVq9ezbhx45g1axb+/v4MGjQIo9HIM888U+RaRESud4b09HSNfpQKKzIykqCgqhgy1AAAAKRJREFUoAIXLxURESkqjeGRCqGgx1YbNmzgt99+yzeQWUREpLjUwyMVwsaNGxkzZgw9evTAZDLxv//9j7feegt/f38SEhK0MKeIiJSKxvBIhVCnTh2Cg4NZsmQJJ0+epGrVqnTv3p0JEyYo7IiISKmph0dEREScnsbwiIiIiNNT4BERERGnp8AjIiIiTk+BR0RERJyeAo+IiIg4PQUeERERcXr/D1f2Gg8I4X9CAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shotput.with_column('Best Quadratic Curve', shotput_fit).scatter(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note:** We fit a quadratic here because it was suggested in the original study. But it is worth noting that at the rightmost end of the graph, the quadratic curve appears to be close to peaking, after which the curve will start going downwards. So we might not want to use this model for new athletes who can lift weights much higher than those in our data set. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "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.3" } }, "nbformat": 4, "nbformat_minor": 1 }