S-I-R Modell

Das S-I-R Modell ist ein einfaches Modell aus der mathematischen Epidemiologie um die Dynamik einer Infektion (und eventuell Epidemie) zu beschreiben.

Das Modell beschreibt drei Klassen der Bevölkerung:

  • Infizierbare (Susceptibles)
  • Infizierte (Infected)
  • Geheilte (Removed)

Die Dynamik wird durch ein System von gekoppelten gewöhnlichen Differentialgleichungen beschrieben

\[\begin{split}{\frac {dS}{dt}} &= - \alpha IS\\ {\frac {dI}{dt}} &= \alpha IS - \beta I\\ {\frac {dR}{dt}} &= \beta I\end{split}\]

Wir importieren zunächst einige nützliche python Erweiterungen:

#!/usr/bin/python
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

Die Anfangsbedingungen werden gesetzt:

S0, I0, R0 = 999, 1, 0

und ebenso die Modellparameter alpha und beta:

alpha, beta  = 4e-4, 2e-2

Die rechten Seiten der Differentialgleichungen werden als eine vektor-wertige Funktion geschrieben:

def deriv(u, t, alpha, beta):
   S, I, R = u
   dSdt = -alpha * S * I
   dIdt = alpha * S * I - beta  * I
   dRdt = beta * I
   return dSdt, dIdt, dRdt

dann setzen wird auch die Anfangsbedingungen als Vektor der Werte S0, I0 und R0:

y0 = S0, I0, R0

wir möchten die Lösung zu diskrete Zeitschritte bestimmen und legen dafür ein Zeitintervall und Zeitschritte fest:

T = np.linspace(0, 160, 160)

Anschließend lösen wir das S-I-R Modells zu den diskreten Zeitpunkten:

ret = odeint(deriv, y0, T, args=(alpha, beta))
S, I, R = ret.T

Mit Hilfe der matplotlib Erweiterung können wir das Ergebnis visualisieren:

plots = plt.plot(T, S, 'b', alpha=0.5, lw=2, label='Susceptible') \
   + plt.plot(T, I, 'r', alpha=0.5, lw=2, label='Infected') \
   + plt.plot(T, R, 'g', alpha=0.5, lw=2, label='Recovered with immunity')
plt.xlabel('Zeit [Tage]')
plt.ylabel('Anzahl')
plt.legend(handles=plots)
plt.show()

Download 02-sir.py.