diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index 11852458..8601d878 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -16,7 +16,25 @@ "cell_type": "markdown", "id": "4ea73db3", "metadata": {}, - "source": [] + "source": [ + "There are multiple stages of sampling occuring within the model. \n", + "\n", + "First we are sampling who is becoming infected (the 'attack rate'). This happened at # Infect a random subset of people step.\n", + "- The sampling procedure: np.random.choice(..., replace=False) selects 100 unique people uniformly at random from the 1000 attendees.\n", + "- Function used: the function used was np.random.choice(..., replace=False)\n", + "- Sample size: 1000 = sample size\n", + "- Sample frame: all 1000 attendees (ppl.index), i.e., everyone at weddings + brunches.\n", + "- Underlying distrubution: a simple random sample without replacement\n", + "\n", + "Second we are sampling which infected people are successfully traced (primary contact tracing).\n", + "- The sampling procedure: np.random.rand(n) < 0.20 marks each infected person as traced with probability 0.20.\n", + "- Function used: np.random.rand(.....)\n", + "- Sample size: one random draw per infected person (so ~100 draws)\n", + "- Sample frame: only the infected individuals (about 100 each run).\n", + "- Underlying distrubution:a simple random sample without replacement\n", + "\n", + "There is a secondary tracing happening and the Monte Carlo sampling across repititions is also happening but it is not as explicity broken up to the components listed above but because they are not randomized but help us to predict based on the defined model. " + ] }, { "cell_type": "markdown", @@ -30,7 +48,9 @@ "cell_type": "markdown", "id": "4cf5d993", "metadata": {}, - "source": [] + "source": [ + "When I changed the number of repetitions in the simulation to 10 the distributions of the graphs vary from run-to-run. With 100 repetitions instead the graph distributions become more stable, but still vary noticeably run-to-run as compared to the original 1000. This shows that the results are not directly reproducible due to the randomness based on each run." + ] }, { "cell_type": "markdown", @@ -44,7 +64,9 @@ "cell_type": "markdown", "id": "77613cc3", "metadata": {}, - "source": [] + "source": [ + "I made the simulation reproducible by fixing the random number generator seed using np.random.seed(123) before any random sampling occurred. This causes the random functions (np.random.choice for selecting infected individuals and np.random.rand for tracing success) to produce the same sequence of random values each time the script is run. As a result, the same people are infected and the same tracing outcomes occur in each repetition, so the output DataFrame and histogram plots are identical across multiple runs." + ] }, { "cell_type": "markdown", @@ -56,10 +78,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "ab8587a0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbRpJREFUeJzt3XlYVHX///HXsMuuooCF+0bmkmjuO+ZSpmlpZipmZe6mZnnbnZqVpuZWLuVtYntZZptLLmBlauaWFqIShSUuaKiIgMD5/eGP+TqCCjiHEXo+rutcOZ+zvc+Zz0zz4mwWwzAMAQAAAAAAu3NydAEAAAAAAJRUhG4AAAAAAExC6AYAAAAAwCSEbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAAMAkhG4AAAAAAExC6AYAAAAAwCSEbgCws3fffVe1a9eWq6ur/P39HV0OCslisWjKlCmOLgNXiYiIUOXKlR2ybnv2CUduR14yMzM1YcIEhYSEyMnJST169Ciydf/xxx+yWCyKjIwssnUCQFEidAPIt8jISFksFv3888+OLuWmrVmzxpRAdfDgQUVERKhatWpaunSp3nrrrRvOs3fvXj366KMKCQmRu7u7ypQpo/DwcC1fvlxZWVl2rzHHjz/+qClTpig5Odm0dUjSBx98oHnz5t1wuilTpshisdxwaNu2ran1/ltER0fb7FdXV1dVrVpVAwYM0O+//+7o8oqtnACZ19C0aVPT1pvzfn766aeFmv/tt9/WrFmz9OCDD2rFihV6+umn7Vxh/r8LitpXX32lNm3aqHz58vL09FTVqlXVu3dvrVu3ztGlASghXBxdAAA4wpo1a7Rw4UK7B+/o6GhlZ2dr/vz5ql69+g2n/9///qennnpKgYGB6t+/v2rUqKHz589r06ZNGjx4sBITE/Wf//zHrjXm+PHHHzV16lRFRESYekT+gw8+0IEDBzRmzJjrTtezZ0+bfZaSkqKhQ4fqgQceUM+ePa3tgYGBZpVq4+LFi3JxKfn/mxw1apQaN26sS5cuaffu3Xrrrbf0zTffaP/+/apQoYKjy8tl6dKlys7OdnQZN9S3b1917drVpq1cuXIOqubGNm/erNtuu01z5841bR3X+i6oVKmSLl68KFdXV9PWfS2zZ8/WM888ozZt2mjixIny9PTUkSNHtHHjRn300Ufq3LlzkdcEoOQp+b8mAKAInTx5UpLyFWK3b9+up556Ss2aNdOaNWvk4+NjHTdmzBj9/PPPOnDggFml3nLq1aunevXqWV8nJSVp6NChqlevnh599NFrzpeWliY3Nzc5Odn35C0PDw+7Lu9W1apVKz344IOSpEGDBqlmzZoaNWqUVqxYoYkTJ97Usi9cuCAvLy97lGnliGBWGA0bNrxuv73VnDx50mGXw1gsFod83jIzMzVt2jR17NhR3377ba7xOd/nRcmMzwwAx+P0cgA3JSIiQt7e3kpISNB9990nb29v3XbbbVq4cKEkaf/+/Wrfvr28vLxUqVIlffDBBzbz55yy/t1332nIkCEqW7asfH19NWDAAP3zzz82037xxRe69957VaFCBbm7u6tatWqaNm1anqdg79ixQ127dlXp0qXl5eWlevXqaf78+daac+q78tTPG1m0aJHq1Kkjd3d3VahQQcOHD7c5Nbty5cqaPHmypMtHtG50/efUqVNlsVj0/vvv2wTuHI0aNVJERIT19YULFzRu3Djraei1atXS7NmzZRiGzXwWi0UjRozQ6tWrdeedd8rd3V116tSxOVVyypQpeuaZZyRJVapUse6DP/74Q5K0fPlytW/fXuXLl5e7u7vuuOMOLV68OM/tWLt2rdq0aSMfHx/5+vqqcePG1ve5bdu2+uabb/Tnn39a13Ez17HmnEL70Ucf6fnnn9dtt90mT09PnTt3TmfOnNH48eNVt25deXt7y9fXV126dNG+fftyLSctLU1TpkxRzZo15eHhoeDgYPXs2VNxcXE2+/HK9y/n9PcjR45Yzw7w8/PToEGDlJqaarP8ixcvatSoUQoICJCPj4/uv/9+/f333/m+JvjkyZMaPHiwAgMD5eHhofr162vFihU20+Scxjx79my99dZbqlatmtzd3dW4cWPt3LmzYDv2Cu3bt5ckxcfHW9vWrl2rVq1aycvLSz4+Prr33nv166+/2syX810QFxenrl27ysfHR/369ZMk69kfdevWlYeHh8qVK6fOnTvnulTlvffeU1hYmEqVKqUyZcro4Ycf1tGjR3OtJ6cPXbp0SWXKlNGgQYNybce5c+fk4eGh8ePHW9vS09M1efJkVa9eXe7u7goJCdGECROUnp5uM296erqefvpplStXzvr+/fXXXwXckwWT07ejo6Nt2m/meuf89Nmc5UdFRenXX3+1fk5z6sjOzta8efNUp04deXh4KDAwUEOGDMn1/SwV/rvgWtu4efNma7/z9/dX9+7dFRMTU+BtvJakpCSdO3dOLVq0yHN8+fLlbV7n53NZkPexqD4zhw8fVq9evRQUFCQPDw/dfvvtevjhh3X27Nnr7h8A9sORbgA3LSsrS126dFHr1q01c+ZMvf/++xoxYoS8vLw0adIk9evXTz179tSSJUs0YMAANWvWTFWqVLFZxogRI+Tv768pU6YoNjZWixcv1p9//mn9ASNdDuje3t4aO3asvL29tXnzZr3wwgs6d+6cZs2aZV3Whg0bdN999yk4OFijR49WUFCQYmJi9PXXX2v06NEaMmSIjh07pg0bNujdd9/N1zZOmTJFU6dOVXh4uIYOHWqtcefOndq6datcXV01b948vfPOO/r888+1ePFieXt72xy5vVJqaqo2bdqk1q1bq2LFijdcv2EYuv/++xUVFaXBgwerQYMGWr9+vZ555hn9/fffuU4J/eGHH7Rq1SoNGzZMPj4+WrBggXr16qWEhASVLVtWPXv21KFDh/Thhx9q7ty5CggIkPR/p78uXrxYderU0f333y8XFxd99dVXGjZsmLKzszV8+HDreiIjI/XYY4+pTp06mjhxovz9/bVnzx6tW7dOjzzyiCZNmqSzZ8/qr7/+stbo7e2dr31+PdOmTZObm5vGjx+v9PR0ubm56bffftPq1av10EMPqUqVKjpx4oTefPNNtWnTRr/99pv1VOmsrCzdd9992rRpkx5++GGNHj1a58+f14YNG3TgwAFVq1btuuvu3bu3qlSpounTp2v37t363//+p/Lly+vVV1+1ThMREaFPPvlE/fv3V9OmTbVlyxbde++9+dq2ixcvqm3btjpy5IhGjBihKlWqaOXKlYqIiFBycrJGjx5tM/0HH3yg8+fPa8iQIbJYLJo5c6Z69uyp33//vVBHhXP+8FC2bFlJl28MOHDgQHXq1EmvvvqqUlNTtXjxYrVs2VJ79uyx+SNKZmamOnXqpJYtW2r27Nny9PSUJA0ePFiRkZHq0qWLHn/8cWVmZur777/X9u3b1ahRI0nSyy+/rP/+97/q3bu3Hn/8cZ06dUqvv/66WrdurT179uR5FNbV1VUPPPCAVq1apTfffFNubm7WcatXr1Z6eroefvhhSZdDzP33368ffvhBTz75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++/bnJ0gSQMGDNA777yjsWPH6qefflKrVq104cIFbdy4UcOGDVP37t1vqo6wsDD16tVL8+bN0+nTp62PDDt06JCkGx/te/LJJ/Xmm28qIiJCu3btUuXKlfXpp59q69atmjdvXr5vvmcPvr6+Wrx4sfr376+GDRvq4YcfVrly5ZSQkKBvvvlGLVq0yPOPF1dq166d+vfvrwULFujw4cPq3LmzsrOz9f3336tdu3YaMWKEqlWrppdeekkTJ07UH3/8oR49esjHx0fx8fH6/PPP9eSTT9o8bzsvffr00euvv67Jkyerbt261mttc/Tv31+ffPKJnnrqKUVFRalFixbKysrSwYMH9cknn2j9+vVq1KiRGjRooL59+2rRokU6e/asmjdvrk2bNuX7TIXC8vPz00MPPaTXX39dFotF1apV09dff229btoR2rRpoyFDhmj69Onau3ev7rnnHrm6uurw4cNauXKl5s+frwcffNCU74JZs2apS5cuatasmQYPHmx9ZJifn1++nnWfH6mpqWrevLmaNm2qzp07KyQkRMnJyVq9erW+//579ejRQ3fddZek/H8u7fE+2vMzs3nzZo0YMUIPPfSQatasqczMTL377rtydnZWr1697LIfAeRDkdwjHUCJcK1Hhnl5eeWaNq/HzxiGYVSqVMm49957cy1zy5YtxpNPPmmULl3a8Pb2Nvr162fzqBjDMIytW7caTZs2NUqVKmVUqFDBmDBhgvVxQVc/nuWHH34wOnbsaPj4+BheXl5GvXr1bB6XlZmZaYwcOdIoV66cYbFY8vX4sDfeeMOoXbu24erqagQGBhpDhw7N9Viy/D4y7Eq7du0yHnnkEaNChQqGq6urUbp0aaNDhw7GihUrbB6Bdf78eePpp5+2TlejRg1j1qxZNo/kMYzLj7oaPnx4rvVUqlTJGDhwoE3btGnTjNtuu81wcnKyeXzYl19+adSrV8/w8PAwKleubLz66qvWR21d/YixL7/80mjevLlRqlQpw9fX17j77ruNDz/80Do+JSXFeOSRRwx/f39DUr4fH3a9R4bl9fibtLQ0Y9y4cUZwcLBRqlQpo0WLFsa2bduMNm3aGG3atLGZNjU11Zg0aZJRpUoVw9XV1QgKCjIefPBBIy4uzmY/5vXIsKvf25w+fOV+uXDhgjF8+HCjTJkyhre3t9GjRw8jNjbWkGTMmDHjhtt+4sQJY9CgQUZAQIDh5uZm1K1bN9cjo3IeQTRr1qxc819de16uty/zmrZTp06Gn5+f4eHhYVSrVs2IiIgwfv75Z+s01/ouMIzLn7dZs2YZtWvXNtzc3Ixy5coZXbp0yfVops8++8xo2bKl4eXlZXh5eRm1a9c2hg8fbsTGxtqsJ68+lJ2dbYSEhOT5aL0cGRkZxquvvmrUqVPHcHd3N0qXLm2EhYUZU6dONc6ePWud7uLFi8aoUaOMsmXLGl5eXka3bt2Mo0ePFuiRYXm9L1fKaztOnTpl9OrVy/D09DRKly5tDBkyxDhw4MBNPzIsP332Wt/ZhmEYb731lhEWFmaUKlXK8PHxMerWrWtMmDDBOHbsmM10hf0uuNZj0TZu3Gi0aNHCurxu3boZv/32m800BdnGq126dMlYunSp0aNHD6NSpUqGu7u74enpadx1113GrFmzjPT0dJvp8/O5NIz8v49F8Zn5/fffjccee8yoVq2a4eHhYZQpU8Zo166dsXHjxmvuFwD2ZzEMB935BQAkRUZGatCgQdq5c6caNWrk6HIA0+zdu1d33XWX3nvvPfXr18/R5QAAgCLCNd0AANjZxYsXc7XNmzdPTk5ONjcCBAAAJR/XdAMAYGczZ87Url271K5dO7m4uGjt2rVau3atnnzySYc/mgoAABQtQjcAAHbWvHlzbdiwQdOmTVNKSooqVqyoKVOm5HqMFQAAKPm4phsAAAAAAJNwTTcAAAAAACYhdAMAAAAAYJISf013dna2jh07Jh8fH1ksFkeXAwAAAAAoAQzD0Pnz51WhQgU5OV3neLYjHxI+efJkQ5LNUKtWLev4ixcvGsOGDTPKlCljeHl5GT179jSOHz9eoHUcPXo01zoYGBgYGBgYGBgYGBgYGOwxHD169LqZ1OFHuuvUqaONGzdaX7u4/F9JTz/9tL755hutXLlSfn5+GjFihHr27KmtW7fme/k+Pj6SpKNHj8rX19d+hQMAAAAA/rXOnTunkJAQa+a8FoeHbhcXFwUFBeVqP3v2rJYtW6YPPvhA7du3lyQtX75coaGh2r59u5o2bZqv5eecUu7r60voBgAAAADY1Y0uY3b4jdQOHz6sChUqqGrVqurXr58SEhIkSbt27dKlS5cUHh5unbZ27dqqWLGitm3bds3lpaen69y5czYDAAAAAACO4NDQ3aRJE0VGRmrdunVavHix4uPj1apVK50/f17Hjx+Xm5ub/P39beYJDAzU8ePHr7nM6dOny8/PzzqEhISYvBUAAAAAAOTNoaeXd+nSxfrvevXqqUmTJqpUqZI++eQTlSpVqlDLnDhxosaOHWt9nXOePQAAAAAARc3h13Rfyd/fXzVr1tSRI0fUsWNHZWRkKDk52eZo94kTJ/K8BjyHu7u73N3dC7zurKwsXbp0qTBlA7gJrq6ucnZ2dnQZAAAAgCluqdCdkpKiuLg49e/fX2FhYXJ1ddWmTZvUq1cvSVJsbKwSEhLUrFkzu63TMAwdP35cycnJdlsmgILx9/dXUFDQDW9CAQAAABQ3Dg3d48ePV7du3VSpUiUdO3ZMkydPlrOzs/r27Ss/Pz8NHjxYY8eOVZkyZeTr66uRI0eqWbNm+b5zeX7kBO7y5cvL09OTH/1AETIMQ6mpqTp58qQkKTg42MEVAQAAAPbl0ND9119/qW/fvjp9+rTKlSunli1bavv27SpXrpwkae7cuXJyclKvXr2Unp6uTp06adGiRXZbf1ZWljVwly1b1m7LBZB/OfdvOHnypMqXL8+p5gAAAChRLIZhGI4uwkznzp2Tn5+fzp49m+s53WlpaYqPj1flypULfeM2ADfv4sWL+uOPP1SlShV5eHg4uhwAAADghq6XNa/k8Od03wo4pRxwLD6DAAAAKKkI3QAAAAAAmOSWunv5rSIhIUFJSUlFtr6AgABVrFjR1HUcP35c/fv3148//ihXV1fT7tYeGRmpMWPGOPRu8IZhaMiQIfr000/1zz//aM+ePWrQoIHD6ilK+dn/U6ZM0erVq7V3715JUkREhJKTk7V69eoiqREAAAD4NyF0XyUhIUG1aoUqLS21yNbp4eGp2NiYfAfvwoSkuXPnKjExUXv37pWfn18hK7VVuXJljRkzRmPGjLG29enTR127drXL8gtr3bp1ioyMVHR0tKpWraqAgACH1vPcc89p9erVOnjwoLXt4MGDCg0N1cCBAxUZGWltj4yM1JAhQ5ScnFxk9xmYP3++SvitHQAAAACHIXRfJSkpSWlpqQoNfU+enqGmry81NUYxMY8qKSnJ1KPdcXFxCgsLU40aNUxbh3T5TtSOvildXFycgoOD1bx582tOk5GRITc3tyKpp127dnr11Vd1/PhxBQUFSZKioqIUEhKi6Ohom2mjoqLUtGnTIt2H9vojDAAAAIDcuKb7Gjw9Q+Xj09D0wR7Bvm3btho1apQmTJigMmXKKCgoSFOmTLGOr1y5sj777DO98847slgsioiIkCQlJyfr8ccfV7ly5eTr66v27dtr3759Nsv+6quv1LhxY3l4eCggIEAPPPCAdZ1//vmnnn76aVksFuuNsCIjI+Xv72+zjMWLF6tatWpyc3NTrVq19O6779qMt1gs+t///qcHHnhAnp6eqlGjhr788kvr+H/++Uf9+vVTuXLlVKpUKdWoUUPLly/Pc19ERERo5MiRSkhIkMViUeXKla31jhgxQmPGjFFAQIA6deokSdqyZYvuvvtuubu7Kzg4WM8995wyMzNt9u3IkSM1ZswYlS5dWoGBgVq6dKkuXLigQYMGycfHR9WrV9fatWuv+f60bNlSrq6uNgE7Ojpaw4cP15kzZ/THH3/YtLdr106SlJ6ervHjx+u2226Tl5eXmjRpkiukR0ZGqmLFivL09NQDDzyg06dP51r/jBkzFBgYKB8fHw0ePFhpaWm59lmPHj1stvl6/Um6fKS+ZcuW8vDw0B133KGNGzfKYrFYz77IyMjQiBEjFBwcLA8PD1WqVEnTp0+/5j4CAAAASipCdwmxYsUKeXl5aceOHZo5c6ZefPFFbdiwQZK0c+dOde7cWb1791ZiYqLmz58vSXrooYd08uRJrV27Vrt27VLDhg3VoUMHnTlzRpL0zTff6IEHHlDXrl21Z88ebdq0SXfffbckadWqVbr99tv14osvKjExUYmJiXnW9fnnn2v06NEaN26cDhw4oCFDhmjQoEGKioqymW7q1Knq3bu3fvnlF3Xt2lX9+vWz1vHf//5Xv/32m9auXauYmBgtXrz4mqeMz58/Xy+++KJuv/12JSYmaufOnTb7yM3NTVu3btWSJUv0999/q2vXrmrcuLH27dunxYsXa9myZXrppZdy7duAgAD99NNPGjlypIYOHaqHHnpIzZs31+7du3XPPfeof//+Sk3N+5IELy8vNW7c2Gabo6Oj1aFDB7Vo0cLa/vvvvyshIcEaukeMGKFt27bpo48+0i+//KKHHnpInTt31uHDhyVJO3bs0ODBgzVixAjt3btX7dq1y1X7J598oilTpuiVV17Rzz//rODg4Hw96/56/SkrK0s9evSQp6enduzYobfeekuTJk2ymX/BggX68ssv9cknnyg2Nlbvv/++9Q8gAAAAwL8Jp5eXEPXq1dPkyZMlSTVq1NAbb7yhTZs2qWPHjipXrpzc3d1VqlQp6+nNP/zwg3766SedPHlS7u7ukqTZs2dr9erV+vTTT/Xkk0/q5Zdf1sMPP6ypU6da11O/fn1JUpkyZeTs7CwfHx/rMvMye/ZsRUREaNiwYZKksWPHavv27Zo9e7Y1XEqXj7b27dtXkvTKK69owYIF+umnn9S5c2clJCTorrvuUqNGjSTpuuHNz89PPj4+cnZ2zlVXjRo1NHPmTOvrSZMmKSQkRG+88YYsFotq166tY8eO6dlnn9ULL7wgJycn6zY///zzkqSJEydqxowZCggI0BNPPCFJeuGFF7R48WL98ssvatq0aZ51tWvXTitXrpQk/fbbb0pLS9Ndd92l1q1bKzo6WoMGDVJ0dLQ8PDzUtGlTJSQkaPny5UpISFCFChUkSePHj9e6deu0fPlyvfLKK5o/f746d+6sCRMmSJJq1qypH3/8UevWrbOud968eRo8eLAGDx4sSXrppZe0cePGXEe7r3a9/rRhwwbFxcUpOjrauo9ffvlldezY0Tp/QkKCatSooZYtW8pisahSpUrXXR8AAABQUnGku4SoV6+ezevg4GCdPHnymtPv27dPKSkpKlu2rLy9va1DfHy84uLiJEl79+5Vhw4dbqqumJgYtWjRwqatRYsWiomJuWb9Xl5e8vX1tdY/dOhQffTRR2rQoIEmTJigH3/8sVC1hIWF5aqtWbNmNs+IbtGihVJSUvTXX3/lWZuzs7PKli2runXrWtsCAwMl6br7u23btjp06JASExMVHR2tli1bytnZWW3atLGeMh4dHa3mzZvL3d1d+/fvV1ZWlmrWrGnz/mzZssX6/sTExKhJkyY262nWrFmubbzRNHm5Xn+KjY1VSEiIzR81cs6AyBEREaG9e/eqVq1aGjVqlL799tsbrhMAAAAoiTjSXUK4urravLZYLMrOzr7m9CkpKQoODs51jbAk6zXZRXkzr+vV36VLF/35559as2aNNmzYoA4dOmj48OGaPXt2gdbh5eVlt9qubMsJ7dfb3y1atJCbm5uioqIUFRWlNm3aSJIaN26spKQk/f7774qOjtaQIUMkXX5/nJ2dtWvXLjk7O9ssy9vbu1DbURAF7U9Xa9iwoeLj47V27Vpt3LhRvXv3Vnh4uD799FN7lwoAAADc0jjS/S/VsGFDHT9+XC4uLqpevbrNkHO9dL169bRp06ZrLsPNzU1ZWVnXXU9oaKi2bt1q07Z161bdcccdBaq3XLlyGjhwoN577z3NmzdPb731VoHmv1Zt27Zts3lc1tatW+Xj46Pbb7/9ppd/pVKlSllvhLZlyxa1bdtW0uVw27RpUy1btkxHjx61nnJ/1113KSsrSydPnsz1/uQcYQ4NDdWOHTts1rN9+/Zc23ijaQqqVq1aOnr0qE6cOGFtu/La+Ry+vr7q06ePli5dqo8//lifffaZ9Tp9AAAA4N+CI93/UuHh4WrWrJl69OihmTNnqmbNmjp27Jj15mmNGjXS5MmT1aFDB1WrVk0PP/ywMjMztWbNGj377LOSLl9b/d133+nhhx+Wu7t7njc3e+aZZ9S7d2/dddddCg8P11dffaVVq1Zp48aN+a71hRdeUFhYmOrUqaP09HR9/fXXCg29+bu+Dxs2TPPmzdPIkSM1YsQIxcbGavLkyRo7dqz1em57ateunebOnSvp8h89crRp00azZ8+23nBNunx9dr9+/TRgwAC99tpruuuuu3Tq1Clt2rRJ9erV07333qtRo0apRYsWmj17trp3767169fbXM8tSaNHj1ZERIQaNWqkFi1a6P3339evv/6qqlWrFno7OnbsqGrVqmngwIGaOXOmzp8/b73mPeeo/5w5cxQcHKy77rpLTk5OWrlypYKCgnLd2R4AAAAo6Qjd15CaGnPjiYrReq5msVi0Zs0aTZo0SYMGDdKpU6cUFBSk1q1bW69Rbtu2rVauXKlp06ZpxowZ8vX1VevWra3LePHFFzVkyBBVq1ZN6enpNkeMc/To0UPz58/X7NmzNXr0aFWpUkXLly+3HunNDzc3N02cOFF//PGHSpUqpVatWumjjz666X1w2223ac2aNXrmmWdUv359lSlTRoMHD7YGSHtr166dXnzxRXXu3FkuLv/30WvTpo0mT56sTp062ZzWvXz5cr300ksaN26c/v77bwUEBKhp06a67777JElNmzbV0qVLNXnyZL3wwgsKDw/X888/r2nTplmX0adPH8XFxWnChAlKS0tTr169NHToUK1fv77Q2+Hs7KzVq1fr8ccfV+PGjVW1alXNmjVL3bp1k4eHhyTJx8dHM2fO1OHDh+Xs7KzGjRtrzZo1pvwxAwDgOAkJCUpKSnJ0GSgmAgICVLFiRUeXARQ5i5FXUipBzp07Jz8/P509e1a+vr4249LS0hQfH68qVapYw0JCQoJq1QpVWlrej38yg4eHp2JjY/gSQrG1detWtWzZUkeOHFG1atUKPH9en0UAwK3NEb+ZULzxmxclzfWy5pU40n2VihUrKjY2pkj/astf/VDcfP755/L29laNGjV05MgRjR49Wi1atChU4AYAFE9JSUlKS0tVaOh78vS8+cu+ULKlpsYoJuZRJSUl8bsX/zqE7jxUrFiRLwPgOs6fP69nn31WCQkJCggIUHh4uF577TVHlwUAcABPz1D5+DS88YQA8C9F6AZQYAMGDNCAAQMcXQYAAABwy+OuRgAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEl4ZFgeEhISlJSUVGTrCwgIKJHPBW/btq0aNGigefPmOboUu4mIiFBycrJWr159zWmu3u7KlStrzJgxGjNmTJHUCAAAAODWQei+SkJCgkJr1VJqWlqRrdPTw0MxsbH5Ct4Wi+W64ydPnqwpU6bYqTJzTZkyRatXr9bevXtvajlNmzZVgwYNtGTJEmvbkiVLNHToUC1fvlwRERHW9oiICMXFxen777+/qXUWxM6dO+Xl5VVk6wMAAABw6yB0XyUpKUmpaWl6LzRUoZ6epq8vJjVVj8bEKCkpKV+hOzEx0frvjz/+WC+88IJiY2Otbd7e3tZ/G4ahrKwsubiU7Le5Xbt2+vzzz23aoqKiFBISoujoaJvQHR0drYEDBxZpfeXKlSvS9QEAAAC4dXBN9zWEenqqoY+P6UNBg31QUJB18PPzk8Visb4+ePCgfHx8tHbtWoWFhcnd3V0//PCD4uLi1L17dwUGBsrb21uNGzfWxo0bbZabnp6uZ599ViEhIXJ3d1f16tW1bNky6/gDBw6oS5cu8vb2VmBgoPr3729zCv6FCxc0YMAAeXt7Kzg4WK+99tp1tyMyMlJTp07Vvn37ZLFYZLFYFBkZKeny2Qbdu3eXt7e3fH191bt3b504ceKay2rXrp1iY2N1/Phxa9uWLVv03HPPKTo62toWHx+vP//8U+3atZMkHT16VL1795a/v7/KlCmj7t27648//rBOn5WVpbFjx8rf319ly5bVhAkTZBiGzbrzs92VK1e2OcXeYrHof//7nx544AF5enqqRo0a+vLLL23m+fLLL1WjRg15eHioXbt2WrFihSwWi5KTkyVJf/75p7p166bSpUvLy8tLderU0Zo1a663ywEAAAA4AKG7BHruuec0Y8YMxcTEqF69ekpJSVHXrl21adMm7dmzR507d1a3bt2UkJBgnWfAgAH68MMPtWDBAsXExOjNN9+0HjVPTk5W+/btddddd+nnn3/WunXrdOLECfXu3ds6/zPPPKMtW7boiy++0Lfffqvo6Gjt3r37mjX26dNH48aNU506dZSYmKjExET16dNH2dnZ6t69u86cOaMtW7Zow4YN+v3339WnT59rLqtFixZydXVVVFSUJOm3337TxYsXNXjwYJ0+fVrx8fGSLh/99vDwULNmzXTp0iV16tRJPj4++v7777V161Z5e3urc+fOysjIkCS99tprioyM1Ntvv60ffvhBZ86cyXVEvaDbnWPq1Knq3bu3fvnlF3Xt2lX9+vXTmTNnJF3+48CDDz6oHj16aN++fRoyZIgmTZpkM//w4cOVnp6u7777Tvv379err75qc5YDAAAAgFtDyT7v+F/qxRdfVMeOHa2vy5Qpo/r161tfT5s2TZ9//rm+/PJLjRgxQocOHdInn3yiDRs2KDw8XJJUtWpV6/RvvPGG7rrrLr3yyivWtrffflshISE6dOiQKlSooGXLlum9995Thw4dJEkrVqzQ7bfffs0aS5UqJW9vb7m4uCgoKMjavmHDBu3fv1/x8fEKCQmRJL3zzjuqU6eOdu7cqcaNG+dalpeXl+6++25FR0erb9++io6OVsuWLeXu7q7mzZsrOjpaVapUUXR0tJo1ayZ3d3e99957ys7O1v/+9z/rdfLLly+Xv7+/oqOjdc8992jevHmaOHGievbsKenydeLr16+3rjclJaXA250jIiJCffv2lSS98sorWrBggX766Sd17txZb775pmrVqqVZs2ZJkmrVqqUDBw7o5Zdfts6fkJCgXr16qW7durneLwAAAAC3Do50l0CNGjWyeZ2SkqLx48crNDRU/v7+8vb2VkxMjPVI9969e+Xs7Kw2bdrkubx9+/YpKipK3t7e1qF27dqSpLi4OMXFxSkjI0NNmjSxzlOmTBnVqlWrwLXHxMQoJCTEGrgl6Y477pC/v79iYmKuOV/btm2tp5JHR0erbdu2kqQ2bdrYtOecWr5v3z4dOXJEPj4+1m0qU6aM0tLSFBcXp7NnzyoxMdFmm1xcXGz27c1sd7169az/9vLykq+vr06ePClJio2NzfXHhbvvvtvm9ahRo/TSSy+pRYsWmjx5sn755ZcbrhMAAABA0SN0l0BX3yl7/Pjx+vzzz/XKK6/o+++/1969e1W3bl3radSlSpW67vJSUlLUrVs37d2712Y4fPiwWrdubdp2FES7du106NAh/f3334qOjrb+ASEndMfFxeno0aNq3769pMvbFBYWlmubDh06pEceecT0el1dXW1eWywWZWdn53v+xx9/XL///rv69++v/fv3q1GjRnr99dftXSYAAACAm0To/hfYunWrIiIi9MADD6hu3boKCgqyuWFY3bp1lZ2drS1btuQ5f8OGDfXrr7+qcuXKql69us3g5eWlatWqydXVVTt27LDO888//+jQoUPXrcvNzU1ZWVk2baGhoTp69KiOHj1qbfvtt9+UnJysO+6445rLat68udzc3LRo0SKlpaUpLCxMktS4cWOdOnVKb7/9tvU09JxtOnz4sMqXL59rm/z8/OTn56fg4GCbbcrMzNSuXbusrwu73TdSq1Yt/fzzzzZtO3fuzDVdSEiInnrqKa1atUrjxo3T0qVLb2q9AAAAAOyP0P0vUKNGDa1atUp79+7Vvn379Mgjj9gcVa1cubIGDhyoxx57TKtXr1Z8fLyio6P1ySefSLp8064zZ86ob9++2rlzp+Li4rR+/XoNGjRIWVlZ8vb21uDBg/XMM89o8+bNOnDggCIiIuTkdP3uVblyZcXHx2vv3r1KSkpSenq6wsPDVbduXfXr10+7d+/WTz/9pAEDBqhNmza5Tpu/UqlSpdS0aVO9/vrratGihZydnSVdDvZXtuccYe7Xr58CAgLUvXt3ff/999ZtHjVqlP766y9J0ujRozVjxgytXr1aBw8e1LBhw6x3D5dU6O2+kSFDhujgwYN69tlnrdfb59zZPef68zFjxmj9+vWKj4/X7t27FRUVpdDQ0JtaLwAAAAD740Zq1xCTmlpi1jNnzhw99thjat68uQICAvTss8/q3LlzNtMsXrxY//nPfzRs2DCdPn1aFStW1H/+8x9JUoUKFbR161Y9++yzuueee5Senq5KlSqpc+fO1oA5a9Ys62noPj4+GjdunM6ePXvdunr16qVVq1apXbt2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L9WpU0dr1qyxjj9w4IC6dOkib29vBQYGqn///kpKSrKO//TTT1W3bl3rvgkPD9eFCxeuu90AAOQXoRsAgOsoVaqUTTjetGmTYmNjtWHDBn399de6cOGCOnXqpNKlS2vnzp1auXKlNm7caBMac+aLiYlRdHS0PvzwQ61atUpTp061jp8wYYI+++wzrVixQrt371b16tXVqVMnnTlzxmY5zz33nGbMmKGYmBh17NhR48aNU506dZSYmKjExET16dMn1zbkt8aoqCjFxcUpKipKK1asUGRkpDXE5+Xzzz/X6NGjNW7cOB04cEBDhgzRoEGDFBUVJUnauXOnOnfurN69eysxMVHz58/PczmLFy/W8OHD9eSTT2r//v368ssvVb16det4JycnLViwQL/++qtWrFihzZs3a8KECdbxw4cPV3p6ur777jvt379fr776qry9vSVJycnJat++ve666y79/PPPWrdunU6cOKHevXtLunwaft++ffXYY49Z35+ePXvKMIxrbjcAAAViAAAAwzAMY+DAgUb37t0NwzCM7OxsY8OGDYa7u7sxfvx46/jAwEAjPT3dOs9bb71llC5d2khJSbG2ffPNN4aTk5Nx/Phx63xlypQxLly4YJ1m8eLFhre3t5GVlWWkpKQYrq6uxvvvv28dn5GRYVSoUMGYOXOmYRiGERUVZUgyVq9ebVPz5MmTjfr16+faFknG559/XqAaK1WqZGRmZlqneeihh4w+ffpcc381b97ceOKJJ2zaHnroIaNr167W1927dzcGDhx4zWUYhmFUqFDBmDRp0nWnudLKlSuNsmXLWl/XrVvXmDJlSp7TTps2zbjnnnts2o4ePWpIMmJjY41du3YZkow//vgj3+sHAKAgONINAMAVvv76a3l7e8vDw0NdunRRnz59NGXKFOv4unXr2lzHHRMTo/r168vLy8va1qJFC2VnZys2NtbaVr9+fXl6elpfN2vWTCkpKTp69Kji4uJ06dIltWjRwjre1dVVd999t2JiYmzqa9SoUYG3Kb811qlTR87OztbXwcHBOnny5HWXe2XNOcu9uubrOXnypI4dO6YOHTpcc5qNGzeqQ4cOuu222+Tj46P+/fvr9OnTSk1NlSSNGjVKL730klq0aKHJkyfrl19+sc67b98+RUVFydvb2zrUrl1b0uXrzevXr68OHTqobt26euihh7R06VL9888/+a4fAIAbIXQDAHCFdu3aae/evTp8+LAuXryoFStW2ITVK//tCGau39XV1ea1xWJRdna2aeuTLp++fz1//PGH7rvvPtWrV0+fffaZdu3apYULF0qS9bT/xx9/XL///rv69++v/fv3q1GjRnr99dclSSkpKerWrZv27t1rMxw+fFitW7eWs7OzNmzYoLVr1+qOO+7Q66+/rlq1aik+Pt7U7QYA/HsQugEAuIKXl5eqV6+uihUrysXlxg/5CA0N1b59+2xuvLV161Y5OTlZb7QmXT7ievHiRevr7du3y9vbWyEhIdYbkW3dutU6/tKlS9q5c6fuuOOO667fzc3tuncxL0iNBRUaGmpTc85yb1TzlXx8fFS5cmVt2rQpz/G7du1Sdna2XnvtNTVt2lQ1a9bUsWPHck0XEhKip556SqtWrdK4ceO0dOlSSVLDhg3166+/qnLlyqpevbrNkPMHDIvFohYtWmjq1Knas2eP3Nzc9Pnnn+d7GwAAuB5CNwAAN6Ffv37y8PDQwIEDdeDAAUVFRWnkyJHq37+/AgMDrdNlZGRo8ODB+u2337RmzRpNnjxZI0aMkJOTk7y8vDR06FA988wzWrdunX777Tc98cQTSk1N1eDBg6+7/sqVKys+Pl579+5VUlKS0tPTC11jQT3zzDOKjIzU4sWLdfjwYc2ZM0erVq3S+PHjC7ScKVOm6LXXXtOCBQt0+PBh7d6923qkunr16rp06ZJef/11/f7773r33Xe1ZMkSm/nHjBmj9evXKz4+Xrt371ZUVJRCQ0MlXb7J2pkzZ9S3b1/t3LlTcXFxWr9+vQYNGqSsrCzt2LFDr7zyin7++WclJCRo1apVOnXqlHV+AABuFqEbAICb4OnpqfXr1+vMmTNq3LixHnzwQXXo0EFvvPGGzXQdOnRQjRo11Lp1a/Xp00f333+/zbXiM2bMUK9evdS/f381bNhQR44c0fr161W6dOnrrr9Xr17q3Lmz2rVrp3LlyunDDz8sdI0F1aNHD82fP1+zZ89WnTp19Oabb2r58uVq27ZtgZYzcOBAzZs3T4sWLVKdOnV033336fDhw5IuXws/Z84cvfrqq7rzzjv1/vvva/r06TbzZ2Vlafjw4QoNDVXnzp1Vs2ZNLVq0SJJUoUIFbd26VVlZWbrnnntUt25djRkzRv7+/nJycpKvr6++++47de3aVTVr1tTzzz+v1157TV26dLmpfQMAQA6LYfBMDAAAzBQREaHk5GSb52YDAIB/B450AwAAAABgEkI3AAAAAAAm4fRyAAAAAABMwpFuAAAAAABMQugGAAAAAMAkhG4AAAAAAExC6AYAAAAAwCSEbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAAMAkhG4AAAAAAEzy/wDqpmjvy215WgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Import necessary libraries\n", "import pandas as pd\n", @@ -80,6 +113,9 @@ "TRACE_SUCCESS = 0.20\n", "SECONDARY_TRACE_THRESHOLD = 2\n", "\n", + "#Fix randomness\n", + "np.random.seed(123)\n", + "\n", "def simulate_event(m):\n", " \"\"\"\n", " Simulates the infection and tracing process for a series of events.\n", @@ -95,6 +131,7 @@ " - A tuple containing the proportion of infections and the proportion of traced cases\n", " that are attributed to weddings.\n", " \"\"\"\n", + " \n", " # Create DataFrame for people at events with initial infection and traced status\n", " events = ['wedding'] * 200 + ['brunch'] * 800\n", " ppl = pd.DataFrame({\n", @@ -131,7 +168,7 @@ " return p_wedding_infections, p_wedding_traces\n", "\n", "# Run the simulation 1000 times\n", - "results = [simulate_event(m) for m in range(1000)]\n", + "results = [simulate_event(m) for m in range(100)]\n", "props_df = pd.DataFrame(results, columns=[\"Infections\", \"Traces\"])\n", "\n", "# Plotting the results\n", @@ -193,7 +230,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "sampling-env (3.11.13)", "language": "python", "name": "python3" }, @@ -207,7 +244,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.11.13" } }, "nbformat": 4,