{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modeling the COVID-19 Pandemic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reading\n",
    "\n",
    "1. Bregman D.J., A.D. Langmuir, 1990. Farr's law applied to AIDS projections. _JAMA_, 263:1522–1525. doi: 10.1001/jama.263.11.1522. \n",
    "\n",
    "1. King, A.A.,  M.D. de Cellès, F.M.G. Magpantay, and P. Rohani, 2015. Avoidable errors in the modelling of outbreaks of emerging pathogens, with special reference to Ebola, _Proc. R. Soc. B._ 28220150347 http://doi.org/10.1098/rspb.2015.0347.\n",
    "\n",
    "1. Murray, C.J.L., and IHME COVID-19 health service utilization forecasting team, 2020. Forecasting COVID-19 impact on hospital bed-days, ICU-days, ventilator-days and deaths by US state in the next 4 months,\n",
    "https://www.medrxiv.org/content/10.1101/2020.03.27.20043752v1.full-text\n",
    "\n",
    "1. Jewell, N.P.,  J.A. Lewnard,  and B.L. Jewell, 2020.\n",
    "Predictive Mathematical Models of the COVID-19 Pandemic: Underlying Principles and Value of Projections,\n",
    "_JAMA_, 323(19):1893-1894. doi:10.1001/jama.2020.6585\n",
    "\n",
    "1. Froese, H., 2020. Infectious Disease Modelling: Fit Your Model to Coronavirus Data, Towards Data Science, https://towardsdatascience.com/infectious-disease-modelling-fit-your-model-to-coronavirus-data-2568e672dbc7; https://github.com/henrifroese/infectious_disease_modelling \n",
    "\n",
    "1. Smith, D., and L. Moore, 2004. The SIR model for spread of disease, _Convergence_, https://www.maa.org/press/periodicals/loci/joma/the-sir-model-for-spread-of-disease-introduction\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Models of epidemics\n",
    "\n",
    "This notebook explores two basic approaches to modeling the spread of a communicable disease through a population. There are more complicated approaches than are considered here, but these are common, and the predictions of COVID-19 infections, ICU beds, and deaths are often based on variations of these models."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SIR models\n",
    "\n",
    "Mathematical models of epidemics date back to the early 1900s.\n",
    "\n",
    "One of the simplest models of epidemics is the SIR model, which partitions the population into three disjoint groups: Susceptible, Infected, and Recovered (or Removed).\n",
    "\n",
    "The SIR model treats the population as fixed: no births, immigration, emigration, or deaths from other causes.\n",
    "It ignores the possibility of carriers, population heterogeneity, or geographic heterogeneity.\n",
    "It treats everyone as equivalent and assumes the population \"mixes\" perfectly.\n",
    "\n",
    "Here are the state variables of the SIR model:\n",
    "\n",
    "+ $N$: initial population size\n",
    "+ $S(t)$: number of susceptible individuals in the population at time $t$\n",
    "+ $I(t)$: number of infected individuals in the population at time $t$\n",
    "+ $R(t)$: number \"removed\" from risk (dead or recovered) in the population at time $t$\n",
    "\n",
    "Assumptions:\n",
    "\n",
    "+ Everyone is either susceptible, infected, or removed (recovered or dead). (There are more complex models with more \"compartments.\")\n",
    "+ There are no births, immigration, emigration, or deaths from other causes.\n",
    "+ If a susceptible person is infected, that person eventually dies or recovers. \n",
    "+ While a person is infected, the person is infectious.\n",
    "+ There is no incubation period between being infected and being infectious.\n",
    "+ If an infected person gets \"close enough\" to a susceptible person, the susceptible person becomes infected.\n",
    "+ Every unit of time, every infected person exposes $\\beta$ people.\n",
    "+ Every susceptible person exposed to an infected person becomes infected.\n",
    "+ Every infected person exposes a disjoint group of people.\n",
    "+ Every unit of time, a fraction $\\gamma$ of infected people recover or die.\n",
    "+ People who recover or die are not infectious.\n",
    "+ People who recover or die never become susceptible again.\n",
    "\n",
    "Then $S + I + R = N$ is constant, the initial population size.\n",
    "\n",
    "The basic reproductive number is $R_0 = \\beta/\\gamma$.\n",
    "Initially, when essentially the entire population is susceptible (the proportion who are infected or recovered is small compared to $N$), this is the number of people each infected person infects before recovering or dying. \n",
    "(Note that $R_0$ has no connection to $R$: the notation is unfortunate.)\n",
    "\n",
    "Define $s(t) \\equiv S(t)/N$, $i(t) \\equiv I(t)/N$, and $r(t) \\equiv R(t)/N$.\n",
    "Then $s+i+r = 1$ for all $t$.\n",
    "There is an epidemic if $s(0)\\beta/\\gamma > 1$: the rate at which susceptible people are\n",
    "getting infected is greater than the rate at which infected people are recoving. \n",
    "\n",
    "The parameters of the model are:\n",
    "\n",
    "+ $\\beta$, the number of exposed people per unit of time per infected persion\n",
    "+ $\\gamma$, the fraction of infected people who are removed (recover or die) per unit time\n",
    "\n",
    "The state of the population evolves according to three coupled differential equations:\n",
    "\n",
    "+ $dS/dt = -\\beta I S/N$\n",
    "+ $dI/dt = \\beta I S/N - \\gamma I$ (equivalently, $di/dt = \\beta is - \\gamma i$)\n",
    "+ $dR/dt = \\gamma I$\n",
    "\n",
    "Another interesting variable is the cumulative number of infections, $C$.\n",
    "\n",
    "+ $dC/dt = \\beta I S/N$; $C(0) = I(0)$.\n",
    "\n",
    "The SIR model has some built-in features that might not match reality.\n",
    "First, note that the derivative of $R$ is always non-negative and proportional to $I$.\n",
    "Since $R \\le N$ and $N$ is finite, $I$ must eventually be zero; that is, the SIR implies that eventually\n",
    "the entire population will be disease-free. \n",
    "Once $I=0$, it can never grow again, since the derivative of $I$ is proportional to $I$.\n",
    "(If nobody is infected, nobody can infect anyone.)\n",
    "Epidemics that follow the SIR model are necessarily self-limiting.\n",
    "\n",
    "That isn't the case if immunity wears off over time (or if the population is not isolated).\n",
    "In that case, we might we parametrize the transition from recovered to susceptible by \n",
    "assuming that a fraction $\\delta$ of $R$ return to $S$ in each time period. \n",
    "(There are other ways we could do this, for instance, having a variable \"lag\" between recovery and becoming susceptible again.)\n",
    "That yields:\n",
    "\n",
    "+ $dS/dt = -\\beta I S/N + \\delta R$\n",
    "+ $dI/dt = \\beta I S/N - \\gamma I$ (equivalently, $di/dt = \\beta is - \\gamma i$)\n",
    "+ $dR/dt = \\gamma I - \\delta R$\n",
    "\n",
    "In this model, $I$ does not necessarily go to zero eventually.\n",
    "\n",
    "Other generalizations include separate \"compartments\" for dead versus recovered), needing an ICU bed, etc., as well as time-varying values of $\\beta$ to account for lockdowns or other policy interventions, heterogeneity in the population, and more."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's run this model (in discrete time) for a population of $N=1,000,000$ people of whom 0.05% are initially infected.\n",
    "We will take the time interval to be 1 day, the period of infectiousness to be $1/\\gamma = 14$ days,\n",
    "and $R_0 = 2 = \\beta/\\gamma$, so $\\beta = 2 \\gamma = 1/7$. We will start with $\\delta=0$ (no re-infections)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# boilerplate\n",
    "import numpy as np\n",
    "import scipy as sp\n",
    "from scipy.integrate import odeint\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.dates as mdates\n",
    "\n",
    "from ipywidgets import interact, interactive, fixed, interact_manual\n",
    "import ipywidgets as widgets\n",
    "from IPython.display import clear_output, display, HTML"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sir_model(N, i_0, beta=1, gamma=1, delta=0, steps=365):\n",
    "    '''\n",
    "    Run SIR model as coupled finite-difference equations.\n",
    "    \n",
    "    Assumes that initially a fraction i_0 of the population of N people is infected and \n",
    "    everyone else is susceptible (none has died or recovered).\n",
    "    \n",
    "    Parameters\n",
    "    -----------\n",
    "    N     : int\n",
    "        population size\n",
    "    i_0   : double in (0, 1)\n",
    "        initial fraction of population infected\n",
    "    beta  : double in [0, infty)\n",
    "        number of encounters each infected person has per time step\n",
    "    gamma : double in (0, 1)\n",
    "        fraction of infecteds who recover or die per time step\n",
    "    delta : double in (0, 1)\n",
    "        fraction of recovereds who become susceptible per time step\n",
    "    steps : int\n",
    "        number of steps in time to run the model\n",
    "    \n",
    "    Returns\n",
    "    --------\n",
    "    S, I, R, C \n",
    "    S     : list\n",
    "        time history of susceptibles\n",
    "    I     : list\n",
    "        time history of infecteds\n",
    "    R     : list\n",
    "        time history of recovered/dead    \n",
    "    C     : list\n",
    "        cumulative number of infections over time\n",
    "    '''\n",
    "    assert i_0 > 0, 'initial rate of infection is zero'\n",
    "    assert i_0 <= 1, 'infection rate greater than 1'\n",
    "    assert beta >= 0, 'beta must be nonnegative'\n",
    "    assert gamma > 0, 'gamma must be positive'\n",
    "    assert gamma < 1, 'gamma must be less than 1'\n",
    "    assert delta >= 0, 'delta must be nonnegative'\n",
    "    assert delta < 1, 'delta must be less than 1'\n",
    "    S = np.zeros(steps)\n",
    "    I = np.zeros(steps)\n",
    "    R = np.zeros(steps)\n",
    "    C = np.zeros(steps)\n",
    "    I[0] = int(N*i_0)\n",
    "    C[0] = I[0]\n",
    "    S[0] = N-I[0]\n",
    "    for i in range(steps-1):\n",
    "        new_i = beta*I[i]*S[i]/N\n",
    "        S[i+1] = max(0, S[i] - new_i + delta*R[i])\n",
    "        I[i+1] = max(0, I[i] + new_i - gamma*I[i])\n",
    "        R[i+1] = max(0, R[i] + gamma*I[i] - delta*R[i])\n",
    "        C[i+1] = C[i] + new_i\n",
    "    return S, I, R, C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_sir(N, i_0, beta=2/14, gamma=1/14, delta=0, steps=365, verbose=False):\n",
    "    '''\n",
    "    Plot the time history of an SIR model.\n",
    "    \n",
    "    Parameters\n",
    "    -----------\n",
    "    N     : int\n",
    "        population size\n",
    "    i_0   : double in (0, 1)\n",
    "        infection rate at time 0\n",
    "    beta  :  double in [0, infty)\n",
    "        number of encounters each infected person has per time step\n",
    "    gamma : double in (0, 1)\n",
    "        fraction of infecteds who recover or die per time step\n",
    "    delta : double in (0, 1)\n",
    "        fraction of recovereds who become susceptible per time step\n",
    "    steps : int\n",
    "        number of time steps to run the model\n",
    "    verbose : Boolean\n",
    "        if True, return the model predictions\n",
    "    \n",
    "    Returns (if verbose == True)\n",
    "    --------\n",
    "    S : list\n",
    "        susceptibles as a function of time\n",
    "    I : list\n",
    "        infecteds as a function of time\n",
    "    R : list\n",
    "        recovereds as a function of time\n",
    "    C : list\n",
    "        cumulative incidence as a function of time\n",
    "    '''\n",
    "    S, I, R, C = sir_model(N, i_0, beta=beta, gamma=gamma, delta=delta, steps=steps)\n",
    "    times = list(range(steps))\n",
    "    fig, ax = plt.subplots(nrows=1, ncols=1)\n",
    "    ax.plot(times, I, linestyle='--', color='r', label='Infected')\n",
    "    ax.plot(times, S, linestyle='-', color='b', label='Susceptible')\n",
    "    ax.plot(times, R, linestyle=':', color='g', label='Recovered')\n",
    "    ax.plot(times, C, linestyle='-.', color='k', label='Tot infect.')\n",
    "    ax.legend(loc='best')\n",
    "    plt.show()\n",
    "    if verbose:\n",
    "        return S, I, R, C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "i_0 = 0.0005\n",
    "N = int(10**6)\n",
    "steps = 365\n",
    "\n",
    "plot_sir(N, i_0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For these parameters, the number of infections is shaped like a bell curve and the cumulative number of infections is shaped like a CDF: it is \"sigmoidal\" (vaguely \"S\"-shaped). You might imagine fitting a scaled CDF to the curve. Essentially, the IHME model fits a scaled Gaussian CDF to the total number of infections.\n",
    "(More on this below.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What if immunity wears off over time? Let's try a positive value of $\\delta$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEDCAYAAAA7jc+ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABKQElEQVR4nO3deZxN9f/A8ddnFmbGzlibMNbsY98NRQj1TbLkaymylCQ/hSLS5psSopAslSIqZIlIdjIYWcdSg0HGNmPGmDHL+/fHmRmDmXHNdu+M9/PxOI97z3bv+x7mfT7ncz7n8zEiglJKqZzLyd4BKKWUylya6JVSKofTRK+UUjmcJnqllMrhNNErpVQOp4leKaVyOIdN9MaYucaYYGPMQRu372qMOWyMOWSM+S6z41NKqezCOGo7emNMCyAc+FpEqt9j24rAD8CjInLVGFNMRIKzIk6llHJ0DluiF5HNwJWky4wx5Y0xvxpj9hhjthhjHolf9SIwQ0Suxu+rSV4ppeI5bKJPwWzgFRGpC4wAPo9fXgmoZIzZZozZaYxpZ7cIlVLKwbjYOwBbGWPyAk2AJcaYhMW5419dgIpAS8AL2GKMqS4iIVkcplJKOZxsk+ixrj5CRMQnmXVBwE4RiQb+McYEYCX+3VkYn1JKOaRsU3UjItewkvizAMZSK371MqBV/HJPrKqcv+0Rp1JKORqHTfTGmO+BHUBlY0yQMaYf0BPoZ4zZDxwCnorffC1w2RhzGNgIvC4il+0Rt1JKORqHbV6plFIqYzhsiV4ppVTGcMibsZ6enlK2bFl7h6GUUtnGnj17LolI0eTWOWSiL1u2LH5+fvYOQymlsg1jzKmU1mnVjVJK5XCa6JVSKofTRK+UUjncPevojTFzgY5AcHK9SBpjXsdq357weVWAoiJyxRgTCIQBsUCMiNRLa6DR0dEEBQURGRmZ1o9Q98HNzQ0vLy9cXV3tHYpSKp1suRk7H5gOfJ3cShGZBEwCMMZ0Al4TkaS9TrYSkUvpjJOgoCDy5ctH2bJlSdLXjcoEIsLly5cJCgrC29vb3uEopdLpnlU3yXUXnIoewPfpiigFkZGRFClSRJN8FjDGUKRIEb16UiqHyLA6emOMB9AO+DHJYgHWxfcfP+Ae+w8wxvgZY/wuXryY0jYZFa66Bz3WSuUcGXkzthOw7Y5qm6YiUgdoD7wcP2pUskRktojUE5F6RYsm2+ZfKaVyrLNnz2baZ2dkou/OHdU2InIu/jUY+BlokIHfl+Xy5s17z222bNlCtWrV8PHx4caNG/f1+cuWLePw4cOZEpdSyrE5OzuzZcuWTPnsDEn0xpgCgC+wPMmyPMaYfAnvgccBmwb6zs4WLlzIiBEj8Pf3x93d/b72TWuiV0plT7t376Zfv37ExsZSokQJmjVrlinfc89En1x3wcaYQcaYQUk2expYJyLXkywrDmyN71L4T2CViPyakcHbyx9//EHLli3p0qULjzzyCD179kREmDNnDj/88AMTJkygZ0+rxemkSZOoX78+NWvWZNy4cYmf8fXXX1OzZk1q1apFr1692L59OytWrOD111/Hx8eHkydPcvLkSdq1a0fdunVp3rw5R48eBeCff/6hcePG1K9fn7Fjx9rlGCil0i4qKoq33nqLxo0bs27dOk6fPg1k4r0xEXG4qW7dunKnw4cP377A1/fuacYMa93168mvnzfPWn/x4t3rbJAnTx4REdm4caPkz59fzpw5I7GxsdKoUSPZsmWLiIj06dNHlixZIiIia9eulRdffFHi4uIkNjZWOnToIJs2bZKDBw9KpUqV5OLFiyIicvny5bv2FRF59NFH5dixYyIisnPnTmnVqpWIiHTq1EkWLFggIiLTp09PjCuj3XXMlVLptm/fPqlRo4YA0rdvX7l69WqGfC7gJynkVIfs1Cw7aNCgAV5eXgD4+PgQGBh412XXunXrWLduHbVr1wYgPDyc48ePs3//frp06YKnpycAhQsXvuvzw8PD2b59O88++2zisqioKAC2bdvGjz9ajZt69erFyJEjM/4HKqUyVHR0NBMnTmTChAl4enryyy+/0LFjxyz57uyb6P/4I+V1Hh6pr/f0TH29DXLnzp343tnZmZiYmLu2ERFGjx7NwIEDb1s+bdq0e16ixcXFUbBgQfz9/ZNdr80flco+Dh06RJ8+fdizZw/PPfcc06ZNo0iRIln2/drXTSZq27Ytc+fOJTw8HLCaTwUHB/PYY4/xww8/cPmyNdrhlStWi9R8+fIRFhYGQP78+fH29mbJkiWAddLYv38/AE2bNmXRokWAdfNXKeW4/Pz8qFOnDqdOnWLp0qUsXLgwS5M8aKLPVI8//jjPPfccjRs3pkaNGnTp0oWwsDCqVavGW2+9ha+vL7Vq1WL48OEAdO/enUmTJlG7dm1OnjzJwoUL+eqrr6hVqxbVqlVj+XKrUdPUqVOZMWMG9evXJzQ01J4/USmVgoSq1jp16jBq1CgOHTrEM888Y5dYHHLM2Hr16smdA48cOXKEKlWq2CmiB5Mec6XSZsmSJQwfPpzdu3dTokSJLPlOY8weSaHjSC3RK6VUBqtRowYNGza0dxiJNNErpVQ6iQgzZ87khRdeAOCRRx5h6dKlWVaavxdN9EoplQ5nzpyhbdu2DB48mKCgICIiIuwd0l000SulVBqICPPmzaN69eps376dL774grVr1+Lh4WHv0O6SfdvRK6WUnZw/f54BAwawcuVKfH19mTt3LuXKlbN3WCnSEr1SStlIRPjuu++oVq0a69evZ8qUKfz+++8OneRBE/19ef/996lWrRo1a9bEx8eHXbt22SUOf39/Vq9enTi/YsUKJk6cCEDfvn1ZunTpXfv88ccfWfa4tVI51ddff03Pnj2pXLky+/fv59VXX8XJyfHTqFbd2GjHjh2sXLmSvXv3kjt3bi5dusTNmzftEou/vz9+fn488cQTADz55JM8+eSTdolFqQfB5cuXKVKkCF27diUiIoIBAwbg7Oxs77Bs5vinIgdx/vx5PD09E/u48fT0pFSpUpQtW5ZLl6yxz/38/GjZsiUAmzZtwsfHBx8fH2rXrp3YtcFHH31EjRo1qFWrFqNGjQJIsTvivn37MmjQIJo3b06lSpVYuXIlN2/e5O2332bx4sX4+PiwePFi5s+fz5AhQxJjXb9+/W373On69eu88MIL1K9fn9q1ayc+cauUutsbb7xB/fr1CQ8Px93dncGDB2erJA/ZtEQ/bBik0NdXmvn4wJQpKa9//PHHmTBhApUqVaJ169Z069YNX1/fFLf/+OOPmTFjBk2bNiU8PBw3NzfWrFnDsmXL2LVrFx4eHol93AwYMICZM2dSsWJFdu3axUsvvcTvv/8OQGBgIJs2beLkyZO0atWKEydOMGHCBPz8/Jg+fToA8+fPv+27k9snqffff59HH32UuXPnEhISQoMGDWjdujV58uS57+OmVE4VFxeHk5MTnTp1okCBArd1ZJjdZMtEbw958+Zlz549bNmyhY0bN9KtW7fEevHkNG3alOHDh9OzZ086d+6Ml5cX69ev5/nnn09sflW4cOFUuyMG6Nq1K05OTlSsWJFy5collvZTc6991q1bx4oVK/j4448BiIyM5PTp09rdgVLA1atXefXVV/H09GTy5Mk0b96c5s2b2zusdMmWiT61kndmcnZ2pmXLlrRs2ZIaNWqwYMECXFxciIuLA6yEmWDUqFF06NCB1atX06hRI9avX4+I3NW98P12R2xL98T32kdE+PHHH6lcufI9P0upB8nq1at58cUXuXDhAmPHjk32bzY70jp6GwUEBHD8+PHEeX9/f8qUKUPZsmXZs2cPQOJgIGDVu9eoUYORI0dSr149jh49yuOPP87cuXMTn5y7cuVKqt0Rg9U5UlxcHCdPnuTvv/+mcuXKt3VnnJzk9kmqbdu2fPbZZyR0aLdv3750Hh2lsrfQ0FD69etHhw4dKFSoELt27WLcuHE5IsmDJnqbhYeH06dPH6pWrUrNmjU5fPgw48ePZ9y4cbz66qs0b978ths0U6ZMoXr16tSqVQt3d3fat29Pu3btePLJJ6lXrx4+Pj6JVScpdUcMULlyZXx9fWnfvj0zZ87Ezc2NVq1acfjw4cSbsXdKbp+kxo4dS3R0NDVr1qR69eo67qx6oP3222/UqFGD+fPnM3r0aPbs2UPdunXtHVaG0m6KHVjfvn3p2LEjXbp0scv3P4jHXD04wsLCeP3115k1axaVK1dmwYIFDtXj5P1KVzfFxpi5xphgY8zBFNa3NMaEGmP846e3k6xrZ4wJMMacMMaMSvtPUEqpjDVmzBhmz57NiBEj2LdvX7ZO8vdiy83Y+cB04OtUttkiIrc9dmmMcQZmAG2AIGC3MWaFiBxOY6wPnDubTSql0ic0NJSrV69StmxZxo4dS9euXWnatKm9w8p090z0IrLZGFM2DZ/dADghIn8DGGMWAU8BmuiVUllORPD19SVPnjxs3boVT09PPD097R1Wlsio5pWNjTH7gXPACBE5BDwEnEmyTRCQ4rWRMWYAMACgdOnSGRSWUupBd/nyZQoWLIizszMffPABRYsWzTGtaWyVEa1u9gJlRKQW8BmwLH55ckcyxTu/IjJbROqJSL2iRYtmQFhKqQeZiLBo0SIeeeQRpk6dCsATTzxB/fr17RxZ1kt3oheRayISHv9+NeBqjPHEKsE/nGRTL6wSv1JKZaqzZ8/yn//8hx49elCuXDkef/xxe4dkV+lO9MaYEib+OsgY0yD+My8Du4GKxhhvY0wuoDuwIr3fZ0/Ozs74+PhQvXp1OnXqREhIiL1Dum/jx49PbL+vVE4jInz11VdUq1aNdevW8fHHH7N9+3aqV69u79Dsypbmld8DO4DKxpggY0w/Y8wgY8yg+E26AAfj6+inAd3FEgMMAdYCR4Af4uvusy13d3f8/f05ePAghQsXZsaMGfYOCbD+cyd0w6DUgyogIIBHH32U/v374+Pjw4EDB/i///u/bNfTZGa4Z6IXkR4iUlJEXEXES0S+EpGZIjIzfv10EakmIrVEpJGIbE+y72oRqSQi5UXk/cz8IVmtcePGnD17Fki5m+ELFy7w9NNPU6tWLWrVqsX27dahmTx5MtWrV6d69epMie+4Z+TIkXz++eeJnz9+/Hg++eQTACZNmkT9+vWpWbMm48aNA6weKqtUqcJLL71EnTp1OHPmTLLbgdVbZeXKlWndujUBAQGZfmyUykrR0dGMHz+emjVr4u/vz6xZs/j999+pUKGCvUNzHCLicFPdunXlTocPH75t3neer8zbN09ERG7G3BTfeb7yzf5vRETk+s3r4jvPVxYdWCQiIiE3QsR3nq/8ePhHERG5eP2i+M7zlRVHV4iIyPmw83d9X3Ly5MkjIiIxMTHSpUsXWbNmjYiIPProo3Ls2DEREdm5c6e0atVKRES6du0qn376aeI+ISEh4ufnJ9WrV5fw8HAJCwuTqlWryt69e2Xv3r3SokWLxO+qUqWKnDp1StauXSsvvviixMXFSWxsrHTo0EE2bdok//zzjxhjZMeOHSIiKW6X8H3Xr1+X0NBQKV++vEyaNMmm33vnMVfKEcXFxUmLFi2kR48ecv68bX/LORHgJynk1GzZe6W93LhxAx8fHwIDA6lbty5t2rRJtZvh33//na+/tp4zc3Z2pkCBAmzdupWnn346se/3zp07s2XLFoYOHUpwcDDnzp3j4sWLFCpUiNKlSzNt2jTWrVtH7dq1AavPnePHj1O6dGnKlClDo0aNAKvr4eS2CwsL4+mnn07sGllHolI5waVLlxg7dixjx46lVKlS/Prrr7i7u9s7LIeVbRP9H33/SHzv6ux627yHq8dt8wXcCtw27+nhedt8ibwlbPrOhDr60NBQOnbsyIwZM+jbt2+q3QzfSVLpW6hLly4sXbqUf//9l+7duyduP3r0aAYOHHjbtoGBgbcNFJLSdlOmTHng2gyrnC8kJISFCxfSsmVLunXrpkn+HrT3yjQoUKAA06ZN4+OPP8bd3T3FboYfe+wxvvjiCwBiY2O5du0aLVq0YNmyZURERHD9+nV+/vnnxEENunfvzqJFi1i6dGliR2Zt27Zl7ty5hIeHA1azseDg4LtiSmm7Fi1a8PPPP3Pjxg3CwsL45ZdfMvfgKJVJDhw4kNjTaoUKFTh16hTdunWzc1TZgyb6NKpduza1atVi0aJFKXYzPHXqVDZu3EiNGjWoW7cuhw4dok6dOvTt25cGDRrQsGFD+vfvn1jdUq1aNcLCwnjooYcoWbIkYA1h+Nxzz9G4cWNq1KhBly5dku2LPqXt6tSpQ7du3fDx8eGZZ57J9iPlqAdPSEgIr776KrVr1+bzzz9PbARRqFAhO0eWfWg3xSpFesyVPcXFxbFgwQJGjhzJpUuXGDRoEO+++y5FihSxd2gOKbVuirNtHb1SKufy8/NjyJAh7Nq1i8aNG/Prr79Sp04de4eVbWnVjVLKYVy6dImBAwfSoEEDAgMDWbBgAVu3btUkn06a6JVSDmP27Nl89dVXDBs2jICAAHr37o2Tk6ap9NKqG6WU3YgIy5cvx93dnbZt2/Laa6/x1FNPUa1aNXuHlqNooldK2U1cXBxjxozB29ubtm3b4u7urkk+E+g1kVIqS505c4bBgwcTGhqKs7Mzq1at4ueff7Z3WDmaJnobXL58GR8fH3x8fChRogQPPfRQ4vzNmzdv23bKlClEREQk+zn9+/fn8OHUR1K8ePEiDRs2pHbt2mzZsuW+4vT392f16tX3tY9SWSUkJIS33nqLypUrM2/evMRO/sqUKYOLi1YuZCY9ujYoUqRIYhcH48ePJ2/evIwYMSLZbadMmcJ///vfxL5lkpozZ849v2vDhg088sgjLFiw4L7j9Pf3x8/PjyeeeOK+91Uqs0RERDB9+nQmTpzI1atX6d69Ox9++CFly5a1d2gPDC3Rp9GGDRuoXbs2NWrU4IUXXiAqKopp06Zx7tw5WrVqRatWre7ap2XLliQ8CJY3b17eeustatWqRaNGjbhw4QL+/v688cYbrF69Gh8fH27cuMG6deto3LgxderU4dlnn03s4mD37t00adKEWrVq0aBBA0JDQ3n77bdZvHgxPj4+LF68OEuPh1J3io6OZtasWVSoUIGRI0fSqFEj9u7dy/fff69JPotl2xJ9y5Yt77lNx44dE0veLVu2pG/fvvTt25dLly4l9iWT4I8//rD5uyMjI+nbty8bNmygUqVK9O7dmy+++IJhw4YxefJkNm7ceM/R5a9fv06jRo14//33eeONN/jyyy8ZM2YMEyZMwM/Pj+nTp3Pp0iXee+891q9fT548efjf//7H5MmTGTVqFN26dWPx4sXUr1+fa9eu4eHhcdu+StnThg0bGDRoECdOnKBJkyYsWrSIFi1a2DusB5aW6NMgNjYWb29vKlWqBECfPn3YvHnzfX1Grly56NixIwB169YlMDDwrm127tzJ4cOHadq0KT4+PixYsIBTp04REBBAyZIlEwc5zp8/v9ZxKrsTkcT7U7lz58bDw4NffvmFrVu3apK3s2ybHe6nBH7n9p6enve9f1JJuwdOK1dX18Tug52dnYmJiblrGxGhTZs2fP/997ct/+uvv7TrYeVQYmJiaNq0KfXq1WPGjBk0a9aMffv26cNODkL/FdIgMjKSwMBATpw4AcA333yDr68vAPny5Uu2d8m0aNSoEdu2bUv8noiICI4dO8YjjzzCuXPn2L17NwBhYWHExMRk6HcrdS9xcXFs2rQJABcXFzp16kTTpk0T12uSdxy2DA4+1xgTbIw5mML6nsaYv+Kn7caYWknWBRpjDhhj/I0xfsntnx25ubkxb948nn32WWrUqIGTkxODBlljpQ8YMID27dsnezP2fhUtWpT58+fTo0cPatasSaNGjTh69Ci5cuVi8eLFvPLKK9SqVYs2bdoQGRlJq1atOHz4cOLNWD8/P/r375/uOJRKKi4ujqVLl+Lj40PLli35888/ARgzZgzPPfecnaNTyUppjMGECWgB1AEOprC+CVAo/n17YFeSdYGA572+487JljFjVebTY66SioqKkvnz50vVqlUFkMqVK8u3334rMTEx9g5NSTrHjBWRzcaYsqms355kdifglYbzjVLKQYWHhzNnzhwmT57MmTNnqFGjBgsXLqRbt244OzvbOzxlg4yuROsHrEkyL8A6Y8weY8yA1HY0xgwwxvgZY/wuXryYwWEppdLik08+oUyZMrz22mt4e3uzatUq9u/fz3PPPadJPhvJsFY3xphWWIm+WZLFTUXknDGmGPCbMeaoiCTbDlFEZgOzwRphKoVttLVJFhEHHHlMZY3Tp0/j5eWFk5MTISEhNG/enJEjR9K4cWN7h6bS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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_sir(N, i_0, delta=0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "da8e0e4dea6143c2932312d32071b4b6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.0005, description='i_0', max=1.0), FloatSlider(value=0.1428571428571…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<function __main__.plot_sir(N, i_0, beta=0.14285714285714285, gamma=0.07142857142857142, delta=0, steps=365, verbose=False)>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "interact(plot_sir, N=fixed(N),\n",
    "                   i_0 = widgets.FloatSlider(min=0, max=1, value=i_0),\n",
    "                   beta=widgets.FloatSlider(value=2/14, min=0.01, max=100),\n",
    "                   gamma=widgets.FloatSlider(value=1/14, min=0, max=1, step=0.01),\n",
    "                   delta=widgets.FloatSlider(value=0, min=0, max=1, step=0.01),\n",
    "                   steps=fixed(steps),\n",
    "                   verbose=fixed(False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fitting the SIR model to data\n",
    "\n",
    "Now we will use least squares to fit the SIR model to a time history of infection data collected by researchers at Johns Hopkins University. See https://github.com/CSSEGISandData\n",
    "\n",
    "\n",
    "This exercise is for illustration. There are many reasons to be wary of this modeling:\n",
    "\n",
    "+ There are serious issues with the data quality: these are cases that were _reported_ according to the rules and circumstances of where they were detected. For mortality (rather than incidence), excess mortality might give a more accurate measure.\n",
    "+ The model is a cartoon, not \"physics\" of epidemics, and it omits many factors that plausibly matter. It is not clear what estimates of the parameters mean when the model is wrong.\n",
    "+ Absent a trustworthy generative model for the data, it is not clear how to assess or interpret the uncertainty of the estimates.\n",
    "+ If the estimated model is to be used for prediction, there is no obvious way to assign meaningful uncertainties to the predictions.\n",
    "+ The optimization problem to fit the parameters has no statistical content or motivation. It is not clear that it yields an estimate that is \"good\" in a useful sense. \n",
    "+ The objective function is not convex in the model parameters, and the optimization algorithm is not guaranteed to solve the optimization problem.\n",
    "\n",
    "The data record total \"confirmed\" cases as a function of time, deaths, and recoveries: $C(t)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.optimize import curve_fit  # nonlinear least squares\n",
    "\n",
    "def f(x, beta, gamma):\n",
    "    '''\n",
    "    Model cumulative infections\n",
    "    \n",
    "    This is just a wrapper for a call to sir_model, to generate a set of\n",
    "    predictions of the cumulative incidence for curve fitting\n",
    "    '''    \n",
    "    return sir_model(N, i_0, beta, gamma, delta=0, steps=len(x))[3]  # C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 500.        ,  571.39285714,  647.87464122,  729.80689646,\n",
       "        817.5766761 ,  911.59831599, 1012.31532767, 1120.20241833,\n",
       "       1235.76764552, 1359.55471484, 1492.14542917, 1634.1622985 ,\n",
       "       1786.27131969, 1949.18493587, 2123.66518564, 2310.5270524 ,\n",
       "       2510.64202461, 2724.94187786, 2954.42268994, 3200.14910031,\n",
       "       3463.25882519, 3744.96743963, 4046.57343789, 4369.46358264,\n",
       "       4715.11855381])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test f\n",
    "N = int(10**6)\n",
    "i_0 = 0.0005\n",
    "x = range(25)\n",
    "y = f(x, 1/7, 1/14 )\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.14285714, 0.07142857])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test curve_fit\n",
    "popt, pvoc = curve_fit(f, x, y, p0=[1, 0.5], bounds = (0, [np.inf, 1]))\n",
    "popt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# try some real data from the JHU site\n",
    "import pandas as pd\n",
    "# data for countries. THIS IS A \"LIVE\" DATASET THAT IS UPDATED FREQUENTLY\n",
    "url = \"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv\"\n",
    "df = pd.read_csv(url, sep=\",\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "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>Province/State</th>\n",
       "      <th>Country/Region</th>\n",
       "      <th>Lat</th>\n",
       "      <th>Long</th>\n",
       "      <th>1/22/20</th>\n",
       "      <th>1/23/20</th>\n",
       "      <th>1/24/20</th>\n",
       "      <th>1/25/20</th>\n",
       "      <th>1/26/20</th>\n",
       "      <th>1/27/20</th>\n",
       "      <th>...</th>\n",
       "      <th>3/4/22</th>\n",
       "      <th>3/5/22</th>\n",
       "      <th>3/6/22</th>\n",
       "      <th>3/7/22</th>\n",
       "      <th>3/8/22</th>\n",
       "      <th>3/9/22</th>\n",
       "      <th>3/10/22</th>\n",
       "      <th>3/11/22</th>\n",
       "      <th>3/12/22</th>\n",
       "      <th>3/13/22</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Afghanistan</td>\n",
       "      <td>33.93911</td>\n",
       "      <td>67.709953</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>174214</td>\n",
       "      <td>174331</td>\n",
       "      <td>174582</td>\n",
       "      <td>175000</td>\n",
       "      <td>175353</td>\n",
       "      <td>175525</td>\n",
       "      <td>175893</td>\n",
       "      <td>175974</td>\n",
       "      <td>176039</td>\n",
       "      <td>176201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Albania</td>\n",
       "      <td>41.15330</td>\n",
       "      <td>20.168300</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>272030</td>\n",
       "      <td>272030</td>\n",
       "      <td>272210</td>\n",
       "      <td>272250</td>\n",
       "      <td>272337</td>\n",
       "      <td>272412</td>\n",
       "      <td>272479</td>\n",
       "      <td>272552</td>\n",
       "      <td>272621</td>\n",
       "      <td>272663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Algeria</td>\n",
       "      <td>28.03390</td>\n",
       "      <td>1.659600</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>265186</td>\n",
       "      <td>265227</td>\n",
       "      <td>265265</td>\n",
       "      <td>265297</td>\n",
       "      <td>265323</td>\n",
       "      <td>265346</td>\n",
       "      <td>265366</td>\n",
       "      <td>265391</td>\n",
       "      <td>265410</td>\n",
       "      <td>265432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Andorra</td>\n",
       "      <td>42.50630</td>\n",
       "      <td>1.521800</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>38434</td>\n",
       "      <td>38434</td>\n",
       "      <td>38434</td>\n",
       "      <td>38620</td>\n",
       "      <td>38710</td>\n",
       "      <td>38794</td>\n",
       "      <td>38794</td>\n",
       "      <td>38794</td>\n",
       "      <td>38794</td>\n",
       "      <td>38794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Angola</td>\n",
       "      <td>-11.20270</td>\n",
       "      <td>17.873900</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>98796</td>\n",
       "      <td>98796</td>\n",
       "      <td>98806</td>\n",
       "      <td>98806</td>\n",
       "      <td>98829</td>\n",
       "      <td>98855</td>\n",
       "      <td>98855</td>\n",
       "      <td>98855</td>\n",
       "      <td>98909</td>\n",
       "      <td>98927</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 786 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  Province/State Country/Region       Lat       Long  1/22/20  1/23/20  \\\n",
       "0            NaN    Afghanistan  33.93911  67.709953        0        0   \n",
       "1            NaN        Albania  41.15330  20.168300        0        0   \n",
       "2            NaN        Algeria  28.03390   1.659600        0        0   \n",
       "3            NaN        Andorra  42.50630   1.521800        0        0   \n",
       "4            NaN         Angola -11.20270  17.873900        0        0   \n",
       "\n",
       "   1/24/20  1/25/20  1/26/20  1/27/20  ...  3/4/22  3/5/22  3/6/22  3/7/22  \\\n",
       "0        0        0        0        0  ...  174214  174331  174582  175000   \n",
       "1        0        0        0        0  ...  272030  272030  272210  272250   \n",
       "2        0        0        0        0  ...  265186  265227  265265  265297   \n",
       "3        0        0        0        0  ...   38434   38434   38434   38620   \n",
       "4        0        0        0        0  ...   98796   98796   98806   98806   \n",
       "\n",
       "   3/8/22  3/9/22  3/10/22  3/11/22  3/12/22  3/13/22  \n",
       "0  175353  175525   175893   175974   176039   176201  \n",
       "1  272337  272412   272479   272552   272621   272663  \n",
       "2  265323  265346   265366   265391   265410   265432  \n",
       "3   38710   38794    38794    38794    38794    38794  \n",
       "4   98829   98855    98855    98855    98909    98927  \n",
       "\n",
       "[5 rows x 786 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "746 [      1       1       3       4       4       6      10      10      23\n",
      "      23      35      90     262     442     615     801     827     864\n",
      "     914     977    1057    1151    1255    1326    1395    1450    1591\n",
      "    1724    1877    2046    2201    2395    2577    2860    3107    3386\n",
      "    3757    4077    4369    4681    5071    5402    5635    5819    5996\n",
      "    6174    6318    6511    6681    6879    7073    7242    7384    7515\n",
      "    7695    7912    8073    8210    8445    8575    8698    8851    9008\n",
      "    9158    9311    9407    9523    9670    9821    9938   10083   10218\n",
      "   10319   10429   10513   10591   10667   10713   10791   10858   10927\n",
      "   10968   11044   11117   11182   11230   11289   11360   11387   11428\n",
      "   11480   11512   11593   11633   11669   11699   11734   11771   11811\n",
      "   11875   11924   11948   11962   12001   12016   12035   12099   12139\n",
      "   12193   12217   12250   12294   12344   12391   12391   12391   12527\n",
      "   12561   12615   12636   12675   12675   12675   12751   12768   12794\n",
      "   12815   12832   12832   12832   12878   12888   12900   12916   12946\n",
      "   12946   12946   13037   13061   13092   13124   13173   13173   13173\n",
      "   13262   13302   13350   13390   13438   13438   13438   13547   13577\n",
      "   13634   13725   13789   13789   13789   13996   14073   14185   14306\n",
      "   14442   14442   14442   14815   14959   15070   15214   15379   15483\n",
      "   15617   15740   15855   15940   16056   16127   16239   16317   16397\n",
      "   16480   16537   16627   16700   16779   16891   16985   17084   17195\n",
      "   17374   17547   17736   17883   18113   18356   18607   18924   19216\n",
      "   19557   19890   20237   20571   20571   21393   21847   22436   22905\n",
      "   23323   23799   24357   24916   25594   26213   26637   27072   27464\n",
      "   27998   28396   28932   29302   29680   30057   30379   30710   31156\n",
      "   31638   32082   32422   32811   33101   33593   34023   34441   34941\n",
      "   35392   35844   36373   37003   37763   38622   39411   40356   41412\n",
      "   42157   43174   44034   45225   46351   47299   48241   49594   50530\n",
      "   51753   53180   54230   55121   55892   56958   57952   58963   60000\n",
      "   61078   62136   63331   64551   65808   67105   68362   69635   70485\n",
      "   71654   73021   74204   75395   76718   78354   79352   80481   81949\n",
      "   83535   85140   86743   88858   90603   92649   94799   97357  100489\n",
      "  103564  107116  109758  113095  116087  119779  123813  128321  131606\n",
      "  134434  137632  140175  143472  146341  149333  151167  153347  155826\n",
      "  158447  161230  163479  165930  167541  168711  170787  172779  174995\n",
      "  176837  178497  180240  181486  182725  183801  185159  185159  187320\n",
      "  188199  189088  189895  190619  191505  192265  193038  193917  194671\n",
      "  195296  195948  196540  197208  197664  198095  198472  198960  199357\n",
      "  199782  200335  200773  201186  201621  202051  202417  202887  203365\n",
      "  203793  204067  204362  204799  205183  205597  206065  206617  207081\n",
      "  207577  208027  208556  209079  209682  210212  210732  211195  211692\n",
      "  212224  212798  213318  213932  214326  214839  215264  215791  217798\n",
      "  218660  219305  219918  220459  221071  221842  222629  223415  224258\n",
      "  224848  225505  226777  227031  225030  225844  226633  227049  228013\n",
      "  228692  229902  230603  231265  231973  232718  233318  233797  234317\n",
      "  234931  235648  236346  237101  237792  238306  238869  239532  240330\n",
      "  241007  241731  242633  243374  244065  244868  245761  246463  247010\n",
      "  247622  248326  248950  249785  250554  250554  252045  252912  253673\n",
      "  254482  254482  256482  257505  258182  259056  259988  260913  262159\n",
      "  263514  264465  265539  266503  267339  268255  269343  270557  271908\n",
      "  272659  273494  274413  275207  276280  277399  278396  279434  280383\n",
      "  281227  282135  283089  284117  285044  285636  286489  286948  287325\n",
      "  288229  288704  289122  289559  289874  290111  290333  290686  291017\n",
      "  291220  291463  291652  291801  291956  292179  292352  292574  292769\n",
      "  292943  293094  293337  293677  294152  294478  294925  295317  295654\n",
      "  296196  296885  297543  298094  298614  299223  300071  301126  302328\n",
      "  303469  304429  305459  306100  306944  307764  308615  309420  310127\n",
      "  310876  311520  312292  312851  314135  314983  316068  316807  317700\n",
      "  318485  319295  320222  321154  322019  322965  323786  324721  325725\n",
      "  326887  327972  329010  329927  330777  331736  332622  333815  334799\n",
      "  335722  336746  337466  338240  339580  340567  341549  342474  343351\n",
      "  344088  344850  345693  346518  347212  347909  348347  348979  349440\n",
      "  349891  350405  350996  351553  351939  352373  352636  353061  353431\n",
      "  353744  354068  354393  354645  354913  355257  355603  355944  356326\n",
      "  356684  357037  357370  357827  358369  358796  359237  359663  360031\n",
      "  360411  360888  361461  362068  362738  363356  363900  364464  365051\n",
      "  365840  366607  367307  368060  368651  369403  370159  371286  372533\n",
      "  373803  375065  376414  377825  379078  380949  382796  384580  386251\n",
      "  387783  389240  391221  393199  395797  398048  400145  402561  404855\n",
      "  407417  410434  412566  417151  420099  423322  426992  430891  434798\n",
      "  438811  442881  446676  450091  453802  458001  462427  466817  470893\n",
      "  474637  478927  483253  487401  492521  497201  501760  506085  509111\n",
      "  516257  522581  529210  536195  542794  548400  554389  562188  570502\n",
      "  579275  589274  600468  609062  617274  627356  647934  661320  673807\n",
      "  685036  685036  685036  726071  739071  762299  783702  802397  823282\n",
      "  831236  840037  865110  893393  919388  937649  950237  969485  983899\n",
      " 1006295 1030638 1056389 1080003 1105037 1131206 1159986 1193479 1232238\n",
      " 1272864 1319695 1355815 1397833 1438181 1484771 1531518 1582551 1636206\n",
      " 1677289 1713485 1742569 1787935 1842936 1887161 1927340 1966530 2003042\n",
      " 2037891 2087689 2142809 2196556 2244726 2289076 2327399 2356873 2399851\n",
      " 2442799 2483399 2519057 2552361 2578051 2606934 2637414 2666454 2691663\n",
      " 2714447 2731806 2748260 2764838 2783399 2803857 2803857 2837501 2853236\n",
      " 2864063 2876288 2891763 2908721 2923030 2936856 2943947 2950605]\n"
     ]
    }
   ],
   "source": [
    "# data for Denmark\n",
    "DK = df.loc[(df[\"Country/Region\"] == \"Denmark\") & df[\"Province/State\"].isna()]  # Denmark\n",
    "DK = DK.drop(['Province/State','Country/Region','Lat','Long'], axis=1).T        # remove fields we don't need\n",
    "y = DK.to_numpy()   # turn series into a vector\n",
    "y = y[np.nonzero(y)] # remove the data before the first detected case\n",
    "x = range(len(y))    # for model-fitting and plotting\n",
    "print(len(y),y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Days since first detected case')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,y, linestyle='-', color='r')\n",
    "plt.title('\"Confirmed\" COVID-19 Cases in Denmark')\n",
    "plt.xlabel('Days since first detected case')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = 5792202 # estimated population of DK in 2020\n",
    "i_0 = y[0]/N # initial prevalence\n",
    "x = np.array(range(len(y)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.11506788e-02, 4.12605498e-16])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fit the model by nonlinear least squares\n",
    "popt, pvoc = curve_fit(f, x, y, p0=[1, 0.5], bounds = (0, [500, 1]), maxfev=10000)\n",
    "popt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "S, I, R, C = sir_model(N, i_0, beta=popt[0], gamma=popt[1], delta=0, steps=len(y))\n",
    "times = list(range(len(y)))\n",
    "fig, ax = plt.subplots(nrows=1, ncols=1)\n",
    "ax.plot(times, y, linestyle='-', color='r', label='Data')\n",
    "ax.plot(times, C, linestyle='-.', color='k', label='SIR Model')\n",
    "ax.legend(loc='best')\n",
    "plt.xlabel('Days since first detected case')\n",
    "plt.title('\"Confirmed\" COVID-19 Infections in Denmark')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What happens if we run the model into the future?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "S, I, R, C = plot_sir(N, i_0, beta=popt[0], gamma=popt[1], delta=0, steps=1000, verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The total number of infections stabilizes, and the pandemic abates. The effective reproductive number $R_0$ is less than 1.\n",
    "\n",
    "Let's do a quick sanity check.\n",
    "Recall that $R_0 = \\beta/\\gamma$ for the SIR model _initially_, when the number infected, recovered, or dead are negligible compared to the total population.\n",
    "Once some of the population has recovered, some of the people an infectious person encounters wiil be people who have recovered and not susceptible to reinfection (according to the model).\n",
    "To first order, $\\beta$ is effectively reduced by $S/N$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "51261262636618.664"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# R_0 at the time the first infection is detected\n",
    "popt[0]/popt[1] # greater than 1. According to the model, the infection will spread if R_0 > 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "219047240451.27252"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# After 1000 timesteps, R_0 is different \n",
    "(S[-1]/N)*popt[0]/popt[1] # less than 1: According to the model, the infection will abate."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fitting curves to the cumulative incidence function \n",
    "\n",
    "The SIR model and its variants attempt to capture the dynamics of transmission and recovery,\n",
    "For some parameter choices, that leads to a sigmoidal shape for the cumulative incidence of infections.\n",
    "\n",
    "Some pandemic predictions simply fit a sigmoidal function to the cumulative number of infections, an approach\n",
    "that dates back to William Farr in the 1800s. \n",
    "King et al. (2015) showed that this approach does not work well for AIDS or Ebola.\n",
    "Nonetheless, this is the approach the IHME takes: they fit a scaled and shifted Gaussian cdf to \n",
    "cumulative incidence.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sigmoidal Models\n",
    "\n",
    "\n",
    "Common sigmoidal models include CDFs of unimodal distributions (such as the Gaussian cdf $\\Phi(x)$) and the sigmoid function $1/(e^{-x} + 1)$, the inverse of the logistic function.\n",
    "\n",
    "To allow this function to be shifted and scaled, we can introduce the family of curves\n",
    "\n",
    "\\begin{equation}\n",
    "\\sigma(x; a, b, c) \\equiv \\frac{c}{e^{-b(x-a)}+1}.\n",
    "\\end{equation}\n",
    "\n",
    "The parameter $a$ controls where the function crosses $c/2$; $b$ controls how rapidly it increases, and $c$ is its asymptotic limit.\n",
    "\n",
    "Let's fit this to the Danish data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def g(x, a, b, c):\n",
    "    '''\n",
    "    Wrapper for the sigmoid to pass to the curve-fitting function\n",
    "    '''    \n",
    "    return c/(np.exp(-b*(x-a))+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f98b0dde0a0>]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# test g visually.\n",
    "z = np.array(range(-8,15,1))\n",
    "plt.plot(z, g(z,3,1/2,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5.00000000e+02, 1.11921669e-02, 1.16292975e+06])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fit the DK data\n",
    "popts, pvocs = curve_fit(g, x, y, p0=[len(x)/2, 0.02, np.max(y)/2], bounds = ([0, 0, 0], [500, 500, N]), maxfev=10000)\n",
    "popts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot\n",
    "Cs = g(x, popts[0], popts[1], popts[2])\n",
    "times = list(range(len(y)))\n",
    "fig, ax = plt.subplots(nrows=1, ncols=1)\n",
    "ax.plot(times, y, linestyle='-', color='r', label='Data')\n",
    "ax.plot(times, C[:len(times)], linestyle='-.', color='k', label='SIR Model')\n",
    "ax.plot(times, Cs, linestyle=':', color='b', label='Sigmoid Model')\n",
    "ax.legend(loc='best')\n",
    "plt.xlabel('Days since first detected case')\n",
    "plt.title('\"Confirmed\" COVID-19 Infections in Denmark')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Both models agree reasonably well with past data. But they have rather different predictions about the future.\n",
    "\n",
    "Let's look at how the predictions vary over time, as the dataset grows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_predictions(y, n, points):\n",
    "    '''\n",
    "    plot SIR and sigmoid models fitted to the first n data\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    y : list of floats\n",
    "        number of infections at each time point\n",
    "    n : int\n",
    "        fit the models to the first n elements of y\n",
    "    points : int\n",
    "        number of time points for which to plot the prediction\n",
    "        \n",
    "    Returns\n",
    "    -------\n",
    "    no return value\n",
    "    '''\n",
    "    # fit the two models\n",
    "    x = list(range(len(y)))\n",
    "    popt, pvoc = curve_fit(f, x[:n], y[:n], p0=[1, 0.5], bounds = (0, [500, 1]),\n",
    "                           maxfev=10000)\n",
    "    popts, pvocs = curve_fit(g, x[:n], y[:n], p0=[len(x)/2, 0.02, np.max(y)/2],\n",
    "                             bounds = ([0, 0, 0], [500, 500, N]), maxfev=10000)\n",
    "    times = list(range(points))\n",
    "    S, I, R, C = sir_model(N, i_0, beta=popt[0], gamma=popt[1], delta=0, steps=points)\n",
    "    Cs = g(times, popts[0], popts[1], popts[2])\n",
    "    fig, ax = plt.subplots(nrows=1, ncols=1)\n",
    "    ax.plot(x, y, linestyle='-', color='r', label='Data')\n",
    "    ax.plot(times, C, linestyle='-.', color='k', label='SIR Model')\n",
    "    ax.plot(times, Cs, linestyle=':', color='b', label='Sigmoid Model')\n",
    "    ax.vlines(x[n-1], 0, np.max([C, Cs]), label='truncation time')\n",
    "    ax.legend(loc='best')\n",
    "    plt.xlabel('Days since first detected case')\n",
    "    plt.title('\"Confirmed\" COVID-19 Infections in Denmark')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "30e27a949c394f4ca345aa3ddebe4b93",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(IntSlider(value=100, description='n', max=746, min=20), Output()), _dom_classes=('widget…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<function __main__.plot_predictions(y, n, points)>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "interact(plot_predictions, y=fixed(y),\n",
    "                           n = widgets.IntSlider(min=20, max=len(y), value=100),\n",
    "                           points=fixed(2*len(y)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The predictions depend on the model and details of the data. \n",
    "A few additional days of data can drastically change the predictions. \n",
    "For some end dates, the two models have nearly identical predictions; for others, \n",
    "they differ by a factor of 20 or more.\n",
    "\n",
    "Unlike the SIR model, the sigmoid model does not \"know\" how many people are in the population, so even if recovery conveys immunity, the cumulative number of infections in the sigmoid model can exceed the size of the population.\n",
    "\n",
    "This mindless \"curve fitting\" approach is not a reliable basis for predicting the course of the pandemic, predicting ICU demand, predicting the effect of an intervention, allocating resources, or setting public policy.\n",
    "It is a mechanical application of models and algorithms to data, not science.\n",
    "\n",
    "Unsurprisingly, models of this type do not predict infections well in practice. \n",
    "The [most-cited predictions](https://covid19.healthdata.org/global?view=total-deaths&tab=trend) have been those promulgated by the [Institute for Health Metrics and Evaluation](http://www.healthdata.org/) (IHME) at the University of Washington.\n",
    "They say, \n",
    "\n",
    ">Our model is designed to be a planning tool for government officials who need to know how different policy decisions can radically alter the trajectory of COVID-19 for better or worse.\n",
    "\n",
    ">Our model aimed at helping hospital administrators and government officials understand when demand on health system resources will be greatest. (http://www.healthdata.org/covid/faqs#differences%20in%20modeling, last visited 23 January 2021)\n",
    "\n",
    "IHME's model is described [here](https://static-content.springer.com/esm/art%3A10.1038%2Fs41591-020-1132-9/MediaObjects/41591_2020_1132_MOESM1_ESM.pdf).\n",
    "Early in the pandemic, IHME predicted that there would be about 60,000 COVID-19 deaths in ths U.S.\n",
    "As of 18 February 2021, there have been [more than 490,000](https://coronavirus.jhu.edu/us-map).\n",
    "Between March and August, 2020, next-day deaths were within the IHME 95% prediction interval only about \n",
    "30% of the time, despite revisions of the model https://arxiv.org/abs/2004.04734.\n",
    "(We shall not delve into how IHME produces its prediction intervals.)\n",
    "See also https://www.vox.com/future-perfect/2020/5/2/21241261/coronavirus-modeling-us-deaths-ihme-pandemic.\n",
    "\n",
    "One feature of the sigmoidal models is that they predict rapid declines after the peak (the decline is just as rapid as the rise), a feature that\n",
    "some politicians like. \n",
    "That feature is built into the sigmoidal curve: it is an _assumption_, not something that comes from the data.\n",
    "\n",
    "There are also more complicated models of pandemics, including models with more \"compartments,\" models based on other sigmoidal functions (such as the Gaussian CDF), and models that allow various kinds of heterogeneity within the population and simulate interactions between individuals.\n",
    "Some have proved more accurate than others.\n",
    "Just how poorly some models perform is obscured by the practice of revising the model and projections frequently--even daily. \n",
    "\n",
    "Sometimes, a moddle with little substantive foundation can nonetheless predict the behavior of a system, at least if the system is not changing quickly. \n",
    "Accurate predictions of the effect of interventions (masks, lockdowns, vaccination, and so on) require a close tie between the world and the model: the model needs a substantive basis. \n",
    "For causal inferences, the model needs to be a _generative model_ or _response schedule_.\n",
    "\n",
    "George Box famously wrote, \"all models are wrong, but some are useful.\"\n",
    "While that quotation is often invoked as a general license to throw models at data, it should instead \n",
    "prompt questions:\n",
    "\n",
    "* useful for what?\n",
    "* how can you tell whether a model is useful for a particular goal?\n",
    "\n",
    "In the same paper, Box wrote, \"It is inappropriate to be concerned with mice when there are tigers abroad.\"\n",
    "Most of the fretting people do about statistical models is at the level of mice (e.g., asymptotics under unrealistic assumptions), while the problems with most \n",
    "statistical models are tigers: the models have little or no connection to the actual scientific question."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## New variants\n",
    "\n",
    "As of this writing (10 February 2021), new strains of COVID-19 have been detected in the UK, South Africa, and the US, where cases of the new strain have a doubling time of about 10 days. The UK strain is estimated to be 50% to 70% more transmissible than the original virus. There is mounting evidence that the strain is also more lethal.\n",
    "https://www.wsj.com/articles/new-u-k-covid-19-variant-could-be-more-deadly-british-officials-say-11611338370 (last visited 22 January 2021).\n"
   ]
  }
 ],
 "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.8.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}