{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# HIDDEN\n", "\n", "from datascience import *\n", "path_data = '../../../data/'\n", "import numpy as np\n", "\n", "import matplotlib\n", "matplotlib.use('Agg', warn=False)\n", "%matplotlib inline\n", "import matplotlib.pyplot as plots\n", "plots.style.use('fivethirtyeight')" ] }, { "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 `baby` 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", " \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", "
Birth Weight Gestational Days Maternal Age Maternal Height Maternal Pregnancy Weight Maternal Smoker
120 284 27 62 100 False
113 282 33 64 135 False
128 279 28 64 115 True
108 282 23 67 125 True
136 286 25 62 93 False
138 244 33 62 178 False
132 245 23 65 140 False
120 289 25 62 125 False
143 299 30 66 136 True
140 351 27 68 120 False
\n", "

... (1164 rows omitted)

" ], "text/plain": [ "Birth Weight | Gestational Days | Maternal Age | Maternal Height | Maternal Pregnancy Weight | Maternal Smoker\n", "120 | 284 | 27 | 62 | 100 | False\n", "113 | 282 | 33 | 64 | 135 | False\n", "128 | 279 | 28 | 64 | 115 | True\n", "108 | 282 | 23 | 67 | 125 | True\n", "136 | 286 | 25 | 62 | 93 | False\n", "138 | 244 | 33 | 62 | 178 | False\n", "132 | 245 | 23 | 65 | 140 | False\n", "120 | 289 | 25 | 62 | 125 | False\n", "143 | 299 | 30 | 66 | 136 | True\n", "140 | 351 | 27 | 68 | 120 | False\n", "... (1164 rows omitted)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "baby = Table.read_table(path_data + 'baby.csv')\n", "baby" ] }, { "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 = baby.select('Maternal Smoker', 'Birth Weight')" ] }, { "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", "
Maternal Smoker count
False 715
True 459
" ], "text/plain": [ "Maternal Smoker | count\n", "False | 715\n", "True | 459" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "smoking_and_birthweight.group('Maternal Smoker')" ] }, { "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": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/choldgraf/anaconda/envs/dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "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": [ "The distribution of the weights of the babies born to mothers who smoked appears to be shifted 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; the distributions in the samples are different just due to chance. Formally, this is the null hypothesis.\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": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Maternal Smoker Birth Weight average
False 123.085
True 113.819
" ], "text/plain": [ "Maternal Smoker | Birth Weight average\n", "False | 123.085\n", "True | 113.819" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "means_table = smoking_and_birthweight.group('Maternal Smoker', np.average)\n", "means_table" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-9.266142572024918" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "means = means_table.column(1)\n", "observed_difference = means.item(1) - means.item(0)\n", "observed_difference" ] }, { "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 birth weights randomly among the mothers. This is called *random permutation*. \n", "\n", "Take the difference of the two new group means: the mean of the shuffled weights assigned to the smokers and the mean of the shuffled weights assigned to the 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": 8, "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
False 120
False 113
True 128
True 108
False 136
False 138
False 132
False 120
True 143
False 140
\n", "

... (1164 rows omitted)

" ], "text/plain": [ "Maternal Smoker | Birth Weight\n", "False | 120\n", "False | 113\n", "True | 128\n", "True | 108\n", "False | 136\n", "False | 138\n", "False | 132\n", "False | 120\n", "True | 143\n", "False | 140\n", "... (1164 rows omitted)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "smoking_and_birthweight" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 1,174 rows in the table. To shuffle all the birthweights, 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": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "shuffled_weights = smoking_and_birthweight.sample(with_replacement = False).column(1)\n", "original_and_shuffled = smoking_and_birthweight.with_column('Shuffled Birth Weight', shuffled_weights)" ] }, { "cell_type": "code", "execution_count": 10, "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 Birth Weight
False 120 94
False 113 96
True 128 102
True 108 101
False 136 55
False 138 122
False 132 116
False 120 163
True 143 110
False 140 137
\n", "

... (1164 rows omitted)

" ], "text/plain": [ "Maternal Smoker | Birth Weight | Shuffled Birth Weight\n", "False | 120 | 94\n", "False | 113 | 96\n", "True | 128 | 102\n", "True | 108 | 101\n", "False | 136 | 55\n", "False | 138 | 122\n", "False | 132 | 116\n", "False | 120 | 163\n", "True | 143 | 110\n", "False | 140 | 137\n", "... (1164 rows omitted)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "original_and_shuffled" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each mother now has a random birth weight assigned to her. If the null hypothesis is true, all these random arrangements should be equally likely.\n", "\n", "Let's see how different the average weights are in the two randomly selected groups." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Maternal Smoker Birth Weight average Shuffled Birth Weight average
False 123.085 118.91
True 113.819 120.322
" ], "text/plain": [ "Maternal Smoker | Birth Weight average | Shuffled Birth Weight average\n", "False | 123.085 | 118.91\n", "True | 113.819 | 120.322" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_group_means = original_and_shuffled.group('Maternal Smoker', np.average)\n", "all_group_means" ] }, { "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." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4119505766564515" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shuffled_means = original_and_shuffled.group('Maternal Smoker', np.average).column(2)\n", "difference = shuffled_means.item(1) - shuffled_means.item(0)\n", "difference" ] }, { "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", "Let's collect all the code that we need for simulating one value of the difference between averages, under the null hypothesis. Notice that because we are using the same label each time for the column of shuffled weights, the existing column just gets overwritten by the newly generated one. This works well for us because we don't need to save all the shuffled values. We just need to save the value of the statistic." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.48756951109892555" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate one value of the test statistic under the null hypothesis\n", "\n", "# Shuffle all the weights and assign the shuffled weights to the two groups of mothers\n", "shuffled_weights = smoking_and_birthweight.sample(with_replacement = False).column(1)\n", "original_and_shuffled = smoking_and_birthweight.with_column('Shuffled Birth Weight', shuffled_weights)\n", "\n", "# Find the difference between the means of two randomly assigned groups\n", "shuffled_means = original_and_shuffled.group('Maternal Smoker', np.average).column(2)\n", "difference = shuffled_means.item(1) - shuffled_means.item(0)\n", "difference" ] }, { "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. The code in the body of the for loop is just copied over from the cell above." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "differences = make_array()\n", "\n", "repetitions = 5000\n", "for i in np.arange(repetitions):\n", " \n", " shuffled_weights = smoking_and_birthweight.sample(with_replacement = False).column(1)\n", " original_and_shuffled = smoking_and_birthweight.with_column('Shuffled Birth Weight', shuffled_weights)\n", "\n", " shuffled_means = original_and_shuffled.group('Maternal Smoker', np.average).column(2)\n", " simulated_difference = shuffled_means.item(1) - shuffled_means.item(0)\n", " \n", " differences = np.append(differences, simulated_difference)\n", " " ] }, { "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. \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. It is a prediction made by the null hypothesis, about the statistic." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Observed Difference: -9.266142572024918\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/choldgraf/anaconda/envs/dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Table().with_column('Difference Between Group Averages', differences).hist()\n", "print('Observed Difference:', observed_difference)\n", "plots.title('Prediction Under the Null Hypothesis');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how the distribution is centered around 0. This makes sense, because under the null hypothesis the two groups should have roughly the same average. Therefore the difference between the group averages should be around 0.\n", "\n", "The observed difference in the original sample is about $-9.27$ ounces, which doesn't even appear on the horizontal scale of the histogram. The observed value of the statistic and the predicted behavior of the statistic under the null hypothesis are inconsistent. \n", "\n", "The conclusion of the test is that the data support the alternative more than they support the null. The average birth weight of babies born to mothers who smoke is less than the average birth weight of babies born to non-smokers.\n", "\n", "If you want to compute an empirical P-value, remember that low values of the statistic favor the alternative hypothesis. " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "empirical_P = np.count_nonzero(differences <= observed_difference) / repetitions\n", "empirical_P" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The empirical P-value is 0, meaning that none of the 5,000 observed samples resulted in a difference of -9.27 or lower. This is an approximation; the exact chance of getting a difference in that range is not 0 but it is vanishingly small." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A Function to Simulate the Differences Under the Null Hypothesis ###\n", "We will want to perform permutation tests for the difference between averages in other contexts as well. Let us define a function that generates the array of simulated differences, based on the code that we wrote above. That will save us time later.\n", "\n", "The function `difference_of_permuted_sample_means` takes four arguments:\n", "- the name of the data table\n", "- the label of the column containing the variable whose average is of interest\n", "- the label of the column of group labels\n", "- the number of repetitions\n", "\n", "It returns and array of simulated differences in group means, each computed by first randomly permuting the data and assigning random values to each group. The length of the array is equal to the number of repetitions." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def permuted_sample_average_difference(table, label, group_label, repetitions):\n", " \n", " tbl = table.select(group_label, label)\n", " \n", " differences = make_array()\n", " for i in np.arange(repetitions):\n", " shuffled = tbl.sample(with_replacement = False).column(1)\n", " original_and_shuffled = tbl.with_column('Shuffled Data', shuffled)\n", "\n", " shuffled_means = original_and_shuffled.group(group_label, np.average).column(2)\n", " simulated_difference = shuffled_means.item(1) - shuffled_means.item(0)\n", " \n", " differences = np.append(differences, simulated_difference)\n", " \n", " return differences " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example of the use of this function, we will test whether there was any difference in the ages of the smoking and non-smoking mothers. The histograms of the two distributions in the sample are a little different. The smokers seem a little younger on average." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/choldgraf/anaconda/envs/dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp0AAAEJCAYAAADWypz2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XdYFFf7N/DvAkoUwbXAggoiRaMEC3YURU2wYEETg5VEH7EbNcVesMQVQX1Q1MQYS4IKxBK7qIgiApbEKEZjUGN7VCCaRUGJgd33j/zY15XiLOywxe/nurgudubMmfvsWdbbM2fOSBQKhQpERERERCIy03cARERERGT6mHQSERERkeiYdBIRERGR6Jh0EhEREZHomHQSERERkeiYdBIRERGR6Jh0EhEREZHomHQSERERkejeqKQzPT1d3yGIjm00DWyjaTD1Npp6+4hIt96opJOIiIiI9INJJxERERGJjkknEREREYmOSScRERERic5C3wEQERFVhPz8fOTm5uo7DCKTZWVlBQuLklNLJp1ERGTy8vPz8fTpU0ilUkgkEn2HQ2RyVCoVFAoFrK2tS0w8eXmdiIhMXm5uLhNOIhFJJBJIpdJSryYw6SQiojcCE04icb3ub4yX10nvAicu0ap8bm4urKysdB5HTOQsnddJRERE/+JIJxERERGJjiOdb7Cqd6fpO4T/I9V3AEREpEdyuRx79+5FSkqKvkMp4vbt22jWrBkSEhLQokULfYdTLjdv3oSXlxcSExPRtGnTCj8/k04iInpjaTu9p7y0ncYzbtw4bN++HcOGDUNkZKTGvvnz5yMiIgLdu3dHTEyM4DqlUim2bNmCfv36aRWLviUlJWHZsmW4fPkynj9/DplMhtatW2P58uWwsbHRd3gVwt/fH6dPny6y/datW5BKDX8Ah5fXiYiIDFi9evXw448/atwVnJ+fj+joaNSrV09vcb148aLCzvXbb7/hgw8+gIeHB/bt24eUlBSsXLkSNjY2FRqHriiVShQUFJTp2KFDh+LatWsaP9WrV9dxhOJg0klERGTAPDw84OLigt27d6u3xcXFwdLSEh07dtQo+/PPP6N///5wcXGBo6MjevTogbNnz6r3e3p6AgA++ugjSKVS9WsAOHToEDp37gyZTIamTZti0aJFGgmdp6cn5HI5JkyYACcnJwQHB+P27duQSqXYs2cPAgIC4ODggLZt2yIhIUF9XEFBASZOnIimTZvC3t4eXl5eiIiIgFKpFPweHD9+HDVr1oRcLoeHhwecnZ3RpUsXLF++HLVr1wYAnDp1ClKpFEePHkXnzp1hb2+Pnj174n//+x+SkpLQoUMH1K1bF4GBgXj8+LG6bqVSiWXLlsHDwwN2dnbw9vbGgQMHSoxFqVTi888/R9OmTXHjxg0AQHZ2NiZPngw3NzfUq1cPvXr1woULF9THbN26FXXr1sWRI0fQvn172Nra4tq1a4Lb/7KqVatCJpNp/BTeNb5t2zb4+vqiXr16cHd3x4gRI/Dw4cMS63rx4gW++OILNGrUCHZ2dvDw8MCiRYvU+//++2/MnTsXjRs3Rp06ddC1a1ecOHGiTHEDekw6PT09IZVKi/x8+OGH+gqJiIjIIA0fPhxbt25Vv46KisLQoUOLLFHz9OlTBAYG4tChQ4iPj4enpycGDhyoTrIKk8FVq1bh2rVr6tfx8fEYPXo0goODkZqaisjISOzZswcLFy7UqH/t2rVo2LAhTpw4gXnz5qm3L168GGPGjEFSUhJatGiBkSNHIicnB8C/SZqDgwM2b96MM2fOYO7cuVi+fDmioqIEt18mk+HPP/9EYmLia8vK5XLI5XIcO3YMCoUCI0eOxLJlyxAREYH9+/fj6tWrkMvl6vLr1q3D6tWrERISguTkZPj7+2P48OG4dOlSkbr/+ecfBAcH4/Tp04iLi4OrqytUKhUCAwPx4MEDxMTEIDExEd7e3ujbt69GwpeXl4ewsDCsXLkSZ86cgaOjI2JjY1G3bt1Sf2JjYwW/T/n5+Zg9ezaSkpKwfft2ZGRkYNSoUSWWX7t2LQ4dOoRNmzbh/Pnz+Pbbb+Hi4qLeP3bsWJw5cwbffvstkpOTMXDgQHz44Ye4cuWK4Jheprc5nQkJCRpDyw8fPoSvry8CAgL0FRIREZFBGjhwIObOnYsbN26gWrVqiI+Px7Jly7Bkieac1M6dO2u8XrZsGfbu3YujR48iMDBQPSpYvXp1yGQydbnw8HBMmjQJw4YNAwA0aNAAISEhGDNmDBYtWqRObr29vTF58mT1cbdv3wYAjB8/Hj179gQAzJs3D9HR0UhLS0P79u1RqVIlzJ49W31M/fr1cfHiRezcuRNBQUGC2h8QEID4+Hj07dsXtra28PLygo+PDwYNGqRuU6HZs2fD29sbADBixAhMmzYNJ06cQPPmzQEAgwcPxt69e9XlIyMjMXHiRAwcOFB9fHJyMiIjI7F+/Xp1udzcXAwaNAjZ2dk4ePAgatSoAQBITExEWloarl+/jipVqgAA5syZg8OHDyMmJkb9fhUUFCAsLEwdBwD07NkTrVq1KrXttra2Gq83b96Mbdu2qV9/+OGHWLlyJQBovJ/Ozs4IDw+Ht7c3MjIyNPq70N27d+Hu7o727dtDIpHAyckJ7dq1AwBcv34dP/74I65cuQIHBwcA/84xPnHiBDZv3oxly5aVGndx9JZ0vvoh+f7772FtbY3+/fvrKSIiIiLDJJVK0bt3b0RFRaF69ero2LEjHB0di5TLysrCl19+iVOnTiErKwsFBQV4/vw57t27V2r9Fy9exM8//4yIiAj1NqVSiefPnyMjIwP29vYAUOLd2x4eHurfCxOUrKws9baNGzfiu+++w927d5GXl4d//vmn2PhLYm5ujrVr12LOnDlITEzE+fPnsXr1aixfvhwHDx5E48aNi43Fzs6u2G2FsT158gQPHjxQJ1qF2rdvjyNHjmhsGzNmDGQyGfbt26exVvTFixfx7NkzuLm5aZTPy8vDH3/8oX5tYWGhMZ0BAKytrWFtbS34fQCA/v37Y8aMGRp1FLpw4QJCQ0Nx+fJlKBQK9RSGe/fuFZt0Dh06FAMGDECrVq3QtWtX+Pn5oVu3bjAzM8Mvv/wClUpVJCn++++/0bVrV61iLmQQd6+rVCp8//33CAwMVP8vgYiIiP6/YcOGYdy4cbCyssKsWcXfBT9u3DhkZmZiyZIlcHJygqWlJfr27fvam22USiWmT59e7NXGlweJSnowR6VKldS/F46KqlQqAMCuXbswc+ZMLFq0CG3atIGNjQ2++eYb7N+/v/QGF6NOnToYNGgQBg0ahDlz5qBly5ZYtWoV1q1bV2osr24TMp/01akLfn5+iI6OxpkzZzSSLqVSCTs7Oxw6dKhIHS8nhJaWljA3N9fYHxsbi6lTp5Yax8qVKzWmHlavXl3jEnihp0+fYsCAAXj33Xexfv161K5dG5mZmejdu3eJ/e/l5YVLly4hPj4eiYmJGD16NFq0aIGdO3dCqVTC3NwcJ06cKBJ3WXM1g0g6ExIScPv2bUHD7Onp6eU6V3mPNwZC2+hWUPLzUStSbm6l1xcqcozuYze0z4ahxSMGttH4lbd97u7uOorE9HXu3BmVKlXCo0eP4O/vX2yZ1NRULF26FN27dwcAZGZmIiMjQ6NMpUqVitw53axZM/z+++/FJjPllZKSgpYtW2L06NHqbS+PAJaVVCqFTCYr178HNjY2cHBwQGpqqsbUhJSUFDRq1EijbFBQEJo1a4ahQ4di27Zt6NKlC4B/37vMzEyYmZnB2dlZq/OX5fJ6Sa5du4a//voL8+fPV69q8Ouvv772OBsbG/Tv3x/9+/dHYGAgevTooV6btKCgAFlZWerpCuVlEEnnli1b4OXlVWTYuTjl+YJKT083+S84bdpY9a7uHyVZFto+0lKsx2Aa0meDn1XTYOptNPX2GRqJRILTp09DpVLB0tKy2DKurq6IjY1Fq1at8OzZM8ybNw+VK1fWKOPk5ISTJ0+iQ4cOsLS0hFQqxbRp0xAYGAhHR0f0798fFhYWuHr1Kn766aciNxNpy83NDdu3b8fRo0fh4uKCnTt3Ijk5WatlfjZt2oS0tDT07t0bDRo0QF5eHqKjo3HlyhVMmTKlXPFNmjQJcrkcrq6uaN68OWJiYpCSkoKTJ08WKfvxxx9DpVJh6NCh2Lp1K7p06QJfX1+0a9cOQ4YMwYIFC+Du7o7MzEwcO3YMvr6+pSZsZbm8XhInJydUrlwZ69evx8iRI/Hbb79p3DBVnNWrV6NOnTrw9PSEubk5du7cCRsbG9jb2+Ott97CgAEDMHbsWCxatAjNmjXD48ePcerUKbi6uqJ3795ax6j3pDMrKwsHDx5EeHi4vkMhIiIyaK9LUCIjIzFlyhT4+vrC3t4eM2bMwKNHjzTKLF68GLNnz4aHhwccHByQlpaGbt26ITY2FmFhYYiMjISFhQVcXV0xZMiQcsc8YsQIpKWlYdSoUVCpVOjbty8mTJig1d3rXl5eOHPmDD799FM8fPgQVapUgaurK7766qtyr3ozduxY5OTkYP78+cjMzIS7uzu+++67EgfCRowYUSTxjI2NxeLFizF58mRkZWXBzs4Obdu2xeDBg8sVmzbs7Oywdu1aLFq0CF9//TU8PT3x5Zdfqm+QKo6VlRX++9//4ubNmzA3N4enpyd27tyJt956CwDw1VdfISwsDPPmzcP9+/dRs2ZNeHl5wdfXt0wxShQKhapMR+pIREQEwsLC8Ntvv6FatWqinutN+F+5diOdhvEYzD6h2j1FQayRTm2fFCImflZNg6m30Zjal52dbTQLaBMZs9L+1vS6OLxKpcJ3332HAQMGiJ5wEhEREZH+6DXpPHXqFG7cuIGPPvpIn2EQERERkcj0OqezU6dOUCgU+gyBiIiIiCoAn71ORERERKJj0klEREREomPSSURERESiY9JJRERERKJj0klEREREomPSSURERESiY9JJREREeiWXy9G+fXt9h1Gs27dvQyqV4sKFC/oOxejp/dnrRERE+lLRjwN+5rhMq/Ljxo3D9u3bMWzYMERGRmrsmz9/PiIiItC9e3fExMQIrlMqlWLLli3o16+fVrHoW1JSEpYtW4bLly/j+fPnkMlkaN26NZYvXw4bGxt9hyeq27dvo1mzZqWWmT59OmbOnFlBEZUNk04iIiIDVq9ePfz4448IDQ2FlZUVACA/Px/R0dGoV6+e3uJ68eIFKleuXCHn+u233/DBBx9gxIgRkMvlsLKywh9//IH9+/fjxYsXFRKDLimVSqhUKpibmwsqX69ePVy7dk39+ttvv8XWrVtx/Phx9bbCz8bLVCoV8vPzUalSpfIHrQO8vE5ERGTAPDw84OLigt27d6u3xcXFwdLSEh07dtQo+/PPP6N///5wcXGBo6MjevTogbNnz6r3e3p6AgA++ugjSKVS9WsAOHToEDp37gyZTIamTZti0aJFGgmdp6cn5HI5JkyYACcnJwQHB6svPe/ZswcBAQFwcHBA27ZtkZCQoD6uoKAAEydORNOmTWFvbw8vLy9ERERAqVQKfg+OHz+OmjVrQi6Xw8PDA87OzujSpQuWL1+O2rVrA/j30dpSqRRHjx5F586dYW9vj549e+J///sfkpKS0KFDB9StWxeBgYF4/Pixum6lUolly5bBw8MDdnZ28Pb2xoEDB0qMRalU4vPPP0fTpk1x48YNAEB2djYmT54MNzc31KtXD7169dK4HL9161bUrVsXR44cQfv27WFra6uRRL6Oubk5ZDKZ+sfa2hpmZmYa26pVq4Zjx45BKpUiPj4enTt3hp2dHU6fPo2QkBD4+vpq1Llx40a4uLhobNu7dy98fHwgk8nQrFkzyOVy/PPPP4LjfB0mnURERAZu+PDh2Lp1q/p1VFQUhg4dColEolHu6dOnCAwMxKFDhxAfHw9PT08MHDhQnWQVJoOrVq3CtWvX1K/j4+MxevRoBAcHIzU1FZGRkdizZw8WLlyoUf/atWvRsGFDnDhxAvPmzVNvX7x4McaMGYOkpCS0aNECI0eORE5ODoB/kzQHBwds3rwZZ86cwdy5c7F8+XJERUUJbr9MJsOff/6JxMTE15aVy+WQy+U4duwYFAoFRo4ciWXLliEiIgL79+/H1atXIZfL1eXXrVuH1atXIyQkBMnJyfD398fw4cNx6dKlInX/888/CA4OxunTpxEXFwdXV1eoVCoEBgbiwYMHiImJQWJiIry9vdG3b188fPhQfWxeXh7CwsKwcuVKnDlzBo6OjoiNjUXdunVL/YmNjRX8PhUKCQnBggULcPbsWTRt2lTQMQcPHsTEiRMxfvx4nDlzBhEREYiJiUFoaKjW5y8JL68TEREZuIEDB2Lu3Lm4ceMGqlWrhvj4eCxbtgxLlizRKNe5c2eN18uWLcPevXtx9OhRBAYGqkcFq1evDplMpi4XHh6OSZMmYdiwYQCABg0aICQkBGPGjMGiRYvUya23tzcmT56sPu727dsAgPHjx6Nnz54AgHnz5iE6OhppaWlo3749KlWqhNmzZ6uPqV+/Pi5evIidO3ciKChIUPsDAgIQHx+Pvn37wtbWFl5eXvDx8cGgQYPUbSo0e/ZseHt7AwBGjBiBadOm4cSJE2jevDkAYPDgwdi7d6+6fGRkJCZOnIiBAweqj09OTkZkZCTWr1+vLpebm4tBgwYhOzsbBw8eRI0aNQAAiYmJSEtLw/Xr11GlShUAwJw5c3D48GHExMSo36+CggKEhYWp4wCAnj17olWrVqW23dbWVtB79LI5c+YUGdl8nfDwcHz++ecYPHgwAMDZ2Rlz587FZ599hjlz5mgdQ3GYdBIRERk4qVSK3r17IyoqCtWrV0fHjh3h6OhYpFxWVha+/PJLnDp1CllZWSgoKMDz589x7969Uuu/ePEifv75Z0RERKi3KZVKPH/+HBkZGbC3twcAtGjRotjjPTw81L87ODioYym0ceNGfPfdd7h79y7y8vLwzz//FBt/SczNzbF27VrMmTMHiYmJOH/+PFavXo3ly5fj4MGDaNy4cbGx2NnZFbutMLYnT57gwYMHaNeuncb52rdvjyNHjmhsGzNmDGQyGfbt26cxf/LixYt49uwZ3NzcNMrn5eXhjz/+UL+2sLDQmM4AANbW1rC2thb8PghVUj+VRKVS4dKlS7hy5YrGyGbhZ0ChUEAqlZY7LiadRERERmDYsGEYN24crKysMGvWrGLLjBs3DpmZmViyZAmcnJxgaWmJvn37vvZmG6VSienTpyMgIKDIvpdHEou7WQWAxo0qhaOiKpUKALBr1y7MnDkTixYtQps2bWBjY4NvvvkG+/fvL73BxahTpw4GDRqEQYMGYc6cOWjZsiVWrVqFdevWlRrLq9uEzCd9deqCn58foqOjcebMGXTt2lW9XalUws7ODocOHSpSx8sJpaWlZZEbh2JjYzF16tRS41i5ciU+/PDD18b7sqpVq2q8NjMzU/dHoZfnaqpUKiiVSsyePRv+/v5F6tNVYsykk4iIyAh07twZlSpVwqNHj4pNDAAgNTUVS5cuRffu3QEAmZmZyMjI0ChTqVIlFBQUaGxr1qwZfv/99yI3luhCSkoKWrZsidGjR6u3vTwCWFZSqRQymQy5ubllrsPGxgYODg5ITU3VmJqQkpKCRo0aaZQNCgpCs2bNMHToUGzbtg1dunQB8O97l5mZCTMzMzg7O2t1frEur7+qVq1ayMzM1NiWlpam/t3MzAyenp64ceOGKJ+BQkw6iYiIjIBEIsHp06ehUqlgaWlZbBlXV1fExsaiVatWePbsGebNm1dkWSMnJyecPHkSHTp0gKWlJaRSKaZNm4bAwEA4Ojqif//+sLCwwNWrV/HTTz8VuZlIW25ubti+fTuOHj0KFxcX7Ny5E8nJyahevbrgOjZt2oS0tDT07t0bDRo0QF5eHqKjo3HlyhVMmTKlXPFNmjQJcrkcrq6uaN68OWJiYpCSkoKTJ08WKfvxxx9DpVJh6NCh2Lp1K7p06QJfX1+0a9cOQ4YMwYIFC+Du7o7MzEwcO3YMvr6+6vmlxRHr8vqrfHx8MHv2bKxatQp9+vRBQkJCkZHZ6dOnIygoCA4ODujbty/MzMxw5coVpKWladw0Vh68e52IiMhIWFtbl7oQemRkJHJzc+Hr64uRI0di2LBhcHJy0iizePFinDp1Ch4eHvDx8QEAdOvWDbGxsUhKSkK3bt3QrVs3rFy5UifrgI4YMQIBAQEYNWoUunTpgjt37mDChAla1eHl5YVnz57h008/Rfv27dGrVy+cPn0aX331ldaXnl81duxYTJo0CfPnz0f79u1x4MABfPfdd0XmX77cnsWLF2Po0KFISEiARCJBbGwsfHx8MHnyZLRu3RojRozA9evX1fNb9a1p06YIDQ3F119/jY4dOyI1NbVIst6rVy9s27YN8fHx6NKlC9577z2sXr1aq7m3ryNRKBSq1xczDenp6XB3d9d3GKLSpo0V/SSOkvQJ1W5ycm5ubonzisojJrL4OVL6wM+qaTD1NhpT+7Kzs7UaWSOisintb40jnUREREQkOr3O6Xz48CFCQkJw9OhR5OTkwNnZGcuXLy/yhAUSx09p1/Udwv8pfRI1ERERGT+9JZ0KhQLdu3dHu3btEBsbi1q1auH27ds6uUuLiIiIiAyL3pLOVatWwd7eHl9//bV6m7ZLDRARERGRcRCcdIaGhqJPnz5o0qRJsfuvXr2KvXv3Yvr06YLqO3DgALp164YRI0bg1KlTsLe3R1BQEIKDg4ssyEqmLaTXea3KFxTkw9ycq30REREZE8F3r9eoUQPr169XP5v0Vbt27cKoUaPw+PFjQScufObr+PHjERAQgLS0NEyfPh3z58/XWED2Venp6YLqp9f7+7fP9B2CQbF8e7m+QyB641TU3e/Z2dmwsbHhoAaRiFQqFZ48eVLi3es6Gy7KycnReMzU6yiVSrRo0QLz588H8O+K/jdv3sSGDRtKTTrL8wVlTMt7lJU2bbyabpyjhWKNdBrSZ4OfVdNg6m00pvZZWVmpnx/NxJNI91QqFRQKRamL3Zf6L/fly5c1HpOUkpKC/Pz8IuUUCgU2btyo1ZePTCYr8oiphg0b4t69e4LrICIiEsLCwgLW1tZ48uSJvkMhMlnW1tawsCg5tSw16dy/fz9CQ0MB/Pv4rU2bNmHTpk3FlpVKpVi/fr3gwNq1a4fr1zWX7Ll+/bpOV74nIiIqZGFhwQXiifSo1KTz448/Ro8ePaBSqdC1a1fMmjUL7733XpFyVlZWaNCgQanZ7avGjx8PPz8/hIeHY8CAAbh06RLWr1+PuXPnat8KIh0wlCc0/StY3wEQERHpVKlZor29Pezt7QEA+/btQ6NGjXS2jqaXlxe2bt2KhQsXIiwsDPXq1cOsWbMwatQondRPRERERIZD8NCkGE8J6t69O7p3767zeomIiIjIsJSYdE6YMAESiQQREREwNzfHhAkTXluZRCJBZGSkTgMkqiiG81hQwMI4bggmIiISrMSkMzExEWZmZlAqlTA3N0diYuJrl5ngMhREREREVJwSk86Xl0oq7jURERERkVBm+g6AiIiIiExfmR7rkpOTA4VCAZWq6BM0uc4mEREREb1KcNKZl5eH0NBQfP/996U+X13os9eJiIiI6M0hOOn87LPPsH37dvj7+6N9+/aQSqVixkVEREREJkRw0rlv3z4EBQXhv//9r5jxEBEREZEJEnwjkUQiQbNmzcSMhYiIiIhMlOCks1evXjhx4oSIoRARERGRqRKcdH722Wf4448/8Mknn+D8+fN4+PAhsrKyivwQEREREb1K8JzO1q1bA/h3kfioqKgSy/HudSIiIiJ6leCkc9q0aXzMJRERERGVieCkc+bMmWLGQUREREQmjI/BJCIiIiLRCR7pDA0NfW0ZiUSCadOmlSsgIiIiIjI9gpPOpUuXlrhPIpFApVIx6SQiIiKiYglOOv/6668i25RKJe7cuYMNGzYgOTkZO3bs0GlwRERERGQayjWn08zMDM7Ozli8eDFcXV05yklERERExdLZjUTe3t44cuSI4PJyuRxSqVTjp2HDhroKh4iIiIgMiODL669z4cIFmJlpl8O6u7tj//796tfm5ua6CoeIiIiIDIjgpHP79u3Fbs/OzkZycjL27duHoKAg7U5uYQGZTKbVMURERERkfAQnnePHjy9xX61atTB16lSt53TeunULb7/9NipXroxWrVph3rx5cHZ21qoOIiIiIjJ8gpPOixcvFtkmkUgglUphbW2t9YlbtWqFtWvXwt3dHX/++SfCwsLg5+eH1NRU1KxZU+v6iIiIiMhwSRQKhUrfQQBATk4OmjdvjilTpmDixIkllktPT6/AqEzb3799pu8QqASWby/XdwhEFcLd3V3fIRBRBdHZjUTlVa1aNbz99tu4efNmqeXK8wWVnp5u8l9w2rTxarrBdL9WCgryYW5unLFrg59V42fqbTT19hGRbhnMs9fz8vKQnp7OG4uIiIiITJDehovmzJmDHj16oF69euo5nc+ePcPgwYP1FRIRERERiURvSef9+/cxatQoPHr0CLVr10arVq1w9OhRODk56SskIiIiIhKJ3pLOjRs36uvURERERFTBBM3pfPbsGWrWrInw8HCx4yEiIiIiEyQo6axatSpq164NGxsbseMhIiIiIhMk+O71gIAA7N69G0qlUsx4iIiIiMgECZ7T2bt3b5w6dQo9evRAUFAQnJ2dUaVKlSLlWrZsqdMAiYiIiMj4CU46+/Xrp/793LlzkEgkGvtVKhUkEgkeP36su+iIiIiIyCQITjrXrFkjZhxEREREZMIEJ51DhgwRMw4iIiIiMmFlegzmjRs3kJqaiuzsbF3HQ0REREQmSKuk84cffsA777yD1q1bo1evXvjll18AAI8ePULLli2xe/duUYIkIiIiIuMmOOncs2cPRo8ejYYNG2LhwoVQqVTqfbVq1ULDhg0RHR0tSpBEREREZNwEJ53Lly+Hr68vdu3aVez8zlatWuHy5cs6DY6IiIiITIPgpPP3339H7969S9xva2uLP//8UydBERH+LLZdAAAXf0lEQVQREZFpEZx0Vq1aFbm5uSXu/+OPP1CrVi2dBEVEREREpkVw0tmpUyds27YNL168KLLvwYMH2LJlC7p27arT4IiIiIjINAhep3Pu3Lno1q0bfH19ERAQAIlEgqNHjyIhIQFbtmyBubk5pk+fLmasRERERGSkBI90urq6Ii4uDjKZDEuXLoVKpcKaNWsQEREBT09PHD58GI6OjmLGSkRERERGSvBIJwA0atQIu3fvhkKhwM2bN6FUKuHs7IzatWuLFR8RERERmQCtks5CUqkUXl5euo6FiIiIiEyUVkmnQqHAmjVrEBcXhzt37gAAnJyc0L17d0yYMAFSqVSUIImIiIjIuAme03nz5k107NgR4eHhyM/Ph4+PD3x8fJCfn4/w8HB06NABN27cEDNWIiIiIjJSgkc6v/jiCzx58gR79uxBp06dNPadPHkSw4cPx/Tp07Fjx44yBbJixQosXLgQwcHBCAsLK1MdxqLq3Wmi1e1WkIuqd61Eq5+IiIioLASPdKakpGDs2LFFEk4A6Ny5M8aMGYPk5OQyBXHu3Dls3rwZHh4eZTqeiIiIiAyb4JHO6tWrlzpnUyqVonr16loHkJ2djeDgYERGRiI0NFTr44lMkVvBfw1ixPqZ4zJ9h0BERCZC8Ejn8OHDERUVhadPnxbZl52djaioKAQFBWkdwJQpU9CvX79iR1CJiIiIyDQIHul0d3eHRCJBq1atMHjwYLi4uAAAbty4gejoaNja2sLd3R27d+/WOK5///4l1rllyxbcvHkT69evFxxwenq64LJiHK8LbgUlP8NeF3JzhdVfUJAvahxiMubYhRLaj2K6LvLfiyH8PYrN1NtY3va5u7vrKBIiMnQShUKhElKwRo0ar69MIoFKpdJ4/fjx42LLpqeno0ePHjh8+LD6S8ff3x9NmjQR7Uai9PR0g/iCE/NGotzcXFhZCbss+1PaddHiEFNBQT7Mzcu0xKzReNvFQXA/iknMy+uG8vcoJlNvo6m3j4h0S/C/3Pv27dPpic+ePYtHjx6hXbt26m0FBQVITk7Gxo0bcf/+fVhaWur0nERERESkH4KTzo4dO+r0xP7+/mjRooXGtgkTJsDV1RWffvopKleurNPzEREREZH+6O0apVQqLXI3fNWqVVGjRg00adJET1ERERERkRhMe2IckZH6Nf2uQcxbbeyo7wiIiMhU6P9ftZccOHBA3yEQERERkQgEr9NJRERERFRWTDqJiIiISHSCk87Q0FBcuXKlxP1Xr17lYyyJiIiIqFiCk86lS5fi119/LXE/k04iIiIiKonOLq/n5OSgUqVKuqqOiIiIiExIqXevX758GWlpaerXKSkpyM8v+sxrhUKBjRs38nFoRERERFSsUpPO/fv3qy+ZSyQSbNq0CZs2bSq2rFQqxfr163UfIREREREZvVKTzo8//hg9evSASqVC165dMWvWLLz33ntFyllZWaFBgwawsDCoZT+JiIiIyECUmiXa29vD3t4eALBv3z40atQItra2FRIYEREREZkOwUOTHTt2FDMOIiIiIjJhWl0Pj4+Px/fff49bt25BoVBApVJp7JdIJPjll190GiARERERGT/BSeeqVasQEhICOzs7eHl5oUmTJmLGRUREREQmRHDS+dVXX6FTp0744YcfuB4nEREREWlF8OLwCoUC/fr1Y8JJRERERFoTnHS2bNkS6enpYsZCRERERCZKcNIZHh6O/fv3IzY2Vsx4iIiIiMgECZ7TGRQUhBcvXmDs2LGYOnUqHBwcYG5urlFGIpEgNTVV50ESERERkXETnHTWrl0btra2cHNzEzMeIiIiIjJBgpPOAwcOiBkHEREREZkwwXM6de2bb76Bt7c3HB0d4ejoiPfeew9xcXH6CoeIiIiIRKRV0vn48WMsXrwY3bt3h5eXF86ePaveHhoaimvXrgmuq06dOliwYAFOnjyJhIQEdOrUCUOHDsXly5e1awERERERGTzBl9dv376Nnj174vHjx2jSpAlu3bqF58+fAwBq1qyJXbt24c8//0RYWJig+vz9/TVez507F99++y3OnTuHd955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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "smoking_and_age = baby.select('Maternal Smoker', 'Maternal Age')\n", "smoking_and_age.hist('Maternal Age', group = 'Maternal Smoker')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Maternal Smoker Maternal Age average
False 27.5441
True 26.7364
" ], "text/plain": [ "Maternal Smoker | Maternal Age average\n", "False | 27.5441\n", "True | 26.7364" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "smoking_and_age.group('Maternal Smoker', np.average)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The observed difference between the average ages is about $-0.8$ years." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.8076725017901509" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "observed_means = smoking_and_age.group('Maternal Smoker', np.average).column(1)\n", "observed_difference = observed_means.item(1) - observed_means.item(0)\n", "observed_difference" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the underlying distributions of ages in the two groups are the same, then the empirical distribution of the difference based on permuted samples will predict how the statistic will vary due to chance.\n", "\n", "We can generate such differences using the function we just defined." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "differences = permuted_sample_average_difference(baby, 'Maternal Age', 'Maternal Smoker', 5000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The observed difference is in the tail of the empirical distribution of the differences simulated under the null hypothesis. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Observed Difference: -0.8076725017901509\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/choldgraf/anaconda/envs/dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n", " warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n" ] }, { "data": { "image/png": "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6YK7uzsVKlSgefPmrFixQqfON998Q/PmzXF1daVatWq8//773L59+6Xb18HBweBLSXNaz+XLl3nllVcA+OCDD7RtGxcXx1dffUX58uV59OiRdllvv/02SqWSX375RTstNjYWJycn0tLSdD5/586dqVSpEhUqVKBbt26cPn1aLzZTt/vz5syZg5OTE5MmTTJYbm9vr/MGa832uGTJEsaPH0+tWrVwcXHhzp07wNPRhtDQUCpWrEiFChXo3Lkzv//+u84yQ0JCCAkJ0VuXj48PQ4YM0f6tGebfv38/vXv3pmLFilStWpVRo0Zx//79F342ePri4nPnztGrVy969erFsWPHOHPmjE6dpk2b8tZbb+nN+/vvv6NUKnX2lZMnT9KrVy+qVKmCm5sbbdu21Xvf3ZAhQ/D29ubw4cO0adMGNzc3xo8fD8DGjRvp1KkT1atXp2LFigQGBrJ69Wq9df/777+89957VK5cmSpVqjB06FC+//57lEole/fu1alrzDby7bffEhgYSMWKFalcuTL+/v4sX77cqDa0dJLoCqE2bdrw8OFDjh49arB85syZjBw5EoCVK1eya9cuxo0bx65du6hTpw716tVj165d7Nq1Czc3N65du8arr77KqVOnmDZtGmvWrOGVV16hT58+fP/993rL7927N82bN2f16tXahLps2TL69OlDzZo1iY2NZfbs2Zw5c4aQkBDu3r2rM7/mobuffvopy5Yt48mTJ/Ts2ROVSqWts337dkJDQ3n06BFffvklq1ev5q233tLZOSdOnMioUaNo1aoVa9asYfLkyfz888/06NGDJ0+eGNWWmZmZZGZmkpaWxo4dO/j222/p1q2bTp0XrcfNzY2VK1cCMHLkSG3btm3blsDAQO7fv8+RI0cAUKvV7Nu3jxIlSui82XrPnj3Ur18fR0dHAHbu3EloaCj29vYsXLiQxYsXk56eTvv27XWe32jqdjfUPvv376d169YUK1bMqDbVmDlzJufOnWP27NmsWrWK4sWLc+rUKUJCQlCpVMyfP58FCxZw9+5dQkJCOHnyZK6W/6xBgwZRrVo1Vq5cydChQ4mNjdXuAy+yZs0abGxsCAsLo1evXgCsXbtWp07Pnj3ZtWuXXlutXbuWMmXK0LZtWwCOHTtG27ZtUalUzJ07lxUrVlCmTBm6dOmid/42LS2Nfv360b17d779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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Table().with_column('Difference Between Group Averages', differences).hist()\n", "plots.scatter(observed_difference, 0, color='red', s=30)\n", "plots.title('Prediction Under the Null Hypothesis')\n", "print('Observed Difference:', observed_difference)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The empirical P-value of the test is the proportion of simulated differences that were equal to or less than the observed difference. This is because low values of the difference favor the alternative hypothesis that the smokers were younger on average." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.01" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "empirical_P = np.count_nonzero(differences <= observed_difference) / 5000\n", "empirical_P" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The empirical P-value is just over 1%, which is less than 5% and therefore the result is statistically significant. The test supports the hypothesis that the smokers were younger on average." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }