\n", "Department of Ecology & Evolutionary Biology

\n", "Princeton University, Princeton, NJ, USA

\n", "17 March 2020" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction\n", "\n", "The following model was inspired by the debates surrounding the United Kingdom Government's [initial strategy](https://www.theatlantic.com/health/archive/2020/03/coronavirus-pandemic-herd-immunity-uk-boris-johnson/608065/) for addressing the COVID-19 pandemic. \n", "\n", "## The debate\n", "The UK's proposed approach, [prior to a policy change announced yesterday](https://www.bbc.com/news/health-51915302), was based on three assumptions:\n", "1. Restrictive disease control measures carry social and economic cost\n", "2. Even leaving aside cost, the most restrictive measures can only be maintained for short periods before compliance becomes a problem.\n", "3. Individuals who are infected with COVID-19 and recover [become immune, at least temporarily](http://dylanhmorris.com/post/immunity-primer), and will not be reinfected during the epidemic.\n", "\n", "There is little disagreement about the first or third assumptions. The degree to which the second assumption holds has been a matter of some debate, but it is plausible that it holds at least to some degree for a sufficiently long and arduous intervention.\n", "\n", "Given these assumptions, the UK Government determined that the most restrictive and effective control measures should not be imposed immediately. They should instead be used during a period of rapid epidemic expansion, thus maximizing the number of cases averted and avoiding a large second epidemic peak after the relaxation of control measures. \n", "\n", "Indeed, some discussion surrounding the plan have highlighted the risk of intervening too strongly too early and then backing off too much. An aggressive response that causes a transient decline in total cases but fails to eradicate a disease fully can lead to an [explosive second epidemic peak](https://personalpages.manchester.ac.uk/staff/thomas.house/blog/modelling-herd-immunity.html). This occurs because the overly aggressive intervention slows the accumulation of immunity to the disease in the population. When measures are relaxed, many individuals remain susceptible, and the number of infections can grow rapidly.\n", "\n", "We believe, however, that there there are potential dangers in keeping disease-control powder dry in the name of maximizing efficacy and minimizing the risk of resurgence. In particular, we are concerned about imperfect implementation, whether due to noisy estimates of case counts, errors in epidemiological parameter estimation, or unplanned delays in policy implementation. In the case of explosive epidemic of a novel pathogen, imperfect implementation of this strategy can produce extreme costs. This is due to an asymmetry between underreaction or acting too late and overreaction or acting too early: only overreaction leaves sufficent time and resources for a course-correction.\n", "\n", "## The problem: exponential growth magnifies errors\n", "During the initial epidemic spread of a novel zoonotic disease like COVID-19 – a disease to which almost no-one in the population is immune – infectious cases increase near-exponentially.\n", "\n", "Exponential growth magnifies implementation errors. If an intervention that is too little or too late, there may not be time to course-correct before the epidemic spikes to a large peak number of infectious individuals. If there is an insufficiently controlled epidemic peak, [hospitals and emergency services can be overwhelmed](https://www.statnews.com/2020/03/11/flattening-curve-coronavirus/), case-fatality rates rise, and the overall epidemic morbidity and mortality rise dramatically. Social and economic costs are also magnified.\n", "\n", "Since verbal arguments do not always stand up to more rigorous analysis, we have developed a simple mathematical model to encode the basic problem of an optimal short intervention aimed and reducing the highest peak in an epidemic.\n", "\n", "\n", "## This blog post\n", "We aim here at a semi-technical presentation of our work. We wish to provide sufficient detail – and code – to allow researchers to assess the work. But as this is a blog post, we will try to provide enough guidance for the non-technical reader to make things accessible. That said, this is not intended as a tutorial on epidemiological modeling, and some sections (in particular the specification and analysis of the mathematical model) are somewhat dense and technical. A number of particularly technical points are deferred to a technical appendix at the end of the post." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model\n", "\n", "## Aim: peak reduction\n", "\n", "The strategies being debated aim to maximize the benefits from a highly efficacious intervention that can only be maintained for a limited time. To assess the risks of mis-implementing such a strategy, we first specify the goal to be accomplished and determine an optimal strategy. We then assess the costs of aiming at but mis-implementing such an optimal strategy.\n", "\n", "We will consider strategies that aim at epidemic mitigation rather than at eradication, as these have been the focus of the current discussions. Moreover, eradication of a pathogen with $\\mathcal{R}_e \\gg 1$ in the absence of control requires a sustained strong response that holds $\\mathcal{R}_e < 1$ for a substantial amount of time. Since this work focuses on interventions that are constrained to be short, limited in efficacy, or both, we will assume policymakers are aiming at mitigation – [\"flattening the curve\"](https://www.statnews.com/2020/03/11/flattening-curve-coronavirus/)\n", "\n", "As such, our principal criterion for the success of an intervention will be **minimizing the highest peak of the epidemic**. The peak is the largest single quantity of infectious individuals at any one time. This quantity is critical because it is the point at which [hospital beds will be most in demand](https://www.vox.com/science-and-health/2020/3/14/21179714/coronavirus-covid-19-hospital-beds-china) and health services will be most strained. An overwhelmed system can dramatically increase case-fatality rates and lead to increased rates of complications from infection. \n", "\n", "All else equal, a policymaker would also like to minimize the **total cases** during the epidemic, but for an explosively spreading novel virus, this consideration is secondary. The costs of a healthcare system collapse are simply too high. What is more, among non-eradicative interventions, those that reduce the highest epidemic peak (almost) necessarily reduce the total case count (or \"final size\") of the epidemic, though they may not do so as effectively as interventions specifically targeted at final size reduction rather than at peak reduction.\n", "\n", "To get some intuition for the points above, let's plot an the classic SIR (susceptible-infectious-recovered) model of an epidemic with COVID-like parameters, optimistically imagining that the healthcare system has a capacity to handle up to 20% of the population being infected at any one time." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "## import needed modules\n", "from scipy.optimize import minimize\n", "from scipy.integrate import odeint\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import matplotlib as mpl\n", "from IPython.display import set_matplotlib_formats\n", "\n", "## styling for plots\n", "set_matplotlib_formats('svg')\n", "plt.style.use('seaborn-whitegrid')\n", "mpl.rcParams['axes.labelsize'] = \"xx-large\"\n", "mpl.rcParams['xtick.labelsize'] = \"xx-large\"\n", "mpl.rcParams['ytick.labelsize'] = \"xx-large\"\n", "mpl.rcParams['axes.titlesize'] = \"xx-large\"\n", "mpl.rcParams['text.usetex'] = True\n", "mpl.rcParams['axes.formatter.use_mathtext'] = True\n", "mpl.rcParams['axes.formatter.limits'] = ((-3, 3))\n", "mpl.rcParams['axes.grid'] = True\n", "mpl.rcParams['legend.frameon'] = True\n", "mpl.rcParams['legend.fancybox'] = True\n", "mpl.rcParams['legend.framealpha'] = 1\n", "mpl.rcParams['legend.title_fontsize'] = \"x-large\"\n", "mpl.rcParams['legend.fontsize'] = \"x-large\"\n", "mpl.rcParams['lines.linewidth'] = 5\n", "\n", "## custom colors\n", "ourblue = \"#0571a3\"\n", "ourred = \"#c20a1f\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "