{ "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": [ "
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)
" ], "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": [ "