{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"remove_input"
]
},
"outputs": [],
"source": [
"path_data = '../../data/'\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"import matplotlib\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.style.use('fivethirtyeight')\n",
"\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# A/B Testing\n",
"In modern data analytics, deciding whether two numerical samples come from the same underlying distribution is called *A/B testing*. The name refers to the labels of the two samples, A and B.\n",
"\n",
"We will develop the method in the context of an example. The data come from a sample of newborns in a large hospital system. We will treat it as if it were a simple random sample though the sampling was done in multiple stages. [Stat Labs](https://www.stat.berkeley.edu/~statlabs/) by Deborah Nolan and Terry Speed has details about a larger dataset from which this set is drawn. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Smokers and Nonsmokers ###\n",
"The table `births` contains the following variables for 1,174 mother-baby pairs: the baby's birth weight in ounces, the number of gestational days, the mother's age in completed years, the mother's height in inches, pregnancy weight in pounds, and whether or not the mother smoked during pregnancy."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Birth Weight
\n",
"
Gestational Days
\n",
"
Maternal Age
\n",
"
Maternal Height
\n",
"
Maternal Pregnancy Weight
\n",
"
Maternal Smoker
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
120
\n",
"
284
\n",
"
27
\n",
"
62
\n",
"
100
\n",
"
False
\n",
"
\n",
"
\n",
"
1
\n",
"
113
\n",
"
282
\n",
"
33
\n",
"
64
\n",
"
135
\n",
"
False
\n",
"
\n",
"
\n",
"
2
\n",
"
128
\n",
"
279
\n",
"
28
\n",
"
64
\n",
"
115
\n",
"
True
\n",
"
\n",
"
\n",
"
3
\n",
"
108
\n",
"
282
\n",
"
23
\n",
"
67
\n",
"
125
\n",
"
True
\n",
"
\n",
"
\n",
"
4
\n",
"
136
\n",
"
286
\n",
"
25
\n",
"
62
\n",
"
93
\n",
"
False
\n",
"
\n",
"
\n",
"
5
\n",
"
138
\n",
"
244
\n",
"
33
\n",
"
62
\n",
"
178
\n",
"
False
\n",
"
\n",
"
\n",
"
6
\n",
"
132
\n",
"
245
\n",
"
23
\n",
"
65
\n",
"
140
\n",
"
False
\n",
"
\n",
"
\n",
"
7
\n",
"
120
\n",
"
289
\n",
"
25
\n",
"
62
\n",
"
125
\n",
"
False
\n",
"
\n",
"
\n",
"
8
\n",
"
143
\n",
"
299
\n",
"
30
\n",
"
66
\n",
"
136
\n",
"
True
\n",
"
\n",
"
\n",
"
9
\n",
"
140
\n",
"
351
\n",
"
27
\n",
"
68
\n",
"
120
\n",
"
False
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Birth Weight Gestational Days Maternal Age Maternal Height \\\n",
"0 120 284 27 62 \n",
"1 113 282 33 64 \n",
"2 128 279 28 64 \n",
"3 108 282 23 67 \n",
"4 136 286 25 62 \n",
"5 138 244 33 62 \n",
"6 132 245 23 65 \n",
"7 120 289 25 62 \n",
"8 143 299 30 66 \n",
"9 140 351 27 68 \n",
"\n",
" Maternal Pregnancy Weight Maternal Smoker \n",
"0 100 False \n",
"1 135 False \n",
"2 115 True \n",
"3 125 True \n",
"4 93 False \n",
"5 178 False \n",
"6 140 False \n",
"7 125 False \n",
"8 136 True \n",
"9 120 False "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"births = pd.read_csv(path_data + 'baby.csv')\n",
"births.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One of the aims of the study was to see whether maternal smoking was associated with birth weight. Let's see what we can say about the two variables.\n",
"\n",
"We'll start by selecting just `Birth Weight` and `Maternal Smoker`. There are 715 non-smokers among the women in the sample, and 459 smokers."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"smoking_and_birthweight = births[['Maternal Smoker', 'Birth Weight']]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Maternal Smoker
\n",
"
count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
715
\n",
"
\n",
"
\n",
"
1
\n",
"
True
\n",
"
459
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Maternal Smoker count\n",
"0 False 715\n",
"1 True 459"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#smoking_birthweight = smoking_and_birthweight.groupby('Maternal Smoker').count()\n",
"\n",
"smoking_birthweight1 = smoking_and_birthweight.groupby([\"Maternal Smoker\"]).agg(\n",
" count=pd.NamedAgg(column=\"Maternal Smoker\", aggfunc=\"count\")\n",
")\n",
"\n",
"smoking_birthweight1.reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"smoker = births[births['Maternal Smoker'] == False]\n",
"\n",
"non_smoker = births[births['Maternal Smoker'] == True]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's look at the distribution of the birth weights of the babies of the non-smoking mothers compared to those of the smoking mothers. To generate two overlaid histograms, we will use `hist` with the optional `group` argument which is a column label or index. The rows of the table are first grouped by this column and then a histogram is drawn for each one."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Zo2mTp1qs/+FCxfq7rvv1pdffqlJkyZJkrKzszV37lwtWLBAn3/+uS5duqQXXnjBus3Vq1f1yCOPaPXq1dq5c6c6deqk/v3768cff7T7+P39/bV3716bMFyQkydPasOGDVq+fLnef/99rVmzRn369NG+ffu0atUqzZ8/X2+++abWrVtn3WbYsGHau3evli5dqq1bt6py5crq0aOHrl27lm//aWlpio6OVmBgoD766CP5+vpq+vTp+uCDD5SQkKCUlBSNGDFCI0aM0ObNm222nTJligYOHKiUlBQ9/vjjBdY/YsQIBQUFFflV1CXAxZk1a5YeffRRff311xo4cKBd21w/5nvuuUdbt27Vp59+qqtXr6p379424b8kuDwYAAAAKGd69uypiRMn6ueff1bVqlW1detWzZ492+ZMoyQ99NBDNo9nz56ttWvXasuWLYqNjdUdd9whSapevbr8/f2t4xISEhQXF6d+/fpJkurWrauXX35ZQ4YM0bRp06zhuFWrVvrXv/5l3S4lJUV5eXlKSEhQvXr1JElxcXF69tlnZTabZTQaFRUVZXNGd9SoUdq0aZPWrFmjF1980a7jHzNmjL7//ns1bdpUYWFhat68udq2basePXrYXGZrMpmUmJio6tWrKzIyUu3bt1dycrJ++OEHeXt7q379+mrRooV27typzp076+eff9bGjRv12WefqXXr1pKkxYsXKyoqSh9//LGeeuop676PHTumrl27qn379kpISJDRaFRmZqYSExO1atUqtWrVSpJUp04d7d27V0lJSerQoYN1+8GDBxd7H/H48eMVFxdX5JjAW7jPpmvXrjbHZE8Afvvtt9WoUSNNmTLFumzx4sWqU6eOvv32WzVr1qzEdRBaAQAAgHLGz89PTzzxhD788ENVr15dDzzwgEJCQvKNO3funGbMmKEdO3bo3LlzMplMunbtmk6dOlXk/r/77jvt27dP8+bNsy4zm826du2a0tPTFRAQIEm69957823r4+NjDaySFBAQoNzcXF26dEk1atRQZmamZs2apc2bNystLU15eXnKyspSw4YN7T7+gIAAffHFFzp06JCSk5O1e/dujRgxQgsXLtTmzZtVpUoVSX/c/1u9enXrdnfeeaciIiJs7t288847de7cOUnSkSNHZDQadd9991nXXw+8hw8fti7LyclRx44d1alTJyUk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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unit = ''\n",
"\n",
"fig, ax = plt.subplots(figsize=(10,5))\n",
"\n",
"ax.hist(smoker['Birth Weight'], density=True, \n",
" label='Maternal Smoker = True', \n",
" color='blue', \n",
" alpha=0.8, \n",
" ec='white', \n",
" zorder=5)\n",
"\n",
"ax.hist(non_smoker['Birth Weight'], density=True, \n",
" label='Maternal Smoker = ', \n",
" color='gold', \n",
" alpha=0.8, \n",
" ec='white', \n",
" zorder=10)\n",
"\n",
"y_vals = ax.get_yticks()\n",
"\n",
"y_label = 'Percent per ' + (unit if unit else 'unit')\n",
"\n",
"x_label = ''\n",
"\n",
"ax.set_yticklabels(['{:g}'.format(x * 100) for x in y_vals])\n",
"\n",
"plt.ylabel(y_label)\n",
"\n",
"plt.xlabel(x_label)\n",
"\n",
"plt.title('')\n",
"\n",
"ax.legend(bbox_to_anchor=(1.04,1), loc=\"upper left\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The distribution of the weights of the babies born to mothers who smoked appears to be based slightly to the left of the distribution corresponding to non-smoking mothers. The weights of the babies of the mothers who smoked seem lower on average than the weights of the babies of the non-smokers. \n",
"\n",
"This raises the question of whether the difference reflects just chance variation or a difference in the distributions in the larger population. Could it be that there is no difference between the two distributions in the population, but we are seeing a difference in the samples just because of the mothers who happened to be selected?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Hypotheses ###\n",
"We can try to answer this question by a test of hypotheses. The chance model that we will test says that there is no underlying difference in the popuations; the distributions in the samples are different just due to chance. \n",
"\n",
"Formally, this is the null hypothesis. We are going to have to figure out how to simulate a useful statistic under this hypothesis. But as a start, let's just state the two natural hypotheses.\n",
"\n",
"**Null hypothesis:** In the population, the distribution of birth weights of babies is the same for mothers who don't smoke as for mothers who do. The difference in the sample is due to chance.\n",
"\n",
"**Alternative hypothesis:** In the population, the babies of the mothers who smoke have a lower birth weight, on average, than the babies of the non-smokers."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test Statistic ###\n",
"The alternative hypothesis compares the average birth weights of the two groups and says that the average for the mothers who smoke is smaller. Therefore it is reasonable for us to use the difference between the two group means as our statistic. \n",
"\n",
"We will do the subtraction in the order \"average weight of the smoking group $-$ average weight of the non-smoking group\". Small values (that is, large negative values) of this statistic will favor the alternative hypothesis. \n",
"\n",
"The observed value of the test statistic is about $-9.27$ ounces."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Maternal Smoker
\n",
"
Birth Weight
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
123.085315
\n",
"
\n",
"
\n",
"
1
\n",
"
True
\n",
"
113.819172
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Maternal Smoker Birth Weight\n",
"0 False 123.085315\n",
"1 True 113.819172"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"means_table = smoking_and_birthweight.groupby('Maternal Smoker').mean()\n",
"\n",
"means_table = means_table.reset_index()\n",
"\n",
"means_table"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-9.266142572024918"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"means = means_table['Birth Weight']\n",
"observed_difference = means[1] - means[0]\n",
"observed_difference"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are going compute such differences repeatedly in our simulations below, so we will define a function to do the job. The function takes three arguments:\n",
"\n",
"- the name of the table of data\n",
"- the label of the column that contains the numerical variable whose average is of interest\n",
"- the label of the column that contains the Boolean variable for grouping\n",
"\n",
"It returns the difference between the means of the `True` group and the `False` group."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def difference_of_means(table, label, group_label):\n",
" reduced = table[[label, group_label]]\n",
" means_table = reduced.groupby(group_label).mean()\n",
" means = means_table[label]\n",
" return means[1] - means[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To check that the function is working, let's use it to calculate the observed difference between the means of the two groups in the sample."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-9.266142572024918"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"difference_of_means(births, 'Birth Weight', 'Maternal Smoker')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That's the same as the value of `observed_difference` calculated earlier."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Predicting the Statistic Under the Null Hypothesis\n",
"\n",
"To see how the statistic should vary under the null hypothesis, we have to figure out how to simulate the statistic under that hypothesis. A clever method based on *random permutations* does just that.\n",
"\n",
"If there were no difference between the two distributions in the underlying population, then whether a birth weight has the label `True` or `False` with respect to maternal smoking should make no difference to the average. The idea, then, is to shuffle all the labels randomly among the mothers. This is called *random permutation*. \n",
"\n",
"Take the difference of the two new group means: the mean weight of the babies whose mothers have been randomly labeled smokers and the mean weight of the babies of the remaining mothers who have all been randomly labeled non-smokers. This is a simulated value of the test statistic under the null hypothesis.\n",
"\n",
"Let's see how to do this. It's always a good idea to start with the data."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Maternal Smoker
\n",
"
Birth Weight
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
120
\n",
"
\n",
"
\n",
"
1
\n",
"
False
\n",
"
113
\n",
"
\n",
"
\n",
"
2
\n",
"
True
\n",
"
128
\n",
"
\n",
"
\n",
"
3
\n",
"
True
\n",
"
108
\n",
"
\n",
"
\n",
"
4
\n",
"
False
\n",
"
136
\n",
"
\n",
"
\n",
"
5
\n",
"
False
\n",
"
138
\n",
"
\n",
"
\n",
"
6
\n",
"
False
\n",
"
132
\n",
"
\n",
"
\n",
"
7
\n",
"
False
\n",
"
120
\n",
"
\n",
"
\n",
"
8
\n",
"
True
\n",
"
143
\n",
"
\n",
"
\n",
"
9
\n",
"
False
\n",
"
140
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Maternal Smoker Birth Weight\n",
"0 False 120\n",
"1 False 113\n",
"2 True 128\n",
"3 True 108\n",
"4 False 136\n",
"5 False 138\n",
"6 False 132\n",
"7 False 120\n",
"8 True 143\n",
"9 False 140"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"smoking_and_birthweight.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are 1,174 rows in the table. To shuffle all the labels, we will draw a random sample of 1,174 rows without replacement. Then the sample will include all the rows of the table, in random order. \n",
"\n",
"We can use the Table method `sample` with the optional `with_replacement=False` argument. We don't have to specify a sample size, because by default, `sample` draws as many times as there are rows in the table."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"smoking_and_birthweight2 = smoking_and_birthweight.copy()\n",
"\n",
"shuffled_labels = smoking_and_birthweight2.sample(len(smoking_and_birthweight2), replace = False)\n",
"\n",
"shuffled_labels = np.array(shuffled_labels['Maternal Smoker'])\n",
"\n",
"smoking_and_birthweight2['Shuffled Label'] = shuffled_labels\n",
"\n",
"original_and_shuffled = smoking_and_birthweight2"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Maternal Smoker
\n",
"
Birth Weight
\n",
"
Shuffled Label
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
120
\n",
"
True
\n",
"
\n",
"
\n",
"
1
\n",
"
False
\n",
"
113
\n",
"
False
\n",
"
\n",
"
\n",
"
2
\n",
"
True
\n",
"
128
\n",
"
True
\n",
"
\n",
"
\n",
"
3
\n",
"
True
\n",
"
108
\n",
"
True
\n",
"
\n",
"
\n",
"
4
\n",
"
False
\n",
"
136
\n",
"
False
\n",
"
\n",
"
\n",
"
5
\n",
"
False
\n",
"
138
\n",
"
False
\n",
"
\n",
"
\n",
"
6
\n",
"
False
\n",
"
132
\n",
"
False
\n",
"
\n",
"
\n",
"
7
\n",
"
False
\n",
"
120
\n",
"
True
\n",
"
\n",
"
\n",
"
8
\n",
"
True
\n",
"
143
\n",
"
True
\n",
"
\n",
"
\n",
"
9
\n",
"
False
\n",
"
140
\n",
"
False
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Maternal Smoker Birth Weight Shuffled Label\n",
"0 False 120 True\n",
"1 False 113 False\n",
"2 True 128 True\n",
"3 True 108 True\n",
"4 False 136 False\n",
"5 False 138 False\n",
"6 False 132 False\n",
"7 False 120 True\n",
"8 True 143 True\n",
"9 False 140 False"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"original_and_shuffled.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each baby's mother now has a random smoker/non-smoker label in the column `Shuffled Label`, while her original label is in `Maternal Smoker`. If the null hypothesis is true, all the random re-arrangements of the labels should be equally likely.\n",
"\n",
"Let's see how different the average weights are in the two randomly labeled groups."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Shuffled Label
\n",
"
Birth Weight
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
False
\n",
"
119.581818
\n",
"
\n",
"
\n",
"
1
\n",
"
True
\n",
"
119.276688
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Shuffled Label Birth Weight\n",
"0 False 119.581818\n",
"1 True 119.276688"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shuffled_only = original_and_shuffled.drop(columns=['Maternal Smoker'])\n",
"\n",
"shuffled_group_means = shuffled_only.groupby('Shuffled Label').mean()\n",
"\n",
"shuffled = shuffled_group_means.reset_index()\n",
"\n",
"shuffled.head(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The averages of the two randomly selected groups are quite a bit closer than the averages of the two original groups. We can use our function `difference_of_means` to find the two differences."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-0.30512972865913923"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"difference_of_means(original_and_shuffled, 'Birth Weight', 'Shuffled Label')"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"-9.266142572024918"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"difference_of_means(original_and_shuffled, 'Birth Weight', 'Maternal Smoker')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"But could a different shuffle have resulted in a larger difference between the group averages? To get a sense of the variability, we must simulate the difference many times. \n",
"\n",
"As always, we will start by defining a function that simulates one value of the test statistic under the null hypothesis. This is just a matter of collecting the code that we wrote above. But because we will later want to use the same process for comparing means of other variables, we will define a function that takes three arguments:\n",
"\n",
"- the name of the table of data\n",
"- the label of the column that contains the numerical variable\n",
"- the label of the column that contains the Boolean variable for grouping\n",
"\n",
"It returns the difference between the means of two groups formed by randomly shuffling all the labels."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"def one_simulated_difference(table, label, group_label):\n",
" \n",
" births1 = table.copy()\n",
"\n",
" shuffled_labels = births1.sample(len(births1), replace = False)\n",
"\n",
" shuffled_labels = np.array(shuffled_labels[group_label])\n",
"\n",
" births1['Shuffled Label'] = shuffled_labels\n",
"\n",
" original_and_shuffled = births1\n",
"\n",
" shuffled_only = original_and_shuffled.drop(columns=['Maternal Smoker'])\n",
"\n",
" shuffled_group_means = shuffled_only.groupby('Shuffled Label').mean()\n",
"\n",
" table1 = shuffled_group_means.reset_index()\n",
" \n",
" return difference_of_means(table1, label, 'Shuffled Label') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Run the cell below a few times to see how the output changes."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.3690235690235681"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"one_simulated_difference(births, 'Birth Weight', 'Maternal Smoker')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Permutation Test\n",
"Tests based on random permutations of the data are called *permutation tests*. We are performing one in this example. In the cell below, we will simulate our test statistic – the difference between the averages of the two groups – many times and collect the differences in an array. "
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.78235446, -1.2423694 , -0.54122827, ..., -1.41050018,\n",
" -2.52660237, 2.47797127])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"differences = np.array([])\n",
"\n",
"repetitions = 5000\n",
"for i in np.arange(repetitions):\n",
" new_difference = one_simulated_difference(births, 'Birth Weight', 'Maternal Smoker')\n",
" differences = np.append(differences, new_difference)\n",
"\n",
"differences"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The array `differences` contains 5,000 simulated values of our test statistic: the difference between the mean weight in the smoking group and the mean weight in the non-smoking group, when the labels have been assigned at random. \n",
"\n",
"### Conclusion of the Test\n",
"The histogram below shows the distribution of these 5,000 values. It is the empirical distribution of the test statistic simulated under the null hypothesis. This is a prediction about the test statistic, based on the null hypothesis."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Observed Difference: -9.266142572024918\n"
]
},
{
"data": {
"image/png": "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hg0bhuzsbPTp06ck6yUiIiKickbtwLpo0SLUr18fe/fuhaGhocK8IUOGoFOnTli0aBEDKxEREREVK7WfdPXo0SN0795dKawCgKGhIfz9/fH48eNiLY6IiIiISO3A6uLigsTExHznP378GJ9//nmxFEVERERElEftwDpz5kyEhYVh165dSvN27tyJDRs2YNasWcVaHBERERGR2mNYly1bhqpVq2LQoEGYPHkyqlevDpFIhDt37uDZs2dwdHTE0qVLsXTpUvkyIpEI27dvL5HCiYiIiKh8UDuwXr9+HSKRCDY2NgAgH68qFothY2MDqVSKGzduKCzDe7MSERER0cdSO7BeunSpJOsgIiIiIlJJ7TGsRERERETawMBKRERERILGwEpEREREgsbASkRERESCxsBKRERERILGwEpEREREgqZ2YK1Tpw7279+f7/wDBw6gTp06xVIUEREREVEetQNrQkICMjMz852fmZmJBw8eFEtRRERERER5NBoSUNCTq27duoWKFSt+dEFERERERO8r8ElXmzdvxpYtW+SvFyxYgLCwMKV2qampuHr1Ktq3b1/8FRIRERFRuVZgYM3MzERSUpL8dVpaGnJzcxXaiEQiVKhQAf3798fkyZNLpkoiIiIiKrcKDKxDhgzBkCFDAABffvklQkJC0KlTp1IpjIiIiIgIKCSwvu/ixYslWQcRERERkUpqB9Y8L1++xMOHD5GSkgKZTKY0v2nTpsVSGBERERERoEFgTUlJwaRJk7Br1y7k5OQozZfJZBCJRHjx4kWxFkhERERE5ZvagXXcuHHYu3cvhgwZgqZNm0IikZRgWURERERE76gdWI8cOYJhw4Zhzpw5JVkPEREREZECtR8cYGBgAEdHx5KshYiIiIhIidqB1dfXF4cPHy7WjcfExKBnz56oVasWJBIJNm3apDA/ICAAEolE4V/btm2LtQYiIiIiEja1A+vo0aPx5MkTDB8+HGfPnsWTJ0/w7NkzpX+ayMzMhKurK0JCQmBkZKSyTcuWLXHjxg35vx07dmi0DSIiIiIq29Qew1q/fn2IRCJcuHAB27dvz7edJncJ8PT0hKenJwBgxIgRKtuIxWJYWFiovU4iIiIi+rSoHVh/+OEHiESikqxFpdOnT8PJyQmVKlVC06ZNMXXqVJiZmZV6HURERESkHWoH1qCgoJKsQ6W2bdvC29sb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hX81a9bUdllEREREVIr0tF1AYZydnbF37175a11dXS1WQ0RERESlTfCBVU9PDxYWFtoug4iIiIi0RNBDAgDg3r17qFWrFr788kt89913uHfvnrZLIiIiIqJSJOgjrA0aNMCKFSvg7OyM58+fY/78+fD09MSZM2dQpUoVlcvEx8d/9HaLYx3lxafQV+npDpBKjUplW1KptFS286E3b3QhleZoZdtFpWlflcV91FRB+6itz1ZxK433Udt9VZY+q0Xpq/T0LMTH3yv+YsqAT+F3Ymn5sK+cnZ0LbC/owNquXTuF1w0aNIC7uzs2b96MUaNGqVymsB0uTHx8/Eevo7z4VPoqLc0QYnHJj42WSqUQi8Ulvh1V9PUBsVjQX3cFRemrsraPRZHfPmrzs1XcSvp9FEJflZXPalH7ytRU75P43aCpT+V3YmkoSl8JfkjA+0xMTODi4oI7d+5ouxQiIiIiKiVlKrC+fv0a8fHxvAiLiIiIqBwR9DmJn376CR06dICNjY18DOurV6/Qq1cvbZdGRERERKVE0IH18ePHGDx4MJKTk/HZZ5+hQYMGOHz4MOzs7LRdGhERERGVEkEH1nXr1mm7BCIiIiLSsjI1hpWIiIiIyh8GViIiIiISNAZWIiIiIhI0BlYiIiIiEjQGViIiIiISNAZWIiIiIhI0BlYiIiIiEjQGViIiIiISNAZWIiIiIhI0BlYiIiIiEjQGViIiIiISNAZWIiIiIhI0BlYiIiIiEjQGViIiIiISND1tF0BERESfDpFIF//8Y6jtMkqUtXUuLC2ztV1GucLASkRERMXm+XMgOFhX22WUqAULAEtLbVdRvnBIABEREREJGgMrEREREQkahwRQgRITDfDokeq/a9LTHZCWVvbHKWVlfdqnroiIiMo6BlYq0KNHOpg4UXWgk0qNIBaX/bAXFKTtCoiIiKggHBJARERERILGwEpEREREgsbASkRERESCxsBKRERERILGwEpEREREgsbASkRERESCxsBKRERERILGwEpEREREgsbASkRERESCxiddEREREWlAJNLFP/8oPpr8U3lceR5r61xYWmZruwy5MhFY16xZg6VLlyIpKQkuLi4IDg6Gh4eHtssiIiKicuj5cyA4WPHR5J/K48rzLFgAWFpqu4r/I/ghAREREZg8eTImTJiAkydPolGjRujevTsePHig7dKI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\n",
"text/plain": [
"