{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6e0e2de7-dfaf-4db4-ac60-537a079eab3b",
   "metadata": {},
   "source": [
    "## Mendel's model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "990f729a-8bff-4f7e-b9db-ed50034e64cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from matplotlib.pyplot import subplots\n",
    "\n",
    "# simulating the test statistic\n",
    "num_repetitions = 10000\n",
    "L = []\n",
    "for i in range(num_repetitions):\n",
    "    n = np.random.choice([1, 0], size = 929, replace=True, p = [0.75, 0.25])\n",
    "    L.append(n.sum())\n",
    "\n",
    "L = np.array(L)\n",
    "L = np.abs(L/929 - 0.75)\n",
    "\n",
    "fig, ax = subplots(figsize = (4, 4))\n",
    "ax.hist(L, density = True);\n",
    "ax.scatter(0.0088, 0, color='red');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "81b12d1e-3ab6-4f8f-b4d8-04c9374d0cd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.5439)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating the empirical p-value for Mendel's model\n",
    "empirical_pvalue = np.sum(L >= 0.0088)/num_repetitions\n",
    "empirical_pvalue"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06bf1e7c-bc55-413a-bcc8-58a420310c31",
   "metadata": {},
   "source": [
    "## Smoking and birth weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "a70d9bfa-cf07-4c6b-80e0-eccefd31fee8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>"
      ],
      "text/plain": [
       "      Maternal Smoker  Birth Weight\n",
       "0               False           120\n",
       "1               False           113\n",
       "2                True           128\n",
       "3                True           108\n",
       "4               False           136\n",
       "...               ...           ...\n",
       "1169            False           113\n",
       "1170            False           128\n",
       "1171             True           130\n",
       "1172            False           125\n",
       "1173            False           117\n",
       "\n",
       "[1174 rows x 2 columns]"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "baby = pd.read_csv('baby.csv')\n",
    "births = baby[['Maternal Smoker', 'Birth Weight']]\n",
    "births"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "5f5f22a7-dc60-453d-a593-e64c00616343",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>459</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Maternal Smoker  Birth Weight\n",
       "0            False           715\n",
       "1             True           459"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "births.groupby('Maternal Smoker')['Birth Weight'].count().reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "bbbcc063-ff4a-44d5-8d42-c0ddc2386c44",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       120\n",
       "1       113\n",
       "4       136\n",
       "5       138\n",
       "6       132\n",
       "       ... \n",
       "1168    132\n",
       "1169    113\n",
       "1170    128\n",
       "1172    125\n",
       "1173    117\n",
       "Name: Birth Weight, Length: 715, dtype: int64"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Checking the birth weights of non smokers\n",
    "births[births['Maternal Smoker'] == False]['Birth Weight']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "e081a9dc-069e-4a61-a637-16cb3f6d9669",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAFfCAYAAABa/eebAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmkElEQVR4nO3dB3RUZf7/8W8gEJoJnRBJaNKkSdGIooAgzaXGAoKAsiBKkeBPMUp31yBdEWHZg6ALiHIEFFxw6WUJCGhkQURApEjbRSEQILT7P99n/zM7A6HJTGbyzPt1zj3DzL2584zOfOaZ733uc8Mcx3EEAGCNHIFuAADAtwh2ALAMwQ4AliHYAcAyBDsAWIZgBwDLEOwAYJlwyYYuX74shw4dkjvuuEPCwsIC3RwAuG16StGpU6ckJiZGcuTIEXrBrqEeGxsb6GYAgM8dOHBASpUqFXrBrj1113+AyMjIQDcHAG5bWlqa6bC68i3kgt1VftFQJ9gB2CTMB+VlDp4CgGUIdgCwDMEOAJbJljX2m3Xp0iW5cOFCoJuBIJArVy7JmTNnoJsBZIlwW8eDHjlyRE6cOBHopiCIFCxYUKKjozn3AdazMthdoV68eHHJly8fH+QQp1/0Z86ckWPHjpn7JUuWDHSTAL8Kt7H84gr1IkWKBLo5CBJ58+Y1txru+t6gLAObWXfw1FVT15464Mn1nuC4C2xnXbC7UH7BlXhPIFRYG+wAEKoIdgCwjHUHT69n/NIfs+y5Eh+tmGXPZUOJZP78+dK2bdtANwWwQkgFezDr1q2bfPjhh5KcnCyvvfaa+/EFCxZIu3btzJA9f/r3v/8tQ4YMkS+//FKOHj0qhQoVkpo1a5rHHnzwQQllWdkhUHQKcLsoxQSRPHnyyNtvvy2//fZblj93QkKCfPvtt+bL5ccff5QvvvhCGjZsKMePH5fs5vz584FuAhBQBHsQadKkiTkzUnvt1/PZZ59J1apVJSIiQsqUKSNjx471Wq+PvfXWW/Lcc8+ZuZ3j4uJk6tSp19yfjvtfu3at+VJp1KiRlC5dWu677z5JSkqS1q1be5VM/vKXv8gf/vAHM3SwSpUqkpKSIrt37zZfAvnz55cHHnhA9uzZ47X/yZMnS/ny5SV37txSqVIl+dvf/nbd1zd06FBzEtHWrVvN/XXr1slDDz1kxqLrfNX9+vWT9PR0r9f75ptvSpcuXcw0zj179rzu/gHbEexBRE+a0UCeOHGiHDx4MNNttmzZIk8++aR06NBB/vWvf8mwYcNk8ODBMmPGDK/tNOzr1q1reuEvvviivPDCC7Jz585M91mgQAGzaNknIyPjum10BWhqaqpUrlxZnn76aXn++efNl8DmzZtNyahPnz7u7bV2/tJLL8nLL78s27ZtM9s+++yzsnLlyqv2rX/bt29f+eijj8wXTY0aNcyXRPPmzc0vCg36Tz75xAS953OoMWPGmNKRvl797wGEMoI9yGg9/Z577jG91syMGzdOGjdubMKrYsWKpjavITd69Giv7Vq2bGkC/a677pKBAwdK0aJFMw1TFR4ebr4YtAyj86loTf31119395g9aSjrF4s+t+73559/lk6dOkmzZs1MD15DfNWqVV6Bq23UtujfDBgwQNq3b28e93Tx4kXp3LmzLF++3AS3tlvprxfdf//+/aVChQrmF8G7775rwv/cuXPuv3/kkUfMl4f+MtAFCGUEexDSkoiG7I4dO65ap49deTBT7+/atctMp+CivV3PEoqWeFxzpWRGe8R6LVmtrWsPWcO5du3aV/0S8NxviRIlzG316tW9HtPA1ct8Xa+9V762xMRE2bhxo6xZs0buvPNO9+PfffedaYPrV4Uu+iWiFzTfu3evezv9dQLgvwj2IPTwww+b8NLyxu1MU+tJw13D8EYHbx999FHza2D9+vWmp33lLwfP/brO5MzssRs915X0eX/55Rf56quvvB4/ffq0Kd9o6ce1aNjrF5lnz1zr+wD+i+GOQWrkyJGmJKMHGz1pueOf//yn12N6X8scvp7Y6u677zZ199vham/Xrl3dj+l93bcnPUjbqlUrU7PX16HHEJT+avj+++/dpRkAN0awByktb2htWevJnrSOfO+995qDmE899ZQZlfLee+/J+++//7ufS4c0PvHEE2YUjZZadCSNHggdNWqUtGnT5rZexyuvvGJq8rVq1TKjfhYuXCjz5s2TZcuWZXp8QUfMPPPMM6bu//jjj5s6/v3332+OI/zxj380PXMN+qVLl5rXDSDEgz27nfgxYsQIMwrEk/ZgP/30U3PikIa7DgvU7bRs8ntp3To+Pl7Gjx9vRqHo7Ic6rLBHjx7mIOrt0LNJ33nnHXOwVA+sli1bVqZPn26GR2ZGw1zLOBruOXLkMAdaV69e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8ssv0rlzZzNFQd68eaV69eqyefNm93o9vjxkyBApWbKkWd+kSRPZtWuXBJpOzTB48GApW7asaVf58uXlzTff9JpEKBjavmbNGmnVqpU5VVqngFiwYIHX+ptpo04h0alTJ3OWnp513L17dzl9+nRA237hwgUZOHCgeb/kz5/fbNOlSxc5dOhQ0Lf9Sr169TLb6NDjQLf9Ztq9Y8cOad26tTlTU//b33vvvbJ//373+nPnzknv3r3NZ7pAgQKSkJBw1UmRgWi7/rfr06ePlCpVyrzX7777bjMJoidftD3kg/23336TBx98UHLlyiWLFy+W77//XsaOHSuFChVybzNq1CgzHFP/B2zcuNG8kXSaYf0fEEhvv/22TJ482Qwd1Te63te2Tpw4Majaruco6NTMOgd/Zm6mjRou27dvl6VLl8qiRYvMB6hnz54BbfuZM2fMtNP65aq38+bNk507d5rA8RSMbfc0f/582bBhQ6ZzlASi7Tdq9549e6R+/fpSuXJlWbVqlWzdutX8P9BrO7gkJibKwoULZe7cubJ69WrzZdu+fXu/tvtm2q7n8CxZskRmzpxpPrP9+/c3Qf/FF1/4tu1OiBs4cKBTv379a66/fPmyEx0d7YwePdr92IkTJ5yIiAjn448/dgLpsccec5577jmvx9q3b+906tQpaNuubznPmT1vpo3ff/+9+btNmza5t1m8eLETFhbm/PLLLwFre2a+/vprs92+ffuyRdsPHjzo3Hnnnc62bduc0qVLO+PHj3evC4a2Z9bup556yuncufM1/+bEiRNOrly5nLlz57of27Fjh9lXSkqKk1Uya3vVqlWdESNGeD1Wu3Zt54033vBp20O+x67flHoG7BNPPCHFixeXWrVqyV//+lf3+r1795qTqLQ84KI///RkqpSUFAmkBx54wEzF8OOP/72O63fffSfr1q2TFi1aBH3bXW6mjXqrZQD9/+Si2+fIkcP08IOJXitAf4K7JqkL5rbrVB7PPPOMvPLKK1K1atWr1gdj27XNeu2GihUrml91+pnV94pnyWPLli2mTOb5ntLefVxcXFB8ZjVztPyr2b9y5Urz+W3atKlP2x7ywf7TTz+ZckaFChXkq6++khdeeEH69esnH374oVmvoaMym2bYtS5Q9KIkHTp0MP/jtZSkX0r6005/Pgd7211upo16qx9gT+Hh4VK4cOGgeR1KS0dac+/YsaN7xr5gbruW7rQt+n7PTDC2Xa+ypnXqkSNHSvPmzeUf//iHtGvXzpQqtGzhanfu3LmvmgE2GN73WibVurrW2LWN+hq0bPPwww/7tO3ZYtpef/cAtEfy1ltvmfsajtu2bTP1Xp3PJph9+umnMmvWLJk9e7bpcaWmpppg11ppsLfdNtrLevLJJ00vTDsKwU57hu+88445NuDPaxr44/Oq2rRpY2rRSqckWb9+vfnMNmjQQIKZBrsez9Bee+nSpc0xCz1Qqp9Zz1767Qr5HruOxNBvUE9VqlRxH2F3TSUcjNMM609oV69dR2boz2p9sycnJwd9211upo16e+X1cC9evGhGbATD63CF+r59+8xBRs/5tYO17WvXrjXt0p/42gvXRdv/8ssvm4vMB2vbddpvbeuNPrPnz5+XEydOBNX7/uzZs/L666+bS4PqyJkaNWqYA6dPPfWUjBkzxqdtD/lg1xExOpLBk9a89NtU6VBC/Q/qOc2wXv1Ea4yBnmZYR2VovdOTznXv6tUEc9tdbqaNeqtvdO1luqxYscK8zkBPHOcKdR2euWzZMjNEzVOwtl07ATqaRH/luRbtNWpnQUuSwdp2LVPo0MbrfWbr1KljSpOe7yndXoM/kO97fa/ocr3PrM/a7oQ4HcUQHh7u/PnPf3Z27drlzJo1y8mXL58zc+ZM9zYjR450ChYs6Hz++efO1q1bnTZt2jhly5Z1zp49G9C2d+3a1YxoWLRokbN3715n3rx5TtGiRZ1XX301qNp+6tQp59tvvzWLvuXGjRtn/u0aOXIzbWzevLlTq1YtZ+PGjc66deucChUqOB07dgxo28+fP2+u01uqVCknNTXVOXz4sHvRa/sGc9szc+WomEC1/Ubt1ve5jhyZOnWq+cxOnDjRXEd57dq17n306tXLiYuLc1asWOFs3rzZqVevnln87UZtb9CggRkZs3LlSuenn35ypk+f7uTJk8d5//33fdr2kA92tXDhQqdatWpmiF3lypXNG8aTDskbPHiwU6JECbNN48aNnZ07dzqBlpaW5rz00kvmTaBvjnLlyplhU56hEgxt1zdxZhft1S+mm23j8ePHTaAUKFDAiYyMdJ599lnzIQpk2/XL9FoXJNa/C+a232ywB6LtN9PuadOmOXfddZd539esWdNZsGCB1z7Onj3rvPjii06hQoVMR61du3bmC9ffbtR2bUO3bt2cmJgY0/ZKlSo5Y8eONZ8BX7adaXsBwDIhX2MHANsQ7ABgGYIdACxDsAOAZQh2ALAMwQ4AliHYAcAyBDsAWIZgBwDLEOwAYBmCHQDELv8Pk+VGDbES0f8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = subplots(figsize = (4, 4))\n",
    "ax.hist(births[births['Maternal Smoker'] == False]['Birth Weight'], alpha=0.5, label = 'Non Smoker')\n",
    "ax.hist(births[births['Maternal Smoker'] == True]['Birth Weight'], alpha=0.5, label = 'Smoker')\n",
    "ax.legend();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "c49f2581-cd21-48aa-9814-2f78c79d1bb3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>123.085315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>113.819172</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Maternal Smoker  Birth Weight\n",
       "0            False    123.085315\n",
       "1             True    113.819172"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Finding the average weight of the groups\n",
    "means = births.groupby('Maternal Smoker')['Birth Weight'].mean().reset_index()\n",
    "means"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "a5a86aaa-11e1-43af-8b06-fb22c533b20f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(-9.266142572024918)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Finding the observed value\n",
    "observed_value = means.iloc[1, 1] - means.iloc[0, 1]\n",
    "observed_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "6e1a64fe-4e58-48e6-9547-9f4b65265ca4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "121     True\n",
       "320    False\n",
       "420    False\n",
       "196    False\n",
       "70     False\n",
       "       ...  \n",
       "865     True\n",
       "35     False\n",
       "185    False\n",
       "132    False\n",
       "969    False\n",
       "Name: Maternal Smoker, Length: 1174, dtype: bool"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Finding a random permutation of labels\n",
    "shuffle = births.sample(frac=1.0, replace = False)['Maternal Smoker']\n",
    "shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "08b89b78-b3ad-4dff-9134-64e95ef99947",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>128</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>True</td>\n",
       "      <td>108</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>136</td>\n",
       "      <td>False</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>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1172</th>\n",
       "      <td>False</td>\n",
       "      <td>125</td>\n",
       "      <td>True</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>"
      ],
      "text/plain": [
       "      Maternal Smoker  Birth Weight  Shuffled_label\n",
       "0               False           120            True\n",
       "1               False           113           False\n",
       "2                True           128            True\n",
       "3                True           108            True\n",
       "4               False           136           False\n",
       "...               ...           ...             ...\n",
       "1169            False           113            True\n",
       "1170            False           128            True\n",
       "1171             True           130           False\n",
       "1172            False           125            True\n",
       "1173            False           117           False\n",
       "\n",
       "[1174 rows x 3 columns]"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ons = births.assign(Shuffled_label=shuffle.reset_index().iloc[:, 1])\n",
    "ons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "4cb420f9-405c-4696-97b7-c8929d01ca3e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.9561893444246437)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Checking the test statistic for one shuffle\n",
    "means = ons.groupby('Shuffled_label')['Birth Weight'].mean()\n",
    "means.reset_index().iloc[0, 1] - means.reset_index().iloc[1, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "64d0a9e7-197b-4d75-8be2-a14e496d6da8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.34090224, -0.47828816,  0.24073922, ...,  0.21569846,\n",
       "        1.42838643,  0.02610418])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Repeated shuffling to find empirical p-value\n",
    "num_repetitions = 10000\n",
    "\n",
    "L=[]\n",
    "for i in range(num_repetitions):\n",
    "    shuffle = births.sample(frac=1.0, replace=False)['Maternal Smoker']\n",
    "    ons = births.assign(Shuffled_label = shuffle.reset_index().iloc[:, 1])\n",
    "    means = ons.groupby('Shuffled_label')['Birth Weight'].mean()\n",
    "    L.append(means.reset_index().iloc[0, 1] - means.reset_index().iloc[1, 1])\n",
    "\n",
    "L = np.array(L)\n",
    "L"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "75d9d519-eb1d-4119-a53f-5c4ddc7f0d1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Prediction under null hypothesis')"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = subplots(figsize = (4, 4))\n",
    "ax.hist(L, density=True);\n",
    "ax.set_xlabel('Difference between group means')\n",
    "ax.set_title('Prediction under null hypothesis')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "1a59e590-678f-4314-af70-3fbd80d3f13f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(0)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating empirical p-value\n",
    "empirical_pvalue = np.sum(L <= observed_value)\n",
    "empirical_pvalue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "54363616-ce0f-4c33-8582-40030465bd6b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
