{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","metadata":{"id":"gU_3xeecX-1I","executionInfo":{"status":"ok","timestamp":1727445328187,"user_tz":240,"elapsed":4,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}}},"source":["import numpy as np\n","import matplotlib.pyplot as plt"],"execution_count":2,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"W3COj-ZMPVwX"},"source":["## the problem\n","\n","We observe some bacterial mutation times. We would like to use this data to infer whether these bacteria all share a single mutational time constant $\\lambda$ ($H_1$), or if there are two types of bacteria, each with their own distinct mutational time constants $\\lambda_1$ and $\\lambda_2$ ($H_2$).\n","\n","Fortunately, there's a nice framework for model comparison that we went through lecture this week that will let us tackle this problem, by computing the following ratio:\n","\n","$$\\frac{P(H_1 \\mid D)}{P(H_2 \\mid D)} $$\n","\n","If this term is close to 1, then both hypotheses are about equally plausible. If it is much larger than 1, $H_1$ is more likely to underly the data than $H_2$, and so on.\n","\n","Before we get there, let's take a look at the class data and get a feel for what the problem will look like. On the homework you will use a personalized dataset of mutation times."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":449},"id":"4ejj1C6XzJUF","executionInfo":{"status":"ok","timestamp":1727445329472,"user_tz":240,"elapsed":1289,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"27be6741-3822-4a1d-f92a-4c4ba0b8f3a6"},"source":["class_data = np.array([1.2, 2.1, 3.4, 4.1, 7, 11])\n","\n","plt.figure()\n","plt.hist(class_data)\n","plt.xlim(0, 20)\n","plt.xlabel('time (min)')\n","plt.ylabel('mutations')\n","plt.show()"],"execution_count":3,"outputs":[{"output_type":"display_data","data":{"text/plain":[""],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAk8AAAGwCAYAAACw64E/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2t0lEQVR4nO3df1xUdd7//+eAAmqCmspAoaAppim4thJWn3QlkcubK5WmXl6LsmrXurqbkZVshVl7LeWWmZurbYnobvnryuy26WJGgrmirj/Ysi0vNRRNBtSCEVDwgvP9o69zNTEgZwSGH4/77XZu67zP67zP+83ZmXl25swZi2EYhgAAAFAvXp4eAAAAQEtCeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmtPP0AJqj6upqnTt3Tp07d5bFYvH0cAAAQD0YhqFLly4pODhYXl6Nd36I8OTCuXPnFBIS4ulhAAAAN5w5c0a33npro/VPeHKhc+fOkr774/v7+3t4NAAAoD7sdrtCQkIc7+ONhfDkwrWP6vz9/QlPAAC0MI19yQ0XjAMAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABggkfDU2pqqn784x+rc+fO6tmzp+Lj43Xs2LHrbrd582YNGDBAfn5+Gjx4sLZv3+603jAMpaSkKCgoSB06dFBMTIyOHz/eWNMAAABtiEfDU3Z2tubOnat9+/Zp586dunr1qsaMGaOysrJat9m7d6+mTp2qmTNn6siRI4qPj1d8fLyOHj3qqFmyZImWL1+uVatWaf/+/erUqZNiY2N15cqVppgWAABoxSyGYRieHsQ158+fV8+ePZWdna3/9//+n8uayZMnq6ysTB988IGj7a677lJkZKRWrVolwzAUHBysxx9/XAsWLJAklZSUKDAwUOnp6ZoyZcp1x2G32xUQEKCSkhL5+/s3zOQAAECjaqr372Z1zVNJSYkkqVu3brXW5OTkKCYmxqktNjZWOTk5kqS8vDzZbDanmoCAAEVFRTlqfqiiokJ2u91pAQAAcKWdpwdwTXV1tebPn6+7775bd9xxR611NptNgYGBTm2BgYGy2WyO9dfaaqv5odTUVC1evPhGht9gQhdua9T+T704rlH7b+zxS40/BwAA6tJszjzNnTtXR48e1YYNG5p838nJySopKXEsZ86cafIxAACAlqFZnHmaN2+ePvjgA+3evVu33nprnbVWq1WFhYVObYWFhbJarY7119qCgoKcaiIjI1326evrK19f3xuYAQAAaCs8eubJMAzNmzdP7733nj7++GOFhYVdd5vo6GhlZmY6te3cuVPR0dGSpLCwMFmtVqcau92u/fv3O2oAAADc5dEzT3PnztU777yj999/X507d3ZckxQQEKAOHTpIkhISEnTLLbcoNTVVkvToo4/qvvvu0yuvvKJx48Zpw4YNOnjwoP70pz9JkiwWi+bPn6/f/va36tevn8LCwvTss88qODhY8fHxHpknAABoPTwanlauXClJGjlypFP7mjVrNGPGDElSfn6+vLz+7wTZiBEj9M477+iZZ57Rb37zG/Xr109bt251usj8ySefVFlZmR555BEVFxfrnnvuUUZGhvz8/Bp9TgAAoHVrVvd5ai48eZ8nvm13fXzbDgDgSpu8zxMAAEBzR3gCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmODR8LR7926NHz9ewcHBslgs2rp1a531M2bMkMViqbEMGjTIUfPcc8/VWD9gwIBGngkAAGgrPBqeysrKFBERoRUrVtSr/rXXXlNBQYFjOXPmjLp166ZJkyY51Q0aNMipbs+ePY0xfAAA0Aa18+TO4+LiFBcXV+/6gIAABQQEOB5v3bpV3377rRITE53q2rVrJ6vV2mDjBAAAuKZFX/O0evVqxcTEqHfv3k7tx48fV3BwsPr06aNp06YpPz+/zn4qKipkt9udFgAAAFdabHg6d+6c/va3v2nWrFlO7VFRUUpPT1dGRoZWrlypvLw83Xvvvbp06VKtfaWmpjrOagUEBCgkJKSxhw8AAFqoFhue1q5dqy5duig+Pt6pPS4uTpMmTdKQIUMUGxur7du3q7i4WJs2baq1r+TkZJWUlDiWM2fONPLoAQBAS+XRa57cZRiG0tLS9LOf/Uw+Pj511nbp0kX9+/fXiRMnaq3x9fWVr69vQw8TAAC0Qi3yzFN2drZOnDihmTNnXre2tLRUJ0+eVFBQUBOMDAAAtHYeDU+lpaXKzc1Vbm6uJCkvL0+5ubmOC7yTk5OVkJBQY7vVq1crKipKd9xxR411CxYsUHZ2tk6dOqW9e/fqgQcekLe3t6ZOndqocwEAAG2DRz+2O3jwoEaNGuV4nJSUJEmaPn260tPTVVBQUOObciUlJXr33Xf12muvuezz7Nmzmjp1qi5evKgePXronnvu0b59+9SjR4/GmwgAAGgzPBqeRo4cKcMwal2fnp5eoy0gIEDl5eW1brNhw4aGGBoAAIBLLfKaJwAAAE8hPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABM8Gh42r17t8aPH6/g4GBZLBZt3bq1zvqsrCxZLJYai81mc6pbsWKFQkND5efnp6ioKB04cKARZwEAANoSj4ansrIyRUREaMWKFaa2O3bsmAoKChxLz549Hes2btyopKQkLVq0SIcPH1ZERIRiY2NVVFTU0MMHAABtUDtP7jwuLk5xcXGmt+vZs6e6dOnict3SpUs1e/ZsJSYmSpJWrVqlbdu2KS0tTQsXLryR4QIAALTMa54iIyMVFBSk+++/X3//+98d7ZWVlTp06JBiYmIcbV5eXoqJiVFOTk6t/VVUVMhutzstAAAArrSo8BQUFKRVq1bp3Xff1bvvvquQkBCNHDlShw8fliRduHBBVVVVCgwMdNouMDCwxnVR35eamqqAgADHEhIS0qjzAAAALZdHP7YzKzw8XOHh4Y7HI0aM0MmTJ/Xqq6/qz3/+s9v9JicnKykpyfHYbrcToAAAgEstKjy5Mnz4cO3Zs0eS1L17d3l7e6uwsNCpprCwUFartdY+fH195evr26jjBAAArUOL+tjOldzcXAUFBUmSfHx8NGzYMGVmZjrWV1dXKzMzU9HR0Z4aIgAAaEU8euaptLRUJ06ccDzOy8tTbm6uunXrpl69eik5OVlff/211q1bJ0latmyZwsLCNGjQIF25ckVvvfWWPv74Y3344YeOPpKSkjR9+nTdeeedGj58uJYtW6aysjLHt+8AAABuhEfD08GDBzVq1CjH42vXHU2fPl3p6ekqKChQfn6+Y31lZaUef/xxff311+rYsaOGDBmijz76yKmPyZMn6/z580pJSZHNZlNkZKQyMjJqXEQOAADgDothGIanB9Hc2O12BQQEqKSkRP7+/k2679CF2xq1/1MvjmvU/ht7/FLjzwEA0DI11ft3i7/mCQAAoCkRngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmeDQ87d69W+PHj1dwcLAsFou2bt1aZ/2WLVt0//33q0ePHvL391d0dLR27NjhVPPcc8/JYrE4LQMGDGjEWQAAgLbEo+GprKxMERERWrFiRb3qd+/erfvvv1/bt2/XoUOHNGrUKI0fP15Hjhxxqhs0aJAKCgocy549expj+AAAoA1q58mdx8XFKS4urt71y5Ytc3r8u9/9Tu+//77++te/aujQoY72du3ayWq1NtQwAQAAHFr0NU/V1dW6dOmSunXr5tR+/PhxBQcHq0+fPpo2bZry8/Pr7KeiokJ2u91pAQAAcKVFh6eXX35ZpaWlevjhhx1tUVFRSk9PV0ZGhlauXKm8vDzde++9unTpUq39pKamKiAgwLGEhIQ0xfABAEAL1GLD0zvvvKPFixdr06ZN6tmzp6M9Li5OkyZN0pAhQxQbG6vt27eruLhYmzZtqrWv5ORklZSUOJYzZ840xRQAAEAL5NFrnty1YcMGzZo1S5s3b1ZMTEydtV26dFH//v114sSJWmt8fX3l6+vb0MMEAACtUIs787R+/XolJiZq/fr1Gjdu3HXrS0tLdfLkSQUFBTXB6AAAQGvnVni6fPmyysvLHY9Pnz6tZcuW6cMPPzTVT2lpqXJzc5WbmytJysvLU25uruMC7+TkZCUkJDjq33nnHSUkJOiVV15RVFSUbDabbDabSkpKHDULFixQdna2Tp06pb179+qBBx6Qt7e3pk6d6s5UAQAAnLgVniZMmKB169ZJkoqLixUVFaVXXnlFEyZM0MqVK+vdz8GDBzV06FDHbQaSkpI0dOhQpaSkSJIKCgqcvin3pz/9Sf/7v/+ruXPnKigoyLE8+uijjpqzZ89q6tSpCg8P18MPP6ybb75Z+/btU48ePdyZKgAAgBO3rnk6fPiwXn31VUnSf//3fyswMFBHjhzRu+++q5SUFM2ZM6de/YwcOVKGYdS6Pj093elxVlbWdfvcsGFDvfYNAADgDrfOPJWXl6tz586SpA8//FAPPvigvLy8dNddd+n06dMNOkAAAIDmxK3wdNttt2nr1q06c+aMduzYoTFjxkiSioqK5O/v36ADBAAAaE7cCk8pKSlasGCBQkNDFRUVpejoaEnfnYX6/s+kAAAAtDZuXfM0ceJE3XPPPSooKFBERISjffTo0XrggQcabHAAAADNjds3ybRarTV+fHf48OE3PCAAAIDmzK3wVFZWphdffFGZmZkqKipSdXW10/qvvvqqQQYHAADQ3LgVnmbNmqXs7Gz97Gc/U1BQkCwWS0OPCwAAoFlyKzz97W9/07Zt23T33Xc39HgAAACaNbe+bde1a1d169atoccCAADQ7LkVnl544QWlpKQ4/b4dAABAW+DWx3avvPKKTp48qcDAQIWGhqp9+/ZO6w8fPtwggwMAAGhu3ApP8fHxDTwMAACAlsGt8LRo0aKGHgcAAECL4PZNMiXp0KFD+uKLLyRJgwYN4qdZAABAq+dWeCoqKtKUKVOUlZWlLl26SJKKi4s1atQobdiwQT169GjIMQIAADQbbn3b7le/+pUuXbqkzz//XN98842++eYbHT16VHa7Xb/+9a8beowAAADNhltnnjIyMvTRRx/p9ttvd7QNHDhQK1as0JgxYxpscAAAAM2NW2eeqqura9yeQJLat29f43fuAAAAWhO3wtNPfvITPfroozp37pyj7euvv9Zjjz2m0aNHN9jgAAAAmhu3wtPrr78uu92u0NBQ9e3bV3379lVYWJjsdrv+8Ic/NPQYAQAAmg23rnkKCQnR4cOH9dFHH+nLL7+UJN1+++2KiYlp0MEBAAA0N27f58lisej+++/X/fff35DjAQAAaNbqHZ6WL1+uRx55RH5+flq+fHmdtdyuAAAAtFb1Dk+vvvqqpk2bJj8/P7366qu11lksFsITAABoteodnvLy8lz+GwAAoC1x69t2zz//vMrLy2u0X758Wc8///wNDwoAAKC5cis8LV68WKWlpTXay8vLtXjx4hseFAAAQHPlVngyDEMWi6VG+z//+U9169bthgcFAADQXJm6VUHXrl1lsVhksVjUv39/pwBVVVWl0tJS/eIXv2jwQQIAADQXpsLTsmXLZBiGfv7zn2vx4sUKCAhwrPPx8VFoaKiio6MbfJAAAADNhanwNH36dElSWFiYRowY4fLHgQEAAFozt+4wft999zn+feXKFVVWVjqt9/f3v7FRAQAANFNuXTBeXl6uefPmqWfPnurUqZO6du3qtAAAALRWboWnJ554Qh9//LFWrlwpX19fvfXWW1q8eLGCg4O1bt26eveze/dujR8/XsHBwbJYLNq6det1t8nKytKPfvQj+fr66rbbblN6enqNmhUrVig0NFR+fn6KiorSgQMHTMwOAACgdm6Fp7/+9a/64x//qIceekjt2rXTvffeq2eeeUa/+93v9Pbbb9e7n7KyMkVERGjFihX1qs/Ly9O4ceM0atQo5ebmav78+Zo1a5Z27NjhqNm4caOSkpK0aNEiHT58WBEREYqNjVVRUZHpeQIAAPyQW9c8ffPNN+rTp4+k765v+uabbyRJ99xzj+bMmVPvfuLi4hQXF1fv+lWrViksLEyvvPKKJOn222/Xnj179Oqrryo2NlaStHTpUs2ePVuJiYmObbZt26a0tDQtXLiw3vsCAABwxa0zT3369HH8vt2AAQO0adMmSd+dkerSpUuDDe6HcnJyFBMT49QWGxurnJwcSVJlZaUOHTrkVOPl5aWYmBhHjSsVFRWy2+1OCwAAgCtunXlKTEzUP//5T913331auHChxo8fr9dff11Xr17V0qVLG3qMDjabTYGBgU5tgYGBstvtunz5sr799ltVVVW5rPnyyy9r7Tc1NZWflUGTCV24rdH3cerFcY2+j5ausY8DxwBovdwKT4899pjj3zExMfryyy916NAh3XbbbRoyZEiDDa6pJCcnKykpyfHYbrcrJCTEgyMCAADNlVsf261bt04VFRWOx71799aDDz6oAQMGmPq2nVlWq1WFhYVObYWFhfL391eHDh3UvXt3eXt7u6yxWq219uvr6yt/f3+nBQAAwBW3wlNiYqJKSkpqtF+6dMlxoXZjiI6OVmZmplPbzp07HT8J4+Pjo2HDhjnVVFdXKzMzk5+NAQAADcKt8GQYhtOPAl9z9uxZp9+7u57S0lLl5uYqNzdX0ne3IsjNzVV+fr6k7z5OS0hIcNT/4he/0FdffaUnn3xSX375pf74xz9q06ZNTh8jJiUl6c0339TatWv1xRdfaM6cOSorK2vUUAcAANoOU9c8DR06VBaLRRaLRaNHj1a7dv+3eVVVlfLy8jR27Nh693fw4EGNGjXK8fjadUfTp09Xenq6CgoKHEFK+u439bZt26bHHntMr732mm699Va99dZbjtsUSNLkyZN1/vx5paSkyGazKTIyUhkZGTUuIgcAAHCHqfAUHx8vScrNzVVsbKxuuukmxzofHx+FhobqoYceqnd/I0eOlGEYta53dffwkSNH6siRI3X2O2/ePM2bN6/e4wAAAKgvU+Fp0aJFkqTQ0FBNnjxZfn5+jTIoAACA5sqtWxVMnz69occBAADQIrgVnry8vFxeMH5NVVWV2wMCAABoztwKT1u2bHEKT1evXtWRI0e0du1a7tQNAABaNbfC07ULx79v4sSJGjRokDZu3KiZM2fe6LgAAACaJbfu81Sbu+66q8ZNLAEAAFqTBgtPly9f1vLly3XLLbc0VJcAAADNjlsf23Xt2tXpmifDMHTp0iV16NBBb7/9doMNDgAAoLlxKzy9+uqrTuHJy8tLPXr0UFRUlLp27dpggwMAAGhu3ApPM2bM0JUrV/Tpp5+qqKhI1dXVqqys1CeffCJJ+ulPf9qggwQAAGgu3ApPGRkZSkhI0MWLF2v8vIrFYuE+TwAAoNVy64LxX/3qV5o0aZLOnTun6upqp4XgBAAAWjO3wlNhYaGSkpIUGBjY0OMBAABo1twKTxMnTlRWVlYDDwUAAKD5c+uap9dff12TJk3SJ598osGDB6t9+/ZO63/96183yOAAAACaG7fC0/r16/Xhhx/Kz89PWVlZTrctsFgshCcAANBquRWenn76aS1evFgLFy6Ul1eD/sILAABAs+ZW8qmsrNTkyZMJTgAAoM1xK/1Mnz5dGzdubOixAAAANHtufWxXVVWlJUuWaMeOHRoyZEiNC8aXLl3aIIMDAABobtwKT5999pmGDh0qSTp69KjTuu9fPA4AANDauBWedu3a1dDjAAAAaBG44hsAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAE5pFeFqxYoVCQ0Pl5+enqKgoHThwoNbakSNHymKx1FjGjRvnqJkxY0aN9WPHjm2KqQAAgFbOrR8GbkgbN25UUlKSVq1apaioKC1btkyxsbE6duyYevbsWaN+y5YtqqysdDy+ePGiIiIiNGnSJKe6sWPHas2aNY7Hvr6+jTcJAADQZnj8zNPSpUs1e/ZsJSYmauDAgVq1apU6duyotLQ0l/XdunWT1Wp1LDt37lTHjh1rhCdfX1+nuq5duzbFdAAAQCvn0fBUWVmpQ4cOKSYmxtHm5eWlmJgY5eTk1KuP1atXa8qUKerUqZNTe1ZWlnr27Knw8HDNmTNHFy9erLWPiooK2e12pwUAAMAVj4anCxcuqKqqSoGBgU7tgYGBstls193+wIEDOnr0qGbNmuXUPnbsWK1bt06ZmZl66aWXlJ2drbi4OFVVVbnsJzU1VQEBAY4lJCTE/UkBAIBWzePXPN2I1atXa/DgwRo+fLhT+5QpUxz/Hjx4sIYMGaK+ffsqKytLo0ePrtFPcnKykpKSHI/tdjsBCgAAuOTRM0/du3eXt7e3CgsLndoLCwtltVrr3LasrEwbNmzQzJkzr7ufPn36qHv37jpx4oTL9b6+vvL393daAAAAXPFoePLx8dGwYcOUmZnpaKuurlZmZqaio6Pr3Hbz5s2qqKjQf/zHf1x3P2fPntXFixcVFBR0w2MGAABtm8e/bZeUlKQ333xTa9eu1RdffKE5c+aorKxMiYmJkqSEhAQlJyfX2G716tWKj4/XzTff7NReWlqqJ554Qvv27dOpU6eUmZmpCRMm6LbbblNsbGyTzAkAALReHr/mafLkyTp//rxSUlJks9kUGRmpjIwMx0Xk+fn58vJyznjHjh3Tnj179OGHH9boz9vbW59++qnWrl2r4uJiBQcHa8yYMXrhhRe41xMAALhhHg9PkjRv3jzNmzfP5bqsrKwabeHh4TIMw2V9hw4dtGPHjoYcHgAAgIPHP7YDAABoSQhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABOaRXhasWKFQkND5efnp6ioKB04cKDW2vT0dFksFqfFz8/PqcYwDKWkpCgoKEgdOnRQTEyMjh8/3tjTAAAAbYDHw9PGjRuVlJSkRYsW6fDhw4qIiFBsbKyKiopq3cbf318FBQWO5fTp007rlyxZouXLl2vVqlXav3+/OnXqpNjYWF25cqWxpwMAAFo5j4enpUuXavbs2UpMTNTAgQO1atUqdezYUWlpabVuY7FYZLVaHUtgYKBjnWEYWrZsmZ555hlNmDBBQ4YM0bp163Tu3Dlt3bq1CWYEAABaM4+Gp8rKSh06dEgxMTGONi8vL8XExCgnJ6fW7UpLS9W7d2+FhIRowoQJ+vzzzx3r8vLyZLPZnPoMCAhQVFRUrX1WVFTIbrc7LQAAAK54NDxduHBBVVVVTmeOJCkwMFA2m83lNuHh4UpLS9P777+vv/zlL6qurtaIESN09uxZSXJsZ6bP1NRUBQQEOJaQkJAbnRoAAGilPP6xnVnR0dFKSEhQZGSk7rvvPm3ZskU9evTQG2+84XafycnJKikpcSxnzpxpwBEDAIDWxKPhqXv37vL29lZhYaFTe2FhoaxWa736aN++vYYOHaoTJ05IkmM7M336+vrK39/faQEAAHDFo+HJx8dHw4YNU2ZmpqOturpamZmZio6OrlcfVVVV+uyzzxQUFCRJCgsLk9VqderTbrdr//799e4TAACgNu08PYCkpCRNnz5dd955p4YPH65ly5aprKxMiYmJkqSEhATdcsstSk1NlSQ9//zzuuuuu3TbbbepuLhYv//973X69GnNmjVL0nffxJs/f75++9vfql+/fgoLC9Ozzz6r4OBgxcfHe2qaAACglfB4eJo8ebLOnz+vlJQU2Ww2RUZGKiMjw3HBd35+vry8/u8E2bfffqvZs2fLZrOpa9euGjZsmPbu3auBAwc6ap588kmVlZXpkUceUXFxse655x5lZGTUuJkmAACAWRbDMAxPD6K5sdvtCggIUElJSZNf/xS6cFuj9n/qxXGN2n9jj19q/Dk0Nv5GzUNLf64BqKmp3r9b3LftAAAAPInwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADChWYSnFStWKDQ0VH5+foqKitKBAwdqrX3zzTd17733qmvXruratatiYmJq1M+YMUMWi8VpGTt2bGNPAwAAtAEeD08bN25UUlKSFi1apMOHDysiIkKxsbEqKipyWZ+VlaWpU6dq165dysnJUUhIiMaMGaOvv/7aqW7s2LEqKChwLOvXr2+K6QAAgFbO4+Fp6dKlmj17thITEzVw4ECtWrVKHTt2VFpamsv6t99+W7/85S8VGRmpAQMG6K233lJ1dbUyMzOd6nx9fWW1Wh1L165dm2I6AACglfNoeKqsrNShQ4cUExPjaPPy8lJMTIxycnLq1Ud5ebmuXr2qbt26ObVnZWWpZ8+eCg8P15w5c3Tx4sVa+6ioqJDdbndaAAAAXPFoeLpw4YKqqqoUGBjo1B4YGCibzVavPp566ikFBwc7BbCxY8dq3bp1yszM1EsvvaTs7GzFxcWpqqrKZR+pqakKCAhwLCEhIe5PCgAAtGrtPD2AG/Hiiy9qw4YNysrKkp+fn6N9ypQpjn8PHjxYQ4YMUd++fZWVlaXRo0fX6Cc5OVlJSUmOx3a7nQAFAABc8uiZp+7du8vb21uFhYVO7YWFhbJarXVu+/LLL+vFF1/Uhx9+qCFDhtRZ26dPH3Xv3l0nTpxwud7X11f+/v5OCwAAgCseDU8+Pj4aNmyY08Xe1y7+jo6OrnW7JUuW6IUXXlBGRobuvPPO6+7n7NmzunjxooKCghpk3AAAoO3y+LftkpKS9Oabb2rt2rX64osvNGfOHJWVlSkxMVGSlJCQoOTkZEf9Sy+9pGeffVZpaWkKDQ2VzWaTzWZTaWmpJKm0tFRPPPGE9u3bp1OnTikzM1MTJkzQbbfdptjYWI/MEQAAtB4ev+Zp8uTJOn/+vFJSUmSz2RQZGamMjAzHReT5+fny8vq/jLdy5UpVVlZq4sSJTv0sWrRIzz33nLy9vfXpp59q7dq1Ki4uVnBwsMaMGaMXXnhBvr6+TTo3AADQ+ng8PEnSvHnzNG/ePJfrsrKynB6fOnWqzr46dOigHTt2NNDIAAAAnHn8YzsAAICWhPAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMIHwBAAAYALhCQAAwATCEwAAgAmEJwAAABMITwAAACYQngAAAEwgPAEAAJhAeAIAADCB8AQAAGAC4QkAAMAEwhMAAIAJhCcAAAATCE8AAAAmEJ4AAABMIDwBAACYQHgCAAAwgfAEAABgAuEJAADABMITAACACYQnAAAAEwhPAAAAJhCeAAAATCA8AQAAmEB4AgAAMKFZhKcVK1YoNDRUfn5+ioqK0oEDB+qs37x5swYMGCA/Pz8NHjxY27dvd1pvGIZSUlIUFBSkDh06KCYmRsePH2/MKQAAgDbC4+Fp48aNSkpK0qJFi3T48GFFREQoNjZWRUVFLuv37t2rqVOnaubMmTpy5Iji4+MVHx+vo0ePOmqWLFmi5cuXa9WqVdq/f786deqk2NhYXblypammBQAAWimPh6elS5dq9uzZSkxM1MCBA7Vq1Sp17NhRaWlpLutfe+01jR07Vk888YRuv/12vfDCC/rRj36k119/XdJ3Z52WLVumZ555RhMmTNCQIUO0bt06nTt3Tlu3bm3CmQEAgNaonSd3XllZqUOHDik5OdnR5uXlpZiYGOXk5LjcJicnR0lJSU5tsbGxjmCUl5cnm82mmJgYx/qAgABFRUUpJydHU6ZMqdFnRUWFKioqHI9LSkokSXa73e25uau6orxR+2/sOTX2+CXPHJeGxN+oeWjpzzUANV173hmG0aj78Wh4unDhgqqqqhQYGOjUHhgYqC+//NLlNjabzWW9zWZzrL/WVlvND6Wmpmrx4sU12kNCQuo3kRYkYJmnR3DjWsMcGht/I8/jGACec/HiRQUEBDRa/x4NT81FcnKy09ms4uJi9e7dW/n5+Y36x29u7Ha7QkJCdObMGfn7+3t6OE2GeTPvtoB5M++2oKSkRL169VK3bt0adT8eDU/du3eXt7e3CgsLndoLCwtltVpdbmO1Wuusv/a/hYWFCgoKcqqJjIx02aevr698fX1rtAcEBLSp/9Nd4+/vz7zbEObdtjDvtqWtztvLq3Ev6fboBeM+Pj4aNmyYMjMzHW3V1dXKzMxUdHS0y22io6Od6iVp586djvqwsDBZrVanGrvdrv3799faJwAAQH15/GO7pKQkTZ8+XXfeeaeGDx+uZcuWqaysTImJiZKkhIQE3XLLLUpNTZUkPfroo7rvvvv0yiuvaNy4cdqwYYMOHjyoP/3pT5Iki8Wi+fPn67e//a369eunsLAwPfvsswoODlZ8fLynpgkAAFoJj4enyZMn6/z580pJSZHNZlNkZKQyMjIcF3zn5+c7nX4bMWKE3nnnHT3zzDP6zW9+o379+mnr1q264447HDVPPvmkysrK9Mgjj6i4uFj33HOPMjIy5OfnV68x+fr6atGiRS4/ymvNmDfzbguYN/NuC5h3487bYjT29/kAAABaEY/fJBMAAKAlITwBAACYQHgCAAAwgfAEAABgQpsNTytWrFBoaKj8/PwUFRWlAwcO1Fm/efNmDRgwQH5+fho8eLC2b9/eRCNtGKmpqfrxj3+szp07q2fPnoqPj9exY8fq3CY9PV0Wi8Vpqe83FpuL5557rsYcBgwYUOc2Lf1YS1JoaGiNeVssFs2dO9dlfUs91rt379b48eMVHBwsi8VS48e/DcNQSkqKgoKC1KFDB8XExOj48ePX7dfs60NTq2veV69e1VNPPaXBgwerU6dOCg4OVkJCgs6dO1dnn+48V5ra9Y73jBkzasxh7Nix1+23JR9vSS6f6xaLRb///e9r7bMlHO/6vG9duXJFc+fO1c0336ybbrpJDz30UI0baf+Qu68L39cmw9PGjRuVlJSkRYsW6fDhw4qIiFBsbKyKiopc1u/du1dTp07VzJkzdeTIEcXHxys+Pl5Hjx5t4pG7Lzs7W3PnztW+ffu0c+dOXb16VWPGjFFZWVmd2/n7+6ugoMCxnD59uolG3HAGDRrkNIc9e/bUWtsajrUk/eMf/3Ca886dOyVJkyZNqnWblnisy8rKFBERoRUrVrhcv2TJEi1fvlyrVq3S/v371alTJ8XGxurKlSu19mn29cET6pp3eXm5Dh8+rGeffVaHDx/Wli1bdOzYMf30pz+9br9mniuecL3jLUljx451msP69evr7LOlH29JTvMtKChQWlqaLBaLHnrooTr7be7Huz7vW4899pj++te/avPmzcrOzta5c+f04IMP1tmvO68LNRht0PDhw425c+c6HldVVRnBwcFGamqqy/qHH37YGDdunFNbVFSU8Z//+Z+NOs7GVFRUZEgysrOza61Zs2aNERAQ0HSDagSLFi0yIiIi6l3fGo+1YRjGo48+avTt29eorq52ub41HGtJxnvvved4XF1dbVitVuP3v/+9o624uNjw9fU11q9fX2s/Zl8fPO2H83blwIEDhiTj9OnTtdaYfa54mqt5T58+3ZgwYYKpflrj8Z4wYYLxk5/8pM6alna8DaPm+1ZxcbHRvn17Y/PmzY6aL774wpBk5OTkuOzD3deFH2pzZ54qKyt16NAhxcTEONq8vLwUExOjnJwcl9vk5OQ41UtSbGxsrfUtQUlJiSRd98cTS0tL1bt3b4WEhGjChAn6/PPPm2J4Der48eMKDg5Wnz59NG3aNOXn59da2xqPdWVlpf7yl7/o5z//uSwWS611reFYf19eXp5sNpvT8QwICFBUVFStx9Od14eWoKSkRBaLRV26dKmzzsxzpbnKyspSz549FR4erjlz5ujixYu11rbG411YWKht27Zp5syZ161tacf7h+9bhw4d0tWrV52O34ABA9SrV69aj587rwuutLnwdOHCBVVVVTnuYH5NYGCgbDaby21sNpup+uauurpa8+fP19133+10Z/YfCg8PV1pamt5//3395S9/UXV1tUaMGKGzZ8824WhvTFRUlNLT05WRkaGVK1cqLy9P9957ry5duuSyvrUda0naunWriouLNWPGjFprWsOx/qFrx8zM8XTn9aG5u3Llip566ilNnTq1zh+INftcaY7Gjh2rdevWKTMzUy+99JKys7MVFxenqqoql/Wt8XivXbtWnTt3vu5HVy3teLt637LZbPLx8anxHwXXez+/VlPfbVzx+M+zoOnNnTtXR48eve7n29HR0U4/pjxixAjdfvvteuONN/TCCy809jAbRFxcnOPfQ4YMUVRUlHr37q1NmzbV67/MWoPVq1crLi5OwcHBtda0hmONmq5evaqHH35YhmFo5cqVdda2hufKlClTHP8ePHiwhgwZor59+yorK0ujR4/24MiaTlpamqZNm3bdL3y0tONd3/etptLmzjx1795d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\n"},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"LBbXdnWUBKbK"},"source":["In this problem we assume that the probability that a bacterium mutates follows an exponential decay, which is parameterized by a mutation rate $\\lambda$, i.e.\n","\n","$$P(\\mathrm{observing~mutation~at~}t \\mid \\lambda) \\propto e^{-t/\\lambda}$$\n","\n","Let's just plot this for different $\\lambda$'s to get a sense.\n","\n","If we overlaid the data, what would you guess $\\lambda$ is, roughly?"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"qhnL_9NJXLju","executionInfo":{"status":"ok","timestamp":1727445838578,"user_tz":240,"elapsed":706,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"70489862-4acf-41c1-91d3-b3081e644e2c"},"source":["ts = np.linspace(0, 25, 100)\n","lams = [0.05, 2,10, 20, 80]\n","fig, ax1 = plt.subplots()\n","for lam in lams:\n"," ax1.plot(ts, np.exp(-ts/lam), label=r'$\\lambda = $'+f'{lam}')\n","\n","ax2 = ax1.twinx()\n","ax2.hist(class_data, density=True, color='k', label='class data')\n","ax1.legend(loc='upper left', bbox_to_anchor=(1.03, 1), borderaxespad=0)\n","ax1.set_xlabel('$t$')\n","plt.title('$\\exp(-t/\\lambda)$')\n","ax1.set_ylim(0, 1)\n","ax2.set_yticks([])\n","plt.show()"],"execution_count":15,"outputs":[{"output_type":"display_data","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"wlSy4RamM34d"},"source":["Back to the problem. We will be comparing the evidence for $H_1$ to the evidence for $H_2$:\n","\n","$$\\frac{P(H_1 \\mid D)}{P(H_2 \\mid D)} = \\frac{P(D \\mid H_1)P(H_1)}{P(D \\mid H_2)P(H_2)} $$\n","\n","If we assume a uniform prior over hypotheses, $P(H_1) = P(H_2)$, then\n","\n","$$\\begin{aligned}\n","\\frac{P(H_1 \\mid D)}{P(H_2 \\mid D)} &= \\frac{P(D \\mid H_1)}{P(D \\mid H_2)} \\\\\n","&= \\frac{\\int_\\lambda P(D \\mid \\lambda, H_1) P(\\lambda \\mid H_1) d\\lambda}{ \\int_{\\lambda_1} \\int_{\\lambda_2} P(D \\mid \\lambda_1, \\lambda_2, H_2) P(\\lambda_1, \\lambda_2 \\mid H_2) d\\lambda_1 d\\lambda_2 }\n","\\end{aligned}$$\n","\n","In this second step, we are marginalizing the numerator over the possible values of $\\lambda$, and the denominator by the possible values of $\\lambda_1$ and $\\lambda_2$.\n","\n","Now let's go through the numerator, which represents the evidence for $H_1$, and the denominator, the evidence for $H_2$ separately.\n","\n","## $H_1$: One mutation time constant $\\lambda$\n","\n","For a single bacterium, the probability for a bacterium to wait time $t$ before mutating follows an exponential decay:\n","\n","$$P(t \\mid \\lambda, H_1) \\propto e^{-t/\\lambda} = c e^{-t/\\lambda} $$\n","\n","To get a formal probability (and not just proportionality) that properly sums to 1 over all times (we consider a fixed interval $t_-$ to $t_+$), let's figure out what that normalization term $c$ must be.\n","\n","$$\\int_{t_-}^{t_+} P(t \\mid \\lambda, H_1) = 1 \\implies \\int_{t_-}^{t_+} ce^{-t/\\lambda} = 1 \\implies c = \\frac{1}{\\int_{t_-}^{t_+} e^{-t/\\lambda} dt}$$\n","\n","So, for a single bacterium:\n","\n","$$\\begin{aligned}\n","P(t \\mid \\lambda, H_1) &= \\frac{e^{-t/\\lambda}}{\\int_{t_-}^{t_+} e^{-t/\\lambda} dt} \\\\\n","&= \\frac{e^{-t/\\lambda}}{Z(\\lambda)}\n","\\end{aligned}$$\n","\n","\n","We'll call that denominator $Z(\\lambda)$, as seen in class. It is a function of $\\lambda$:\n","\n","$$\\begin{aligned}\n","Z(\\lambda) &= \\int_{t_-}^{t_+} e^{-t/\\lambda} dt \\\\\n","&= -\\lambda \\big(e^{-t_+/\\lambda} - e^{-t_-/\\lambda} \\big) \\\\\n","&= \\lambda \\big(e^{-t_-/\\lambda} - e^{-t_+/\\lambda} \\big)\n","\\end{aligned}$$\n","\n","\n","\n","The data we have consists of multiple observed mutation times. We thus need the joint probability over our individual data points:\n","$$\\begin{aligned}\n","P(D\\mid \\lambda, H_1) &= \\prod_{i=1}^N P(t_i \\mid \\lambda, H_1) \\\\\n","&= \\prod_{i=1}^N \\frac{e^{-t_i/\\lambda}}{Z(\\lambda)} \\\\\n","&= \\frac{e^{-\\sum_i t_i/\\lambda}}{[Z(\\lambda)]^N} \\\\\n","\\end{aligned}$$\n","\n","We're almost there for the numerator! Now we need to specify $P(\\lambda \\mid H_1)$.\n","\n","We ask you to assume a uniform prior for $\\lambda$ within a (specified by the homework) interval, $\\lambda_-$ to $\\lambda_+$:\n","\n","$$\n","P(\\lambda\\mid H_1) = \\left\\{\n"," \\begin{array}{ll}\n"," \\frac{1}{\\lambda^{+}-\\lambda^{-}} = \\frac{1}{\\sigma} & \\lambda^{-}\\leq\\lambda\\leq\\lambda^{+}\\\\\n"," 0 & \\mbox{otherwise}\n"," \\end{array}\n"," \\right.\n","$$\n","\n","So,\n","$$\n","\\begin{aligned}\n"," P(D\\mid H_1)\n"," &= \\int_{\\lambda} P(D\\mid \\lambda, H_1) P(\\lambda\\mid H_1)\\, d\\lambda\\\\\n"," &= \\int_{\\lambda^-}^{\\lambda^+} \\frac{e^{-\\sum_i t_i/\\lambda}}{Z^N(\\lambda)} \\frac{1}{\\lambda^{+}-\\lambda^{-}}\\, d\\lambda\\\\\n"," &= \\frac{1}{\\sigma}\\int_{\\lambda^-}^{\\lambda^+} \\frac{e^{-\\sum_i t_i/\\lambda}}{Z^N(\\lambda)}\\, d\\lambda.\n"," \\end{aligned}\n"," $$\n"]},{"cell_type":"markdown","metadata":{"id":"L_iE-SR3TwSs"},"source":["## $H_2$: Two mutation time constants $\\lambda_1$, $\\lambda_2$\n","\n","Now we specify our second hypothesis, that there are two populations of bacteria, each with a distinct mutation rate, either $\\lambda_1$ or $\\lambda_2$. The fraction of bacteria with rate $\\lambda_1$ is $\\eta$.\n","\n","So, we have a mixture of terms:\n","\n","$$\n"," P(t\\mid \\lambda_1,\\lambda_2, H_2) =\n"," \\eta \\frac{e^{-t/\\lambda_1}}{Z(\\lambda_1)} + (1-\\eta) \\frac{e^{-t/\\lambda_2}}{Z(\\lambda_2)}\n","$$\n","\n","Let's see what this hypothesis describes with code:\n","\n","\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"VV2FFzLmZV8T","executionInfo":{"status":"ok","timestamp":1727445335535,"user_tz":240,"elapsed":2072,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"38cc33a5-0673-4c35-c577-6beae7924172"},"source":["lam1 = 0.05\n","lam2 = 80\n","eta = 0.5\n","\n","plt.figure()\n","plt.plot(ts, eta*np.exp(-ts/lam1) + (1-eta)*np.exp(-ts/lam2),\n"," label=r'$\\eta, \\lambda_1, \\lambda_2 = $'+f'{eta}, {lam1}, {lam2}')\n","plt.title('$\\eta ~\\exp(-t/\\lambda_1) + (1-\\eta) \\exp(-t/\\lambda_2)$')\n","plt.legend(loc='upper left', bbox_to_anchor=(1.04, 1), borderaxespad=0)\n","plt.xlabel('$t$')\n","plt.ylim(0, 1)\n","plt.show()"],"execution_count":5,"outputs":[{"output_type":"display_data","data":{"text/plain":[""],"image/png":"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q1Zp3rx5PVZ/7YnqOQjcKA0AgIHLYrEozhETkUfgB/2u+PDDDzV58uSgbTt27Giz7ViHDx/W8uXLtW7dOg0aNEhjx46V0+k87nkI4Z63oKBAXq9XWVlZbV679dZbtWPHjg4fxw4xcjgcmjJlivLz881tPp9P+fn5mj59epffR01Njfbv328Gma7ozrW7W97ulE+S6urqZLUGf0y32Wzy+XzHVZ6uivIehOZ/3AwxAgAAvenDDz/UHXfcEbRt+/btuvnmmzs87o477tCll16qyy+/XFLzsJ/TTz/9uANCOOctLy/X3Llz9dRTT4U8V3eHGOXm5mrevHmaOnWqpk2bpjVr1qi2tlbz588391m7dq1efvll84Pwj3/8Y82cOVOjRo3SkSNHlJeXJ5vNpjlz5vT6tbtyTE+Vb+bMmfrFL36hkSNH6swzz9T27du1evVq3XjjjWG9h+6K6oDgYBUjAADQyz7//HNVVlYG9Ra43W7t3btXZ511liRpw4YNmj9/ftDqSK+++qr++c9/as+ePUHnmzBhQpcDwvGe1+12a9asWVqyZInOPffcLl2zq2bPnq3S0lKtWLFCRUVFmjx5sjZt2hQ08basrEz79+83n3/55ZeaM2eOvvrqKw0dOlTnnXeePvjgAw0dOrTD99wT1+7KMT1Vvscff1zLly/XbbfdppKSEmVmZuqWW27RihUrwipPd1mMcNfpioCqqiolJSWpsrJSiYmJPXbe/D3FWvDsfzUpa7D+svDrPXZeAADQ83+/GxoadODAAY0ZM0Yul6sHShg5BQUFOvvss1VZWamEhATl5eXp7bffDnseQaDNmzdr7dq1QasYHc95DcPQddddp9NOO00rV67sdrn6Wk/UZW+KVPnC+fcT1T0IrGIEAAAiYfv27TrppJPMpS///ve/a+3atd0+X05Ojj788EPV1tZqxIgReumllzR9+vTjOu97772njRs3auLEiXrllVckSc8991zQ5Oj+6Hjrsrf19/JJBARJDDECAAB969gJyoF3yO2ON998M+T24znveeedZ06KHUiOty57W38vnxTlAYFVjAAAQCT092+QEd2ie5lThhgBAAAAQaI6INhjmpc5pQcBAAAAaBbVAYEeBAAAACBYVAcEcxUjehAAABgwBsAK7UC/E86/m6gOCK2TlPkfDQAA/Z3NZpMkeTyeCJcEGHj8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\n"},"metadata":{}}]},{"cell_type":"markdown","metadata":{"id":"UbkTXOOFU0iF"},"source":["Q: What happens if $\\lambda_1$ and $\\lambda_2$ are very close to each other? What is the utility of $H_2$ in this case over $H_1$?\n","\n","Now let's compute the evidence,\n","\n","$$ P(D \\mid H_2) = \\int_{\\lambda_1} \\int_{\\lambda_2} P(D \\mid \\lambda_1, \\lambda_2, H_2) P(\\lambda_1, \\lambda_2 \\mid H_2) d\\lambda_1 d\\lambda_2 $$\n","\n","Let's first get the first term:\n","\n","$$\n","\\begin{aligned}\n"," P(D \\mid \\lambda_1, \\lambda_2, H_2)\n"," &= \\prod_{i=1}^N P(t_i\\mid \\lambda_1,\\lambda_2, H_2) \\\\\n"," &= \\prod_{i=1}^N \\bigg[ \\eta \\frac{e^{-t_i/\\lambda_1}}{Z(\\lambda_1)} + (1-\\eta) \\frac{e^{-t_i/\\lambda_2}}{Z(\\lambda_2)} \\bigg]\n"," \\end{aligned}\n"," $$\n","\n","And for the prior on $\\lambda_1$ and $\\lambda_2$, we will consider uniform distributions between $[\\lambda_1^-, \\lambda_1^+)$ and $[\\lambda_2^-, \\lambda_2^+)$, respectively.\n","\n","$$\\begin{aligned}\n"," P(D\\mid H_2)\n"," &= \\int_{\\lambda_1}\\int_{\\lambda_2}\n"," P(D\\mid \\lambda_1,\\lambda_2, H_2) P(\\lambda_1,\\lambda_2\\mid H_2)\\, d\\lambda_1 d\\lambda_2\\\\\n"," &= \\int_{\\lambda_1^-}^{\\lambda_1^+}\\int_{\\lambda_2^-}^{\\lambda_2^+}\n"," \\prod_i \\left[\\eta \\frac{e^{-t_i/\\lambda_1}}{Z(\\lambda_1)} + (1-\\eta) \\frac{e^{-t_i/\\lambda_2}}{Z(\\lambda_2)} \\right]\n"," \\frac{1}{\\lambda_1^{+}-\\lambda_1^{-}}\\frac{1}{\\lambda_2^{+}-\\lambda_2^{-}}\\, d\\lambda_1 d\\lambda_2\\\\\n"," &= \\frac{1}{\\sigma_{1}\\sigma_{2}}\\int_{\\lambda_1^-}^{\\lambda_1^+}\\int_{\\lambda_2^-}^{\\lambda_2^+}\n"," \\prod_i \\left[\\eta \\frac{e^{-t_i/\\lambda_1}}{Z(\\lambda_1)} + (1-\\eta) \\frac{e^{- t_i/\\lambda_2}}{Z(\\lambda_2)} \\right] d\\lambda_1 d\\lambda_2\n"," \\end{aligned}$$\n","\n"," There we have it! We have all we need to compute\n","\n"," $$\\frac{P(H_1 \\mid D)}{P(H_2 \\mid D)} $$"]},{"cell_type":"markdown","metadata":{"id":"aMjVq-k9hQ-b"},"source":["## Probabilities can be very small numbers\n","\n","\n","Calculating the probability of some data given a model, usually requires\n","multiplying many different probably terms\n","\n","$$\n","P(D\\mid M) = \\prod_{i=1}^N P(d_i\\mid M).\n","$$\n","\n","This quantity easily underflows, which means that you are trying to\n","calculate something smaller than the precision of your computer.\n","\n","If you had a data set $D$, in which each individual\n","datum had probability of the order of $0.001$ (which is not such\n","small quantity), then the probability of all the data is\n","\n","$$\n","P(D) = \\left(10^{-3}\\right)^{N} = 10^{-3*N}.\n","$$"]},{"cell_type":"code","metadata":{"id":"GCQcuMmkhVab","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1727445355805,"user_tz":240,"elapsed":410,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"cd90ceab-6f77-472c-c90d-b8fbb482df7c"},"source":["## see for yourself!\n","\n","10**(-323), 10**(-324)"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(1e-323, 0.0)"]},"metadata":{},"execution_count":7}]},{"cell_type":"markdown","metadata":{"id":"Tvme13ZkhWWb"},"source":["## The smallest double-precision floting point number,\n","\n","$$\n","\\mbox{smallest number} \\sim 10^{-323}\n","$$\n","\n","which means that after $N\\sim 100$ data points,\n","\n","$$\n","P(N=100) = 10^{-300}\n","$$\n","\n","Has become so small that you would not be able to distinguish having a\n","data set with $N=100$ measurements from having another with $N=200$ points. In other words when we go and try to calculate said probabiliy we are going to end up with 0 instead of what we know it to actually be: a really, really small number.\n","\n","**How do we get around this?**"]},{"cell_type":"markdown","metadata":{"id":"_xyeeIkMhZPH"},"source":["### Working in log space\n","\n","Working with the log of the probability can be very useful to avoid underflow problems. Because it expands the dynamic range of the probability effectively giving you access to those small numbers that you couldn't calculate before. Also, because the logarithm of the probability is monotonically increasing, maximizing the probability and the logarithm of the probability is the same task.\n","\n","But working in log-space can be helpful in many ways, let's go back to our example:"]},{"cell_type":"markdown","metadata":{"id":"jxruLzQXhcco"},"source":["$$\n","\\log P(D\\mid M) = \\log \\prod_{i=1}^N P(d_i\\mid M) = \\sum_{i=1}^N \\log P(d_i\\mid M).\n","$$\n","\n","If you are having trouble seeing why this is the case remember that it is a property of logarithms that $log(a_1a_2) = log(a_1) + log(a_2)$. Convince yourself that this extends to N elements, $log(a_1a_2...a_N) = log(a_1) + log(a_2) + ...+ log(a_N)$ when you are sold, it is trivial to see that $log(a_1a_2...a_N) = \\sum_{i=1}^N \\log(a_i)$.\n","\n","\n","If we go back to the previous example:\n","\n","$$\n","\\log P(N=100) = -300 * \\log(10) = -690.776\n","$$\n","\n","but\n","\n","$$\n","\\log P(N=200) = -600 * \\log(10) = -1382.551\n","$$\n","\n","thus, the two cases are easily distinguishable in log space.\n","\n","$$\n","\\log P(N=200) - \\log P(N=100) = -691.775\n","$$\n","\n","or\n","\n","$$\n","P(N=200) = e^{-691.775} P(N=100)\n","$$"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Cx7IEPG1WkS8","executionInfo":{"status":"ok","timestamp":1727445362669,"user_tz":240,"elapsed":223,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"41ddb67b-1d6e-447a-df74-be897c5282b2"},"source":["np.log(np.exp(1000)+np.exp(999))"],"execution_count":8,"outputs":[{"output_type":"stream","name":"stderr","text":[":1: RuntimeWarning: overflow encountered in exp\n"," np.log(np.exp(1000)+np.exp(999))\n"]},{"output_type":"execute_result","data":{"text/plain":["inf"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","metadata":{"id":"Js75f9Z1hrhL"},"source":["Sometimes you describe your system with a mixture of probability\n","distributions. For instance like mixture of Gaussian distributions, or\n","like in the case of our [homework this week](http://mcb111.org/w03/w03-homework.html) a mixture of\n","exponential distributions.\n","\n","Now we work in log space so you have, so you end up having to do the following\n","calculation $\\log(e^a + e^b)$\n","\n","If $a$ and $b$ are large and negative (as it is the case when they represent log probabilities), then that calculation cannot be directly. For instance, a naive calculation of $log(e^{-1000} + e^{-999})$ will give you -infinity. And if we tried with positive number, for instance $log(e^{1000} + e^{999})$ will give you +infinity.\n","\n","The way to do this calculation robustly is as follows, assume $a > b$, then\n","\n","$$\n","\\log(e^a + e^b) = \\log \\left(e^a ( 1 + e^{b-a})\\right) = a + \\log\\left( 1 + e^{b-a}\\right)\n","$$\n","\n","since $b-a <0$, the exponential $ e^{b-a}<=1$ never becomes a\n","large number, and the calculation is robust.\n","\n","Then you will calculate\n","\n","$$\n","log(e^{-1000} + e^{-999}) = -999 + \\log(1+e^{-1}) = -999 + 0.31 = - 998.69,\n","$$\n","\n","and\n","\n","$$\n","log(e^{1000} + e^{999}) = 1000 + \\log(1+e^{-1}) = 1000 + 0.31 = 1000.31,\n","$$\n","\n","\n","The log-sum-exp trick can be generalized for an arbitrary number of terms $$n$$\n","\n","$$\n","\\log(e^{a_1} + \\ldots + e^{a_n}) = a_{max} + \\log\\left(1+\\sum_{i=1}^ne^{(a_i - a_{max})}\\right),\n","$$\n","\n","where $a_{max}$ is the maximum value of the set $\\{a_1,\\ldots, a_n\\}$."]},{"cell_type":"code","metadata":{"id":"xjXHwUyZZeW4","executionInfo":{"status":"ok","timestamp":1727445368939,"user_tz":240,"elapsed":514,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}}},"source":["from scipy.special import logsumexp\n","?logsumexp"],"execution_count":9,"outputs":[]},{"cell_type":"code","metadata":{"id":"Jfe_opswaTve"},"source":["import numpy as np\n","np.logaddexp?"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"-R1dodBHaTbZ"},"source":[]},{"cell_type":"markdown","metadata":{"id":"5CJTF5Cdh1UJ"},"source":["# How to integrate?\n","\n","We want to find the Area under the curves!\n"]},{"cell_type":"code","metadata":{"id":"w0-KwBmg6GAT","executionInfo":{"status":"ok","timestamp":1727445378533,"user_tz":240,"elapsed":182,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}}},"source":["xs = np.linspace(0,1,int(1e7)) # define bins\n","dx = xs[1]-xs[0] # width of a bin"],"execution_count":10,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"KcUIFhz2atLK","executionInfo":{"status":"ok","timestamp":1632677237051,"user_tz":240,"elapsed":25,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"f976b17d-575c-4f15-e374-637964f78c36"},"source":["xs #see what our bin list looks like"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0.0000000e+00, 1.0000001e-07, 2.0000002e-07, ..., 9.9999980e-01,\n"," 9.9999990e-01, 1.0000000e+00])"]},"metadata":{},"execution_count":12}]},{"cell_type":"code","metadata":{"id":"bl8F3shWC1DU","executionInfo":{"status":"ok","timestamp":1727447219025,"user_tz":240,"elapsed":3,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}}},"source":["def g(x): # a function to integrate\n"," return x"],"execution_count":18,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":447},"id":"pCe_9VEYC3hN","executionInfo":{"status":"ok","timestamp":1727447196673,"user_tz":240,"elapsed":5449,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"8ff69db9-2e11-416b-cb57-aff47e407430"},"source":["plt.step(xs,g(xs))"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":17},{"output_type":"display_data","data":{"text/plain":[""],"image/png":"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GRmqX7/+GY+pX7++S/tLkt1ul91udyVauXRvVlfdm9Wt9NcBAABn59KVET8/P8XExCgpKal0m9PpVFJSkrp3737GY7p3737K/pL07bffnnV/AABQvbg86VliYqISEhIUGxurbt26acqUKcrLy9PQoUMlSYMHD1ZERIQmTZokSRoxYoR69eqll156SX369NG8efO0atUqvfnmmxX7TgAAgEdyuYwMGDBAhw4d0vjx45Wenq7o6GgtWbKk9CHVPXv2yGr944JLjx49NHfuXI0dO1ZPPPGEWrRooc8++0zt27evuHcBAAA8lsvzjJihMucZAQAAlaNS5hkBAACoaJQRAABgKsoIAAAwFWUEAACYijICAABMRRkBAACmoowAAABTUUYAAICpKCMAAMBULk8Hb4bfJ4nNyckxOQkAACir3z+3/26yd48oI7m5uZKkyMhIk5MAAABX5ebmKjg4+Kx/7hFr0zidTh04cECBgYGyWCwV9n1zcnIUGRmpvXv3suZNJeI8Vx3OddXgPFcNznPVqMzzbBiGcnNz1bBhw1MW0f0rj7gyYrVa1ahRo0r7/kFBQfygVwHOc9XhXFcNznPV4DxXjco6z+e6IvI7HmAFAACmoowAAABTVesyYrfbNWHCBNntdrOjeDXOc9XhXFcNznPV4DxXDXc4zx7xACsAAPBe1frKCAAAMB9lBAAAmIoyAgAATEUZAQAApvL6MjJt2jRFRUXJ399fcXFxSk5OPuf+H330kVq3bi1/f3916NBBixcvrqKkns2V8zxjxgxdfPHFql27tmrXrq34+Pi//f+CP7j6M/27efPmyWKx6Prrr6/cgF7C1fN87NgxDR8+XA0aNJDdblfLli35/VEGrp7nKVOmqFWrVqpRo4YiIyM1cuRI5efnV1Faz/TDDz+ob9++atiwoSwWiz777LO/PWbp0qXq0qWL7Ha7mjdvrtmzZ1duSMOLzZs3z/Dz8zPefvttY+PGjcbdd99thISEGBkZGWfc/6effjJsNpvx/PPPG5s2bTLGjh1r+Pr6GuvXr6/i5J7F1fM8cOBAY9q0acaaNWuMzZs3G0OGDDGCg4ONffv2VXFyz+Pquf7dzp07jYiICOPiiy82rrvuuqoJ68FcPc8FBQVGbGyscc011xjLli0zdu7caSxdutRITU2t4uSexdXz/P777xt2u914//33jZ07dxpff/210aBBA2PkyJFVnNyzLF682BgzZoyxYMECQ5Lx6aefnnP/HTt2GDVr1jQSExONTZs2Ga+++qphs9mMJUuWVFpGry4j3bp1M4YPH1763w6Hw2jYsKExadKkM+7fv39/o0+fPqdsi4uLM+69995KzenpXD3Pf1VcXGwEBgYa77zzTmVF9BrlOdfFxcVGjx49jLfeestISEigjJSBq+f59ddfN5o2bWoUFhZWVUSv4Op5Hj58uHH55Zefsi0xMdHo2bNnpeb0JmUpI4899pjRrl27U7YNGDDA6N27d6Xl8trbNIWFhUpJSVF8fHzpNqvVqvj4eC1fvvyMxyxfvvyU/SWpd+/eZ90f5TvPf3XixAkVFRWpTp06lRXTK5T3XD/99NMKCwvTnXfeWRUxPV55zvMXX3yh7t27a/jw4QoPD1f79u01ceJEORyOqortccpznnv06KGUlJTSWzk7duzQ4sWLdc0111RJ5urCjM9Cj1gorzyysrLkcDgUHh5+yvbw8HClpaWd8Zj09PQz7p+enl5pOT1dec7zXz3++ONq2LDhaT/8OFV5zvWyZcs0c+ZMpaamVkFC71Ce87xjxw7997//1e23367Fixdr27ZtGjZsmIqKijRhwoSqiO1xynOeBw4cqKysLF100UUyDEPFxcW677779MQTT1RF5GrjbJ+FOTk5OnnypGrUqFHhr+m1V0bgGSZPnqx58+bp008/lb+/v9lxvEpubq4GDRqkGTNmKDQ01Ow4Xs3pdCosLExvvvmmYmJiNGDAAI0ZM0bTp083O5pXWbp0qSZOnKjXXntNq1ev1oIFC7Ro0SI988wzZkfDefLaKyOhoaGy2WzKyMg4ZXtGRobq169/xmPq16/v0v4o33n+3YsvvqjJkyfru+++U8eOHSszpldw9Vxv375du3btUt++fUu3OZ1OSZKPj4+2bNmiZs2aVW5oD1Sen+kGDRrI19dXNputdFubNm2Unp6uwsJC+fn5VWpmT1Se8zxu3DgNGjRId911lySpQ4cOysvL0z333KMxY8bIauXf1xXhbJ+FQUFBlXJVRPLiKyN+fn6KiYlRUlJS6Tan06mkpCR17979jMd07979lP0l6dtvvz3r/ijfeZak559/Xs8884yWLFmi2NjYqojq8Vw9161bt9b69euVmppa+tWvXz9ddtllSk1NVWRkZFXG9xjl+Znu2bOntm3bVlr2JGnr1q1q0KABReQsynOeT5w4cVrh+L0AGiyzVmFM+SystEdj3cC8efMMu91uzJ4929i0aZNxzz33GCEhIUZ6erphGIYxaNAgY9SoUaX7//TTT4aPj4/x4osvGps3bzYmTJjA0N4ycPU8T5482fDz8zM+/vhj4+DBg6Vfubm5Zr0Fj+Hquf4rRtOUjavnec+ePUZgYKDxwAMPGFu2bDEWLlxohIWFGf/617/MegsewdXzPGHCBCMwMND44IMPjB07dhjffPON0axZM6N///5mvQWPkJuba6xZs8ZYs2aNIcl4+eWXjTVr1hi7d+82DMMwRo0aZQwaNKh0/9+H9j766KPG5s2bjWnTpjG093y9+uqrRuPGjQ0/Pz+jW7duxi+//FL6Z7169TISEhJO2f/DDz80WrZsafj5+Rnt2rUzFi1aVMWJPZMr57lJkyaGpNO+JkyYUPXBPZCrP9N/RhkpO1fP888//2zExcUZdrvdaNq0qfHss88axcXFVZza87hynouKiownn3zSaNasmeHv729ERkYaw4YNM44ePVr1wT3I999/f8bfub+f24SEBKNXr16nHRMdHW34+fkZTZs2NWbNmlWpGS2GwbUtAABgHq99ZgQAAHgGyggAADAVZQQAAJiKMgIAAExFGQEAAKaijAAAAFNRRgAAgKkoIwAAwFSUEQAAYCrKCAAAMBVlBAAAmIoyAgAATPX/XrBrlwQW/lYAAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"kanpY13WC5rX","executionInfo":{"status":"ok","timestamp":1632677244825,"user_tz":240,"elapsed":4187,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"aae2b878-da3b-430e-d3a0-f6c55156f4ef"},"source":["%%time\n","bin_vals = []\n","for x in xs: # For every value in our list of bins get the area of the particular bin by multiplying the height at that point by the width of the bin.\n"," bin_vals.append(x*dx)\n","\n","print(np.sum(bin_vals)) # sum up all the areas."],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["0.5000000500000026\n","CPU times: user 3.93 s, sys: 242 ms, total: 4.17 s\n","Wall time: 4.17 s\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"z7Y9UnfeC6lj","executionInfo":{"status":"ok","timestamp":1632677244825,"user_tz":240,"elapsed":7,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"9d7457be-3860-4181-d9af-4acd883a0d05"},"source":["%%time\n","np.sum(g(xs)*dx) # numpy broadcasting Vector, we do the operation to ever entry on the array and sum the entries"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 27.1 ms, sys: 1.86 ms, total: 29 ms\n","Wall time: 31.4 ms\n"]},{"output_type":"execute_result","data":{"text/plain":["0.5000000500000026"]},"metadata":{},"execution_count":16}]},{"cell_type":"code","metadata":{"id":"jhrs0IM_C80T"},"source":["def g(x): #Another function to integrate.\n"," return x**2"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"id":"w8tt7IsDDA8U","executionInfo":{"status":"ok","timestamp":1632677282447,"user_tz":240,"elapsed":3673,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"d6c005cc-0adf-4c64-d2a5-52900eff6307"},"source":["plt.step(xs,g(xs))"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[]"]},"metadata":{},"execution_count":19},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"mCi8mctUDBei","executionInfo":{"status":"ok","timestamp":1727447253395,"user_tz":240,"elapsed":4922,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"316f35dd-3ca2-497c-85e9-0692f2277634"},"source":["%%time\n","bin_vals = []\n","for x in xs: # For every value in our list of bins get the area of the particular bin by multiplying the height at that point by the width of the bin.\n"," bin_vals.append(x**2 * dx)\n","\n","np.sum(bin_vals) # sum up all the areas."],"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 4.19 s, sys: 549 ms, total: 4.73 s\n","Wall time: 4.73 s\n"]},{"output_type":"execute_result","data":{"text/plain":["0.3333333833333404"]},"metadata":{},"execution_count":19}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bernWBnfDDhs","executionInfo":{"status":"ok","timestamp":1727447254353,"user_tz":240,"elapsed":187,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"5a596816-5c8c-44ec-b9bc-5c1d83143227"},"source":["%%time\n","np.sum(xs**2*dx) # numpy broadcasting Vector, we do the operation to ever entry on the array and sum the entries"],"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 33.6 ms, sys: 35.7 ms, total: 69.3 ms\n","Wall time: 100 ms\n"]},{"output_type":"execute_result","data":{"text/plain":["0.3333333833333404"]},"metadata":{},"execution_count":20}]},{"cell_type":"markdown","metadata":{"id":"0Sz0yTgzDP9s"},"source":["### But what about higher dimensional integrals?\n","\n","$$\\int \\int (x^2-y^2) dxdy$$\n","\n","We don't want the area under the curve, we want the volume under the surface!"]},{"cell_type":"code","metadata":{"id":"37Zc_cqlDNkl"},"source":["xs = np.linspace(0,1,10) # define bins\n","ys = np.linspace(0,1,10) # define bins\n","dx = xs[1]- xs[0] # width of a bin\n","dy = ys[1]- ys[0] # width of a bin"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"86SoI4DrDfV9","executionInfo":{"status":"ok","timestamp":1632677290837,"user_tz":240,"elapsed":6,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"a46e14a6-0a9e-484c-ecc8-9139b0df850b"},"source":["%%time\n","int_value = 0\n","bin_vals_x = []\n","for x in xs: # For every value in our list of bins in one axis\n"," bin_vals_y = []\n"," for y in ys: # For every value in our list of bins in the other axis\n"," bin_vals_y.append((x**2-y**2)*dx*dy) #updating lists\n"," int_value += (x**2-y**2)*dx*dy # Summing the entry ar every step\n"," bin_vals_x.append(bin_vals_y)\n","bin_vals_x = np.array(bin_vals_x) #create surface array\n","print(int_value) #value of the integral"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["-1.5178830414797062e-17\n","CPU times: user 640 µs, sys: 985 µs, total: 1.63 ms\n","Wall time: 1.78 ms\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"id":"HHzkXMRiDhFa","executionInfo":{"status":"ok","timestamp":1632677291282,"user_tz":240,"elapsed":295,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"0f3d5ca0-cc4d-40b8-efa3-91975ce60e2c"},"source":["plt.imshow(bin_vals_x)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":24},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"j_OEoYURJSK8","executionInfo":{"status":"ok","timestamp":1632677291283,"user_tz":240,"elapsed":7,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"eb706f74-a071-4117-9d38-24edd25751fe"},"source":["%%time\n","surf = xs[:,np.newaxis]**2 - ys**2 # Numpy broadcasting method of integrating with two axis."],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["CPU times: user 56 µs, sys: 7 µs, total: 63 µs\n","Wall time: 67.5 µs\n"]}]},{"cell_type":"markdown","metadata":{"id":"aH7H38KFJGF0"},"source":["**Try** it yourself:\n","\n","- What does the silcing `[:, np.newaxis]` do to the numpy array being sliced?\n","- How does the operation propagate?"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rfkhj_eDeKwU","executionInfo":{"status":"ok","timestamp":1632677291283,"user_tz":240,"elapsed":5,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"ef1c757a-00ca-4b32-e831-35fd6e0a11ce"},"source":["(ys**2)[:,np.newaxis] - xs**2"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 0. , -0.01234568, -0.04938272, -0.11111111, -0.19753086,\n"," -0.30864198, -0.44444444, -0.60493827, -0.79012346, -1. ],\n"," [ 0.01234568, 0. , -0.03703704, -0.09876543, -0.18518519,\n"," -0.2962963 , -0.43209877, -0.59259259, -0.77777778, -0.98765432],\n"," [ 0.04938272, 0.03703704, 0. , -0.0617284 , -0.14814815,\n"," -0.25925926, -0.39506173, -0.55555556, -0.74074074, -0.95061728],\n"," [ 0.11111111, 0.09876543, 0.0617284 , 0. , -0.08641975,\n"," -0.19753086, -0.33333333, -0.49382716, -0.67901235, -0.88888889],\n"," [ 0.19753086, 0.18518519, 0.14814815, 0.08641975, 0. ,\n"," -0.11111111, -0.24691358, -0.40740741, -0.59259259, -0.80246914],\n"," [ 0.30864198, 0.2962963 , 0.25925926, 0.19753086, 0.11111111,\n"," 0. , -0.13580247, -0.2962963 , -0.48148148, -0.69135802],\n"," [ 0.44444444, 0.43209877, 0.39506173, 0.33333333, 0.24691358,\n"," 0.13580247, 0. , -0.16049383, -0.34567901, -0.55555556],\n"," [ 0.60493827, 0.59259259, 0.55555556, 0.49382716, 0.40740741,\n"," 0.2962963 , 0.16049383, 0. , -0.18518519, -0.39506173],\n"," [ 0.79012346, 0.77777778, 0.74074074, 0.67901235, 0.59259259,\n"," 0.48148148, 0.34567901, 0.18518519, 0. , -0.20987654],\n"," [ 1. , 0.98765432, 0.95061728, 0.88888889, 0.80246914,\n"," 0.69135802, 0.55555556, 0.39506173, 0.20987654, 0. ]])"]},"metadata":{},"execution_count":26}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"id":"p7C3EhEADkvC","executionInfo":{"status":"ok","timestamp":1632677291583,"user_tz":240,"elapsed":134,"user":{"displayName":"Carlos Sanchez","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"12373209559857397534"}},"outputId":"0b7add02-6db9-4ce6-d4e5-449c9fc5deee"},"source":["plt.imshow(surf)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{},"execution_count":27},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":[""]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"iA1DYfSRJnFp"},"source":["### Don't know where to start with the homework! Or getting confused with the `log` computations?\n","\n","Try starting here"]},{"cell_type":"code","metadata":{"id":"gVHtLyi3QIsg","executionInfo":{"status":"ok","timestamp":1727445448937,"user_tz":240,"elapsed":195,"user":{"displayName":"Nicholas Hilgert","userId":"08679803982584035718"}},"outputId":"d99511dc-7ad1-412d-fc20-360fc4891d5a","colab":{"base_uri":"https://localhost:8080/"}},"source":["def Z(lam, tmin, tmax):\n"," return lam * (np.exp(-tmin/lam) - np.exp(-tmax/lam))\n","\n","## TODO for you, for homework\n","## Use logs to compute the integrals!\n","def logZ(lam, tmin, tmax):\n"," return -1\n","\n","# check if similar:\n","np.isclose(Z(3, 0.05, 80), np.exp(logZ(3, 0.05, 80)))"],"execution_count":14,"outputs":[{"output_type":"execute_result","data":{"text/plain":["False"]},"metadata":{},"execution_count":14}]},{"cell_type":"code","source":[],"metadata":{"id":"EkMg8jGMFIHT"},"execution_count":null,"outputs":[]}]}