{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from datascience import *\n", "import numpy as np\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plots\n", "plots.style.use('fivethirtyeight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Comparing Two Samples" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "births = Table.read_table('baby.csv')\n", "#The table contains \n", "\n", "#the baby's birth weight in ounces\n", "# the number of gestational days, \n", "#the mother's age in completed years#\n", "#the mother's height in inches,\n", "#pregnancy weight in pounds\n", "# and whether or not the mother smoked during pregnancy.\n", "\n", "\n", "#The question we are looking at is the following:\n", "#Does smoking have a effect on birth weight? \n", "\n", "#We will first compute the difference in average wights \n", "#between the smokers and the nonsmokers\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-9.265999999999991" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# lets first get just the birthweigh and the smoker info\n", "smoking_babies=births.select(\"Birth Weight\",\"Maternal Smoker\")\n", "#lets save this table to a variable and use group to find \n", "# how large each group is \n", "smoking_babies.group('Maternal Smoker')\n", "# we have more maternal smokers \n", "\n", "#Lets now find the average weight of each group\n", "\n", "smoking_babies.group('Maternal Smoker', np.average)\n", "average_babies=smoking_babies.group('Maternal Smoker', np.average)\n", "\n", "#The observed statistic we will be lookin at is given by\n", "# the difference of the smokers by the nonsmokers\n", "\n", "observed_statistic = 113.819-123.085\n", "observed_statistic\n", "\n", "\n", "#Question: What values of our statistic are in \n", "#favor of the alternative: positive or negative?\n", "\n", "#the statistic is a negative value since a negatice number\n", "#means the non smoker babies are heavier on average in this data so far" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "smoking_and_birthweight = births.select('Maternal Smoker', 'Birth Weight')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Maternal Smoker count
False 715
True 459
" ], "text/plain": [ "Maternal Smoker | count\n", "False | 715\n", "True | 459" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "smoking_and_birthweight.group('Maternal Smoker')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "smoking_and_birthweight.hist('Birth Weight', group='Maternal Smoker')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Test Statistic\n", "\n", "[Question] What values of our statistic are in favor of the alternative: positive or negative?" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-9.266142572024918" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "average_babies\n", "\n", "#notice we hard coded the observed statistic\n", "#we want to repeat this logic so we will rewrite it as \n", "# a function\n", "\n", "#lets walk thourhg anoother way of computing the \n", "#test statistic\n", "\n", "averageshold=average_babies.column(\"Birth Weight average\")\n", "#now we wnat the difference of smokers - nonsmokers \n", "observed_stat=averageshold.item(1)-averageshold.item(0)\n", "\n", "\n", "#Select birth weight and smoking maternal\n", "#Find averages of groups - needed a table\n", "#Got column of averages - used .column\n", "#found difference - \n", "\n", "def difference_of_averages(inputT):\n", " BM=inputT.select(\"Birth Weight\",\"Maternal Smoker\")\n", " average_table=BM.group(\"Maternal Smoker\",np.average)\n", " means = average_table.column(\"Birth Weight average\")\n", " return means.item(1)-means.item(0)\n", "\n", "#Computes differences of average birth weight between smokers\n", "#and nonsmokers\n", "difference_of_averages(births)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'means_table' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mmeans\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmeans_table\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mobserved_difference\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmeans\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mmeans\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mobserved_difference\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mNameError\u001b[0m: name 'means_table' is not defined" ] } ], "source": [ "means = means_table.column(1)\n", "observed_difference = means.item(1) - means.item(0)\n", "observed_difference" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def difference_of_means(table, label, group_label):\n", " \"\"\"Takes: name of table, column label of numerical variable,\n", " column label of group-label variable\n", " Returns: Difference of means of the two groups\"\"\"\n", " \n", " #table with the two relevant columns\n", " reduced = table.select(label, group_label) \n", " \n", " # table containing group means\n", " means_table = reduced.group(group_label, np.average)\n", " # array of group means\n", " means = means_table.column(1)\n", " \n", " return means.item(1) - means.item(0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "difference_of_means(births, 'Birth Weight', 'Maternal Smoker')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Random Permutation (Shuffling)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "#We want to see then if the observed statistic due to chance?\n", "#i. is the p-value of -9.26 small or large? \n", "\n", "#to do so we assume that smoking has no real effect!\n", "\n", "#To set up our experiment we will use permutation\n", "\n", "#Again if smoking vs nonsmoking does not effect weight then\n", "#we would expect the average birth weights to be close\n", "\n", "#avergesmokerwight - avergenonsmokerwight about 0\n", "\n", "\n", "#lets reiew sample\n", "\n", "letters = Table().with_column('Letter', make_array('a', 'b', 'c', 'd', 'e'))" ] }, { "cell_type": "code", "execution_count": 22, "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", "
Letter Permutated
a d
b b
c a
d e
e c
" ], "text/plain": [ "Letter | Permutated\n", "a | d\n", "b | b\n", "c | a\n", "d | e\n", "e | c" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sample randomly chooses with replacement\n", "letters.sample()\n", "#if there is no sample size it just shuffules the entire sample\n", "\n", "#there is an optional argument where we can sample without replacement\n", "letters.sample(with_replacement = False) #permutes all elements\n", "#this makes sure we do not draw the same item twice\n", "\n", "#so if we would like to 'permuate an attribute' we can use sample without replacement\n", "\n", "permutated_letters=letters.sample(with_replacement = False).column(0)\n", "letters.with_column('Permutated',permutated_letters)" ] }, { "cell_type": "code", "execution_count": 13, "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", "
Letter
d
e
c
b
a
" ], "text/plain": [ "Letter\n", "d\n", "e\n", "c\n", "b\n", "a" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letters.sample(with_replacement = False)" ] }, { "cell_type": "code", "execution_count": 14, "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", "
Letter Shuffled
a d
b c
c e
d a
e b
" ], "text/plain": [ "Letter | Shuffled\n", "a | d\n", "b | c\n", "c | e\n", "d | a\n", "e | b" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letters.with_column('Shuffled', letters.sample(with_replacement = False).column(0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulation Under Null Hypothesis" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "smoking_babies\n", "#Shuffle all group labels\n", "#Assign each shuffled label to a birth weight\n", "#Find the difference between the averages of the two shuffled groups\n", "#Repeat\n", "permutated_smoking_attribute=smoking_babies.select(\"Maternal Smoker\").sample(with_replacement =False).column(0)\n", "\n", "smoking_babies.with_columns('Permutated Maternal Smoker',permutated_smoking_attribute)\n", "#lets make this table to use our janky funciton\n", "permutated=smoking_babies.select(\"Birth Weight\").with_columns('Maternal Smoker',permutated_smoking_attribute)\n", "#still permutated labels\n", "\n", "#use our jank function\n", "difference_of_averages(permutated)\n", "# Very close to zero in comparions to -9\n", "\n", "#Now we will run simulation\n", "\n", "#Make function to simulates the expierment\n", "def permutate_and_average():\n", " #permutate thelables and save\n", " perm=smoking_babies.select(\"Maternal Smoker\").sample(with_replacement =False).column(0)\n", " #make table with weights and permutated labels then save\n", " permutated_table=smoking_babies.select(\"Birth Weight\").with_columns('Maternal Smoker',perm)\n", " #place our table into our function to compute average and return result\n", " return difference_of_averages(permutated_table)\n", "\n", "permutate_and_average()\n", "#use for loop to rerurn 1000 and record results\n", "\n", "#make array to save data\n", "hold = make_array()\n", "\n", "for i in np.arange(1000):\n", " new_average=permutate_and_average()\n", " hold = np.append(hold,new_average)\n", "\n" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "averages=Table().with_column('Averages',hold)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "averages.hist(bins=np.arange(-10,10,.5))\n", "#most of the averages are between -4 and 4 pounds\n", "#it seems like our ouserved statistic is not random\n", "#since our simulated values are far away!\n", "\n", "#lets try to compute the p-value\n", "\n", "np.count_nonzero(hold<=difference_of_averages(births))\n", "#The p-value is zero!!\n", "#Since there are no simulated averages that are less then -9.16\n", "#There for the p-value is extermely low and smoking does have an effect!" ] }, { "cell_type": "code", "execution_count": 18, "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", "
Maternal Smoker Birth Weight Shuffled Label
False 120 True
False 113 False
True 128 False
True 108 False
False 136 True
False 138 True
False 132 True
False 120 False
True 143 True
False 140 True
\n", "

... (1164 rows omitted)

" ], "text/plain": [ "Maternal Smoker | Birth Weight | Shuffled Label\n", "False | 120 | True\n", "False | 113 | False\n", "True | 128 | False\n", "True | 108 | False\n", "False | 136 | True\n", "False | 138 | True\n", "False | 132 | True\n", "False | 120 | False\n", "True | 143 | True\n", "False | 140 | True\n", "... (1164 rows omitted)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "original_and_shuffled" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1.4784679372914553" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "difference_of_means(original_and_shuffled, 'Birth Weight', 'Shuffled Label')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-9.266142572024918" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "difference_of_means(original_and_shuffled, 'Birth Weight', 'Maternal Smoker')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Permutation Test" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "#Now we will run simulation\n", "\n", "#Make function to simulates the expierment\n", "\n", "\n", "#use for loop to rerurn 1000 and record results" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.823831070889895" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "one_simulated_difference(births, 'Birth Weight', 'Maternal Smoker')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "differences = make_array()\n", "\n", "for i in np.arange(2500):\n", " new_difference = one_simulated_difference(births, 'Birth Weight', 'Maternal Smoker')\n", " differences = np.append(differences, new_difference)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Observed Difference: -9.266142572024918\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Table().with_column('Difference Between Group Means', differences).hist()\n", "print('Observed Difference:', observed_difference)\n", "plots.title('Prediction Under the Null Hypothesis');" ] }, { "cell_type": "code", "execution_count": null, "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }