{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "47f039a4",
   "metadata": {},
   "source": [
    "# A/B Testing\n",
    "\n",
    "An **A/B test** randomly assigns units, such as customers, to two conditions and compares an outcome. A manager might compare checkout versions using purchase rates. Comparing existing groups uses similar calculations, but the study design determines whether the result supports a causal claim.\n",
    "\n",
    "For example, suppose 40 of 500 visitors assigned to version A purchase, compared with 50 of 500 assigned to B. The conversion rates are 8% and 10%. The observed difference, B minus A, is **two percentage points**. A permutation test asks whether a difference this large would be unusual under a stated model of no version effect.\n",
    "\n",
    "| Stage | What you do | What stays fixed |\n",
    "|---|---|---|\n",
    "| Observe | Compute B minus A using the real labels. | The recorded visitors and purchases. |\n",
    "| Simulate | Rearrange labels and recompute the difference. | Outcomes and the number of labels in each group. |\n",
    "| Compare | Count simulated differences at least as large as observed. | The alternative and cutoff selected before testing. |\n",
    "| Interpret | Connect the evidence to design and business consequences. | The limits of what was measured. |\n",
    "\n",
    "The detailed example below compares babies of mothers who smoked with babies of mothers who did not. **This is an observational comparison, not a randomized A/B experiment:** smoking status was not assigned. The permutation method assesses association under an exchangeable-label null model; it does not make smoking a randomized treatment.\n",
    "\n",
    "The newborn data come from a large hospital system. For this illustration, treat the observations as a simple random sample, although the original sampling involved multiple stages. [Stat Labs](https://www.stat.berkeley.edu/~statlabs/) by Deborah Nolan and Terry Speed describes the larger source dataset.\n",
    "\n",
    "Run the demonstration cells in order, including the setup. Each Interactive Exercise includes its own setup and can run independently.\n",
    "\n",
    "```{index} A/B test\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "235bd2a3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:04.593657Z",
     "iopub.status.busy": "2026-08-31T06:01:04.593364Z",
     "iopub.status.idle": "2026-08-31T06:01:05.449284Z",
     "shell.execute_reply": "2026-08-31T06:01:05.449015Z"
    },
    "tags": [
     "hide-input",
     "thebe-init",
     "runnable"
    ]
   },
   "outputs": [],
   "source": [
    "path_data = '../../data/'\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('fivethirtyeight')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c9191339",
   "metadata": {},
   "source": [
    "```{contents}\n",
    ":local:\n",
    ":depth: 2\n",
    "```\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f095305",
   "metadata": {},
   "source": [
    "<!-- moved-from-landing: 1000-two-samples -->\n",
    "\n",
    "## Random Sampling Prelude\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82bcee77",
   "metadata": {},
   "source": [
    "We have seen several examples of assessing whether a single sample looks like random draws from a specified chance model. \n",
    "- Did the Alameda County jury panels look like a random sample from the population of eligible jurors?\n",
    "- Did the pea plants that Mendel grew have colors that were consistent with the chances he specified in his model?\n",
    "\n",
    "In all of these cases there was just one random sample, and we were trying to decide how it had been generated. But often, data scientists have to compare two random samples with each other. For example, they might have to compare the outcomes of patients who have been assigned at random to a treatment group and a control group. Or they might have randomized internet users to receive two different versions of a website, after which they would want to compare the actions of the two random groups.\n",
    "\n",
    "In this chapter, we develop a way of using Python to compare two random samples and answer questions about the similarities and differences between them. You will see that the methods we develop have diverse applications. Our examples are from medicine and public health as well as football!\n",
    "\n",
    "First of all, let us review the random sampling techniques we have covered so far.\n",
    "\n",
    "Random sampling determines **who enters a sample** and supports generalization when the sample represents the target population. Random assignment determines **which condition a participant receives** and supports causal comparison in a well-run experiment. A label shuffle creates neither new participants nor a new real-world experiment; it simulates a null model using the observations already collected.\n",
    "\n",
    "```{index} Random sampling\n",
    "```\n",
    "\n",
    "```{index} Random assignment\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8cf00e3d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.450772Z",
     "iopub.status.busy": "2026-08-31T06:01:05.450667Z",
     "iopub.status.idle": "2026-08-31T06:01:05.452259Z",
     "shell.execute_reply": "2026-08-31T06:01:05.452073Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "path_data = '../../data/'\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('fivethirtyeight')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4bf5053d",
   "metadata": {},
   "source": [
    "### Random Sampling in Python \n",
    "\n",
    "This section summarizes the methods for sampling at random using Python:\n",
    "\n",
    "- `DataFrame.sample()` (pandas)\n",
    "- `np.random.choice()` (NumPy)\n",
    "- `sample_proportions()` (a helper function defined below)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55e1fd18",
   "metadata": {},
   "source": [
    "#### Sampling a DataFrame\n",
    "If you are sampling from a population of individuals whose data are represented in the rows of a dataframe, then you can use the Pandas method **`sample`** to randomly select rows of the table. That is, you can use `sample` to select a random sample of individuals.\n",
    "\n",
    "By default, `DataFrame.sample()` draws uniformly at random **without replacement**. So, for a natural model for chance experiments, such as rolling a die, we need to set **`replace=True`**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1cbb7ec3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.453267Z",
     "iopub.status.busy": "2026-08-31T06:01:05.453211Z",
     "iopub.status.idle": "2026-08-31T06:01:05.456674Z",
     "shell.execute_reply": "2026-08-31T06:01:05.456496Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "   Face\n0     1\n1     2\n2     3\n3     4\n4     5\n5     6",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Face</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>6</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 3
    }
   ],
   "source": [
    "faces = np.arange(1, 7)\n",
    "die = pd.DataFrame({\n",
    "    'Face': faces})\n",
    "die"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41a21fd1",
   "metadata": {},
   "source": [
    "Run the cell below to simulate 7 rolls of a die.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "47ed60ad",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.457666Z",
     "iopub.status.busy": "2026-08-31T06:01:05.457604Z",
     "iopub.status.idle": "2026-08-31T06:01:05.459871Z",
     "shell.execute_reply": "2026-08-31T06:01:05.459657Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "   Face\n2     3\n5     6\n0     1\n5     6\n4     5\n1     2\n0     1",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Face</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>2</th>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>6</td>\n    </tr>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>6</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>0</th>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 4
    }
   ],
   "source": [
    "die.sample(7, replace=True)      ### default replace=False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0dde813",
   "metadata": {},
   "source": [
    "Sometimes it is more natural to sample individuals at random without replacement. This is called a simple random sample. The argument `replace=False` allows you to do this.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6a4b14b5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.460835Z",
     "iopub.status.busy": "2026-08-31T06:01:05.460775Z",
     "iopub.status.idle": "2026-08-31T06:01:05.472504Z",
     "shell.execute_reply": "2026-08-31T06:01:05.472324Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "50\n"
    },
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "                     Actor  Total Gross  Number of Movies  Average per Movie  \\\n0            Harrison Ford       4871.7                41              118.8   \n1        Samuel L. Jackson       4772.8                69               69.2   \n2           Morgan Freeman       4468.3                61               73.3   \n3                Tom Hanks       4340.8                44               98.7   \n4       Robert Downey, Jr.       3947.3                53               74.5   \n5             Eddie Murphy       3810.4                38              100.3   \n6               Tom Cruise       3587.2                36               99.6   \n7              Johnny Depp       3368.6                45               74.9   \n8            Michael Caine       3351.5                58               57.8   \n9       Scarlett Johansson       3341.2                37               90.3   \n10             Gary Oldman       3294.0                38               86.7   \n11          Robin Williams       3279.3                49               66.9   \n12            Bruce Willis       3189.4                60               53.2   \n13       Stellan Skarsgard       3175.0                43               73.8   \n14         Anthony Daniels       3162.9                 7              451.8   \n15            Ian McKellen       3150.4                31              101.6   \n16              Will Smith       3149.1                24              131.2   \n17           Stanley Tucci       3123.9                50               62.5   \n18              Matt Damon       3107.3                39               79.7   \n19           Robert DeNiro       3081.3                79               39.0   \n20            Cameron Diaz       3031.7                34               89.2   \n21             Liam Neeson       2942.7                63               46.7   \n22             Andy Serkis       2890.6                23              125.7   \n23             Don Cheadle       2885.4                34               84.9   \n24             Ben Stiller       2827.0                37               76.4   \n25    Helena Bonham Carter       2822.0                36               78.4   \n26           Orlando Bloom       2815.8                17              165.6   \n27         Woody Harrelson       2815.8                50               56.3   \n28          Cate Blanchett       2802.6                39               71.9   \n29           Julia Roberts       2735.3                42               65.1   \n30         Elizabeth Banks       2726.3                35               77.9   \n31           Ralph Fiennes       2715.3                36               75.4   \n32             Emma Watson       2681.9                17              157.8   \n33         Tommy Lee Jones       2681.3                46               58.3   \n34               Brad Pitt       2680.9                40               67.0   \n35            Adam Sandler       2661.0                32               83.2   \n36        Daniel Radcliffe       2634.4                17              155.0   \n37              Jonah Hill       2605.1                29               89.8   \n38             Owen Wilson       2602.3                39               66.7   \n39              Idris Elba       2580.6                26               99.3   \n40          Bradley Cooper       2557.7                25              102.3   \n41           Mark Wahlberg       2549.8                36               70.8   \n42              Jim Carrey       2545.2                27               94.3   \n43          Dustin Hoffman       2522.1                43               58.7   \n44       Leonardo DiCaprio       2518.3                25              100.7   \n45           Jeremy Renner       2500.3                21              119.1   \n46  Philip Seymour Hoffman       2463.7                40               61.6   \n47          Sandra Bullock       2462.6                35               70.4   \n48             Chris Evans       2457.8                23              106.9   \n49           Anne Hathaway       2416.5                25               96.7   \n\n                               #1 Movie  Gross  \n0          Star Wars: The Force Awakens  936.7  \n1                          The Avengers  623.4  \n2                       The Dark Knight  534.9  \n3                           Toy Story 3  415.0  \n4                          The Avengers  623.4  \n5                               Shrek 2  441.2  \n6                     War of the Worlds  234.3  \n7                      Dead Man's Chest  423.3  \n8                       The Dark Knight  534.9  \n9                          The Avengers  623.4  \n10                      The Dark Knight  534.9  \n11                  Night at the Museum  250.9  \n12                          Sixth Sense  293.5  \n13                         The Avengers  623.4  \n14         Star Wars: The Force Awakens  936.7  \n15                   Return of the King  377.8  \n16                     Independence Day  306.2  \n17                        Catching Fire  424.7  \n18                          The Martian  228.4  \n19                     Meet the Fockers  279.3  \n20                              Shrek 2  441.2  \n21                   The Phantom Menace  474.5  \n22         Star Wars: The Force Awakens  936.7  \n23              Avengers: Age of Ultron  459.0  \n24                     Meet the Fockers  279.3  \n25  Harry Potter / Deathly Hallows (P2)  381.0  \n26                     Dead Man's Chest  423.3  \n27                        Catching Fire  424.7  \n28                   Return of the King  377.8  \n29                       Ocean's Eleven  183.4  \n30                        Catching Fire  424.7  \n31  Harry Potter / Deathly Hallows (P2)  381.0  \n32  Harry Potter / Deathly Hallows (P2)  381.0  \n33                         Men in Black  250.7  \n34                          World War Z  202.4  \n35                 Hotel Transylvania 2  169.7  \n36  Harry Potter / Deathly Hallows (P2)  381.0  \n37                       The LEGO Movie  257.8  \n38                  Night at the Museum  250.9  \n39              Avengers: Age of Ultron  459.0  \n40                      American Sniper  350.1  \n41                       Transformers 4  245.4  \n42                           The Grinch  260.0  \n43                     Meet the Fockers  279.3  \n44                              Titanic  658.7  \n45                         The Avengers  623.4  \n46                        Catching Fire  424.7  \n47                              Minions  336.0  \n48                         The Avengers  623.4  \n49                The Dark Knight Rises  448.1  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Actor</th>\n      <th>Total Gross</th>\n      <th>Number of Movies</th>\n      <th>Average per Movie</th>\n      <th>#1 Movie</th>\n      <th>Gross</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Harrison Ford</td>\n      <td>4871.7</td>\n      <td>41</td>\n      <td>118.8</td>\n      <td>Star Wars: The Force Awakens</td>\n      <td>936.7</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Samuel L. Jackson</td>\n      <td>4772.8</td>\n      <td>69</td>\n      <td>69.2</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Morgan Freeman</td>\n      <td>4468.3</td>\n      <td>61</td>\n      <td>73.3</td>\n      <td>The Dark Knight</td>\n      <td>534.9</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Tom Hanks</td>\n      <td>4340.8</td>\n      <td>44</td>\n      <td>98.7</td>\n      <td>Toy Story 3</td>\n      <td>415.0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Robert Downey, Jr.</td>\n      <td>3947.3</td>\n      <td>53</td>\n      <td>74.5</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>Eddie Murphy</td>\n      <td>3810.4</td>\n      <td>38</td>\n      <td>100.3</td>\n      <td>Shrek 2</td>\n      <td>441.2</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>Tom Cruise</td>\n      <td>3587.2</td>\n      <td>36</td>\n      <td>99.6</td>\n      <td>War of the Worlds</td>\n      <td>234.3</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>Johnny Depp</td>\n      <td>3368.6</td>\n      <td>45</td>\n      <td>74.9</td>\n      <td>Dead Man's Chest</td>\n      <td>423.3</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>Michael Caine</td>\n      <td>3351.5</td>\n      <td>58</td>\n      <td>57.8</td>\n      <td>The Dark Knight</td>\n      <td>534.9</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>Scarlett Johansson</td>\n      <td>3341.2</td>\n      <td>37</td>\n      <td>90.3</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>Gary Oldman</td>\n      <td>3294.0</td>\n      <td>38</td>\n      <td>86.7</td>\n      <td>The Dark Knight</td>\n      <td>534.9</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>Robin Williams</td>\n      <td>3279.3</td>\n      <td>49</td>\n      <td>66.9</td>\n      <td>Night at the Museum</td>\n      <td>250.9</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>Bruce Willis</td>\n      <td>3189.4</td>\n      <td>60</td>\n      <td>53.2</td>\n      <td>Sixth Sense</td>\n      <td>293.5</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Stellan Skarsgard</td>\n      <td>3175.0</td>\n      <td>43</td>\n      <td>73.8</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>Anthony Daniels</td>\n      <td>3162.9</td>\n      <td>7</td>\n      <td>451.8</td>\n      <td>Star Wars: The Force Awakens</td>\n      <td>936.7</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>Ian McKellen</td>\n      <td>3150.4</td>\n      <td>31</td>\n      <td>101.6</td>\n      <td>Return of the King</td>\n      <td>377.8</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>Will Smith</td>\n      <td>3149.1</td>\n      <td>24</td>\n      <td>131.2</td>\n      <td>Independence Day</td>\n      <td>306.2</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>Stanley Tucci</td>\n      <td>3123.9</td>\n      <td>50</td>\n      <td>62.5</td>\n      <td>Catching Fire</td>\n      <td>424.7</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>Matt Damon</td>\n      <td>3107.3</td>\n      <td>39</td>\n      <td>79.7</td>\n      <td>The Martian</td>\n      <td>228.4</td>\n    </tr>\n    <tr>\n      <th>19</th>\n      <td>Robert DeNiro</td>\n      <td>3081.3</td>\n      <td>79</td>\n      <td>39.0</td>\n      <td>Meet the Fockers</td>\n      <td>279.3</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>Cameron Diaz</td>\n      <td>3031.7</td>\n      <td>34</td>\n      <td>89.2</td>\n      <td>Shrek 2</td>\n      <td>441.2</td>\n    </tr>\n    <tr>\n      <th>21</th>\n      <td>Liam Neeson</td>\n      <td>2942.7</td>\n      <td>63</td>\n      <td>46.7</td>\n      <td>The Phantom Menace</td>\n      <td>474.5</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>Andy Serkis</td>\n      <td>2890.6</td>\n      <td>23</td>\n      <td>125.7</td>\n      <td>Star Wars: The Force Awakens</td>\n      <td>936.7</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>Don Cheadle</td>\n      <td>2885.4</td>\n      <td>34</td>\n      <td>84.9</td>\n      <td>Avengers: Age of Ultron</td>\n      <td>459.0</td>\n    </tr>\n    <tr>\n      <th>24</th>\n      <td>Ben Stiller</td>\n      <td>2827.0</td>\n      <td>37</td>\n      <td>76.4</td>\n      <td>Meet the Fockers</td>\n      <td>279.3</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>Helena Bonham Carter</td>\n      <td>2822.0</td>\n      <td>36</td>\n      <td>78.4</td>\n      <td>Harry Potter / Deathly Hallows (P2)</td>\n      <td>381.0</td>\n    </tr>\n    <tr>\n      <th>26</th>\n      <td>Orlando Bloom</td>\n      <td>2815.8</td>\n      <td>17</td>\n      <td>165.6</td>\n      <td>Dead Man's Chest</td>\n      <td>423.3</td>\n    </tr>\n    <tr>\n      <th>27</th>\n      <td>Woody Harrelson</td>\n      <td>2815.8</td>\n      <td>50</td>\n      <td>56.3</td>\n      <td>Catching Fire</td>\n      <td>424.7</td>\n    </tr>\n    <tr>\n      <th>28</th>\n      <td>Cate Blanchett</td>\n      <td>2802.6</td>\n      <td>39</td>\n      <td>71.9</td>\n      <td>Return of the King</td>\n      <td>377.8</td>\n    </tr>\n    <tr>\n      <th>29</th>\n      <td>Julia Roberts</td>\n      <td>2735.3</td>\n      <td>42</td>\n      <td>65.1</td>\n      <td>Ocean's Eleven</td>\n      <td>183.4</td>\n    </tr>\n    <tr>\n      <th>30</th>\n      <td>Elizabeth Banks</td>\n      <td>2726.3</td>\n      <td>35</td>\n      <td>77.9</td>\n      <td>Catching Fire</td>\n      <td>424.7</td>\n    </tr>\n    <tr>\n      <th>31</th>\n      <td>Ralph Fiennes</td>\n      <td>2715.3</td>\n      <td>36</td>\n      <td>75.4</td>\n      <td>Harry Potter / Deathly Hallows (P2)</td>\n      <td>381.0</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>Emma Watson</td>\n      <td>2681.9</td>\n      <td>17</td>\n      <td>157.8</td>\n      <td>Harry Potter / Deathly Hallows (P2)</td>\n      <td>381.0</td>\n    </tr>\n    <tr>\n      <th>33</th>\n      <td>Tommy Lee Jones</td>\n      <td>2681.3</td>\n      <td>46</td>\n      <td>58.3</td>\n      <td>Men in Black</td>\n      <td>250.7</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>Brad Pitt</td>\n      <td>2680.9</td>\n      <td>40</td>\n      <td>67.0</td>\n      <td>World War Z</td>\n      <td>202.4</td>\n    </tr>\n    <tr>\n      <th>35</th>\n      <td>Adam Sandler</td>\n      <td>2661.0</td>\n      <td>32</td>\n      <td>83.2</td>\n      <td>Hotel Transylvania 2</td>\n      <td>169.7</td>\n    </tr>\n    <tr>\n      <th>36</th>\n      <td>Daniel Radcliffe</td>\n      <td>2634.4</td>\n      <td>17</td>\n      <td>155.0</td>\n      <td>Harry Potter / Deathly Hallows (P2)</td>\n      <td>381.0</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>Jonah Hill</td>\n      <td>2605.1</td>\n      <td>29</td>\n      <td>89.8</td>\n      <td>The LEGO Movie</td>\n      <td>257.8</td>\n    </tr>\n    <tr>\n      <th>38</th>\n      <td>Owen Wilson</td>\n      <td>2602.3</td>\n      <td>39</td>\n      <td>66.7</td>\n      <td>Night at the Museum</td>\n      <td>250.9</td>\n    </tr>\n    <tr>\n      <th>39</th>\n      <td>Idris Elba</td>\n      <td>2580.6</td>\n      <td>26</td>\n      <td>99.3</td>\n      <td>Avengers: Age of Ultron</td>\n      <td>459.0</td>\n    </tr>\n    <tr>\n      <th>40</th>\n      <td>Bradley Cooper</td>\n      <td>2557.7</td>\n      <td>25</td>\n      <td>102.3</td>\n      <td>American Sniper</td>\n      <td>350.1</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>Mark Wahlberg</td>\n      <td>2549.8</td>\n      <td>36</td>\n      <td>70.8</td>\n      <td>Transformers 4</td>\n      <td>245.4</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>Jim Carrey</td>\n      <td>2545.2</td>\n      <td>27</td>\n      <td>94.3</td>\n      <td>The Grinch</td>\n      <td>260.0</td>\n    </tr>\n    <tr>\n      <th>43</th>\n      <td>Dustin Hoffman</td>\n      <td>2522.1</td>\n      <td>43</td>\n      <td>58.7</td>\n      <td>Meet the Fockers</td>\n      <td>279.3</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>Leonardo DiCaprio</td>\n      <td>2518.3</td>\n      <td>25</td>\n      <td>100.7</td>\n      <td>Titanic</td>\n      <td>658.7</td>\n    </tr>\n    <tr>\n      <th>45</th>\n      <td>Jeremy Renner</td>\n      <td>2500.3</td>\n      <td>21</td>\n      <td>119.1</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>46</th>\n      <td>Philip Seymour Hoffman</td>\n      <td>2463.7</td>\n      <td>40</td>\n      <td>61.6</td>\n      <td>Catching Fire</td>\n      <td>424.7</td>\n    </tr>\n    <tr>\n      <th>47</th>\n      <td>Sandra Bullock</td>\n      <td>2462.6</td>\n      <td>35</td>\n      <td>70.4</td>\n      <td>Minions</td>\n      <td>336.0</td>\n    </tr>\n    <tr>\n      <th>48</th>\n      <td>Chris Evans</td>\n      <td>2457.8</td>\n      <td>23</td>\n      <td>106.9</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>49</th>\n      <td>Anne Hathaway</td>\n      <td>2416.5</td>\n      <td>25</td>\n      <td>96.7</td>\n      <td>The Dark Knight Rises</td>\n      <td>448.1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 5
    }
   ],
   "source": [
    "actors = pd.read_csv(path_data + 'actors.csv')\n",
    "\n",
    "print(len(actors))\n",
    "actors\n",
    "\n",
    "### showing all 50 rows because it's less than 60"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c5d894a4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.473354Z",
     "iopub.status.busy": "2026-08-31T06:01:05.473301Z",
     "iopub.status.idle": "2026-08-31T06:01:05.476158Z",
     "shell.execute_reply": "2026-08-31T06:01:05.475950Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "                Actor  Total Gross  Number of Movies  Average per Movie  \\\n0       Harrison Ford       4871.7                41              118.8   \n29      Julia Roberts       2735.3                42               65.1   \n13  Stellan Skarsgard       3175.0                43               73.8   \n43     Dustin Hoffman       2522.1                43               58.7   \n3           Tom Hanks       4340.8                44               98.7   \n\n                        #1 Movie  Gross  \n0   Star Wars: The Force Awakens  936.7  \n29                Ocean's Eleven  183.4  \n13                  The Avengers  623.4  \n43              Meet the Fockers  279.3  \n3                    Toy Story 3  415.0  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Actor</th>\n      <th>Total Gross</th>\n      <th>Number of Movies</th>\n      <th>Average per Movie</th>\n      <th>#1 Movie</th>\n      <th>Gross</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Harrison Ford</td>\n      <td>4871.7</td>\n      <td>41</td>\n      <td>118.8</td>\n      <td>Star Wars: The Force Awakens</td>\n      <td>936.7</td>\n    </tr>\n    <tr>\n      <th>29</th>\n      <td>Julia Roberts</td>\n      <td>2735.3</td>\n      <td>42</td>\n      <td>65.1</td>\n      <td>Ocean's Eleven</td>\n      <td>183.4</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Stellan Skarsgard</td>\n      <td>3175.0</td>\n      <td>43</td>\n      <td>73.8</td>\n      <td>The Avengers</td>\n      <td>623.4</td>\n    </tr>\n    <tr>\n      <th>43</th>\n      <td>Dustin Hoffman</td>\n      <td>2522.1</td>\n      <td>43</td>\n      <td>58.7</td>\n      <td>Meet the Fockers</td>\n      <td>279.3</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Tom Hanks</td>\n      <td>4340.8</td>\n      <td>44</td>\n      <td>98.7</td>\n      <td>Toy Story 3</td>\n      <td>415.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 6
    }
   ],
   "source": [
    "### simple random sample of 5 rows\n",
    "\n",
    "actors.sample(5, replace=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "382b1956",
   "metadata": {},
   "source": [
    "Since `sample` gives you the entire sample in the order in which the rows were selected, you can use Pandas methods on the sampled table to answer many questions about the sample. For example, you can find the number of times the die showed six spots, or the average number of movies in which the sampled actors appeared, or whether one specified actor appeared in the sample. You might need multiple lines of code to get some of this information.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "052c6a83",
   "metadata": {},
   "source": [
    "#### Sampling an Array \n",
    "\n",
    "If you are sampling from a population of individuals whose data are represented as an array, you can use the NumPy function `np.random.choice` to randomly select elements of the array.\n",
    "\n",
    "By default, **`np.random.choice`** samples at random **with replacement**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "245b9fb1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.477105Z",
     "iopub.status.busy": "2026-08-31T06:01:05.477059Z",
     "iopub.status.idle": "2026-08-31T06:01:05.478565Z",
     "shell.execute_reply": "2026-08-31T06:01:05.478380Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "array([1, 2, 3, 4, 5, 6])"
     },
     "execution_count": 7
    }
   ],
   "source": [
    "### the faces of a die, as an array\n",
    "\n",
    "faces"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e6b06323",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.479400Z",
     "iopub.status.busy": "2026-08-31T06:01:05.479353Z",
     "iopub.status.idle": "2026-08-31T06:01:05.480889Z",
     "shell.execute_reply": "2026-08-31T06:01:05.480709Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "array([6, 2, 4, 2, 5, 3, 5])"
     },
     "execution_count": 8
    }
   ],
   "source": [
    "### 7 rolls of the die\n",
    "\n",
    "np.random.choice(faces, 7)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce65c5b7",
   "metadata": {},
   "source": [
    "The argument `replace=False` allows you to get a simple random sample, that is, a sample drawn at random without replacement.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "64acfe2d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.481864Z",
     "iopub.status.busy": "2026-08-31T06:01:05.481802Z",
     "iopub.status.idle": "2026-08-31T06:01:05.483031Z",
     "shell.execute_reply": "2026-08-31T06:01:05.482867Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "### array of actor names\n",
    "\n",
    "actor_names = actors['Actor']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "db232eb7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.483879Z",
     "iopub.status.busy": "2026-08-31T06:01:05.483831Z",
     "iopub.status.idle": "2026-08-31T06:01:05.485422Z",
     "shell.execute_reply": "2026-08-31T06:01:05.485258Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "array(['Tommy Lee Jones', 'Philip Seymour Hoffman', 'Woody Harrelson',\n       'Robert DeNiro', 'Samuel L. Jackson'], dtype=object)"
     },
     "execution_count": 10
    }
   ],
   "source": [
    "# Simple random sample of 5 actor names\n",
    "np.random.choice(actor_names, 5, replace=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e0ee88b",
   "metadata": {},
   "source": [
    "Just as **`sample`** did, so also **`np.random.choice`** gives you the entire sequence of sampled elements. You can use array operations to answer many questions about the sample. For example, you can find which actor was the second one to be drawn, or the number of faces of the die that appeared more than once. Some answers might need multiple lines of code.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "290de377",
   "metadata": {},
   "source": [
    "#### Sampling a Categorical Distribution \n",
    "Sometimes we are interested in a categorical attribute of our sampled individuals. For example, we might be looking at whether a coin lands Heads or Tails; or we might be interested in the political parties of randomly selected voters.\n",
    "\n",
    "In such cases, we frequently need the proportions of sampled voters in the different categories. If we have the entire sample, we can calculate these proportions. The function `sample_proportions` does that work for us. It is tailored for sampling at random with replacement from a categorical distribution and returns the proportions of sampled elements in each category.\n",
    "\n",
    "The `sample_proportions` function takes two arguments:\n",
    "- the **sample size**\n",
    "- the **distribution** of the categories in the population, as a list or array of proportions that add up to 1\n",
    "\n",
    "It returns an array containing the distribution of the categories in a random sample of the given size taken from the population. That's an array consisting of the sample proportions in all the different categories, in the same order in which they appeared in the population distribution.\n",
    "\n",
    "For example, suppose each plant of a species is red-flowering with a chance of 25%, pink-flowering with a chance 50%, and white-flowering with a chance 25%, regardless of the flower colors of all other plants. You can use `sample_proportions` to see the proportions of the different colors among 300 plants of the species.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "7ebd4f67",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.486321Z",
     "iopub.status.busy": "2026-08-31T06:01:05.486268Z",
     "iopub.status.idle": "2026-08-31T06:01:05.487622Z",
     "shell.execute_reply": "2026-08-31T06:01:05.487462Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "def sample_proportions(sample_size, probabilities):\n",
    "    \"\"\"Return the proportion of random draws for each outcome in a distribution.\n",
    "    This function is similar to np.random.multinomial, but returns proportions\n",
    "    instead of counts.\n",
    "    Args:\n",
    "        ``sample_size``: The size of the sample to draw from the distribution.\n",
    "        ``probabilities``: An array of probabilities that forms a distribution.\n",
    "    Returns:\n",
    "        An array with the same length as ``probability`` that sums to 1.\n",
    "    \"\"\"\n",
    "    return np.random.multinomial(sample_size, probabilities) / sample_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "41afbde7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.488571Z",
     "iopub.status.busy": "2026-08-31T06:01:05.488511Z",
     "iopub.status.idle": "2026-08-31T06:01:05.490184Z",
     "shell.execute_reply": "2026-08-31T06:01:05.490024Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "array([0.24, 0.5 , 0.26])"
     },
     "execution_count": 12
    }
   ],
   "source": [
    "### Species distribution of flower colors:\n",
    "### Proportions are in the order Red, Pink, White\n",
    "\n",
    "species_proportions = [0.25, 0.5, .25]\n",
    "\n",
    "sample_size = 300\n",
    "\n",
    "# Distribution of sample\n",
    "sample_distribution = sample_proportions(sample_size, species_proportions)\n",
    "sample_distribution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e2e4ced",
   "metadata": {},
   "source": [
    "As you expect, the proportions in the sample sum to 1.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0af7d70a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.491043Z",
     "iopub.status.busy": "2026-08-31T06:01:05.491000Z",
     "iopub.status.idle": "2026-08-31T06:01:05.492511Z",
     "shell.execute_reply": "2026-08-31T06:01:05.492347Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(1.0)"
     },
     "execution_count": 13
    }
   ],
   "source": [
    "sum(sample_distribution)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac5d1e6b",
   "metadata": {},
   "source": [
    "The categories in `species_proportions` are in the order Red, Pink, White. That order is preserved by `sample_proportions`. If you just want the proportion of pink-flowering plants in the sample, you can use `item`:\n",
    "\n",
    "The exercises use `rng = np.random.default_rng(seed)` to create a reproducible random-number generator. The pattern `rng.choice(values, size=n, replace=False)` selects `n` different entries. In contrast, `rng.permutation(values)` returns every entry in a shuffled order. A fixed seed lets you reproduce the same sequence of draws; it is not part of the statistical model.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7229d5c2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.493431Z",
     "iopub.status.busy": "2026-08-31T06:01:05.493373Z",
     "iopub.status.idle": "2026-08-31T06:01:05.494839Z",
     "shell.execute_reply": "2026-08-31T06:01:05.494676Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "0.5"
     },
     "execution_count": 14
    }
   ],
   "source": [
    "### Sample proportion of pink-flowering plants\n",
    "\n",
    "sample_distribution.item(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "tags": [
     "thebe-interactive"
    ]
   },
   "outputs": [],
   "source": [
    "### Exercise: Distinguish Two Random Processes\n",
    "# A company selects 20 customers from its list, then assigns them to A or B.\n",
    "# Use rng.choice to select 20 different customer IDs, then rng.permutation\n",
    "# to shuffle ten A labels and ten B labels. Print the two group sizes.\n",
    "# Explain in a comment which step selects people and which allocates conditions.\n",
    "import numpy as np\n",
    "rng = np.random.default_rng(5)\n",
    "customer_ids = np.arange(100)\n",
    "labels = np.array(['A'] * 10 + ['B'] * 10)\n",
    "### Your code starts here.\n",
    "\n",
    "### Your code ends here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Group A: 10\nGroup B: 10\n"
    }
   ],
   "source": [
    "### Solution\n",
    "import numpy as np\n",
    "rng = np.random.default_rng(5)\n",
    "customer_ids = np.arange(100)\n",
    "labels = np.array(['A'] * 10 + ['B'] * 10)\n",
    "selected = rng.choice(customer_ids, size=20, replace=False)\n",
    "assigned = rng.permutation(labels)\n",
    "print('Group A:', np.count_nonzero(assigned == 'A'))\n",
    "print('Group B:', np.count_nonzero(assigned == 'B'))\n",
    "# choice selects participants; permutation allocates conditions among them."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fc03dad",
   "metadata": {},
   "source": [
    "You can use `sample_proportions` and array operations to answer questions based only on the proportions of sampled individuals in the different categories. You will not be able to answer questions that require more detailed information about the sample, such as which of the sampled plants had each of the different colors.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be118059",
   "metadata": {},
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a37f1848",
   "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": 17,
   "id": "32bfc730",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.495786Z",
     "iopub.status.busy": "2026-08-31T06:01:05.495745Z",
     "iopub.status.idle": "2026-08-31T06:01:05.499464Z",
     "shell.execute_reply": "2026-08-31T06:01:05.499315Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "      Birth Weight  Gestational Days  Maternal Age  Maternal Height  \\\n0              120               284            27               62   \n1              113               282            33               64   \n2              128               279            28               64   \n3              108               282            23               67   \n4              136               286            25               62   \n...            ...               ...           ...              ...   \n1169           113               275            27               60   \n1170           128               265            24               67   \n1171           130               291            30               65   \n1172           125               281            21               65   \n1173           117               297            38               65   \n\n      Maternal Pregnancy Weight  Maternal Smoker  \n0                           100            False  \n1                           135            False  \n2                           115             True  \n3                           125             True  \n4                            93            False  \n...                         ...              ...  \n1169                        100            False  \n1170                        120            False  \n1171                        150             True  \n1172                        110            False  \n1173                        129            False  \n\n[1174 rows x 6 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Birth Weight</th>\n      <th>Gestational Days</th>\n      <th>Maternal Age</th>\n      <th>Maternal Height</th>\n      <th>Maternal Pregnancy Weight</th>\n      <th>Maternal Smoker</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>120</td>\n      <td>284</td>\n      <td>27</td>\n      <td>62</td>\n      <td>100</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>113</td>\n      <td>282</td>\n      <td>33</td>\n      <td>64</td>\n      <td>135</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>128</td>\n      <td>279</td>\n      <td>28</td>\n      <td>64</td>\n      <td>115</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>108</td>\n      <td>282</td>\n      <td>23</td>\n      <td>67</td>\n      <td>125</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>136</td>\n      <td>286</td>\n      <td>25</td>\n      <td>62</td>\n      <td>93</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1169</th>\n      <td>113</td>\n      <td>275</td>\n      <td>27</td>\n      <td>60</td>\n      <td>100</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1170</th>\n      <td>128</td>\n      <td>265</td>\n      <td>24</td>\n      <td>67</td>\n      <td>120</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1171</th>\n      <td>130</td>\n      <td>291</td>\n      <td>30</td>\n      <td>65</td>\n      <td>150</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1172</th>\n      <td>125</td>\n      <td>281</td>\n      <td>21</td>\n      <td>65</td>\n      <td>110</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1173</th>\n      <td>117</td>\n      <td>297</td>\n      <td>38</td>\n      <td>65</td>\n      <td>129</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>1174 rows × 6 columns</p>\n</div>"
     },
     "execution_count": 17
    }
   ],
   "source": [
    "births = pd.read_csv(path_data + 'baby.csv')\n",
    "births"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "055d11e3",
   "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": 18,
   "id": "3f2f321d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.500387Z",
     "iopub.status.busy": "2026-08-31T06:01:05.500331Z",
     "iopub.status.idle": "2026-08-31T06:01:05.502803Z",
     "shell.execute_reply": "2026-08-31T06:01:05.502670Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "      Maternal Smoker  Birth Weight\n0               False           120\n1               False           113\n2                True           128\n3                True           108\n4               False           136\n...               ...           ...\n1169            False           113\n1170            False           128\n1171             True           130\n1172            False           125\n1173            False           117\n\n[1174 rows x 2 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Maternal Smoker</th>\n      <th>Birth Weight</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>False</td>\n      <td>120</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>False</td>\n      <td>113</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>True</td>\n      <td>128</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>True</td>\n      <td>108</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>False</td>\n      <td>136</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1169</th>\n      <td>False</td>\n      <td>113</td>\n    </tr>\n    <tr>\n      <th>1170</th>\n      <td>False</td>\n      <td>128</td>\n    </tr>\n    <tr>\n      <th>1171</th>\n      <td>True</td>\n      <td>130</td>\n    </tr>\n    <tr>\n      <th>1172</th>\n      <td>False</td>\n      <td>125</td>\n    </tr>\n    <tr>\n      <th>1173</th>\n      <td>False</td>\n      <td>117</td>\n    </tr>\n  </tbody>\n</table>\n<p>1174 rows × 2 columns</p>\n</div>"
     },
     "execution_count": 18
    }
   ],
   "source": [
    "# smoking_and_birthweight = births[['Maternal Smoker', 'Birth Weight']]          ### double brackets\n",
    "smoking_and_birthweight = births.loc[ : , ['Maternal Smoker', 'Birth Weight']]   ### .loc by label\n",
    "smoking_and_birthweight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "66f7b3eb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.503579Z",
     "iopub.status.busy": "2026-08-31T06:01:05.503527Z",
     "iopub.status.idle": "2026-08-31T06:01:05.505218Z",
     "shell.execute_reply": "2026-08-31T06:01:05.505031Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "Maternal Smoker     bool\nBirth Weight       int64\ndtype: object"
     },
     "execution_count": 19
    }
   ],
   "source": [
    "smoking_and_birthweight.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "31ae30f9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.506004Z",
     "iopub.status.busy": "2026-08-31T06:01:05.505961Z",
     "iopub.status.idle": "2026-08-31T06:01:05.507673Z",
     "shell.execute_reply": "2026-08-31T06:01:05.507532Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "<class 'pandas.core.frame.DataFrame'>\nRangeIndex: 1174 entries, 0 to 1173\nData columns (total 2 columns):\n #   Column           Non-Null Count  Dtype\n---  ------           --------------  -----\n 0   Maternal Smoker  1174 non-null   bool \n 1   Birth Weight     1174 non-null   int64\ndtypes: bool(1), int64(1)\nmemory usage: 10.4 KB\n"
    }
   ],
   "source": [
    "smoking_and_birthweight.info()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "36041d84",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.508516Z",
     "iopub.status.busy": "2026-08-31T06:01:05.508463Z",
     "iopub.status.idle": "2026-08-31T06:01:05.510691Z",
     "shell.execute_reply": "2026-08-31T06:01:05.510525Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "Maternal Smoker\nFalse    715\nTrue     459\ndtype: int64"
     },
     "execution_count": 21
    }
   ],
   "source": [
    "\n",
    "# pd.DataFrame({ 'count': smoking_and_birthweight.groupby('Maternal Smoker')['Birth Weight'].count()}).reset_index()\n",
    "\n",
    "### reset_index() is used to reset the index of the DataFrame to the default \n",
    "# integer index because groupby() sets the grouping key as the index of the result.\n",
    "# smoking_and_birthweight.groupby('Maternal Smoker')['Birth Weight'].count()\n",
    "# pd.DataFrame({ 'count': smoking_and_birthweight.groupby('Maternal Smoker')['Birth Weight'].count()})\n",
    "# \n",
    "smoking_and_birthweight.groupby('Maternal Smoker').size()\n",
    "# pd.DataFrame({'count': smoking_and_birthweight.groupby('Maternal Smoker').size()})\n",
    "# smoking_and_birthweight.groupby('Maternal Smoker').size().to_frame('count')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4641270",
   "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 split the rows into smokers and non-smokers and call `ax.hist()` once for each group on the same axes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a8d14ad0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.511554Z",
     "iopub.status.busy": "2026-08-31T06:01:05.511489Z",
     "iopub.status.idle": "2026-08-31T06:01:05.513165Z",
     "shell.execute_reply": "2026-08-31T06:01:05.513001Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "smoker = births[births['Maternal Smoker'] == True]\n",
    "non_smoker = births[births['Maternal Smoker'] == False]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3ab2d5f7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.513997Z",
     "iopub.status.busy": "2026-08-31T06:01:05.513945Z",
     "iopub.status.idle": "2026-08-31T06:01:05.516427Z",
     "shell.execute_reply": "2026-08-31T06:01:05.516271Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "      Birth Weight  Gestational Days  Maternal Age  Maternal Height  \\\n2              128               279            28               64   \n3              108               282            23               67   \n8              143               299            30               66   \n10             144               282            32               64   \n11             141               279            23               63   \n...            ...               ...           ...              ...   \n1162           143               281            28               65   \n1163           113               287            29               70   \n1164           109               244            21               63   \n1165           103               278            30               60   \n1171           130               291            30               65   \n\n      Maternal Pregnancy Weight  Maternal Smoker  \n2                           115             True  \n3                           125             True  \n8                           136             True  \n10                          124             True  \n11                          128             True  \n...                         ...              ...  \n1162                        135             True  \n1163                        145             True  \n1164                        102             True  \n1165                         87             True  \n1171                        150             True  \n\n[459 rows x 6 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Birth Weight</th>\n      <th>Gestational Days</th>\n      <th>Maternal Age</th>\n      <th>Maternal Height</th>\n      <th>Maternal Pregnancy Weight</th>\n      <th>Maternal Smoker</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>2</th>\n      <td>128</td>\n      <td>279</td>\n      <td>28</td>\n      <td>64</td>\n      <td>115</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>108</td>\n      <td>282</td>\n      <td>23</td>\n      <td>67</td>\n      <td>125</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>143</td>\n      <td>299</td>\n      <td>30</td>\n      <td>66</td>\n      <td>136</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>144</td>\n      <td>282</td>\n      <td>32</td>\n      <td>64</td>\n      <td>124</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>141</td>\n      <td>279</td>\n      <td>23</td>\n      <td>63</td>\n      <td>128</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1162</th>\n      <td>143</td>\n      <td>281</td>\n      <td>28</td>\n      <td>65</td>\n      <td>135</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1163</th>\n      <td>113</td>\n      <td>287</td>\n      <td>29</td>\n      <td>70</td>\n      <td>145</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1164</th>\n      <td>109</td>\n      <td>244</td>\n      <td>21</td>\n      <td>63</td>\n      <td>102</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1165</th>\n      <td>103</td>\n      <td>278</td>\n      <td>30</td>\n      <td>60</td>\n      <td>87</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1171</th>\n      <td>130</td>\n      <td>291</td>\n      <td>30</td>\n      <td>65</td>\n      <td>150</td>\n      <td>True</td>\n    </tr>\n  </tbody>\n</table>\n<p>459 rows × 6 columns</p>\n</div>"
     },
     "execution_count": 23
    }
   ],
   "source": [
    "smoker"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "55a34ca1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.517258Z",
     "iopub.status.busy": "2026-08-31T06:01:05.517209Z",
     "iopub.status.idle": "2026-08-31T06:01:05.567692Z",
     "shell.execute_reply": "2026-08-31T06:01:05.567477Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "<matplotlib.legend.Legend at 0x1193906e0>"
     },
     "execution_count": 24
    },
    {
     "output_type": "display_data",
     "metadata": {},
     "data": {
      "text/plain": "<Figure size 700x400 with 1 Axes>",
      "image/png": "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7F5w3bp1a5fp/v77723+/PkuoFbrvyOOOMIF6pEeJwAAAOJX0saNG/+tkUBcUDvAunXrWmmVaJO+SjPGungl8nj78blSftsWS94SuitTYakd6Zb0dKualpbvirh+yKpa3XZVrmplmcqCdDVYazFQdhhbjHXij3dcZK4BAKWfAuvst6b4sq+szAyz9K2WlVbFklNi+6cqufs5ZmU8uAbgn8RKvQAAAAAliMx1AtqQkWz/7CjJap9ky8wsbykZOnf7d6JUnYpJVjM1y8oS1eRr8uzMmTML3FYTZDUZV3X7gZN0kddBBx3kvmvSMQAApQnBdQJSYD32+/Ul9vgK67MyMy05JSUgtDYb0LqW1Uwr+v41WVRL0E+fPt0tLqQJrpqQqoD0yCOPtL59+1rTpk2L/kAoMZq8rInE6uZz9NFHl/ThAAAQMYJrxBUtd3/iiSfazz//bM2aNXMtDrUCplas1GI96gajwDoeg+s777zTrrvuOmvQoEFJHwoAAIgSwTXiyvjx411grez0ww8/nKc/rxbzUTeHeLTHHnu4LwAAEL+Y0Ii48tVXX7nvWoo+1MIXWs1TC/8E1+fqS6t2Xn/99dayZUuXHT7ppJPsu+++c9v89ddfbhXOFi1auAD39NNPdyUnoXzxxRcuY67Hql+/vh122GF233332bZt2yJ6DlohdMiQIa4e+9JLL3VlLYGLEmnxIc8nn3ziblOZxLfffmunnXaa7b333taoUSO3SJLXjz2YFlk69thj3XPZZ5997Oqrr7aNGzfmjEUkXnjhBffY+v72229b165dbc8997T999/fhg0b5trSifrHq65cj3XggQe6RZ/ClfNonDReGjeNn8ZR4xlIi0V5veVPOeUUdwz6CnXc6enpNnjwYNtvv/2sXr161r59e1cuFIpOuh577DHXN1+vv8ZR74G33norz7bea6GTtUcffdT1q9f+BwwYkNPaSbfreeu10P50fBdeeCF14ABQxpG5RlzRwj+iwPfggw+O+OcUwCpgVlCk7+rpqwWJFKxqFU0t8qPgUMGeVu7UokX695dffpmrx+60adPs4osvtgoVKrj9qC/whx9+aCNHjnTf33zzzXz7aOo4rrzySnvllVdcAKdgM5LV8RRYK2hV/bECuB9++MFNkvzll19s9uzZru+y57nnnrOBAwdatWrV3Kqg+j5r1iz3XDMyMtyqp4Wh56THUNCrIFPjNWrUKHef9q1/K0jt2LGjq5G+44473Lice+65OfvQuPfs2dOV7mjBJT33tWvXutfggw8+sKefftodn7c4k7fqqfah4FW0KFMgPRe9bjppUBC+fft2e/311934vPbaa9alS5ecbXfu3OlWef30009dEKyFnfTzei56PL1+OrkKNmjQIHdCd/zxx7typNq1a7vb9RrqvXDAAQe4n9f7YeXKle5kSK9VpCcwAIDEQ3CNuKIA7OWXX3aZWAVqCqDatGnj6q7zs3r1ajfZ8amnnsoJLhWcq865W7duLgt877335gS6WspeAZ8CWAWFsnnzZve4+nkFZcrSioJJZdIV2CkAVkAWirKsKmdREO7VV0dKjzdx4sRcK31efvnlbrVR70RAFGgqK16lShUXEDdv3jznGPWzytSrkX5hvP/++/buu+9au3bt3P9r//q3VjmtWrWqffzxxy4LLQrqdZ+yuoHBtUp49HrpOJ944omccdZz0Phfc801LjOu/XkZeQXXClzDTWjU1Ya2bdu64N87uTjrrLPcSqljx47NFVwreFZgfdNNN9ktt9yS8/iq4dfrq1VaFaArMx9IJUh6ft6YKVv/zz//uOy43nc6MQg8+XILn2zZUqjxBQAkFspCEFe6d+/uShJUWqFL/AoYNbFRQZYCp3ClHHLPPffkytoqk+kFRAquAjPI3n0//fRTzm0qH1CAraynF1iLVuobOnSo27dKJELRhEsFcXPmzHHHXZjAWlTuEBhYi45DlCkNPEYF8brPC6xFx6bnGA0FxF5gLQqATzjhBFcGc9FFF+UE1qJSC53E/Pbbby4z7FGLwXLlyrmTisBxVhZbQbhKdiJpVxhMmf/ArH2nTp1cIDx//vyc2xQQ60RJk1wDA2vvuehkSCUjyroH08lC8MmIfl7vP12hCF6lUYG2ykkAAGUXmWvEnauuusr69evnsobz5s1z2divv/7aJkyY4EoilOFVEB5IAU9wkORNHlRwXrly5ZD3KePtUSmGqPwhmPatIPOPP/5wmUsFbR6VoCgYVdnA888/70ooCktZ0mB77bWX+66A3+OdDBx11FF5tj/00EMLXRIioUocvPEJd59OWFT2oVpkHZ9ql1Xr7h1zIGWmn3nmGVerrDKWSKlMJDCw9+gxVM7j+f33311GX1np4cOHhzzx8bYLdsgh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0E1iVPZ62bJlLpv9zz//2IwZM1xLvnfffZcAGwAAAAmvUMH1jTfeaH/++acLlEeMGGFnnHGGm8wYLDMz01555RUbMmSI/f77726hmSeeeKJIBzp//ny7//77bd68eZaRkeFKTpRBP/300yPex86dO23MmDE2ZcoUW7lypdWsWdNOOOEEu+2229yJQqBt27a5NoPff/+9+9IS7jqh0L8bN24ccv89evRwbQhD0QnIjz/+WMhnDQAAgIQMrpcsWWJTp061tLQ0VxLSsmXLsNsq4O7du7dbaEaZ7ldffdVuvfVWa9SoUVQH+fHHH7tAvmLFiq71n47hjTfesP79+9uKFSts4MCBBe4jKyvLzjvvPPvggw/ssMMOs549e7oTBa0iOWfOHHv//fetTp06Odv//fffdvvtt+cExjqhUOY+EjqZCFa9evVCPWcAAAAkcHCtTLQyt1dddVW+gXWg/fff322vLLcC7Ouvv77QB6gs9TXXXGPJyck2c+ZMO/jgg93tgwYNsq5du9o999zj+mwXFLi/+OKLLrA+88wz3cI2SUlJ7vaJEye64xo2bJjLantq167tTibatGnjMtwK7vXzkVDGHgAAAGVPxK34vvnmGxeQKvtbGN72qsOONmu9ePFiFxR7gbWXCVZQvGvXLps8eXKB+1GGWu64446cwFqU/W7SpIk7efCWbxdlxzt37uwCawAAAMDX4FoTE1WXrBKJwlBGWT+nn4/Gp59+6r536dIlz33KXEu4OmfPjh073AqS++yzT54MtwJtBdFbt261b7/91vygQH306NE2btw4++STT1xJCgAAABJfxGUhWta8sIG1p379+rZ8+fKoflZ10dK8efOQ+1WGWd1L8qPMtwLcZs2ahbzfu12P1b59eyuqSy+9NNf/t2jRwpWitG3bNqKf18lAPNPVhMDviB3GOrzMzPJucrWv+/z/E2Xveyyou2moFqdxwcdjz/r//eh7rFc70yNlZGZYvEnOzPTt7wWfJcWHsS5d4635fCUWXKvNngLZaOjn9PPR2Lx5s/uuBWpCqVq1as42Be0j3KRCb98F7acg3bt3t6uvvtqVr2gCpNoSTpo0yQXWp512msvCR3KCsmrVKt+DgpKwZs2akj6EMoOxziu9cn1L3xrd505Btm/fZrGSlZVsuzN2WzxSkOr3sWdmZlisPw2zMrNsW/pWizvp6bZ8q78BGp8lxYexLvnxVgOOcInXYgmuixrslYXSCLUGDKSJn8OHD3cnAA888IA9+uijNnLkyAL306BBA4tnOjvUm1hXFsqXL1/Sh5PQGOvwMneWt7Qq/gYeylgrsK5UqbKlJMcmn5qcvMPKpZazeKTZLH4duzLWCqxTUlItOWCeTCwkpyRblbQqFm+S09KsYa36vuyLz5Liw1gn/nhHvfx5cSkoq7xly5YCF6jx9rFp06aosuNFpUmTCq7VozsSsbhEURL0Jk6U51LaMdZ5pWQkhezD78u+k5Njtm/FkYGTruOKj8euUxeldBRYx3o8tHcF8fEmKSXF9997PkuKD2OduONdqE+T7777zvWuLs5LH16tteqh1RYveL8qN2nXrl2++1A3ELXyC1eb7d0eqq7bD7Vq1XJ/HLQwDQAAABJXoYJrTZxQHXE0os08dOjQwR588EH78MMPXa/pQF7faW2Tn0qVKtkhhxzi2gHq+AM7hmjyzezZs93y7ZFOOCwstTHU40S7iA4AAAASLLgeO3aslYROnTq5zLMWobn88stzel2rxENBt9L8Wg3Ss3r1alfmodqawAmM/fr1c8H13XffnWsRGU041OqTF154oQvCo6V96PGC+2JrcqKWjRf16gYAAEDiiji4LuziMX5JTU21Rx55xGWte/TokWv5c7X30wqNjRs3ztl+6NChblEZnQycf/75uY5fKy4qSF+6dKnLdqscZMaMGe7nb7vttjyPrdvWrVvn/v3LL7+471oSXVlu6du3rx111FE5vbZvuOEG9//an+rA9Tjvvfee66F99tln5zoJAAAAQOKJixkcxxxzjL3zzjt2//33uwB59+7d1qpVKxdIK9iOhGqutQT6Qw89ZFOmTHELvCjL3KdPHxdE16lTJ8/PTJ8+PU9/bgX1no4dO+YE16pF1zLs33//vc2fP98F1MpkH3HEEXbBBRdEfJwAAACIX3ERXItqppV1Lsj48ePdVygVKlSwm2++2X1F4scff4z4+A488EB74oknIt4eAAAAiSfWC18BAAAAZQbBNQAAAOATgmsAAACgrNVcAwAQG0m2abfFnUrZcbqSJ5DgCK4BAGVapmXbz+t2Wrw5IDPbWDwbKH0oCwEAAABKOrheu3atX8cAAAAAlO2yEPV1PuGEE9yy4l27ds1ZThwAAMRe5ZQkK79mhS/7KpeZaQ2zd1nV9WssJSXFYimranXbVblqTB8DiMvgWqskvvnmmzZz5kxr0KCBW4VQX3vvvbe/RwgAAPJI2bbFsufM9GVfWZkZZulbLSutiiWnxHY6VnL3c8wIrpHAoi4L+fbbb+3aa6+1+vXr28qVK23kyJHWpk0bO/vss13QnZmZ6e+RAgAAAIkaXDdp0sTuvPNO++mnn+yFF16wbt26udtnzZplffv2tVatWtnQoUNt0aJFfh4vAAAAkLjdQlSb1b17d5syZYr9+OOPdsstt1ijRo3chMcxY8bYoYceaqeccoq99tprtmvXLn+OGgAAAEj0Vnx77rmn3XTTTfbdd9/ZtGnTrFevXi74njt3rl166aW23377ueB78eLFfj4sAAAAkLh9rrdt22bLli2z5cuXu9rr7Oxs97VhwwYbP368HX744TZ48GDLyMiIxcMDAAAAJcLXKcHffPONPfvsszZ16lRLT093AXXdunXt/PPPdy37VCoyceJEe/31123ChAlWtWpVu+222/w8BAAAACB+g+uNGzfa5MmT7bnnnrMFCxa4gFo9r48++mjr37+/nXzyyZaampozCVJZ68suu8z1yFadNsE1AAAArKwH13PmzHFZavW51kRFBdW1a9e28847zy688EJr1qxZ2J9t166dHXzwwa42GwAAALCyHlyfdtppOf/u0KGDy1KrK0j58uUj+vmKFStaVlZWtA8PAAAAJE5wXaNGjZws9T777FPon1fGGwAAAEgkUQfXv/32W8RZagAAAKAsiLoV33XXXecWiYmEthswYEC0DwUAAAAkdnD94osv2rvvvhvRtu+//77rKAIAAAAkspgsIhNMExfVng8AAABIZMUSXP/1119WpUqV4ngoAAAAoPRPaNRS5lrSPNDmzZtt7ty5YX9m+/btrh/2kiVL7LDDDivakQIAAACJEly/8MILNnLkyFy3/frrr663dX60uIyoZR8AAACQyCIOrqtXr2577713zv+vWLHCteKrV69eyO1VY125cmVr2rSp9e7d23r27OnPEQMAAADxHlxfccUV7stTs2ZNa9u2rb399tuxOjYAAACgbCwiM3bs2LBZawAAAKAsijq41tLnAAAAAIq5FR8AAABQFkSUufY6gjRs2NDGjRuX67ZIaYLjG2+8Ec0xAgAAAIkTXH/66afu+7777pvntkixQiMAAAASXWqkkxelWrVqeW4DAAAAUIjgOtTkRSY0AgAAALkxoREAAADwCcE1AAAAUJxlIcuXL/flwdRtBAAAACjTwXXr1q2L/EDqFrJu3boi7wcAAACI6+A6Ozu7yA/kxz4AAACAuA+uN2zYEPsjAQAAAOIcExoBAAAAnxBcAwAAAD4huAYAAACKs+Z6xIgR7nvt2rXtkksuyXVbYQwePLjQPwMAAAAkVHA9fPhw10pvn332yQmuvdsi7RSibQmuAQAAYGU9uO7du7cLjvfYY488twEAAAAoRHA9fvz4iG4DAAAAyrK4mdA4f/58O+uss6xRo0bWoEEDO+6442zq1KmF2sfOnTtdrXi7du2sfv36tt9++9k111xjf//9d55tt23bZo8++qgrgznssMOsZs2aVqNGDVu6dGm+j/HHH3/YhRdeaM2aNXOZ/g4dOtjTTz/NIjoAAABlQESZ65L28ccf2xlnnGEVK1a0Xr16WVpamr3xxhvWv39/W7FihQ0cOLDAfWRlZdl5551nH3zwgQuWe/bsaX/++ac9++yzNmfOHHv//fetTp06Odsr4L799tvdvxs2bOgC64IW01mwYIEdf/zxtmPHDjvttNNszz33tPfee89uuOEGd98DDzzgw2gAAAAgYYNrZWRnzpzpgsiFCxfali1brGrVqrbvvvu6QLN79+6WnBx9gjwjI8Nll7UPPc7BBx/sbh80aJB17drV7rnnHjv11FNdRjs/L774oguszzzzTJswYUJOvfjEiRPt+uuvt2HDhtmYMWNytldnFGXG27Rp47LWCu718/nRfjZv3myvvPKKdevWzd126623uuPTYyrzfvjhh0c9FgAAAEjgshCVQBxzzDHWt29fe/75523evHn2yy+/uO/6f92u+xV0FyVrvXjxYhcUe4G1VK9e3QWzu3btssmTJxe4H2Wo5Y477sg1EVPZ7yZNmriAePv27Tm3KzveuXNnF1hHOhafffaZHX300TmBtZQvX94F2PLMM89E+KwBAABQpjLXq1evdllplU+kpqbaySef7GqY69WrZ2vXrnVlEMo0//zzz3bKKafYRx995MokCuvTTz9137t06ZLnPmWuZe7cufnuQ2UaX3/9tWslGJzhVqCtIHrSpEn27bffWvv27Qt9jAUd51FHHWVVqlQp8DgBAABQRoNr9blWYH3ooYe60grVJQdbvny5XXTRRfbNN9+4iYSBZReRUl20NG/ePM99mpSoDPOiRYvy3Ycy36q51iTDULzb9VjRBtfecYZ6jJSUFGvcuLE74VCZi05GCjoZiGe6mhD4HbHDWIeXmVneMjMz/d1nVlau77Gguc9xOwHax2PP+v/96HvMZ97H6ZjriDMyM3zZl/5Get8zzJ99hpOcmRn3f+eKgs/t0jXems9XaoJr1VgrSFSpg7p3hKKA+7///a+rW9b20VANs1SrVi3k/arv9rYpaB8qJQnF23dB+ynKY+g49aGVnp7uJkfmZ9WqVb4HBSVhzZo1JX0IZQZjnVd65fqWvjU9Jvvevn2bxUpWVrLtztht8UjBnt/HnpmZYZlxeNzFISszy7alb/V1n9u3/VseGTPp6bZ8K4Eln9slP95KfoZLvJZIcL1u3Trbf//9wwbWnr322sttV5S667KmoDEt7XR2qDexriyo5hyxw1iHl7mzvKVV8fcPuDLWCqwrVapsKUWYqJ2f5OQdVi61nMUjzWbx69iVsVZgnZKSaskxXrDMz+MuTskpyVYlrYov+1LyR4F1pcqVitSEIBLJaWnWsFZ9K6v43E788Y46uFYPZ5U4RELb6UlFo6CssrqTFJQJ9vaxadOmqLLjhTnOcI+h41R9t8pYChKLSxQlQW/iRHkupR1jnVdKRpLLSsRk38nJMdu34si4Xf3Wx2NXeKeMtQLrmI9HnI65jlgnH37wSkEUWKf6tM9wklJS+Lziczuhxzvq09MTTzzRfvvttwIz0rpftcaa/BgNr9baq2kOpDMRlVkUlNJXNxB9YISrzfZuD1XXXdjjDPUYKvHQ4jOquy6o3hoAAADxK+rgesiQIS5o1cIs6sQRiiYynn/++S74vfnmm6N6HK1wKB9++GGe+7y+09424VSqVMkOOeQQ+/33323ZsmW57tMkltmzZ7tuHm3bto3qGAs6zs8//9y2bt1a4HECAAAgvkWURlWnj1DUz1mdQrRYjJYUV211YCs+BdflypVzHUOeeOIJt/BLYXXq1MkF8a+++qpdfvnlOb2uVX7x4IMPujR/7969c7UIVJmHylACJxf269fPvvrqK7v77rtzLSKjFnxLlixxS5YrCI+W2vyp08gnn3xis2bNyul1rVqfe++91/1bfb8BAABQxoNrtd0LV4/mtS9SIK0vbRfY0kjBpQJriSa4VhnFI4884lZI7NGjR67lz9XqTys0qtzCM3ToULeozNixY13W3KMMu1ZcVJCuEg1lkVXCMWPGDPfzt912W57H1m2auClaHEe0JLqy3F6wrB7WntGjR9sJJ5zgHvf00093denqkvLrr7/apZdeakcccUShnz8AAAASLLhWZrgkJ3tolcd33nnH7r//fhcg796921q1auUCaQXbkVDNtZZAf+ihh2zKlCk2btw4t/pinz59XBBdp06dPD8zffp0F8AHUlDv6dixY67gWpl7lapoKXUF1du2bXO12KNGjbKLL764SGMAAACABAmux48fbyVNNdPKOkdyrOGOt0KFCq72O9L67x9//DGq8hCWOQcAACibYr7wFQAAAFBWEFwDAAAAPvGt6fLOnTttw4YNrh46HC2HDgAAACSqIgXXWnlRXTnUnUM9pAO7hATThEiv8wYAAACQiKIOrpWhVqeOuXPn5htUeyLZBgAAACiTwbUWj/n000/t8MMPt8cff9yuvPJKmzdvnstOr1+/3i3Yov7U3333nY0ZM8bOPvtsf48cAPKxR8YW65O23td9Kkmwu/JuK5eaEbP2pGnZTIUBgDIZXL/++uvuj4vKQpo2bZpzu26rXbu2nXjiie7rqquucoG36q0De0IDQCyV27rR7K0p/u5UV+AydpulltOHncVCyjmR9e4HAJROUadItLy5AuYWLVrkuj0rKyvP6o7qL60sNgAAAJDIkovSHaRu3bo5/1+xYkX3ffPmzbm201Ll++67r1saHQAAAEhkUQfXCqw3btyY6/9l4cKFebZVi75NmzZF+1AAAABAYgfXTZo0sbVr1+ZanlyTfZ588slc27333nu2dOlSa9CgQdGOFAAAAEjU4LpLly6Wnp5u3377rfv/M844w5WAaKJjt27d7Pbbb7fLLrvMLrjgAjfJUW37AAAAgEQWdbeQnj17ujZ7q1evdv9fp04de+yxx+zyyy+3r7/+2tVYe72tO3bsaIMGDfLvqAEAAIBECq6bN29uzzzzTK7bTj31VGvbtq3LXqsUpFKlStahQwfr3r17zHrCAgAAAAmx/HkojRo1smuvvdbv3QIoIRsyku2fHfG3wupe2ZzQAwASILgGkFgUWI/93t+VDovDPY3i74QAABD/fAmuf/jhB9cVRG34tmzZYlWrVnW9rTWxsXXr1n48BAAAAJDYwfXff//tljefNWuW+39vAqOoxvq+++5zAbZWZ6xfv37RjxYAAPy/JNu02589ZWen2O7USpadmWJJuRda9l0lSraQ4KIOrrUojCYq/vnnny6obteune23335Wr1491/9ay6PPnz/fBd4nn3yyvf/++1a9enV/jx4AgDIq07Lt53U7fdmX/o7vztht5VKzYt6A4IDMbPvfms5AYoo6uB41apT98ccf1rRpUxs/frwdccQRebb58ssv7YorrnABuLa/5557inq8AAAAQOItIvPGG29YcnKyTZ48OWRgLYcffri9+OKLOdsDAAAAiSzq4FqLx7Rs2dJ95Uf3q1xkzZo10T4UAAAAkNjBtVZkTE2NrKpE29WuXTvahwIAAAASO7g+9thj7ddff7W//vor3+1WrVrltuvSpUu0DwUAAAAkdnB9yy23uO4f/fr1s5UrV4bcRrf379/fatSoYUOGDCnKcQIAAAClXkR1HZq0GMrFF19sDz30kLVt29a129t///1zteJ788033XbXXXedzZkzx84991x/jx4AAACIt+D6yiuvDNv30ls4Ztq0ae4r1H0jR4503wmuAQAAYGU9uG7fvn3Mm8oDAAAAZSK4njlzZuyPBAAAACirExoBAAAA5EZwDQAAAPgkslVg8qFJi+oK8t5779nvv/9uW7ZssapVq9q+++5rxx9/vPXo0YN6bQAAAJQJRQqulyxZYn379rWffvopV3cQ+fLLL+3555+3gw46yJ555hlr0qRJ0Y8WAAAASMTgevPmzXbqqafasmXLLCUlxU466SRr1aqV7bHHHrZ69Wr75Zdf7O2337YffvjBTj/9dNfnulq1av4ePQAAAJAIwfXYsWNdYK3M9KRJk6x58+Z5tlm0aJFdeOGFLrM9btw4u/nmm4t6vAAAAEDiTWhUnbUy1s8++2zIwFqaNWvm7lfN9YwZM4pynAAAAEDiBtdLly61li1bFlhLrfv3228/tz0AAACQyKIOrjV5MTk5sh9X5jpwsiMAAACQiKIOrhs3bmwLFiywVatW5bvdihUr3HbaHgAAAEhkUQfXJ554omVkZFj//v1dd5BQ/vrrL7vooossKyvLunfvXpTjBAAAABK3W8jAgQPtpZdesq+++sratGljp512mmvFV69ePVu7dq1rxTdt2jTbuXOnNWjQwK666ip/jxwAAABIlOC6Zs2a9vrrr1ufPn3s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CUft9Q455BD7/fffbdmyZXkWPJk9e7ZVqVLF2rZtG/Xj+nGcAAAAiG+lPrju1KmTyzy/+uqr9sMPP+TcrhIPtb4rX7689e7dO+f21atX28KFC/OUgPTr1y+nZZ4Cao9a8C1ZssTOOuusnB7Xon7VqampNnr06Fz70jGoFZ9a6x111FFRHycAAAAST6kPrhXgapEXtdLr0aOHWwXx1ltvtY4dO9off/xht99+uzVu3Dhn+6FDh9rhhx9ub775Zq79aOlzrZSo4Fc9rO+66y7r27evWyRGP3/bbbfl2l4rM958883uMfRYekw9to5BHn744ZzVGaM5zng3Y8YMO+2006xp06au1aAWzlHvby3zHkg16OoHfuCBB1q9evXsoIMOcmOhMhnkTyeB6ot+8sknu5O5Pffc0w499FC79tpr3QlhMMa6YFOmTHHjd+yxx7oxqlGjhlswKpzCjql+/5944gnXL3+PPfZw5WL6vQj1epUFkY737t27bfr06faf//zHfX7vtddetvfee7vPbK0dkJmZGfYxXn75ZevSpYtby0Cfseecc4599913VtYU9r0dSO9Pjbl+Rus+hMNYF228Nc5XX311zufJPvvs4z7fp02bFnJ7xju6sVZ5rhbua9eunfsc3n///V28orVMwvF7rEv9IjKeb775xq2gqIVd9EHcqlUrGzBggPXq1SvXdldccYVbCXHs2LEu+xxo586d9tBDD7kXauXKlVazZk074YQTXGCtFyzcgI8fP94WLFhg5cqVsyOPPNL9sW3Tpk2RjjOeAz59+P73v/91gbX++KmH919//WVz5851S8t7Gf2tW7faiSeeaD/++KN70yoAV1ZfpTN60+uNXrFixZJ+SqWWTs70PtaHQ/fu3V07x59++smNn8b83Xffde8vYawjo+B4+fLlVrt2batcubL7d6jPimjHVH84tRqsPsx1Eq/fC/3hVNnZ+++/H7IPfiKLdLx1tVFBtd7XWmxLQYdObN555x03hvqcfumll3KtriujRo2yYcOGWcOGDa1nz57upOf111+3Xbt2uWBdn9dlRWHe24G8hJDe23rPa9Vi/Z0MxlgXbbxVfurdp88VXeneuHGj/fzzz+7zYsyYMbm2Z7yjG+uvv/7aTjnlFBd/nXTSSe4z9++//3YJQX2mKGmqr1iPddwE1ygddKIxZMgQu+SSS2zE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kC4favw01hq3N998013+EsY6Mjop9CYOqe5UY6QTGW8GuT5EFeBFO6bBy5+rPd/UqVPdFR0Fj2oLVZZEOt4KMnRlTIGHFm4INU46MQlekY0loqN7b4fyySefuM8clj/3f7zVd1ndKzRO+pupzxPV+eokctu2bfb444/b2WefnWv/jHd0Y60AWt3LdGVXn9+6EqOSD/291BheddVVOS2DPSx/jlJBZ4CaHKBLJuvXr3fBtIK/QYMG5WlpozNBna3rQ0RvcG2rJYw1S91rc4PQFGgoc63gTD3F9YuuCV5a7U+rSemMOhBjXTB1SVBP2XC0/Pb48eOjHlPVsqqzhdpreWVSWl3s9ttvz9MCqiyIdLy9wC4/yjbphCbYyy+/7PahS+4qk9IfQnVliKTFXFl+bxc2uBbGOvrx1iqATzzxhJtop88GXXVUpxB1g9JneiiMd3RjPXv2bHfCoi4sarCgz2EtHqMTnOCTmFiNNcE1AAAA4BNqrgEAAACfEFwDAAAAPiG4BgAAAHxCcA0AAAD4hOAaAAAA8AnBNQAAAOATgmsAAADAJwTXAAAAgE8IrgGUGgcddJDVqFHDrRYXK/fff797DK36lej0PPW1dOlS3/bZo0cPt88XXnjBSpJWutNxPPjggyV6HGXN5Zdf7sb9yy+/LOlDAUotgmsAvgdewV9169a1/fff33r37h1yCWu/vPnmmy54jmVwHoqWi9bzbNeuXdhtPv/885zxuPrqq8Nu98ADD7htDj/8cEs048aNc69PUYP99PR0u+eee6xevXr2n//8J+x2WnJaJwF637Vq1cotX9+4cWNr3769W9p44cKFRTqOsujmm2+21NRUN37Z2SzwDISSGvJWACiCvffe2315Nm7caMuWLbN33nnHffXr188efvjhPD/XtGlTq1ixolWuXDmqx1XgPnnyZPfvo48+2opLx44d3fdFixbZqlWrrEGDBnm2+fTTT0P+O9x23j6LYp999nHfy5UrZ6XB+PHjbfny5e65KciN1pgxY2zNmjU2bNiwsO+VX3/91fr27Wu///67+/86deq4AHv79u0uqP7ll1/siSeesGuuucZuv/12S0pKivp4yhL9jp5zzjnupOX111+3M844o6QPCSh1yFwD8N3555+fE0jr64svvrDffvvNLr74Ynf/M888Yx9++GGen3vjjTfsq6++skMOOcTiSdu2bS0tLS3fwNm7XcGJF4QH27Vrl3v+fp0caF/6ChXsx6sdO3bY008/beXLl7fzzjsv5DYLFiywE044wQXWBxxwgM2YMcP9e/bs2e69+Mcff9jgwYNdQK2ykmuvvbbYn0c800mLdyUCQF4E1wCKRdWqVW3kyJGuREQ++OADSxS6TH7EEUe4f8+dOzfP/bt3784JclWiEG67+fPn27Zt23zLXCei1157zTZs2GDHH3+81apVK2QpSP/+/W3z5s3upEcndzpRCcxMq+xmyJAhLnPtnewpC4vI6L3evHlz++abb+y7774r6cMBSh2CawDFJiUlxfbaa6+cLG2kExp1CVq3q6Y7KyvLnnrqKevSpYs1atQoZ8KevnslISNGjMhV8639hpKZmWljx451Nbh77rmnK1XQJe9oAgYv0xwqc60gREFzhw4d3GOF2867bb/99ss5CfEo233DDTe4rL6OVWU3nTt3dtnDnTt3FnpCo8ZRGeBjjjnG7a9Zs2Z29tlnu8yuN576yo+CXNXganxV/6y6etWTq2Qj1OunkhA55ZRTcr0+hZlc+sorr7jv3bt3D3m/gmSVhCQnJ7vgWSd14aikwStrUC24xqQwE0ID35fBAn/2559/dgG/ynQ0Toceeqh7j4b6HfCofOXxxx93z1NXO/RzBx54oJ1++uk2ceLEkK+5yq+0306dOrnfDdWY67Fuu+02+/vvv0M+jk5C7rvvPncyp99Nve9atmxpxx57rN16663ufReKN/5TpkwJ+xyAsoqaawDFRn/8dUleFIgVliZQqV5bl/kVXLZo0cIFL2vXrrUjjzzS/vzzTxdEBNd8K8gIFVifddZZrjxFgaUycSodePfdd+3jjz929dv5TVAM5mWadQx//fWXC1iDg2YF14cddpgracgvuA7OWr/88ss2cOBAF1BVqlTJBVsK1r///nv79ttvbdq0aS6jm18gGTyOl1xySU62VkGVgjcF1goUNVmwICpr0QnF6tWrbd9997UKFSq4QOzZZ59146evatWquW21b70+OlY9B9U+e/eJXsdIKBj1ulRoHEN59dVX3feuXbu64yqIAnuNnV57nVQV5jWPhEpRvEmAep76rt8BBfMKujVewZYsWeJOdLwJl3ov6zXX++qjjz5y+9TzC6xb//HHH92JoV4XPUbDhg3de0WP9dhjj7lx0eut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"
     }
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "bins = np.histogram_bin_edges(births['Birth Weight'], bins=12)\n",
    "ax.hist(smoker['Birth Weight'], bins=bins, density=True, alpha=0.6,\n",
    "        edgecolor='white', label='Smoking mothers')\n",
    "ax.hist(non_smoker['Birth Weight'], bins=bins, density=True, alpha=0.6,\n",
    "        edgecolor='white', label='Nonsmoking mothers')\n",
    "ax.set_xlabel('Birth Weight (Ounces)')\n",
    "ax.set_ylabel('Probability Density')\n",
    "ax.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e920de19",
   "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",
   "id": "32a45d0c",
   "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 populations; 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",
   "id": "f0864b58",
   "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": 25,
   "id": "61acfba8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.568772Z",
     "iopub.status.busy": "2026-08-31T06:01:05.568707Z",
     "iopub.status.idle": "2026-08-31T06:01:05.571494Z",
     "shell.execute_reply": "2026-08-31T06:01:05.571313Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "                 Birth Weight\nMaternal Smoker              \nFalse              123.085315\nTrue               113.819172",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Birth Weight</th>\n    </tr>\n    <tr>\n      <th>Maternal Smoker</th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>False</th>\n      <td>123.085315</td>\n    </tr>\n    <tr>\n      <th>True</th>\n      <td>113.819172</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 25
    }
   ],
   "source": [
    "means_table = smoking_and_birthweight.groupby('Maternal Smoker').mean()\n",
    "means_table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "589c71e7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.572412Z",
     "iopub.status.busy": "2026-08-31T06:01:05.572350Z",
     "iopub.status.idle": "2026-08-31T06:01:05.574028Z",
     "shell.execute_reply": "2026-08-31T06:01:05.573845Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(-9.266142572024918)"
     },
     "execution_count": 26
    }
   ],
   "source": [
    "means = means_table.iloc[:,0]\n",
    "# means\n",
    "observed_difference = means.iloc[1] - means.iloc[0]\n",
    "observed_difference"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ff77b8f",
   "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": 27,
   "id": "fd4ba71b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.574910Z",
     "iopub.status.busy": "2026-08-31T06:01:05.574860Z",
     "iopub.status.idle": "2026-08-31T06:01:05.576252Z",
     "shell.execute_reply": "2026-08-31T06:01:05.576084Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def difference_of_means(table, label, group_label):\n",
    "    \"\"\"Return the True-group mean minus the False-group mean.\"\"\"\n",
    "    means = table.groupby(group_label)[label].mean()\n",
    "    return means.loc[True] - means.loc[False]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f6053fe",
   "metadata": {},
   "source": [
    "To check that the function is working, let's use it to calculate the observed difference between the mean birth weights of the two groups in the sample."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "a71a3972",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.577181Z",
     "iopub.status.busy": "2026-08-31T06:01:05.577120Z",
     "iopub.status.idle": "2026-08-31T06:01:05.579145Z",
     "shell.execute_reply": "2026-08-31T06:01:05.578974Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(-9.266142572024918)"
     },
     "execution_count": 28
    }
   ],
   "source": [
    "difference_of_means(births, 'Birth Weight', 'Maternal Smoker')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a7f2616",
   "metadata": {},
   "source": [
    "That's the same as the value of `observed_difference` calculated earlier."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f354599",
   "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",
    "Shuffling ensures that the count of `True` labels does not change, and nor does the count of `False` labels. This is important for the comparability of the simulated differences of means and the original difference of means. We will see later in the course that the sample size affects the variability of a sample mean.\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. We have reduced the table to have just the columns that we need.\n",
    "\n",
    "This shuffle requires **exchangeability under the null**: under that model, labels can be rearranged without changing the joint distribution of the outcomes. For the observational smoking comparison, this is a modeling assumption, not a consequence of random assignment. Equal means alone do not guarantee exchangeable labels if other distributional features differ.\n",
    "\n",
    "The pattern `table[group_label].sample(frac=1, replace=False).to_numpy()` rearranges every label exactly once. Converting to an array matters: assigning a shuffled pandas Series directly can align it back to the original row indices and undo the shuffle. Keep the outcome column fixed and attach the reordered labels by position.\n",
    "\n",
    "```{index} Permutation\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "e10674b1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.580089Z",
     "iopub.status.busy": "2026-08-31T06:01:05.580036Z",
     "iopub.status.idle": "2026-08-31T06:01:05.582327Z",
     "shell.execute_reply": "2026-08-31T06:01:05.582173Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "      Maternal Smoker  Birth Weight\n0               False           120\n1               False           113\n2                True           128\n3                True           108\n4               False           136\n...               ...           ...\n1169            False           113\n1170            False           128\n1171             True           130\n1172            False           125\n1173            False           117\n\n[1174 rows x 2 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Maternal Smoker</th>\n      <th>Birth Weight</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>False</td>\n      <td>120</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>False</td>\n      <td>113</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>True</td>\n      <td>128</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>True</td>\n      <td>108</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>False</td>\n      <td>136</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1169</th>\n      <td>False</td>\n      <td>113</td>\n    </tr>\n    <tr>\n      <th>1170</th>\n      <td>False</td>\n      <td>128</td>\n    </tr>\n    <tr>\n      <th>1171</th>\n      <td>True</td>\n      <td>130</td>\n    </tr>\n    <tr>\n      <th>1172</th>\n      <td>False</td>\n      <td>125</td>\n    </tr>\n    <tr>\n      <th>1173</th>\n      <td>False</td>\n      <td>117</td>\n    </tr>\n  </tbody>\n</table>\n<p>1174 rows × 2 columns</p>\n</div>"
     },
     "execution_count": 29
    }
   ],
   "source": [
    "smoking_and_birthweight"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0621743a",
   "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 pandas method `sample` with `replace=False`. We pass the `len()` of the DataFrame as the sample size so that `sample` draws all rows in the table."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f9d92cf4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.583222Z",
     "iopub.status.busy": "2026-08-31T06:01:05.583171Z",
     "iopub.status.idle": "2026-08-31T06:01:05.584993Z",
     "shell.execute_reply": "2026-08-31T06:01:05.584846Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "smoking_and_birthweight2 = smoking_and_birthweight.copy()       ### to avoid modifying the original table\n",
    "shuffled_labels = smoking_and_birthweight2.sample(len(smoking_and_birthweight2), replace = False)   # shuffle the rows of the table, which also shuffles the labels\n",
    "shuffled_labels = np.array(shuffled_labels['Maternal Smoker'])  ### extract the shuffled labels as a numpy array\n",
    "smoking_and_birthweight2['Shuffled Label'] = shuffled_labels    ### add the shuffled labels as a new column to the table\n",
    "original_and_shuffled = smoking_and_birthweight2                ### the table with both original and shuffled labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "tags": [
     "thebe-interactive"
    ]
   },
   "outputs": [],
   "source": [
    "### Exercise: Preserve the Outcomes\n",
    "# Shuffle the labels without changing the revenue values. Add the shuffled\n",
    "# labels as a new column, then print the group sizes under the new labels.\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "rng = np.random.default_rng(3)\n",
    "sales = pd.DataFrame({'group': ['A', 'A', 'B', 'B'], 'revenue': [8, 12, 10, 14]})\n",
    "### Your code starts here.\n",
    "\n",
    "### Your code ends here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "shuffled\nA    2\nB    2\ndtype: int64\n"
    }
   ],
   "source": [
    "### Solution\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "rng = np.random.default_rng(3)\n",
    "sales = pd.DataFrame({'group': ['A', 'A', 'B', 'B'], 'revenue': [8, 12, 10, 14]})\n",
    "sales['shuffled'] = rng.permutation(sales['group'].to_numpy())\n",
    "print(sales.groupby('shuffled').size())\n",
    "# The four revenues and the two labels of each kind remain unchanged."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f8a6f2c9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.585766Z",
     "iopub.status.busy": "2026-08-31T06:01:05.585724Z",
     "iopub.status.idle": "2026-08-31T06:01:05.587942Z",
     "shell.execute_reply": "2026-08-31T06:01:05.587751Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "      Maternal Smoker  Birth Weight  Shuffled Label\n0               False           120            True\n1               False           113            True\n2                True           128           False\n3                True           108           False\n4               False           136            True\n...               ...           ...             ...\n1169            False           113            True\n1170            False           128            True\n1171             True           130            True\n1172            False           125           False\n1173            False           117           False\n\n[1174 rows x 3 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Maternal Smoker</th>\n      <th>Birth Weight</th>\n      <th>Shuffled Label</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>False</td>\n      <td>120</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>False</td>\n      <td>113</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>True</td>\n      <td>128</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>True</td>\n      <td>108</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>False</td>\n      <td>136</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1169</th>\n      <td>False</td>\n      <td>113</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1170</th>\n      <td>False</td>\n      <td>128</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1171</th>\n      <td>True</td>\n      <td>130</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>1172</th>\n      <td>False</td>\n      <td>125</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>1173</th>\n      <td>False</td>\n      <td>117</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>1174 rows × 3 columns</p>\n</div>"
     },
     "execution_count": 33
    }
   ],
   "source": [
    "original_and_shuffled"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d02c000",
   "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": 34,
   "id": "e474e9dc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.588884Z",
     "iopub.status.busy": "2026-08-31T06:01:05.588835Z",
     "iopub.status.idle": "2026-08-31T06:01:05.591481Z",
     "shell.execute_reply": "2026-08-31T06:01:05.591315Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "   Shuffled Label  Birth Weight\n0           False    119.725874\n1            True    119.052288",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Shuffled Label</th>\n      <th>Birth Weight</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>False</td>\n      <td>119.725874</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>True</td>\n      <td>119.052288</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 34
    }
   ],
   "source": [
    "shuffled_only = original_and_shuffled[['Birth Weight', 'Shuffled Label']]\n",
    "shuffled_group_means = shuffled_only.groupby('Shuffled Label').mean()\n",
    "shuffled_group_means.reset_index()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c847b864",
   "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": 35,
   "id": "396839f3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.592330Z",
     "iopub.status.busy": "2026-08-31T06:01:05.592282Z",
     "iopub.status.idle": "2026-08-31T06:01:05.594213Z",
     "shell.execute_reply": "2026-08-31T06:01:05.594055Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(-0.6735865441747819)"
     },
     "execution_count": 35
    }
   ],
   "source": [
    "difference_of_means(original_and_shuffled, 'Birth Weight', 'Shuffled Label')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "ddaf8245",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.595052Z",
     "iopub.status.busy": "2026-08-31T06:01:05.594988Z",
     "iopub.status.idle": "2026-08-31T06:01:05.596919Z",
     "shell.execute_reply": "2026-08-31T06:01:05.596777Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(-9.266142572024918)"
     },
     "execution_count": 36
    }
   ],
   "source": [
    "difference_of_means(original_and_shuffled, 'Birth Weight', 'Maternal Smoker')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ea8d2cd",
   "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": 37,
   "id": "13cc0e1d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.597790Z",
     "iopub.status.busy": "2026-08-31T06:01:05.597742Z",
     "iopub.status.idle": "2026-08-31T06:01:05.599445Z",
     "shell.execute_reply": "2026-08-31T06:01:05.599294Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "def one_simulated_difference(table, label, group_label):\n",
    "    table_shuffled = table.copy()\n",
    "    shuffled_labels = table[group_label].sample(frac=1, replace=False).to_numpy()\n",
    "    table_shuffled['Shuffled Label'] = shuffled_labels\n",
    "    return difference_of_means(table_shuffled, label, 'Shuffled Label')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfed7958",
   "metadata": {},
   "source": [
    "Run the cell below a few times to see how the output changes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "e980782b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.600308Z",
     "iopub.status.busy": "2026-08-31T06:01:05.600257Z",
     "iopub.status.idle": "2026-08-31T06:01:05.602703Z",
     "shell.execute_reply": "2026-08-31T06:01:05.602549Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(1.100729771318015)"
     },
     "execution_count": 38
    }
   ],
   "source": [
    "one_simulated_difference(births, 'Birth Weight', 'Maternal Smoker')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed9b0957",
   "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 average birth weight of the two randomly formed groups – many times and collect the differences in an array. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "c6a0bbd3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:05.603539Z",
     "iopub.status.busy": "2026-08-31T06:01:05.603495Z",
     "iopub.status.idle": "2026-08-31T06:01:07.956858Z",
     "shell.execute_reply": "2026-08-31T06:01:07.956659Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "array([-0.92399409, -1.34610966,  1.2724378 , ...,  0.1348721 ,\n        0.10625409,  1.16512028], shape=(5000,))"
     },
     "execution_count": 39
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "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",
   "id": "a7d18bbd",
   "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": 40,
   "id": "b9fe5334",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:07.957931Z",
     "iopub.status.busy": "2026-08-31T06:01:07.957873Z",
     "iopub.status.idle": "2026-08-31T06:01:07.991371Z",
     "shell.execute_reply": "2026-08-31T06:01:07.991153Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "<matplotlib.legend.Legend at 0x1195ec910>"
     },
     "execution_count": 40
    },
    {
     "output_type": "display_data",
     "metadata": {},
     "data": {
      "text/plain": "<Figure size 700x400 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArUAAAGqCAYAAAAVyLySAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgZ9JREFUeJztnQeYU0X3h88uu6x0FAGlSbEgqCgKNuzYC3ZRsLcPFbtgV+zY5ROxtw/Ejr2h2MAOVmyAKB2kFwUWNv/nHZ39380m2SSbbDab3/s8ebJ7c3Mzd+69M785c86ZvMWLF4dMCCGEEEKILCY/0wUQQgghhBCiskjUCiGEEEKIrEeiVgghhBBCZD0StUIIIYQQIuuRqBVCCCGEEFmPRK0QQgghhMh6JGqFEEIIIUTWI1ErhBBCCCGyHolaIYQQQgiR9UjUihpD48aN3evmm28u99mIESNKP//jjz8yUr7qVA7xD1tuuaW7Fv369bNceyZE/FB/vi4jceCBB7rPeBeZpybc9+orkkOiNsf4+OOPSx+U8NcGG2xgnTt3tmOOOcaefPJJW7lyZaaLK7LkXoq38wg21PwtRJBge7TZZpvZX3/9Ffc9+Oijj1o2488jXmGczPMnRE1HolaUgoidOXOmvf3223buuefaLrvsYpMmTcp0sao9wc6Fv4VIJ7liFZw7d6499NBDmS6GqCbkyn0vKodEbQ5z6qmn2ieffFL6eu+99+zuu+92FhJA0B555JH2999/W7bTp08fW7x4sXtttNFGOV8OIbKBe+65x5YtW5bpYghR5aivSA6J2hxm/fXXt06dOpW+tt12WzvppJPsgw8+cH8Dvjz/+9//Ml1UIUQO0aRJE/e+cOFCu++++zJdHCFEliBRK8pRp04du+qqq0r/f/fddzNaHiFEbrHbbrvZNtts4/4eOnSos1YJIURFSNSKiGy33Xalf0+fPr30byy34YE+r732mgsu23zzzZ2FpUePHuWOx/cQynzWpk0ba968uW2xxRbOBWLs2LFxlem5555z/lRMxbRs2dJ23HFHu+mmm+Lq8OKNJA2FQvbyyy/bySef7CLjN9xwQ1fWLl262IknnmhPPfVUafCKr4uDDz649Pv8HR6AFwyIirccixYtcsEfu+++uztfykAQH2V45513EvI9mz17tl155ZXO+k4wIMejnC+99JJVN1Jd9tGjR9tRRx1lHTp0cNeS41x++eU2a9ashMo1ceJEu/jii2377be31q1bu2Mhus455xz77rvv4va35v7iHjjkkENs0003tfXWW8+OO+64uMpAhgaOM27cOPc/7+H3GvdsLL755hs7/fTT3bPXrFkz52rEPcX2eEjFcxwvV1xxhXtfunSpDRkyJC1ZC2K1a9lM37593bnwvMQT8Etbyv477bRTxHvO31dz5sxx15/+gWegffv2duihh7o2Mx5mzJjhnmd+h/uHZ3qrrbay//znP/b555/XyPu+pKTERo4c6dqhjh07WtOmTV0bsvXWW9v+++9vN954o3399dflvhdPX/Htt9+6+Jdu3bpZixYt3LnRD1PO/v3726hRo2zVqlWWSxRkugCielJYWFj699q1ayPuQwdNg8MDG4thw4bZNddcY6tXry7XwPF64YUXnIi8/fbbrVatWuW+v2bNGjvttNPKCZmffvrJvZ599tmUCDSC5E444QQbP358uc9oVHjReHPe+Duli48++siVI1ysUz5elAFR9OCDD9o666wT81h0FJR1/vz5pdvo5BBYvBBlN9xwg1VHKlt2xGv41PWUKVPcNu4ZBkkVwbUeNGiQE1V0TkGmTp3qXnQ+l112mQ0YMCDmsehcjjjiCBszZoxlgocfftguvfRS9zwFg7G4n9544w2XPSA4QEv1c5woPXv2dGLr008/tQceeMDOOuss5zIlKgbBhrFhyZIl9sorr9jRRx8ddd+vvvrKtaNw/PHHR90PAYgw+/PPP0u3EW+Buxqv3r17u2crPz+yrYznDaEVLrKnTZvmXk8//bSdccYZdsstt0Q9Rrbd98uXL3f1Ei58i4uLna/477//7u7v999/P+EZ0fvvv9+1ceHt0uzZs93rhx9+cK6DX3zxhRtA5woStSKqZcrDaDraw85+WK8YsW6yySbuQQ1mTLj33nvdyBwYHbPfxhtv7CxUiERShxGg9thjj1n9+vXt+uuvL/c7fN+LViwD559/vhuZY8GhYXr88cftlFNOqdT5LliwwPbdd1/XSAGdKRY0RtYFBQVuO8F0QfHMyJhtEyZMcALLn2/Xrl3LHJv94oWGiI4DAUQDSWNJg9uwYUP78ccf3VQs73RUNPycezRouL0VECsD1hFcSyjvrbfe6qwulHfvvfd2073VicqWnc7VC1qsKhdccIGz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CCGEECITSNRmEXmLl5dZJjfv32VyJWqFEEIIkevI/UAIIYQQQmQ9ErVCCCGEECLrkagVQgghhBBZj0StEEIIIYTIeiRqhRBCCCFE1iNRK4QQQgghsh6l9BJCCCHCWGZFtrQ4FNe+JS7BohAi00jUVjG1Vn1seSULKt6xZPm/mWj/n7yChZZXVFxmW6jWOpb/948pKVsov4mtLdrFsoGPP/7YDj74YBs4cKBddtllmS6OEAlx88032+DBg+3VV1+1XXap3DN3//332+OPP25//PGH/f3333bTTTfZWWedZdWBxo0b284772yvv/56Ws49nSBoOw+fGte+3/Zpn/byCCEqRu4HVYwTtHlFFb/yea1T9mVFkV95qXnFJbYT4Oyzz3adWrt27WzVqv9fNCLI2LFj3T50dDWJLbfc0r1ymX79+rlri9gS6eGFF16wSy+91GrXrm3/+c9/3CCvW7du7nmi7hn8JYKumRAim5GlVqSFZcuW2UsvvWR5eXm2aNEiZ6k5/PDDM10sIWoUb7/9tnt/5plnbMMNNyzd/u6771p14IsvvrA6depkuhhCiBxBllqRFkaNGmUrVqxw06D5+fn2v//9L9NFEqLGMXv2bPceFLTViU033dRat26d6WJUO4oK8m1mce24Xvj2CiHiQ6JWpAVEbEFBgZ133nnOb+7DDz+0adOmldnntttus0MOOcT9jY8d057+VZnpzz///NP52W6zzTbWrFkza9++vR1//PH244/lfY8/+ugj5yax3XbbWcuWLd1r9913dz6Kkfjmm2/shBNOsC222MIdu0OHDrbHHnvY7bff7j6n3JR/+vTp7hU8p3hcLPAzPPXUU13ZESpt2rSx/fff315++eWI+1P+I4880jp27OjKs8kmm7j9o5U/mlUdP8wddtjBNthgA/ebWNU//fTTMvtdcMEF7jzuuuuucsfwn919993uf1wvRo4c6f7u0qVLaR0ceOCBpd/x/8+aNcvOPPNMJ4DWXXfdMlPm48aNs2OOOcZdQ86va9eudsMNN9hff/1V5vf5jq/jzz//3A466CBr1aqVuz4XXXSR8zWF0aNH2z777GMtWrRwdXX11VfbmjVrItYLswvcnxtttJE1b97cdtxxR/vvf/9ra9eutXTyww8/2CmnnGKbbbaZNW3a1N1rl1xyiS1cuLB0nxEjRpRxLwjeZ9QpzxPgd+63V+QOE+2acYxk78/way7+YcW//rrxvOINVhNCyP1ApIGff/7ZvvzySyceECK9e/d2opaOOBjUtdNOOzlBQ0dKMEmPHj1KP2vUqFFSvz116lQnaGbOnGl77rmn61ARuXTGY8aMcZ0vAtZzzz332G+//eb8EBE6S5YscVO3559/vk2aNMluvPHG0n2/++4723fffa1WrVp2wAEHOAsU+3O+iMiLL77YlRu/xmHDhpX6KHqC5xeN6667zgoLC0sF5vz58+3NN9+0E0880QkVxJ/nnXfesWOPPdb9JuXx+yOKmI4+6aSTKvw9XEP47k8//eR+8+STT3Yi94033nBihvOiPgHh+8knn7j33XbbzQlMoG4fe+wx23XXXe3cc88tPe+nnnrKlQVfT389EUHhv899gvhBSON73aBBA/fZI488Ulqn++23nxN4X3/9tRtAIOb4XXxJg4wfP95dU649589+HIdz4nfOOeccJ8K6d+/u6m/IkCFWr149d82CDBo0yIl37gnqoWHDhk7kX3XVVfbVV1/ZE088UU4QMoj59ttvnQhOFuqda8DsBteFQdYvv/xiDz30kLt/33vvvVKBSpmpY343WH5fxwwIuD/8/xU9U9GuWdDSmsj9KYQQVY1ErUg53tUACxsgChAniFo6XzpsQMjSQSJqEXypyGJAZzxnzhwXQLPXXnuVbsfShUUV0YUw89xxxx3Wtm3bMsfAcnfUUUe5qHKO5zt1hCKii/MItz55KxqCg/NAHECi5/Tcc8+VK8/y5cudIENgY3FeZx2CBs2GDx9uoVDIibtwK1zQqheLAQMGOEGLuMMC7WEgQH0h7nv27Ol+E9/Ihx9+2P2PtQ7BiKinTtdbbz174IEHSq8tbifff/+9E0iIpWhCD+t5nz593O8zWPAwUOBe6dy5s73yyivu+B7EJqKT3+vfv3+Z4zEgCV6f4uJiZ3mnXhGEuMVsv/32rpxcG4Q51/nCCy909yK8//777je4f5588kkneoG6xur76KOPusFRr169LJVwzbjfmjRpYm+99VaZAQD3M3XOPcAMx1ZbbeVeBFoiasPvM2ZFELXHHXdc3BkGol2zkpISW716ddz3Z926dVNQG0IIUYXuB0zDLViQ2mh5kf0gIhB/WLa8sKhfv777e8aMGfbBBx+k7bexkjH1jHUqKGhh4403dqINERV0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Ro/OWJmEEEIIIbJO1CJo9957b/vtt9+cmPVW2datW7vgMKy106ZNc9bb+fPn26uvvupSe7399tsStkIIIYQQonqI2osvvtimTJniBOrgwYPtiCOOcEFi4axdu9aee+45u+yyy2zSpElugYYHHnggleUWQgghhBAi8UCx33//3UaNGmX169d3rgdHH310REELbO/du7dbaaxu3br2/PPPOwuuEEIIIYQQGRW1WF5xOTjnnHNss802i+s7m2++udu/pKTECVshhBBCCCEyKmrHjx9veXl5dtxxxyX0A35//GyFEEIIIYTIqKgl4IvAMILCEqFNmzbue3xfCCGEEEKIjIpalr9t1qxZUj/SvHlzlzlBCCGEEEKIjIpa0nURJJYMfI/vCyGEEEIIkVFRS5quykCwmBBCCCGEEBkVtUIIIYQQQtSIxRe++eYb69KlS8I/Mnfu3IS/I4QQQgghRFpE7cqVK5NeRIF0YEIIIYQQQmRU1A4dOjQtBRBCCCGEEKLKRG2iiy4IIYQQQghRVShQTAghhBBCZD0StUIIIYQQIuuRqBVCCCGEEFmPRK0QQgghhMh6JGqFEEIIIURu5akVmWX1pUdb3qLl//5XbGtrd7fQuutmuFRCCCGEEJlHojaLKNlli///J7TK1tQ5NJPFEUIIIYSoNsj9QAghhBBC5K6onTdvXmpLIoQQQgghRFW7H2yxxRa277772oknnmh77bWX5eXlJXsoIYQQopRlVmRLi0Nx7Vti6nuSoagg32YW145r34aFedbAVqW9TEJkTNQWFxfba6+9Zq+//rq1aNHC+vbt616tWrWqdKGEEELkLgjazsOnxrXvt33ap708NZEVxSHrMiK+Op7Yt501KEx7kYTInPvB119/beeff741b97cZs6cabfeeqttvfXWdvTRRzuxu3bt2sqXTgghhBBCiHSK2rZt29o111xjP/zwg40YMcL23ntvt3306NF2wgknWKdOnWzQoEH222+/JfsTQgghhBBCVE32g1q1atkBBxxgzzzzjH3//fd2+eWXW5s2bVwg2d13323bbbedHXzwwfbCCy/Y6tWrK/tzQgghhBBCpDdP7YYbbmiXXHKJe3344Yf25JNP2iuvvGLjxo1zr8aNG1vv3r3t9NNPt3bt2qXyp3OC2hc9aPk/z/j3vxIL5Q+1ks03t7+HDMlwyYQQQgghamCe2r/++sumTZtm06dPd761oVDIvRYtWmTDhg2z7t2728CBA23NmjVxH3PChAl21FFHOSswgWk9e/a0UaNGxfVdfhu3iAsvvNB22mkndwwE+M4772x33HGHrVy50rIBBG2t8ZP+fU2xgi+/tPyffsp0sYQQQgghapaldvz48c46i9hcvny5E5NNmza1Pn36uNRfuCQ8+uij9uKLL9pDDz1kDRo0sCuvvLLC43700Ud2xBFH2DrrrGOHH3641a9f31mATz75ZJsxY4b1798/5vdXrVrlBHFRUZH16NHDpSBDyI4ZM8auv/56l8GB4La6deumsDaEEEIIIUTWiNrFixfbyJEj7X//+5/9/PPPTsiSs3aXXXZxovOggw6ygoKC0uAyrLRnnHGGy3GLH25FohZr7nnnnWf5+flOfG611VZu+4ABA5w4RZT26tXLWV9j+f3yO6eddppzgQimJTv++OPtrbfesocfftjOPffcylaHEEIIIYTIJvcDfGZPPfVU69ixo11xxRX2008/2Xrrreespl999ZW9/PLLduihh5YK2iBdu3Z14nTWrFlxWWmnTp1qRx55ZKmghUaNGjl3AoLPENWxKCwstIsvvriMoPXbOQbg8yuEEEIIIXLMUotg9eCbilWWLAe1a8e3QgmuBCUlJRXuN3bsWPe+5557lvsMS21lBSnC1ltz4yHc/9ZndEh1Zoei4tUWChtzFIXK1xd1mC0+wVVRb7mA6i45VG/ZU2+h/ES6plCW7VtdyhH/vqFQ1fYzelaTY3UNrDe0YpWIWqyexx13nJ100km2ySabJPx9XAniYcqUKe69Q4cO5T5j4Qf8ayuTC3f48OFRRXMksC5HWlhi7ty5lkoa15pvISsqs22d4jXlLhg3LwF52Uqq6y2XUN0lh+qt+tdbYYv4+5RQAjquOuxbXcqRyL5ritfY9FlV38/oWc3teqtVq5a1b9++akTtL7/8ErdVtjIsXbrUvTds2DDi5wSb+X0ShYwIjz32mG222WbOtzYeyLwQLiq5gRDYqayPotXrW8jKjlAKC8tfLn6zdevWlm2kq95yAdVdcqjesqfe5idgqc3Ls6zat7qUI5F9CwoLbIMq7Gf0rCbHatVb8qL2ggsucBZalsqtCBZhmDRpkg0dOtSqC6QIO+WUU5xYfvzxx11mhMqYwrmBEjWTx6IgVNssr+xi23l55V2gCaBL5e9WNamut1xCdZccqrfqX295xYmEe+Rl2b7VpRzx70vfk4lnRs9qctTO4XpLOlDsqaeesrfffjuufd99990Kg7mi4S200ayxy5Yti2rFjcbXX39thx12mMvSQHqxzTffPKmyCSGEEEKIGrz4QqRgJgRkMnhfWu9bGwQzO/lwE/G5QNAS5EbqMQQtmRiEEEIIIUR2UyWidvbs2VavXr2kvktmBWChhHDee++9MvvEK2gR2c8//7xtt912SZVJCCGEEEJkqU8tEfYsfRsEl4BY6bT+/vtvl8/2999/t27duiVVwN12280t2oAIPfPMM0tz1S5ZssTuvPNO5zvSu3fv0v3nzJnjyoWjNLlsPd98840TtGQu4FgsAiGEEEIIIXJM1I4YMcJuvfXWMttYcIHctLFgmh9I/ZVUAQsKbMiQIW6Z3AMPPLDMMrkIbVYU22ijjUr3HzRokPPfJSiN5Xlh0aJFTtAihHv27Gnvv/++ewVBAJ911llJlVEIIYQQQmSJqEX0tWrVqvT/GTNmOCtps2bNIu6PD23dunWtXbt2zpJ6yCGHJF3IXXfd1S1le/PNN9uoUaPc8radOnVyAhaRWxFYblnO1wet8QqHtFgStUIIIYQQNVzU9uvXz7086667rm2zzTb25ptvWlWw7bbbOreBihg2bJh7BcGS60WtEEIIIYSoeSSdp5bp/WhWWiGEEEIIIbJC1LJErhBCCCGEEDmT0ksIIYQQQoiMW2p9hgOCqe67774y2+KFwDEyFgghhBBCCJERUTt27Fj3vummm5bbFi/Jrigm/p+Sjv+ffcKsxEL561mJlvgVQgghhIhP1BIUBg0bNiy3TVQdq+844///Ca2yNXUOzWRxhBBCCCGyS9RGCgpToJgQQgghhKguKFBMCCGEEEJkPRK1QgghhBAiN9wPpk+fnpIfI3uCEEIIIYQQGRG1Xbp0qfQPkf1gwYIFlT6OEEIIIYQQSYnaUCgUz25pP4YQQgghhBBJi9pFixbFs5sQQgghhBDVV9SK6kH+xz9Y3qLl//5XbFbbLLTuurZ2t90yXDIhhBBCiMwiUZtF1L7lWas1flJgy322pls3WyFRK4QQQogcRym9hBBCCCFEblhqBw8e7N6bNGlip512WpltiTBw4MCEvyOEEEIIIURKRO0tt9ziUnJtsskmpaLWb4s38wH7StQKIYQQQoiMidrevXs7UbrBBhuU2yaEEEIIIURWiNphw4bFtU0IIYQQQohMoOwHQgghhIhKUUG+zSyuHde+DQvzrIGtSnuZhIiERK0QQoi0s8yKbGlxfCtLlphc26oTK4pD1mXE1Lj2ndi3nTUoTHuRhEiPqCUI7PXXX7d33nnHfv31V1u2bJk1aNDANt10U9tnn33sgAMOsPx8ZQ4TQohcBkHbeXh8wujbPu3TXh4hRM2jUqJ28uTJdvLJJ9vEiRNLBa7niy++sOHDh1unTp3s0UcfdSJXCCGEEEKIaiVq58yZ46ywf/75pxUUFNhBBx1kHTt2tGbNmtm8efPs559/dhZcBO/BBx9sH3zwgW244YapLb0QQgghhBCVEbXkqUXQbrfdds4S27p163L7TJ8+3U455RQbP368W6zh7rvvrmx5hRBCCCGEKEfSzq740GKhfeKJJyIKWmD7448/brVq1XL7CyGEEEIIUa1E7YIFC2zzzTe3Fi1axNyvZcuWbr+FCxcm+1NCCCGEEEKkR9SyutiaNWvi2pf9mjdvnuxPCSGEEEIIkR5Ru99++9kvv/zi0njFgs8JGiOoTAghhBBCiGolai+77DJr27atHXfccfbVV19F3IcAsT59+lj79u3t0ksvrUw5hRBCCCGEqFz2AzIXRGLvvfd2mQ9YZKFr167OdzaY0gtRW1hY6DIgPPDAAzZgwIB4fk4IIYQQQojUi1rSd+XlRV620C+4gIDlxX7BRRhWr17tBC1I1AohhBBCiIyJ2t69e0cVtUIIIYQQQmSFqB02bFj6SyIqZNXtp1neipX//BMqtrVFu1qoXr1MF0sIIYQQIntXFBNVT2jzNlbq2BFaZWvrdM9sgYQQQgghsj37gRBCCCGEEDXOUrtq1SpbtGiRFRcXR90n2nK6QgghhBBCZEzUslLY0KFDbeTIkTZp0qQyWQ/CIdCMpXWFEEIIIYSoNqIWi+zhhx9u48aNiylmPfHsI4QQQgghRJX61LLowtixY61bt242YcIE22GHHZw1duHChTZ58mRnvd1xxx2tTp06Lk8trglCCCGEEEJUK1H74osvOhGL+0G7du1Kt7OtSZMmtt9++9kbb7zhrLlnnXWWffrpp6kqsxBCCCGEEKkRtSyDS+DXxhtvXGZ7SUlJudXIioqKbMiQIcn+lBBCCCGEEOnxqSXbQdOmTUv/X2edddz70qVLrXHjxqXb69evb5tuuqlbQldUjqITbrP873//97+QWd7ltnarreyvp5/OcMmEEEIIIbLUUougXbx4cZn/4ddffy23L/60S5YsSfanxL/kLVhm+bMX/vtaZPmzZlmeMkoIIYQQQiQvatu2bWvz5s0r/X/bbbd1GQ4efPDBMvu988479scff1iLFi0qV1IhhBBCCCFSLWr33HNPW758uX399dfu/yOOOMK5GhBAtvfee9tVV11lZ5xxhvXt29cFjxEwJoQQQgghRLXyqT3kkEPsm2++sTlz5rj/119/fbv33nvtzDPPtK+++sr50PrctD169LABAwakrtRCCCGEEEKkQtR26NDBnnjiiTLbevXqZdtss42z1uJyQI7anXfe2Q444ABnrRVCCCGEEKLaLZMbiTZt2tj555+f6sMKIYQQQgiRep9aIYQQQgghapSl9rvvvnNZDkjntWzZMmvQoIHLTUvAWJcuXVLxE0IIIYQQQqRH1P755592zjnn2OjRo93/PjAM8KG96aabnLBlNbHmzZtX5qeEEEIIIYRIvahlMQUCwKZMmeLEbNeuXa1jx47WrFkzl7+WZXQnTJjgBO9BBx1k7777rjVq1CjZnxNCCCGEECL1ovb222+3yZMnW7t27WzYsGG2/fbbl9vniy++sH79+jnhy/7XX399sj8nhBBCCCFE6gPFXnnlFcvPz7eRI0dGFLTQvXt3e+qpp0r3F0IIIYQQolqJWhZd2GyzzdwrFnyOW8LcuXOT/SkhhBBCCCHSI2pZQaygID7vBfZr0qRJsj8lhBBCCCFEekTt7rvvbj/99JPNnj075n6zZs1y++25557J/pQQQgghhBDpEbWXX365y2Zw4okn2syZMyPuw/aTTz7ZGjdubJdddlmyPyWEEEIIIURM4vIfIBgsEqeeeqrdddddts0227i0XZtvvnmZlF6vvfaa2++CCy6wDz/80I499th4fk4IIYQQQojUi9qzzjrLLaYQCb/gwksvveRekT679dZb3btErRBCCCGEyJio3WmnnaKKWiGEEEIIIbJC1L7++uvpL4mokLU9Oltow/X8fxaq1dLWbrxxhkslhBBC/ENRQb7NLK4d174NC/Osga1Ke5lE7pD0imKi6im+7Jj//ye0ytbUOTSTxRFCCCHKsKI4ZF1GTI1r34l921mDwrQXSeQQSWc/qGomTJhgRx11lLVp08ZatGhhPXv2tFGjRsX9/alTp9rNN99svXv3dgFtZGTYcsst01pmIYQQQgiRJZZagsHIcvDOO+/YpEmTbNmyZdagQQPbdNNNbZ999rEDDzyw0v64H330kR1xxBG2zjrr2OGHH27169d3y+6SLmzGjBnWv3//Co/xySef2ODBg61WrVpulTOtcCaEEJVjmRXZ0uJ/AoIrosQUlyGEqMai9vfff7cTTjjBfvjhhzLZDuCLL76w4cOHO2voE088YW3btk3qN9asWWPnnXee5efnO9/erbbaym0fMGCA7bXXXnb99ddbr169nAU3FjvvvLONHj3atthiC6tTp441b948qfIIIYT4BwRt5+HxTTV/26d92ssjhMhtknY/WLp0qROT33//vROcWGQRmnfeead753+2f/fdd3bYYYe5/ZO10uI6cOSRR5YKWmDhhwsvvNBWr14dNY9uEER1t27dnKAVQgghhBA1i6QttUOHDrVp06Y5S+xjjz1mHTp0KLfPb7/9ZieddJKz5N5333126aWXJvw7Y8eOde+RltnFUgvjxo1L6hyEEEIIIUSOi1r8aPFPffLJJ6O6FrRv3959vu2229qrr76alKidMmWKe48kmnEhwL8W8VxVrFy5ssz/WIqD76miqHi1hWIY0vNsta3KK1uWbCJd9ZYLqO6SQ/WW+noL5SfShcTne1vz960u5cj8vqFQSbk+FfSsJsfqGlhvxFJViaj9448/XMBVRb6yfN6xY0e3fzJ4t4WGDRtG/JygtGRdG5Jh1qxZtnbt2nLbUx141rjWfAtZUdTP82yVLV473bIdBewlj+ouOVRvqau3whabxP39QMhFTu9bXcpRHfZdU7zGps+K3o/pWU2OuTWk3jCcYhytElFLUBg+s/FA9oNgEFk2QzqxIIyIuIGwGteuHV/C6XgoWr2+hazsCKXw5U8tf95i93eerbHmtVZbSfPmtvKwwyzbSFe95QKqu+RQvaW+3uYnYKlNJAlOTd63upSjOuxbUFhgG7RuXW67ntXkWK16S17UbrTRRvbzzz87y2W40AtCyi32I8VXMngLbTRrLCnEyDmbaVM4N1CiZvJYFIRqm+WVzUq9zuPvWq3xkwJbnrM13bqZHXusZSuprrdcQnWXHKq31NVbXnEiscaJKL+avG91KUfm983Ly4/5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3Dp27GjnnXee/fnnn2krtxBCCCGESD9ZkdLro48+siOOOMLWWWcdO/zww61+/fr2yiuv2Mknn2wzZsyw/v37V3iMkpISO+644+y9996zbt262SGHHGJTpkyxJ5980j788EN79913bf3116+S8xFCiHCWWZEtLQ7FtW+J5aW9PEKI8iinbfWm2ovaNWvWOGtqfn6+vf7667bVVlu57QMGDLC99trLrr/+euvVq5ez4MbiqaeecoL2yCOPtIceesjy8v7pFB599FG78MIL7YYbbrC77767Ss5JCJEbJCZUzbYcHl+uzG/7tK9kyYQQ6c5pO/mkDrZ0jQRwVVKQDVbaqVOnWp8+fUoFLTRq1MiJ0bPOOstGjhxpAwcOjHkcLLJw9dVXlwpawNo7ZMgQe+655+zmm2+2OnXqJFzGWrVqWaoJGQ9C2Ych1KixlTRpEratkWUr6ai3XEF1l7l6W261bVncQjVkuz73R1z7fnDkRtakKD6PsHwLpWXfdB5b+1avctTkfatLOf4uLrHdn4/v+R97VJuULOpQK8f7hrzFixfH1zpniOuuu87uvPNOe+SRR5wLQpC5c+faZpttZrvuuqtzR4jGypUrnR9uhw4d7Msvvyz3+QUXXGCPPfaYvfHGG7bTTjul5TyEEEIIIUQOB4rh9woI0nAI9sK/9rfffot5DCy9+NS2bx95ys5v978lhBBCCCGyi2ovapcuXereGzZsGPHzBg0alO5T0TFwWYiEP3ZFxxFCCCGEENWTai9qhRBCCCGEyHpRW5EVddmyZVGtuOHHWLJkSVLWYCGEEEIIUb2p9qLW+9JG8nclUGz58uVRfWU9bdu2dSnBovne+u2R/HaFEEIIIUT1p9qL2p133tm9jxkzptxn5J0N7hMN0nRtu+22NmnSJJs2bVqZz0KhkL3//vtWr14922abbVJadiGEEEIIUTVUe1G72267OUvr888/b999913pdlwJSPVVu3Zt6927d+n2OXPm2K+//lrO1eDEE08sTRGGkPWQyuv33393S/Amk6NWCCGEEEJknmovagsKCtziCKTkOvDAA93qYldccYX16NHDJk+ebFdddZVttNFGpfsPGjTIunfvbq+99lqZ47BELiuQIY732Wcfu/baa+2EE06wiy66yH3/yiuvTKhcCGwEMsv24rbQuHFjV76KePbZZ23PPfd0eXP5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kU6QduzY0R599NGo32/Xrp0TwnXr1i332UMPPeTeBw0a5DqZt956y70Qz8DDvXLlSttvv/3cQ/7OO++4z/fee+80nrEArhfXjeuXKRg0xSIXLfZFRUWlzyOvrbfe2m0bP3683XDDDa5TRLyF06RJE3c9ER7JMG3aNBs8eLANGzbMqhI/kIaxY8dG3IfznTp1qvubQTZ1EQn//QYNGrh6qwzUI+WiXqsDnBvX5/XXX6/UcTAk0J537tzZGRQisXr1ajvnnHPcDNsjjzziBjwtW7a0zTbbzJYvX24vvfSSnXjiidazZ0+bNWtWpcqTa1x22WW2du1au/rqqzNdlKxColbETZ8+fUrF5rvvvuvcAaZPn+4az/3339+WLl1qF154oV166aURv//KK684C9q2225b7rNffvnFve+7774Rv+s/p3GsVatWSs9LxIbrxXXj+lU1dJD169d3nWO0mYDffvvNWXLpSHMJZin888jr/ffft0mTJtnTTz9tderUcQLjmmuuKfe9M844w13PSJ9VdxDqsUSt3+4HYBXtx2CgoKCgUmWiHqlP6rUm8cADDzhRdcIJJ1heXl65z3FHOPbYY90sCQPfG2+80Rk5eBaZPudv7sWNNtrIDS722WcfmzdvXkbOJRthFnTjjTd2s5M///xzpouTNUjUikpRWFjoHj6stX5Eef/999urr76a0HH+/vtv905nnMznomZCZ4mViKl0pjFjWXEZdAlzsxmnnnqq+5sOsSbhRS0D6kiuBePGjXPv3hfR/x9tP388URaet2effda170ceeWTEfe6++253f7HPc889Z2effbYbgHowPnAvvv32284lYcaMGWn1466J9O7d271jBRfxIVErUgZW2t133939zfRXPIFi4cEkXbp0Kd1GA+j9eb1lhYbTfx4pcAlr4jHHHOOmA5s2berejzvuuKidWzBoZtWqVXbHHXfYTjvt5CyE4UEu+JZxXvg70UgzHbrddtvZlVdeaX/++WfE4wfPGas2U3Wbb765s7Lx2RVXXOEs3NFYs2aNE22HH364G7XzPb5/wAEH2H//+19bsmRJxAEA/o5YvbGS8J2tttrKzj//fPv9998tlYFi/vow/b9o0SJnpWc/X85zzz3X+UJWBi9WI7kgYC3CGkQHynWviDlz5rjB14477uiuMX6XXO9bbrklqg/qt99+66xQ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"
     }
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "ax.hist(differences, bins=30, density=True, edgecolor='white')\n",
    "ax.axvline(observed_difference, color='red', linestyle='--', label='Observed difference')\n",
    "ax.axvspan(min(observed_difference, differences.min()) - 0.2, observed_difference,\n",
    "           color='gold', alpha=0.3, label='At least as extreme: left tail')\n",
    "ax.set_title('Prediction Under the Null Hypothesis')\n",
    "ax.set_xlabel('Difference in Mean Birth Weight (Ounces)')\n",
    "ax.set_ylabel('Probability Density')\n",
    "ax.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9536faf",
   "metadata": {},
   "source": [
    "### The p-Value\n",
    "\n",
    "Notice how the distribution is centered roughly 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, marked by the red dashed line in the shaded left-tail region. 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 favor the alternative over the null**. It supports the hypothesis that **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": 41,
   "id": "dd73ac73",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:07.992528Z",
     "iopub.status.busy": "2026-08-31T06:01:07.992455Z",
     "iopub.status.idle": "2026-08-31T06:01:07.994304Z",
     "shell.execute_reply": "2026-08-31T06:01:07.994108Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(0.0)"
     },
     "execution_count": 41
    }
   ],
   "source": [
    "empirical_p = np.count_nonzero(differences <= observed_difference) / repetitions\n",
    "empirical_p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "tags": [
     "thebe-interactive"
    ]
   },
   "outputs": [],
   "source": [
    "### Exercise: Choose the Tail\n",
    "# The statistic is mean B minus mean A. The alternative says B is lower.\n",
    "# Compute the simulated tail fraction, including results equal to observed.\n",
    "import numpy as np\n",
    "observed = -2.0\n",
    "simulated = np.array([-3.0, -2.0, -1.0, 0.0, 2.0, 3.0])\n",
    "### Your code starts here.\n",
    "\n",
    "### Your code ends here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Left-tail fraction: 0.3333333333333333\n"
    }
   ],
   "source": [
    "### Solution\n",
    "import numpy as np\n",
    "observed = -2.0\n",
    "simulated = np.array([-3.0, -2.0, -1.0, 0.0, 2.0, 3.0])\n",
    "print('Left-tail fraction:', np.mean(simulated <= observed))\n",
    "# For a two-sided alternative, compare abs(simulated) with abs(observed)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b33030d5",
   "metadata": {},
   "source": [
    "None of these 5,000 permutations reached the observed difference or a lower value, so the **simulated tail fraction** is zero. A finite simulation can miss rare outcomes; it does not establish a zero probability or an exact upper bound of 1/5,000. Report the number of extreme results and repetitions, and use more repetitions or exact methods when finer precision is needed.\n",
    "\n",
    "These data provide strong evidence against the stated equal-distribution model. They support an association between smoking status and birth weight in the population represented by the sample. The test alone cannot identify the causal effect of smoking.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f4dbf76",
   "metadata": {},
   "source": [
    "## Another Permutation Test\n",
    "\n",
    "We can use the same method to compare other attributes of the smokers and the non-smokers, such as their ages. Histograms of the ages of the two groups show that in the sample, the mothers who smoked tended to be younger. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "7260fa48",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:07.995418Z",
     "iopub.status.busy": "2026-08-31T06:01:07.995350Z",
     "iopub.status.idle": "2026-08-31T06:01:08.034294Z",
     "shell.execute_reply": "2026-08-31T06:01:08.034089Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "<matplotlib.legend.Legend at 0x11967e350>"
     },
     "execution_count": 44
    },
    {
     "output_type": "display_data",
     "metadata": {},
     "data": {
      "text/plain": "<Figure size 700x400 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsEAAAGMCAYAAAA7n39bAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYhFJREFUeJzt3Qd4VGX2x/GThN6VKkizIKKCoFgACygWRFGwICiIuiAidil2xVVgsYusorgigoiKSxMFC66oIAJ2UEDpRTpITfk/v3f/NzuZzCSTZDKZm/l+ePIkTL3zzk3m3HPPe96k7du3ZxgAAACQQJKLegMAAACAWCMIBgAAQMIhCAYAAEDCIQgGAABAwiEIBgAAQMIhCAYAAEDCIQgGAABAwiEIBgAAQMIhCAYAAEDCIQgGAABAwiEIBgAAQMIhCC4G9u3bZytWrHDfUfgY79hjzGOL8Y4txjv2GPPYitfxJgguJtLS0op6ExIK4x17jHlsMd6xxXjHHmMeW/E43gTBAAAASDgEwQAAAEg4BMEAAABIOATBAAAASDgEwQAAAEg4JYp6AwAAxVN6err99ddfcdcWKR7HqVSpUrZjxw7btWtXUW9OQmDMYysa412mTBkrX768JSdHL39LEAwAKJQPvS1btliFChWsWrVqlpSUVNSbFNdjdeDAARckRPMDHuEx5rFV0PHOyMhwB9P6m1K1atWovWe88wCAqFMGWAFw2bJlCYABFIj+huhvif6m6G9LtBAEAwCiTlkbnb4EgGjR35RollcRBAMACgUZYADx/DeFIBgAAAAJh4lxAHyhVpmSVnHrRktJSTE/Sa9Y2Q6Uq1jUmwEACEIQDMAXSu79y9I/n2bJKf76s5Xc4SozgmAAiDuUQwAAACDh+CulAgAoFralJtvmfRkWj6qVSbJDSqRbIqlSpYq1bt3apk+fnutt+/btaxMmTLDvvvvO6tevH5Pt86sTTjjBff/hhx+KelMQAkEwACDmFACP/G6rxaN+zQ61QyoU/HHUz/Sf//yn/fvf/7bly5fbwYMH3cIhChxPO+0069GjhzVs2DAam4wi8sQTT9iwYcNs6tSpdsYZZxT15iCPCIIBAIgyLQ17wQUX2E8//WRHHHGEXXnllXbooYe6Fa++/fZbe/rpp10A7Mcg+KGHHrI77rjDateuXdSbAiRGELxw4UJ3xDVv3jxLTU21Jk2aWL9+/eyyyy6L+DH2799vzzzzjE2cONHWrl1rhxxyiJ1//vl2//33W/Xq1bPdfu/evfbqq6/a22+/bStXrnTL9tWtW9c959/+9jerXLlylF8lAKA4GDVqlAuAle199tlns/U3/eOPP9wysn5Uq1Yt9wX4nS8mxn3++ecuWP36669dANqrVy/buHGj+/78889HvG51t27dXCCtdadV09SyZUsbO3astW/f3jZv3pzl9jptdfHFF7sAWcGv7tu9e3f3h+yxxx5zR/h79uwppFcMAPCzb775xn2/8cYbQzb4b9CggTVq1CjLZc2aNXM1pDt27LA777zTjjnmGJdtvfDCC23x4sXuNuvXr7fevXvbUUcd5QJRfSaq1CIUfWYqA63nqlmzpvvMe/zxxyP+7NJn3+DBg129sBI/+lwUfX7qMiWHPP/5z3/cZfqMXbRokV166aV2+OGHW7169dxnZ+BtA02ZMsXOPvts91qOPvpou/XWW2379u1uHLx62ty8+eab7rn1/YMPPrBzzjnHDjvsMDv22GPd57U+/2X8+PGu7lnPpcceOXJk2DIWjZPGS+Om8dM4ajwDXXTRRa4UQhQvaBv0FWq7d+/ebQMHDrTGjRtbjRo1rFWrVq5MJhQdHL3wwgt25plnuvdf46h9YMaMGdlu670XOqhSPHTqqae6x9flotXVdLlet94LPZ6277rrrqNO2Q+ZYGV9b7vtNktOTnYF+02bNnWXDxgwwO3oQ4YMsU6dOrk3Nyfa+T/++GO7/PLLbfTo0Zl/lMaMGeP+2OgXRVliz7Rp02zBggXWsWNHGzduXJbHUkCsnVE78NVXX10orxsA4F860ygKUL3PrUgo0FRgq+BF3//880+bPHmyCyo/+ugj69y5swviFJStWLHCZs6c6X6eP39+lh7a77//vt1www1WunRp9zg62/nJJ5/Y8OHD3Xd9xuW0rLW24+abb7ZJkya5gEpBYSSrdSkAfu6551x9rAKt77//3n12//zzz/bVV19lec433njD+vfvb5UqVbKuXbu677NmzXKvVZ/9JUrkLUTRa/r0009dcKpgUOM1YsQId50eWz8rmGzTpo0LvhU/KFjWZ7pH437JJZe4khUdlOi1b9q0yb0HiiF0dljbJ9795s6d62IBLw4JPkus16L3TcG9gmWdZX7vvffc+Lz77rvWrl27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1U9rG2Xu3LnuZ+8r1HZ/8skndt5557nX2bBhQ7vpppts69atIZ//xx9/tOuvv969Du2Pep/vueeebLcPfC+WLl1q3bt3d4996KGHun1a9Pp79OjhHkPvx5FHHunGecSIERZrlEMAAFCI7r33XlcTrMDx4osvdpnLnCxbtswuuOAC27x5s/uuoFPB37hx42zmzJnuS4FTsBtuuMEWLlxo5557rqWkpLig++6773bP17Nnz8zbKUDRdccdd5x169bNSpcubWvXrnVBlIJ1BW+Bpk2bZp9++qkLKk899VT76KOPMgMWlSDoZwV3bdq0cQHjgw8+6AIl1ToHBt6XXHKJffvtt65WWtuwadMmtx0ff/yxC0ovvfTSHMdFQW/Xrl2tfPnyLihXMByJUOOiAE6rTyqw8+zevdu9xiVLlrjX2apVKzcuur/quvNKwbcCW712ff/zzz/dc+t1agw7d+7sgl8FtytWrHDvq35WaYe20/P++++7bdD7pMfR2CqAHT58uPuu96dMmTLugGbgwIE2bNgwq1u3rntvPcHvqcbvo48+cvvXKaecYl9++aW99dZb9scff7jtCDRjxgzr1auXO6PRoUMHq1OnjgtwR48e7Z5f758XfHt+//13V++u90jboWC5VKlS7iDr/PPPd69Pj6Xt1IGCxvxf//qX219jiSAYAIBCpA96ZfyUfX3ttdfczzm54447XAD8zDPPuOysR1ldBQnKLE6ZMiXb/datW+eCGa82Vpm9008/3V544YXMIFgBh4KqE0880QUvgcFWWlqa7dq1K9vjzp492z788ENr0aKF+//gwYPdzy+++KJVrFjRPv/8c5ehlP79+7vr9FoDg+Bnn33WBcAK8l566aXM5c/79OnjgiVlX5Vp1uOFokBMgeDhhx/uDig0ppEKNy7//Oc/swTBGm8FYxpz/exRNrNTp06WVxs2bLDTTjvNvW8lSvw33GratKk99NBD7jXrcf/+979njsVdd93lDgY0oU0HDLJz50679dZb3f0VtCp7KjrQuPHGG91YKPM+YMAAlx3Xe6MgWAGxfg5Hge60adPc9nnvvV7jF1984SZsKtMsCl41XlWrVnX30eN63n33Xfee6DX84x//yJa51jbpAFB01uDAgQP28ssv2/79+11mWgccgcJloeOyHEI7uE4bAACAnCnAqVy5sgsWlHEMR+UO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zE8y9E/b7cPxFsY8thjv2GK8Y8uP4+33MU9NTrale1J8N95HWUrcBZ1J27dvj+slux599FF76qmn7NVXX3XBZyCVRBxzzDF25pln2pQpU8I+xr59+1xN75FHHmnffPNNtuvvuOMOe+2112zGjBnWqlUrd9l5551n8+fPt6VLl7r64UDvvvuuywjfe++9LiMNAAAAf4n7c/kqSxAFsMEUnFaoUMFWrFiR42Mok6ya4COOOCLk9d7l3nN5P+uxgwPgwG0JvD0AAAD8I+6D4J07d7rvlSpVCnl9xYoVM2+T22MEljUE8h478HH0c07PGXx7AAAA+EfcB8EAAABAwgXBobK0gXbt2hU2Yxv8GDt27Ig426yfc3rO4NsDAADAP+I+CM6p/lYT43bv3h221tfToEED18osXO2wd3lg3bF+1mPrOfJSpwwAAID4F/dBsNeC7JNPPsl2nfr3Bt4mHLU9O+mkk+y3336zVatWZbkuIyPDPv30Uytfvrw1b948qs8LAACA+BT3QfBZZ53lMrnvvPOOff/995mXq7RBrdNKlSplXbt2zbx8w4YN9uuvv2YrfejZs2dmyzUFvh61Rvvjjz/cksxej2BRX+ISJUrYk08+meWxtA1qkabWbKeffnqhvW4AAAAkcBCsQFSLWajF2UUXXeRWarvvvvusTZs2tmzZMnvggQesfv36mbd/5JFH7JRTTrFp06ZleRwtmawV5hRMqwfwww8/bD169HCLYej+999/f5bba6W4QYMGuefQc+k59dzaBnn22WdjslrcxIkT7fbbb7ezzz7batSoYVWqVHELeYSixT50fbivlStXFvr2+t26devsxRdfdMtzH3/88Va9enVr1KiRXXvttbZgwYKQ91HtuHpG6/Z6j0444QS3X6qcBtEdb/bxglHPdO2rF154oTVu3Ni1gNR4ayn4cePG2cGD2ZehYv+O3XizfxcOrQbrjWGotQLYx2M33vG2j8fb4h0haTGMmTNnusGbPHmy+8PRpEkTF/B27tw5osdQwKpV3p5++mkXWOqD95BDDnEftgqAq1Wrlu0+d999t1uOedSoUW555ZIlS7rsr35ZTjzxRIsFLee8evVqq1q1qvsDqp9zc/XVV4dcRjpcizj8z8svv+x+gRs2bGht27Z1+4VqwLVkt75eeeWVLPvcX3/95Q6MfvjhB2vXrp1blltn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"
     }
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "bins = np.histogram_bin_edges(births['Maternal Age'], bins=12)\n",
    "ax.hist(smoker['Maternal Age'], bins=bins, density=True, alpha=0.6,\n",
    "        edgecolor='white', label='Smoking mothers')\n",
    "ax.hist(non_smoker['Maternal Age'], bins=bins, density=True, alpha=0.6,\n",
    "        edgecolor='white', label='Nonsmoking mothers')\n",
    "ax.set_xlabel('Maternal Age (Years)')\n",
    "ax.set_ylabel('Probability Density')\n",
    "ax.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54558b96",
   "metadata": {},
   "source": [
    "The observed difference between the average ages is about $-0.8$ years."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "260eb063",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:08.035417Z",
     "iopub.status.busy": "2026-08-31T06:01:08.035347Z",
     "iopub.status.idle": "2026-08-31T06:01:08.037695Z",
     "shell.execute_reply": "2026-08-31T06:01:08.037527Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(-0.8076725017901509)"
     },
     "execution_count": 45
    }
   ],
   "source": [
    "observed_age_difference = difference_of_means(births, 'Maternal Age', 'Maternal Smoker')\n",
    "observed_age_difference"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27356015",
   "metadata": {},
   "source": [
    "Remember that the difference is calculated as the mean age of the smokers minus the mean age of the non-smokers. The negative sign shows that the smokers are younger on average.\n",
    "\n",
    "Is this difference due to chance, or does it reflect an underlying difference in the population?\n",
    "\n",
    "As before, we can use a permutation test to answer this question. 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 should vary due to chance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "7bcb576d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:08.038626Z",
     "iopub.status.busy": "2026-08-31T06:01:08.038574Z",
     "iopub.status.idle": "2026-08-31T06:01:10.408944Z",
     "shell.execute_reply": "2026-08-31T06:01:10.408670Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "np.random.seed(43)\n",
    "age_differences = np.array([])\n",
    "\n",
    "repetitions = 5000\n",
    "for i in np.arange(repetitions):\n",
    "    new_difference = one_simulated_difference(births, 'Maternal Age', 'Maternal Smoker')\n",
    "    age_differences = np.append(age_differences, new_difference)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "addd0f47",
   "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": 47,
   "id": "e63521f5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:10.410365Z",
     "iopub.status.busy": "2026-08-31T06:01:10.410298Z",
     "iopub.status.idle": "2026-08-31T06:01:10.443412Z",
     "shell.execute_reply": "2026-08-31T06:01:10.443179Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "<matplotlib.legend.Legend at 0x11971b750>"
     },
     "execution_count": 47
    },
    {
     "output_type": "display_data",
     "metadata": {},
     "data": {
      "text/plain": "<Figure size 700x400 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArUAAAGqCAYAAAAVyLySAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhehJREFUeJzt3QeYE1UXBuCznbb0jvTepIMCgtJEelNRFMVOx0ZRUREVUMSKqCggUlQ6SFGaKFgBAeldepPetuZ/vst/42w2PZNNsvne5wnLJtnJZOqZM+feG3H+/HmLEBERERGFsMhAzwARERERka8Y1BIRERFRyGNQS0REREQhj0EtEREREYU8BrVEREREFPIY1BIRERFRyGNQS0REREQhj0EtEREREYU8BrVEREREFPIY1FKmkTt3bvUYNWpUutemT59uff2ff/4JyPwF03zQDdWrV1fronfv3hJu+wS5D8tPL0t72rZtq17DTwq8zLDd81zhHQa1Yebnn3+27ii2j8KFC0vVqlXl3nvvlalTp8r169cDPbsUItuSuycP44Ea/ycyMh6PKlasKFevXnV7G5w0aZKEMv093A2Mvdn/iDI7BrVkhSD26NGj8v3338uAAQPktttukz179gR6toKe8eSC/xP5U7hkBU+ePCkTJ04M9GxQkAiX7Z58w6A2jD366KPyyy+/WB8rV66U9957T2VIAAFtt27d5Nq1axLqevToIefPn1ePkiVLhv18EIWC999/Xy5duhTo2SDKcDxXeIdBbRjLnz+/VKlSxfqoU6eOPPzww/Ljjz+q/wNqeb766qtAzyoRhZF8+fKpn2fPnpWPP/440LNDRCGCQS2lkzVrVhk+fLj19xUrVgR0fogovDRt2lRq1aql/j9+/HiVrSIicoVBLdlVt25d6/8PHz5s/T8yt7YNfb777jvVuKxy5coqw9K4ceN008PfIVDGayVKlJBChQpJtWrVVAnE2rVr3ZqnWbNmqXoq3IopVqyY3HrrrfLmm2+6dcJztyWpxWKRBQsWSK9evVTL+CJFiqh5rVGjhjz00EMyY8YMa+MVvSzat29v/Xv837YBnrFBlLvzce7cOdX44/bbb1ffF/OARnyYhx9++MGj2rPjx4/LSy+9pLLvaAyI6WE+58+fL8HG7Hlfvny53H333VK2bFm1LjGdF154QY4dO+bRfG3btk2ee+45adCggRQvXlxNC0FXv379ZMuWLW7XW2P7wjbQoUMHqVChguTNm1fuv/9+t+YBPTRgOuvWrVO/46fttoZt1plNmzbJ448/rva9ggULqlIjbFN43h1m7MfuevHFF9XPixcvygcffOCXXgucHddC2QMPPKC+C/YXdxr84liK9zds2NDuNqe3qxMnTqj1j/MD9oEyZcpIp06d1DHTHUeOHFH7Mz4H2w/26Ztvvlmeeuop+f333zPldp+amiozZ85Ux6FKlSpJgQIF1DGkZs2actddd8kbb7whf/31V7q/c+dcsXnzZtX+pV69elK0aFH13XAexnz2799f5s2bJwkJCRJOogM9AxScYmJirP9PSUmx+x6coHHAwQ7rzIQJE+SVV16RxMTEdAc4PObMmaOCyLFjx0pUVFS6v09OTpbHHnssXSCzY8cO9fj2229NCdDQSK5nz56yYcOGdK/hoIIHDt743qh38peffvpJzYdtsI75wwPzgKDos88+kyxZsjidFk4UmNczZ85Yn8NJDgEWHgjKXn/9dQlGvs47glfbW9f79u1Tz2GbwUWSK1jXI0aMUEEVTk5GBw4cUA+cfIYNGyaDBw92Oi2cXLp27SqrVq2SQPj8889l6NChan8yNsbC9rRkyRLVe4DxAs3s/dhTLVq0UMHWr7/+Kp9++qn06dNHlUyRawjYkGy4cOGCLFy4UO655x6H712/fr06jsKDDz7o8H0IABGYnT592voc2lugXA2P7t27q30rMtJ+rgz7GwIt2yD70KFD6vH111/LE088IaNHj3Y4jVDb7i9fvqyWi23gm5SUpGrFDx48qLbv1atXe3xH9JNPPlHHONvj0vHjx9Vj69atqnTwjz/+UBfQ4YJBLTnMTGm4mna0s+N9yF7hirV8+fJqRzX2mPDRRx+pK3PA1THeV65cOZWhQpCIrsPQQG3y5MmSI0cOGTlyZLrPwd/roBWZgUGDBqkrc2RwcGCaMmWKPPLIIz5933///VfuvPNOdZACnEyRQcOVdXR0tHoejemMwTOujPHcxo0bVYClv2/t2rXTTBvvcxcORDhxIADCARIHSxxwc+bMKdu3b1e3YvETJyoc+PHdHcGBW2cBkWVAdgSlJZjft956S2VdML8tW7ZUt3uDia/zjpOrDmiRVXn66adVNgPLFZlubLs48btqBDlkyBB18QDITuGk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aWzuUca0+SEiIhPLD4iIiIiIQjpTi1KDpUuXyp9//imnTp1S3XvlzJlTChQoIPXr15e77rpLlSAQkbkidhySiCvXb/xiSZKouD/Ekj27pFatGuhZIyIiCp2g9ty5c9K3b19ZtmyZ+h0Nw2wtX75c3njjDWnfvr28//77kjt3bnPmlogk7rnPJWrDnjTPJderJ1eWLw/YPBGRSFx0pBxNivVpGjljIiReEkybJ6JwEu1pQNuyZUvZv3+/CmZ1VrZ48eKqcRiytYcOHVLZ2zNnzsiiRYtU117ff/89A1siIsrUriRZpMZ03+qutz1QWuLZvprI/0Htc889J/v27VMB6pgxY6Rr166qkZitlJQUmTVrlgwbNkz27NmjBmj49NNPvZtDIiIiIiKzGoodPHhQ5s2bJzly5FClB/fcc4/dgBbwfPfu3dVIY9myZZPZs2erDC4RERERUUCDWmReUXLQr18/qVixolt/U7lyZfX+1NRUFdgSEREREQU0qN2wYYNERETI/fff79EH6PejzpaIiIiIKKBBLRp8oWEYGoV5okSJEurv8PdERERERAENajH8bcGCBb36kEKFCqmeE4iIiIiIAhrUorsuNBLzBv4Of09EREREFNCgFt10+QKNxYiIiIiIAhrUEhERERFlisEXNm3aJDVq1PD4Q06ePOnx3xARERER+SWovX79uteDKKA7MCIiIiKigAa148eP98sMEBERERFlWFDr6aALREREREQZhQ3FiIiIiCjkMaglIiIiopDHoJaIiIiIQh6DWiIiIiIKeQxqiYiIiCi8+qklosBLHHqPRJy7/P/fkiQltr5Y8uQJ8FwREREFFoNaohCTelu1/36xJEhy1k6BnB0iIqKgwPIDIiIiIgrfoPbUqVPmzgkRERERUUYHtdWqVZMHH3xQVqxYIRaLxdvJEBEREREFLqhNSkqS7777Tu655x6pXr26jB49Wo4cOeL7HBERERERZVRQ+9dff8mgQYOkUKFCcvToUXnrrbekZs2aKshFsJuSkuLtpImIiIiIMiaoLVWqlLzyyiuydetWmT59urRs2VI9v3z5cunZs6dUqVJFRowYIfv37/f2I4iIiIiIMqb3g6ioKGnTpo1888038vfff8sLL7wgJUqUUA3J3nvvPalbt660b99e5syZI4mJib5+HBERERGRf7v0KlKkiDz//POy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tGlSvXp1+fLLL6VUqVK+zy0RERERkZlB7cWLF6Vjx45y6NAhiYqKkrvuukuqVKkihQsXlhMnTsj27dtl6dKlsmXLFuncubPqpzZnzpzefhwRERERkflB7fjx41VAi0zs5MmTpWzZsunes3//fnn44YdVJvfjjz+WoUOHevtxRERERETmNxRDHS0ytFOnTrUb0EKZMmXU66ipXbRokbcfRURERETkn6D2n3/+kYoVK7qslcXrlSpVUu8nIiIiIgqq8gM0CouMdC8mRqbW2IiMiLwXNW+dRJw8f+MXS7JExhwRS+HCktStmwSbSxInF5N82/dThb2nEBGRH4PakiVLys6dO+XYsWNStGhRh+87cuSIeh+6+CIi38V8/r1EbdiT5rnkevWCMqhFQFt12gGfprG5RxnT5oeI3BMXHSlHk2J9mkbOmAiJlwTT5onIb0Ft69atZceOHdKrVy/VZRd6PbB1/PhxeeSRRyQ1NVXatGnj7UcRERFRBrqSZJEa0327IN32QGmJjzFtloj8F9T2799fvv76a/nzzz+lZs2a0qlTJ9WlV8GCBeXUqVOqS6/58+dLQkKCyuT269fP248iIiIiIvJPUJsnTx6ZO3euPPjgg7J371759ttv07yua2jLly+vekDInTu3tx9FREREROS/EcXQq8G6detk3rx51mFyL1++LDly5LAOk4uBF2JieP+BiIiIiIIwqEUwC/Xr15d7771XPYiIiIiIQiqobdeunRQrVkyNFkZEREREFJKDL6BG1l6PB0REREREIRPUoqcD9EFLRERERBSyQS36pz158qTMmTPH3DkiIiIiIsqomtpu3brJxo0bVf+zhw8fVl175cuXz9vJERERERFlfFBbo0YN9TMpKUlee+019UBQmy1bNrvvj4iIkE2bNnk/p0REREREZge1hw4dSvfcmTNnHL4fQS0RERERUVAFtYsWLTJ3ToiIiIiIMjqobdy4sbd/SkREREQU+KD2woULcuDAAfX/0qVLS65cucydKyIiIiIifwW16MLrmWeeke+//15SU1PVc5GRkdK6dWt55513pFChQp5MjoiIiIgoY4Paq1evStu2bWX//v1isVisz6ekpMiSJUtk9+7dsmbNGsmaNas5c0ZEREREZPbgC59//rns27dPddn16quvyurVq2XVqlXyyiuvqOf27t2r3kNEREREFLRB7eLFi1W3XBMmTJCBAwdKzZo1pVatWjJo0CAZP368yt7iPf6CgR7uvvtuKVGihBQtWlRatGgh8+bNc+tvMW/Lly9XpRMNGzZU0yhSpIg0atRIlU1cv37db/NNREREREFUfoDyAgyu0L59+3SvdezYUb22a9cu8YeffvpJunbtKlmyZJEuXbpIjhw5ZOHChWqo3iNHjkj//v2d/n1CQoIKiOPi4lSvDc2bN1eBLDLNI0eOVMH4d99953DgCKJgcn3KsxKRlHzjF0uiJGe5UyQ2NtCzRUREFBpB7cWLF6V27doOXy9VqpRfRgxLTk5WmWE0SEPwefPNN6vnBw8erIJTBKUIqpF9dSQqKkpeeukleeyxxyR37tzW5zEaGob3XbZsmSqdGDBggOnzT2S6ArnEWtVuSRBL1mKBnR8iIqJQKj9AbwfR0Y5j4JiYGGuPCGZnadF9WLdu3awBLaAbMZQTJCYmysyZM51OA/P23HPPpQlo9fOYBqxbt870eSciIiKiIB98IaOsXbtW/WzWrFm615Cp9TUgRWCrs7nuMLP+FgG58adRXFKiWNy/5iA/SE5OSvMzGEVIoiREBG9NuCXSjEPMf72tcBrBNA2zpsNpZNZpWCypbLNiYlwQjrJkyeLR+z0646B+dcyYMXZfO3z4sPrp6HUYMmSIeAo9LkDZsmXTvYZ+cVFfi27GvDVt2jSHQbM9x44dU92YmQn9/9rKHXVGLBJn6ueQd86fPy/BKkIS5HzKjX0vGMUULe/zNAw9CHIaQTQNs6bDaWTeaSQnJcvhY8F7fApm9uKCcBMVFSVlypTxX1B79OhRh0Gr7rvW7KAWtbyQM2dOu6/Hx8db3+Mp9IgwefJkqVixoqqtdQd6XjALrsSw4SI4j7Vp6BOXmF8s4tkVCpkLGVoEtChbiY6+kdEPNhFyXeJji0uwOmNCpjYiwvf54DTMn4ZZ0+E0Mu80smfLIgklK/s0jfhonA8vS7hwFheQa26fcdAVFrr0yizQRdgjjzyiguUpU6aonhH8kQp3BzZc2+lGW2JFIoIzkAo3CGhjY4N0XVhSJcIP26RZIpLMKKEx47jDaZg/DbOmw2lk1mlcTbJIjen/+DSNbQ+UllxBfIzzF3txAZkY1PqzD1pndIbWUTb20qVL6RqAufLXX39J586dVZA+d+5cqVzZtytJoszoksTJxSTf7kGmmhY8ERERhXhDMV1Li9paDPhghBT95cuXnXY1Zi+g7dSpkyqXQEDryd8ShRMEtFWnHfBpGpt7eFYPRURE5K2gb16PUb8AAyXYWrlyZZr3uBvQouux2bNnS926dU2eWyL/y9L2Zcle+L4bjyIPS67cuSV7y5aBni0iIqKACvqgtmnTpmpgBwShW7ZssT5/4cIFGTdunKo76d69u/X5EydOqNHP8LoRBoZAQIueC2bNmiX169fP0O9BRERERGFcfoABHz744AM1TG7btm3TDJOLbsQwoljJkiWt7x8xYoQajGH8+PHSo0cP9dy5c+dUQItAt0WLFrJ69Wr1MMJgDn369Mnw70dEREREYRDUQpMmTdRQtqNGjZJ58+ap4W2rVKmiAlgEua6gkZnua3TFihXqYat48eIMainTYCMvIiIKNyER1EKdOnVUCYIrEyZMUA8jZHKDuQN9IrOxkRcREYWboK+pJSIiIiJyhUEtEREREYU8BrVEREREFPIY1BIRERFRyGNQS0REREQhj0EtEREREYU8BrVEREREFPIY1BIRERFRyGNQS0REREQhj0EtEREREYU8BrVEREREFPKiAz0DRERERPbERUfK0aRYn6aRMyZC4iXBtHmi4MWgloiIiILSlSSL1Jh+wKdpbHugtMTHmDZLFMRYfkBEREREIY9BLRERERGFPJYfEIWY5E63Smrd8jd+saRIanRZSS1ePNCzRUREFFAMaolCTPLjd/33iyVBkrN2CuTsEBERBQWWHxARERFRyGNQS0REREQhj0EtEREREYU8BrVEREREFPIY1BIRERFRyGNQS0REREQhj116ERERUaYVFx0pR5NifZpGzpgIiZcE0+aJ/INBLVGIiZ64VCKPnLnxiyVFoqP/UIMvJPbuHehZIyIKOleSLFJj+gGfprHtgdISH2PaLJGfMKglCjHR83+VqA170jyXXK8eg1oiIgprDGqJgsw1iZGryRaHrxeyiETZPJdoiUhzey1VIvw4h0RERMGHQS1RkEFA2/fHkw5ff/tiklSyeW7z6QRpOO2/22ube5Tx4xwSEREFH/Z+QEREREQhj0EtEREREYU8BrVEREREFPIY1BIRERFRyGNQS0REREQhj70fEGVgd1zusLA7LiIiIo8xqCXKwO643PHB7YVNmx8iIqJwwaCWiIiIyIm46Mg0A9x4I2dM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"
     }
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(7, 4))\n",
    "ax.hist(age_differences, bins=30, density=True, edgecolor='white')\n",
    "ax.axvline(observed_age_difference, color='red', linestyle='--', label='Observed difference')\n",
    "ax.axvspan(min(observed_age_difference, age_differences.min()) - 0.2, observed_age_difference,\n",
    "           color='gold', alpha=0.3, label='At least as extreme: left tail')\n",
    "ax.set_title('Prediction Under the Null Hypothesis')\n",
    "ax.set_xlabel('Difference in Mean Age (Years)')\n",
    "ax.set_ylabel('Probability Density')\n",
    "ax.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6da5d6a5",
   "metadata": {},
   "source": [
    "Once again, the empirical distribution of the simulated differences is centered roughly around 0, because the simulation is under the null hypothesis that there is no difference between the distributions of the two groups.\n",
    "\n",
    "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.\n",
    "\n",
    "Choose the direction before examining the test result. For the statistic \"smokers minus nonsmokers,\" a younger-smokers alternative uses the **left tail**. For an alternative allowing either age direction, compare absolute differences instead. Do not choose whichever tail makes the observed result appear most significant.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "376b76a7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:10.444521Z",
     "iopub.status.busy": "2026-08-31T06:01:10.444453Z",
     "iopub.status.idle": "2026-08-31T06:01:10.446182Z",
     "shell.execute_reply": "2026-08-31T06:01:10.445989Z"
    },
    "tags": []
   },
   "outputs": [
    {
     "output_type": "execute_result",
     "metadata": {},
     "data": {
      "text/plain": "np.float64(0.0096)"
     },
     "execution_count": 48
    }
   ],
   "source": [
    "empirical_P = np.count_nonzero(age_differences <= observed_age_difference) / len(age_differences)\n",
    "empirical_P"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "caaefaf6",
   "metadata": {},
   "source": [
    "The empirical p-value is around 1% and therefore the result is statistically significant. The test supports the hypothesis that the smokers were younger on average.\n",
    "\n",
    "**Relative and absolute effects:** In the checkout example, 10% minus 8% is an increase of two percentage points. The relative lift is `(0.10 - 0.08) / 0.08 * 100 = 25%`. These describe the same estimated change on different scales. Relative lift requires a nonzero baseline.\n",
    "\n",
    "For 10,000 monthly visits, that estimated change corresponds to 200 extra purchases. At $5 contribution per purchase, the estimated gain is $1,000 before implementation and operating costs. A p-value does not measure this gain or its uncertainty. Report the estimated effect, an interval when available, and relevant costs alongside the evidence.\n",
    "\n",
    "```{index} Difference in means\n",
    "```\n",
    "\n",
    "```{index} Difference in proportions\n",
    "```\n",
    "\n",
    "```{index} Effect size\n",
    "```\n",
    "\n",
    "```{index} Relative lift\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "86b1188f",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "cell-ddf16cb2",
   "metadata": {},
   "source": [
    "\n",
    "## Section Practice\n",
    "\n",
    "Use this short exercise to check the main workflow from this section.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "cell-580e6d85",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:10.447361Z",
     "iopub.status.busy": "2026-08-31T06:01:10.447299Z",
     "iopub.status.idle": "2026-08-31T06:01:10.448702Z",
     "shell.execute_reply": "2026-08-31T06:01:10.448535Z"
    },
    "tags": [
     "thebe-interactive"
    ]
   },
   "outputs": [],
   "source": [
    "### Exercise: Practice A/B Testing\n",
    "# An online store showed two checkout pages, A and B, at random.\n",
    "#   1. Compute the observed difference in mean order value: B minus A.\n",
    "#   2. Shuffle the version labels 5,000 times (rng.permutation) and compute the\n",
    "#      difference each time.\n",
    "#   3. Compute the p-value: the proportion of shuffled differences at least as large\n",
    "#      as the observed difference. Print the observed difference and the p-value.\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "rng = np.random.default_rng(1)\n",
    "orders = pd.DataFrame({\n",
    "    'version': ['A', 'B'] * 8,\n",
    "    'value': [42, 47, 38, 52, 45, 49, 40, 46, 44, 53, 41, 48, 39, 50, 43, 51],\n",
    "})\n",
    "### Your code starts here\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "### Your code ends here\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "cell-e0abec44",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-31T06:01:10.449592Z",
     "iopub.status.busy": "2026-08-31T06:01:10.449537Z",
     "iopub.status.idle": "2026-08-31T06:01:10.451022Z",
     "shell.execute_reply": "2026-08-31T06:01:10.450843Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Observed difference: 8.0\nP-value: 0.0002\n"
    }
   ],
   "source": [
    "### Solution\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "rng = np.random.default_rng(1)\n",
    "orders = pd.DataFrame({\n",
    "    'version': ['A', 'B'] * 8,\n",
    "    'value': [42, 47, 38, 52, 45, 49, 40, 46, 44, 53, 41, 48, 39, 50, 43, 51],\n",
    "})\n",
    "\n",
    "def difference(labels):\n",
    "    means = orders.groupby(labels)['value'].mean()\n",
    "    return means['B'] - means['A']\n",
    "\n",
    "observed = difference(orders['version'])\n",
    "shuffled = np.array([difference(rng.permutation(orders['version'].values)) for _ in range(5000)])\n",
    "\n",
    "print('Observed difference:', observed)\n",
    "print('P-value:', np.mean(shuffled >= observed))\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": ".venv",
   "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.13.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
