[PYTHON] Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.

1. Zuallererst

Die Zahl der Menschen, die im Dezember 2019 in Wuhan, Provinz Hubei, China, mit der neuen Koronapneumonie (Covid-19) infiziert waren, nimmt auch in Japan zu. Das Verständnis des Prozesses, durch den sich Infektionskrankheiten wie Influenza, AIDS, SARS usw. in der menschlichen Bevölkerung ausbreiten, soll die Auswirkungen gesundheitspolitischer Maßnahmen wie Immunisierung und Isolierung infizierter Personen bestätigen. Ist auch wichtig. Im vorherigen Artikel habe ich das SIR-Modell erläutert, aber ich werde das SEIR-Modell vorstellen, das die Latenzzeit von Infektionskrankheiten berücksichtigt. Ich werde den Prozess der Berechnung dieses Modells mit Python und das Berechnungsergebnis der Ausbreitung des neuen Koronavirus mit diesem SEIR-Modell vorstellen.

Nachtrag: Ich habe versucht, eine GUI basierend auf dem Inhalt dieses Artikels zu erstellen.

** GUI-Simulation des neuen Koronavirus (SEIR-Modell) ** https://qiita.com/kotai2003/items/f6cf36e9c22c3e776dee

2. Vorhersagemodell für Infektionskrankheiten (SEIR-Modell)

Im SEIR-Modell wird die gesamte Population in die folgenden Gruppen eingeteilt, und die Zunahme / Abnahme der Population jeder Gruppe in Bezug auf die Zeit wird durch eine Differentialgleichung ausgedrückt.

SEIR-model.png

Die Bevölkerungszunahme / -abnahme jeder Gruppe wird durch die folgende Differentialgleichung ausgedrückt.


\begin{align}

\frac{dS}{dt} &= -\beta \frac{SI}{N} \\
\frac{dE}{dt} &=  \beta \frac{SI}{N}  -\epsilon E \\
\frac{dI}{dt} &=  \epsilon E -\gamma I \\
\frac{dR}{dt} &=  \gamma I \\

\end{align} 
\begin{align}
S &:Infizierbar, infektiös ohne Immunität\quad \text{(Susceptible)} \\
E &:Infektionskrankheit während der Latenz\quad \text{(Infectious)} \\
I &:Diejenigen, die eine Infektionskrankheit haben, diejenigen, die durch Kontakt infiziert werden können(S)Mit Krankheit infiziert\quad \text{(Infectious)} \\
R &:Diejenigen, die nach einer Infektion starben oder Immunität erlangten\quad 
\text{(Removed)} \\
N &:Gesamtbevölkerung, S+E+I+R
\end{align}
\begin{align}
\beta &:Infektionsrate\quad \text{(The infectious rate)}  \\
\epsilon &:Infektionsrate nach Exposition\quad \text{(The rate at which an exposed person becomes infective)} \quad [1/day] \\
\gamma &:Ausschlussrate\quad \text{(The Recovery rate)} \quad [1/day] \\
\end{align}
\begin{align}
\ l_p &:Wartezeit für Infektionen\text{(latency period [day])}\quad \epsilon= \frac{1}{l_p} \\
\ i_p &:Infektionszeitraum\text{(Infectious period [day])}\quad \gamma= \frac{1}{i_p} \\
\end{align}

Voraussetzungen für dieses SIR-Modell ――Eine Person, die Immunität erworben hat, wird nie wieder infiziert und verliert keine Immunität.

3. Berechnung des SEIR-Modells

Das SIR-Modell wird durch numerische Integration gelöst. Hier verwenden wir die Odeint-Funktion, die die Runge-Kutta-Gleichung des Python Scipy-Moduls löst.

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

Beschreiben Sie als nächstes die Differentialgleichung des SIR-Modells in einer Form, die durch Odeint berechnet werden kann. Hier entsprechen v [0], v [1], v [2], v [3] jeweils S, E, I, R.

# Define differential equation of SEIR model

'''
dS/dt = -beta * S * I / N
dE/dt = beta* S * I / N - epsilon * E
dI/dt = epsilon * E - gamma * I
dR/dt = gamma * I

[v[0], v[1], v[2], v[3]]=[S, E, I, R]

dv[0]/dt = -beta * v[0] * v[2] / N
dv[1]/dt = beta * v[0] * v[2] / N - epsilon * v[1]
dv[2]/dt = epsilon * v[1] - gamma * v[2]
dv[3]/dt = gamma * v[2]

'''


def SEIR_EQ(v, t, beta, epsilon, gamma, N ):
    return [-beta * v[0] * v[2] / N ,beta * v[0] * v[2] / N - epsilon * v[1],
            epsilon * v[1] - gamma * v[2],gamma * v[2]]

Definieren Sie dann jeden Parameter und jede Anfangsbedingung, die für die numerische Integration erforderlich sind. Nehmen wir an, dass es bei einer Bevölkerung von 1.000 Personen eine Person gibt, die während der Latenzzeit eine frühe Infektion hat. Stellen Sie die Infektionsrate auf 1, die Wartezeit für die Infektion auf 2 Tage und die Infektionsdauer auf 7,4 Tage ein.

# parameters
t_max = 100 #days
dt = 0.01

# initial_state
S_0 = 99
E_0 = 1
I_0 = 0
R_0 = 0
N_pop = S_0 + E_0 + I_0 + R_0
ini_state = [S_0, E_0, I_0, R_0]  # [S[0],E,[0], I[0], R[0]]


#Infektionsrate
beta_const = 1 #Infektionsrate

#Infektionsrate nach Exposition
latency_period = 2 #days
epsilon_const = 1/latency_period

#Wiederherstellungsrate und Isolationsrate
infectious_period = 7.4 #days
gamma_const = 1/infectious_period

Speichern Sie das Ergebnis der numerischen Integration im Ergebnis und zeichnen Sie dieses Ergebnis auf der Zeitachse auf.

# numerical integration
times = np.arange(0, t_max, dt)
args = (beta_const, epsilon_const, gamma_const, N_pop)

# Numerical Solution using scipy.integrate
# Solver SEIR model
result = odeint(SEIR_EQ, ini_state, times, args)
# plot
plt.plot(times, result)
plt.legend(['Susceptible', 'Exposed', 'Infectious', 'Removed'])
plt.title("SEIR model  COVID-19")
plt.xlabel('time(days)')
plt.ylabel('population')
plt.grid()

plt.show()

Figure_1.png

Aus dieser Grafik kann gesagt werden, dass bei einer Bevölkerung von 100 Personen eine Person (exponiert (0)) während der Latenzzeit eine Infektion hat und schließlich 100 Personen (entfernt (100)) die Infektion erleiden. Das ist. Es ist ersichtlich, dass der Höhepunkt infizierter Personen (infektiös) um 18 Tage auftritt und dann die Infektion konvergiert. Auf diese Weise ist es möglich, die Auswirkung von Infektionskrankheiten auf die Bevölkerung anhand von Parametern zu bewerten, die sich auf Infektionskrankheiten beziehen.

4. Vorhersage des Corona-Virus

Derzeit wurden viele Forschungsarbeiten veröffentlicht, um die SEIR-Parameter aus den Fällen des neuen Coronavirus abzuschätzen. Dieses Mal werde ich das SEIR-Modell mit den Parameterschätzungen berechnen, die in dem am 16. Februar veröffentlichten Artikel veröffentlicht wurden. (Referenz 2)

Parameter Festlandchina (ohne Provinz Hubei) Provinz Hubei (außer Wuhan) Wuhan
Bevölkerung N.(million) 1340 45 14
Infektionsrate[beta] 1.0 1.0 1.0
Latency period (days) 2 2 2
infectious_period (days) 6.6 7.2 7.4
E_0 696 592 318
I_0 652 515 389

Das Berechnungsergebnis wird angezeigt. Beachten Sie, dass jeder auf der vertikalen Achse eine andere Bevölkerungszahl hat. Die erste Grafik zeigt die Ausbreitung der Infektion auf dem chinesischen Festland ohne die Provinz Hubei. China-mainland.png

Die zweite Grafik zeigt die Ausbreitung der Infektion in der Provinz Hubei ohne Wuhan. hubei.png

Das dritte Diagramm ist eine Vorhersage der Ausbreitung der Wuhan-Infektion. Wuhan.png

Nach der Vorhersage mit diesem Parameter wird die Anzahl der Infizierten in 30 bis 40 Tagen ihren Höhepunkt erreichen und schließlich werden fast 100% der Bevölkerung infiziert sein (entfernt (100)). Ich war wirklich überrascht. Wahrscheinlich basiert das Vorhersageergebnis auf dem schlimmsten Fall. Ich denke, es ist notwendig, auf jeden Schritt dieses Koronavirus zu achten.

5. Referenzen

  1. SEIR and SEIR models https://institutefordiseasemodeling.github.io/Documentation/general/model-seir.html

  2. Epidemic analysis of COVID-19 in China by dynamical modeling https://arxiv.org/abs/2002.06563

  3. Einführung von Artikeln, die den Ausbruch des Coronavirus im Jahr 2015 vorhersagten https://qiita.com/kotai2003/private/a44ca921314d17cc62e3

Recommended Posts

Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, die Eigenschaften der neuen Informationen über mit dem Corona-Virus infizierte Personen mit Wordcloud zu visualisieren
GUI-Simulation des neuen Koronavirus (SEIR-Modell)
Ich habe versucht, die Infektion mit einer neuen Lungenentzündung mithilfe des SIR-Modells vorherzusagen: ☓ Wuhan ed. ○ Hubei ed.
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Da die Aktie aufgrund des Einflusses des neuen Corona-Virus eingebrochen ist, habe ich versucht, die Performance meines Investment Trusts mit Python zu visualisieren.
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, den Sieg oder die Niederlage der Premier League mit dem Qore SDK vorherzusagen
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Die Theorie, dass der Schlüssel zur Kontrolle der Infektion des neuen Coronavirus die Hyperdispersion der Anfälligkeit ist.
Ich habe versucht, die neuen mit dem Corona-Virus infizierten Menschen in Ichikawa City, Präfektur Chiba, zusammenzufassen
Ich habe versucht, die Laufdaten des Rennspiels (Assetto Corsa) mit Plotly zu visualisieren
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten