paint-brush
Simulation der Ausbreitung von Infektionskrankheiten mit Python: SIR- und SEIR-Modellevon@olaoluwa
5,822 Lesungen
5,822 Lesungen

Simulation der Ausbreitung von Infektionskrankheiten mit Python: SIR- und SEIR-Modelle

von Olaoluwa Afolabi7m2023/10/13
Read on Terminal Reader

Zu lang; Lesen

Tauchen Sie ein in die Modellierung von Infektionskrankheiten mit Python. Entdecken Sie die Leistungsfähigkeit von SIR- und SEIR-Modellen, erkunden Sie reale Szenarien mit Python-Code und lernen Sie, Ihre Fähigkeiten für epidemiologische Erkenntnisse zu erweitern. Eine Pflichtlektüre für die Beherrschung der Krankheitsmodellierung im öffentlichen Gesundheitswesen.
featured image - Simulation der Ausbreitung von Infektionskrankheiten mit Python: SIR- und SEIR-Modelle
Olaoluwa Afolabi HackerNoon profile picture
0-item


Haftungsausschluss : Dieser Artikel soll klarstellen, dass der bereitgestellte Code keine universelle Lösung für alle Aspekte der mathematischen Modellierung ist. Stattdessen dient es als Lehrmittel, das einen bestimmten Schritt im mathematischen Modellierungsprozess hervorhebt und Python zur Veranschaulichung einsetzt, mit dem vorrangigen Ziel, das Bewusstsein für diesen Bereich zu schärfen.


Denken Sie auch daran, dass Sie bestimmte Maßnahmen ergreifen müssen, wenn Sie ein mathematisches Modellprojekt einreichen/vorschlagen, beispielsweise im Bereich der Biomathematik.


Zu diesen Schritten gehören unter anderem: Definition des Problems, Auswahl eines Modellansatzes (in diesem Artikel werden zwei Modelle besprochen), Formulierung von Gleichungen, Parameterschätzung – oft basierend auf historischen Daten, Implementierung numerischer Simulationen durch analytische Auflösung von Differentialgleichungen oder … Verwendung von Rechentools wie Python und MATLAB, Validierungen und Sensitivitätsanalysen, Szenariotests, Ergebnisinterpretation usw.


Wie ich bereits sagte, hebt dies nur einen bestimmten Schritt im mathematischen Modellierungsprozess und die Verwendung von Python zur Veranschaulichung hervor.


Inhaltsübersicht

  1. Einführung
    • Der Zweck der Simulation
  2. Das SIR-Modell
    • Was es tut / SIR-Python-Code-Simulationsbeispiel
    • Was Sie lernen können
      • Verstehen Sie die Ausbreitung von Krankheiten
      • Entdecken Sie die Parameterempfindlichkeit
      • Bewerten Sie Interventionen
  3. Das SEIR-Modell
    • Was es tut / SEIR-Python-Code-Simulationsbeispiel
    • Was Sie lernen können
      • Latente Perioden modellieren
      • Bewerten Sie Frühinterventionen
      • Studieren Sie komplexe Ausbrüche
  4. Abschluss



1. Einleitung

Für die Erhaltung der öffentlichen Gesundheit ist es wichtig zu verstehen, wie sich Infektionskrankheiten ausbreiten, da es sie schon seit Jahrhunderten in der Menschheitsgeschichte gibt. Ein wirksames Werkzeug zur Simulation und zum Verständnis der Dynamik der Krankheitsausbreitung sind mathematische Modelle. In diesem Artikel werden die Modelle SIR (Susceptible-Infectious-Recovered) und SEIR (Susceptible-Exposed-Infectious-Recovered) sowie deren Simulation mit Python erläutert.


Wofür Simulationen da sind

Für Fachleute des öffentlichen Gesundheitswesens und Epidemiologen ist die Simulation wie eine Kristallkugel. Es ermöglicht uns, die potenzielle Ausbreitung von Krankheiten unter verschiedenen Umständen und Behandlungsmöglichkeiten vorherzusagen. Diese Modelle helfen bei der Entscheidungsfindung, der effektiven Ressourcenzuweisung und dem Verständnis der potenziellen Auswirkungen verschiedener Techniken. Lassen Sie uns zwei Grundmodelle untersuchen, nämlich; SIR-Modell und SEIR-Modell.


2. Das SIR-Modell

Was es tut / SIR-Python-Code-Simulationsbeispiel

Das Modell „Susceptible, Infectious, and Recovered“ (SIR) unterteilt eine Population in diese drei Kategorien. Basierend auf Variablen wie Übertragungsrate ( β ) und Wiederherstellungsrate ( γ ) simuliert es, wie sich diese Kompartimente mit der Zeit verändern.


Bevor wir eine Simulation mit Python veranschaulichen, müssen bei der Arbeit an mathematischen Modellen „Modellannahmen“ getroffen werden.


Wir gehen davon aus, dass wir ein Modell mithilfe einer LaTeX-Formel oder eines LaTeX-Codes erstellen:


 \begin{align*} \frac{dS}{dt} &= -\beta \cdot S \cdot I \\ \frac{dI}{dt} &= \beta \cdot S \cdot I - \gamma \cdot I \\ \frac{dR}{dt} &= \gamma \cdot I \end{align*}


Hinweis: Sie können diese Formel mit Python latexieren. Ein Beispiel finden Sie unter https://github.com/google/latexify_py/blob/main/examples/examples.ipynb .


In diesem Artikel wird es nicht darum gehen, diesen Python-Code zu schreiben, um LaTeX in eine richtige mathematische Notation/Gleichung umzuwandeln, aber ich habe einen Online-Editor wie https://latexeditor.lagrida.com/ verwendet, damit Sie die Formel-/Gleichungsannahmen unten deutlich sehen können :



Abb. 1: Modellgleichung


wo :


  • S steht für anfällige Personen,
  • Ich vertrete infizierte Personen,
  • R steht für genesene Personen.


Die Parameter β und γ bestimmen die Übertragungs- bzw. Wiederherstellungsraten. Das negative Vorzeichen (d. h. −β) zeigt an, dass die Anzahl der anfälligen Personen (S) mit der Zeit abnimmt. Die Punktnotation bedeutet „Multiplikation“.


Zusammenfassend beschreiben diese Gleichungen die Dynamik des SIR-Modells, bei dem die Anzahl der anfälligen Personen mit der Ansteckung mit der Krankheit abnimmt (d. h. dS/dt), die Anzahl der infektiösen Personen aufgrund von Neuinfektionen steigt und mit der Genesung abnimmt ( dI/dt) und die Zahl der Genesenen steigt mit der Behandlung der Krankheit (d. h. dR/dt). Da die Änderung in jedem Fach von der Multiplikation relevanter Komponenten abhängt, werden Punkte (.) zur Kennzeichnung der Multiplikation verwendet.


Da alle Annahmen festgelegt sind, können wir dann eine Simulation mit Python für das SIR-Modell ausführen und dann die Dynamik visualisieren:


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SIR model equations def SIR_model(y, t, beta, gamma): S, I, R = y dSdt = -beta * S * I dIdt = beta * S * I - gamma * I dRdt = gamma * I return [dSdt, dIdt, dRdt] """ Initial conditions (such as S0, I0, and R0) are not to be random but I hardcoded them with specific values. These choices are typically made based on the characteristics of the disease being modeled and the context of the simulation. Initial condition are set such that S0 = 99%, which indicates the proportion of susceptible individuals when the simulation starts. I0 is set to 1%, which indicates proportion of infected individuals to be 1% when the simulation starts. R0 is set to 0% which is expected that there are are no recovered individuals when the simulations start. """ S0 = 0.99 I0 = 0.01 R0 = 0.00 y0 = [S0, I0, R0] # Parameters # β (beta) is transmission rate and I chose 30%. γ (gamma) is set to 1% beta = 0.3 gamma = 0.1 # Time vector t = np.linspace(0, 200, 200) # Simulate for 200 days # Solve the SIR model equations using odeint() solution = odeint(SIR_model, y0, t, args=(beta, gamma)) # Extract results S, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SIR Model Simulation') plt.legend() plt.grid(True) plt.show()


Was die Unterschiede zwischen scipy.integrate.ode und scipy.integrate.odeint betrifft, möchte ich Sie auf odeint und ode verweisen, damit Sie es besser verstehen.


Was Sie entdecken können


Durch die Ausführung des SIR-Modells in Python können Sie:

  • Krankheitsausbreitung verstehen : Beobachten Sie die Epidemiekurve und visualisieren Sie, wie sich eine Krankheit in einer Gemeinschaft ausbreitet. Wenn Sie das obige Python-SIR-Modell ausführen, können Sie das Ergebnis in der folgenden Grafik sehen:



Ergebnis unserer Simulation, das eine verringerte Anfälligkeit und Infektionsrate bei hohen Genesungsraten zeigt.



  • Erkunden Sie die Parameterempfindlichkeit: Testen Sie verschiedene Beta- und Gammawerte, um zu beobachten, wie sie sich auf die Länge und den Höhepunkt des Ausbruchs auswirken.


  • Interventionen bewerten: Durch die Änderung der Parameter können Sie die Folgen von Interventionen simulieren

    soziale Isolation oder Impfung.


3. Das SEIR-Modell

Was es tut / SEIR-Python-Code-Simulationsbeispiel

Durch das Hinzufügen eines „exposed“-Fachs erweitert das SEIR-Modell das SIR-Modell. Dabei wird die Inkubationszeit berücksichtigt, in der Menschen zwar exponiert, aber noch nicht ansteckend sind. Wie man es in Python emuliert, wird hier gezeigt.


 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # SEIR model equations def SEIR_model(y, t, beta, sigma, gamma): S, E, I, R = y dSdt = -beta * S * I dEdt = beta * S * I - sigma * E dIdt = sigma * E - gamma * I dRdt = gamma * I return [dSdt, dEdt, dIdt, dRdt] # Initial conditions S0 = 0.99 E0 = 0.01 I0 = 0.00 R0 = 0.00 y0 = [S0, E0, I0, R0] # Parameters beta = 0.3 sigma = 0.1 gamma = 0.05 # Time vector t = np.linspace(0, 200, 200) # Solve the SEIR model equations solution = odeint(SEIR_model, y0, t, args=(beta, sigma, gamma)) # Extract results S, E, I, R = solution.T # Plot the results plt.figure(figsize=(10, 6)) plt.plot(t, S, label='Susceptible') plt.plot(t, E, label='Exposed') plt.plot(t, I, label='Infected') plt.plot(t, R, label='Recovered') plt.xlabel('Time (days)') plt.ylabel('Proportion of Population') plt.title('SEIR Model Simulation') plt.legend() plt.grid(True) plt.show()


Der einzige Unterschied besteht in diesem Fall in der Einführung der latent period rate (σ) , um verschiedene Szenarien zu untersuchen und die Dynamik von Infektionskrankheiten mit einer „exponierten“ Periode zu verstehen. Es zeigt, wie es eine Inkubationszeit ausmacht, bevor Individuen infektiös werden.


Was Sie lernen können


Wenn Sie Python zum Ausführen des SEIR-Modells verwenden, können Sie:


  • Latente Perioden modellieren

    Erkennen Sie die Unterschiede im Verhalten von unmittelbar ansteckenden Krankheiten und Krankheiten mit Inkubationszeit.


  • Bewerten Sie Frühinterventionen

    Analysieren Sie die Auswirkungen von Isolations- und Früherkennungsstrategien.


  • Studieren Sie komplexe Ausbrüche

    Bei Krankheiten wie COVID-19, bei denen exponierte Personen ein wesentlicher Übertragungsfaktor sind, verwenden Sie SEIR.



4. Fazit

Die Einfachheit und die robusten Bibliotheken von Python wie SciPy machen es zur perfekten Sprache für die Modellierung von Krankheiten. Und indem Sie diese Simulationen damit durchführen, erfahren Sie mehr über die Dynamik von Infektionskrankheiten. Dies kann Sie mit Urteilen und Fähigkeiten ausstatten, die Ihnen dabei helfen können, fundierte Entscheidungen zu treffen und Ihre eigene Fähigkeit zu verbessern, Epidemien in der realen Welt einzuschätzen.


Nach den Modellen SIR und SEIR wird noch viel mehr folgen. Es gibt andere komplexe Modelle wie das SEIRS-Modell (Susceptible-Exposed-Infectious-Removed-Susceptible), räumliche Modelle, Netzwerkmodelle usw. Die Untersuchung komplexer Modelle sowie realer Daten wie Geodaten, epidemiologische Daten und Verhaltensdaten usw. und indem Sie die Auswirkungen von Interventionen wie Impfstrategien, Behandlungsverfügbarkeit, soziale Distanzierungsmaßnahmen sorgfältig untersuchen, werden Sie Ihre Modellierungsfähigkeiten noch weiter entwickeln.


Ihr Wissen über diese Modellierungswerkzeuge kann sich erheblich auf den Schutz der öffentlichen Gesundheit in einer Zukunft auswirken, in der das Verständnis der Übertragung von Infektionskrankheiten von entscheidender Bedeutung ist.


Das ist schon zu lang, aber ich hoffe, ich konnte Ihnen zeigen, wie Sie SIR- und SEIR-Modelle in einem mathematischen Modell mit Python simulieren können.