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.
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.
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.
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 :
wo :
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.
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:
Interventionen bewerten: Durch die Änderung der Parameter können Sie die Folgen von Interventionen simulieren
soziale Isolation oder Impfung.
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.
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.
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.