diff --git a/SIRmodel.html b/SIRmodel.html new file mode 100644 index 0000000..4dad386 --- /dev/null +++ b/SIRmodel.html @@ -0,0 +1,906 @@ + + + +SIRmodel + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+

Simple model of epidemic dynamics: SIR

Prof. Marco Arieli Herrera-Valdez,

Facultad de Ciencias, Universidad Nacional Autónoma de México

Created March 7, 2016

+

Let $x$, $y$, and $z$ represent the fraction of susceptibles, infected, and recovered individuals within a population. Assume homogeneous mixing with a probability of infection given a contact with an infected individual given by $\beta$ and an average removal time $\beta^{-1}$ from the infected group, by recovery or death due to infection. The population dynamics are given by +\begin{eqnarray} +\partial_t x &=& -\alpha xy +\ +\partial_t y &=& \left( \alpha x - \beta \right) y +\ +\partial_t x &=& \beta y +\end{eqnarray}

+

Notice that the population size does not matter because it is kept constant.

+ +
+
+
+
+
+
In [23]:
+
+
+
#Import the necessary modules and perform the necessary tests
+import scipy as sc
+import pylab as gr
+sc.test("all",verbose=0)
+%matplotlib inline
+
+ +
+
+
+ +
+
+ + +
+
+
Running unit tests for scipy
+NumPy version 1.10.4
+NumPy relaxed strides checking option: False
+NumPy is installed in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy
+SciPy version 0.17.0
+SciPy is installed in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy
+Python version 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
+nose version 1.3.7
+
+
+
+ +
+
+
----------------------------------------------------------------------
+Ran 1 test in 2.492s
+
+OK
+
+
+
+ +
+
+ +
+
+
+
+
+
+

Setup a python function that specifies the dynamics

+ +
+
+
+
+
+
In [31]:
+
+
+
def SIR(U,t,p):
+    x,y,z=U
+    yNew= p["alpha"] * y * x
+    zNew= p["beta"] * y 
+    dx = -yNew
+    dy = yNew - zNew
+    dz = zNew
+    return dx, dy, dz
+
+ +
+
+
+ +
+
+
+
+
+
+

The function SIR above takes three arguments, $U$, $t$, and $p$ that represent the states of the system, the time and the parameters, respectively.

+ +
+
+
+
+
+
+
+
+

Outbreak condition

The condition +\begin{equation} +\frac{\alpha}{\beta}x(t)>1 , \quad y>0 +\end{equation} +defines a threshold for a full epidemic outbreak. An equivalent condition is +\begin{equation} +x>\frac{\beta}{\alpha }, \quad y>0 +\end{equation}

+

Therefore, with the parameters $(\alpha,\beta)$=(0.5,0.1), there will be an outbreak if the initial condition for $x(t)>1/5$ with $y>0$. +Notice that the initial value for $z$ can be interpreted as the initial proportion of immune individuals within the population.

+

The dynamics related to the oubreak condition can be studied by defining a variable $B(t) = x(t) \alpha/\beta$, called by some authors "effective reproductive number". If $x(t)\approx 1$, the corresponding $B(t)$ is called "basic reproductive number", or $R_o$.

+ +
+
+
+
+
+
+
+
+

Let's define a python dictionary containing parameters and initial conditions to perform simulations.

+ +
+
+
+
+
+
In [74]:
+
+
+
p={"alpha": 0.15, "beta":0.1, "timeStop":300.0, "timeStep":0.01 }
+p["Ro"]=p["alpha"]/p["beta"]
+p["sampTimes"]= sc.arange(0,p["timeStop"],p["timeStep"])
+N= 1e4; i0= 1e1; r0=0; s0=N-i0-r0
+x0=s0/N; y0=i0/N; z0=r0/N;
+p["ic"]=[x0,y0,z0]
+print("N=%g with initial conditions (S,I,R)=(%g,%g,%g)"%(N,s0,i0,r0))
+print("Initial conditions: ", p["ic"])
+print("B(0)=%g"%(p["ic"][0]*p["Ro"]))
+
+ +
+
+
+ +
+
+ + +
+
+
N=10000 with initial conditions (S,I,R)=(9990,10,0)
+Initial conditions:  [0.999, 0.001, 0.0]
+B(0)=1.4985
+
+
+
+ +
+
+ +
+
+
+
+
+
+

Integrate numerically and plot the results

+ +
+
+
+
+
+
In [75]:
+
+
+
# Numerical integration
+xyz= sc.integrate.odeint(SIR, p["ic"], p["sampTimes"], args=(p,)).transpose()
+# Calculate the outbreak indicator
+B= xyz[0]*p["alpha"]/p["beta"]
+
+ +
+
+
+ +
+
+
+
In [76]:
+
+
+
# Figure
+fig=gr.figure(figsize=(11,5))
+gr.ioff()
+rows=1; cols=2
+ax=list()
+for n in sc.arange(rows*cols):
+    ax.append(fig.add_subplot(rows,cols,n+1))
+
+ax[0].plot(p["sampTimes"], xyz[0], 'k', label=r"$(t,x(t))$")
+ax[0].plot(p["sampTimes"], xyz[1], 'g', lw=3, label=r"$(t,y(t))$")
+ax[0].plot(p["sampTimes"], xyz[2], 'b', label=r"$(t,z(t))$")
+ax[0].plot(p["sampTimes"], B, 'r', label=r"$(t,B(t))$")
+ax[0].plot([0, p["timeStop"]], [1,1], 'k--', alpha=0.4)
+ax[1].plot(xyz[0], xyz[1], 'g', lw=3, label=r"$(x(t),y(t))$")
+ax[1].plot(xyz[0], xyz[2], 'b', label=r"$(x(t),z(t))$")
+ax[1].plot(xyz[0], B, 'r', label=r"$(x(t),B(t))$")
+ax[1].plot([0, 1], [1,1], 'k--', alpha=0.4)
+ax[0].legend(); ax[1].legend(loc="upper left")
+gr.ion(); gr.draw()
+
+ +
+
+
+ +
+
+ + +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+

Notice that $y$ reaches its maximum when $B(t)$ crosses 1. That is, the epidemic starts to wine down when the $B(t)<1$.

+ +
+
+
+
+
+
+
+
+

Exercises:

Setup two simulations for which there is no outbreak, such that:

+

(a) The initial density of "immune" individuals is large enough to prevent an epidemic.

+

(b) The initial density of "immune" individuals is really small but there is no epidemic outbreak.

+ +
+
+
+
+
+
In [ ]:
+
+
+
 
+
+ +
+
+
+ +
+
+
+ + diff --git a/SIRmodel.ipynb b/SIRmodel.ipynb new file mode 100644 index 0000000..c73ad5d --- /dev/null +++ b/SIRmodel.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simple model of epidemic dynamics: SIR\n", + "### Prof. Marco Arieli Herrera-Valdez, \n", + "#### Facultad de Ciencias, Universidad Nacional Autónoma de México\n", + "Created March 7, 2016\n", + "\n", + "\n", + "Let $x$, $y$, and $z$ represent the fraction of susceptibles, infected, and recovered individuals within a population. Assume homogeneous mixing with a probability of infection given a contact with an infected individual given by $\\beta$ and an average removal time $\\beta^{-1}$ from the infected group, by recovery or death due to infection. The population dynamics are given by\n", + "\\begin{eqnarray}\n", + "\\partial_t x &=& -\\alpha xy\n", + "\\\\\n", + "\\partial_t y &=& \\left( \\alpha x - \\beta \\right) y\n", + "\\\\\n", + "\\partial_t x &=& \\beta y\n", + "\\end{eqnarray}\n", + "\n", + "Notice that the population size does not matter because it is kept constant. " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running unit tests for scipy\n", + "NumPy version 1.10.4\n", + "NumPy relaxed strides checking option: False\n", + "NumPy is installed in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy\n", + "SciPy version 0.17.0\n", + "SciPy is installed in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scipy\n", + "Python version 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]\n", + "nose version 1.3.7\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "----------------------------------------------------------------------\n", + "Ran 1 test in 2.492s\n", + "\n", + "OK\n" + ] + } + ], + "source": [ + "#Import the necessary modules and perform the necessary tests\n", + "import scipy as sc\n", + "import pylab as gr\n", + "sc.test(\"all\",verbose=0)\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Setup a python function that specifies the dynamics" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def SIR(U,t,p):\n", + " x,y,z=U\n", + " yNew= p[\"alpha\"] * y * x\n", + " zNew= p[\"beta\"] * y \n", + " dx = -yNew\n", + " dy = yNew - zNew\n", + " dz = zNew\n", + " return dx, dy, dz" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function SIR above takes three arguments, $U$, $t$, and $p$ that represent the states of the system, the time and the parameters, respectively. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Outbreak condition\n", + "\n", + "The condition \n", + "\\begin{equation}\n", + "\\frac{\\alpha}{\\beta}x(t)>1 , \\quad y>0\n", + "\\end{equation}\n", + "defines a threshold for a full epidemic outbreak. An equivalent condition is \n", + "\\begin{equation}\n", + "x>\\frac{\\beta}{\\alpha }, \\quad y>0\n", + "\\end{equation}\n", + "\n", + "Therefore, with the parameters $(\\alpha,\\beta)$=(0.5,0.1), there will be an outbreak if the initial condition for $x(t)>1/5$ with $y>0$. \n", + "Notice that the initial value for $z$ can be interpreted as the initial proportion of immune individuals within the population. \n", + "\n", + "The dynamics related to the oubreak condition can be studied by defining a variable $B(t) = x(t) \\alpha/\\beta$, called by some authors \"_effective reproductive number_\". If $x(t)\\approx 1$, the corresponding $B(t)$ is called \"_basic reproductive number_\", or $R_o$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's define a python dictionary containing parameters and initial conditions to perform simulations." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N=10000 with initial conditions (S,I,R)=(9990,10,0)\n", + "Initial conditions: [0.999, 0.001, 0.0]\n", + "B(0)=1.4985\n" + ] + } + ], + "source": [ + "p={\"alpha\": 0.15, \"beta\":0.1, \"timeStop\":300.0, \"timeStep\":0.01 }\n", + "p[\"Ro\"]=p[\"alpha\"]/p[\"beta\"]\n", + "p[\"sampTimes\"]= sc.arange(0,p[\"timeStop\"],p[\"timeStep\"])\n", + "N= 1e4; i0= 1e1; r0=0; s0=N-i0-r0\n", + "x0=s0/N; y0=i0/N; z0=r0/N;\n", + "p[\"ic\"]=[x0,y0,z0]\n", + "print(\"N=%g with initial conditions (S,I,R)=(%g,%g,%g)\"%(N,s0,i0,r0))\n", + "print(\"Initial conditions: \", p[\"ic\"])\n", + "print(\"B(0)=%g\"%(p[\"ic\"][0]*p[\"Ro\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Integrate numerically and plot the results" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Numerical integration\n", + "xyz= sc.integrate.odeint(SIR, p[\"ic\"], p[\"sampTimes\"], args=(p,)).transpose()\n", + "# Calculate the outbreak indicator\n", + "B= xyz[0]*p[\"alpha\"]/p[\"beta\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nIdHS+gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Figure\n", + "fig=gr.figure(figsize=(11,5))\n", + "gr.ioff()\n", + "rows=1; cols=2\n", + "ax=list()\n", + "for n in sc.arange(rows*cols):\n", + " ax.append(fig.add_subplot(rows,cols,n+1))\n", + "\n", + "ax[0].plot(p[\"sampTimes\"], xyz[0], 'k', label=r\"$(t,x(t))$\")\n", + "ax[0].plot(p[\"sampTimes\"], xyz[1], 'g', lw=3, label=r\"$(t,y(t))$\")\n", + "ax[0].plot(p[\"sampTimes\"], xyz[2], 'b', label=r\"$(t,z(t))$\")\n", + "ax[0].plot(p[\"sampTimes\"], B, 'r', label=r\"$(t,B(t))$\")\n", + "ax[0].plot([0, p[\"timeStop\"]], [1,1], 'k--', alpha=0.4)\n", + "ax[1].plot(xyz[0], xyz[1], 'g', lw=3, label=r\"$(x(t),y(t))$\")\n", + "ax[1].plot(xyz[0], xyz[2], 'b', label=r\"$(x(t),z(t))$\")\n", + "ax[1].plot(xyz[0], B, 'r', label=r\"$(x(t),B(t))$\")\n", + "ax[1].plot([0, 1], [1,1], 'k--', alpha=0.4)\n", + "ax[0].legend(); ax[1].legend(loc=\"upper left\")\n", + "gr.ion(); gr.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that $y$ reaches its maximum when $B(t)$ crosses 1. That is, the epidemic starts to wine down when the $B(t)<1$. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercises:\n", + "Setup two simulations for which there is no outbreak, such that:\n", + "\n", + "(a) The initial density of \"immune\" individuals is large enough to prevent an epidemic.\n", + "\n", + "(b) The initial density of \"immune\" individuals is really small but there is no epidemic outbreak." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}