Die Zahl der mit dem neuen Koronavirus (Convid-19) infizierten Menschen, die im Dezember 2019 in Wuhan, China, aufgetreten sind, nimmt in Japan zu. Wenn Sie verstehen, wie sich Infektionskrankheiten wie Influenza, AIDS, SARS usw. in der menschlichen Bevölkerung ausbreiten, müssen Sie die Auswirkungen gesundheitspolitischer Maßnahmen wie Immunisierung und Isolierung infizierter Personen bestätigen. Ist auch wichtig. Hier werden wir das SIR-Modell vorstellen, das die Grundlage des mathematischen Vorhersagemodells für Infektionskrankheiten bildet, und den Prozess der Berechnung dieses Modells in Python vorstellen.
Nachtrag: Obwohl es nichts mit Programmierung zu tun hat, wurde im Naturgedicht 2015 ein Artikel veröffentlicht, der die Epidemie des neuen Koronavirus vorhersagt. Wenn Sie interessiert sind, lesen Sie bitte den unten verlinkten Artikel, da er Ihnen einen Hinweis darauf gibt, wie sich die Situation dieses neuen Koronavirus konvergieren wird.
** Einführung von Artikeln zur Vorhersage der Epidemie des neuen Koronavirus im Jahr 2015 ** https://qiita.com/kotai2003/private/a44ca921314d17cc62e3
Das SIR-Modell ist ein Grundmodell, das den epidemischen Prozess von Infektionskrankheiten beschreibt. Der Name des Modells stammt vom Akronym Susceptible, Infectious, Recovered für die Namen der Modellvariablen. 1927 Erstmals vorgestellt in einem Artikel von W. O. Kermack und A. G. McKendrick.
Im SIR-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.
Die Bevölkerungszunahme / -abnahme jeder Gruppe wird durch die folgende Differentialgleichung ausgedrückt.
\begin{align}
\frac{dS}{dt} &= -\beta SI \\
\frac{dI}{dt} &= \beta SI -\gamma I \\
\frac{dR}{dt} &= \gamma I \\
\end{align}
\begin{align}
S &:Infizierbare Person\quad \text{(Susceptible)} \\
I &:Infizierte Person\quad \text{(Infectious)} \\
R &:Diejenigen, die nach einer Infektion starben oder Immunität erlangten\quad \text{(Removed)} \\
\beta &:Infektionsrate\quad \text{(The infectious rate)} \quad [1/day] \\
\gamma &:Ausschlussrate\quad \text{(The Recovery rate)} \quad [1/day] \\
\end{align}
Voraussetzungen für dieses SIR-Modell ――Eine Person, die Immunität erworben hat, wird nie wieder infiziert und verliert keine Immunität.
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
from scipy.optimize import minimize
import matplotlib.pyplot as plt
%matplotlib inline
Als nächstes wird die Differentialgleichung des SIR-Modells in einer Form beschrieben, die durch Odeint berechnet werden kann. Der Code v [0], v [1], v [2] entspricht jeweils S, I, R.
#Define differential equation of SIR model
'''
dS/dt = -beta * S * I
dI/dt = beta * S * I - gamma * I
dR/dt = gamma * I
[v[0], v[1], v[2]]=[S, I, R]
dv[0]/dt = -beta * v[0] * v[1]
dv[1]/dt = beta * v[0] * v[1] - gamma * v[1]
dv[2]/dt = gamma * v[1]
'''
def SIR_EQ(v, t, beta, gamma):
return [-beta*v[0]*v[1], beta * v[0] * v[1] - gamma * v[1], gamma * v[1]]
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 eine Erstinfektion gab. Stellen Sie die Infektionsrate auf 0,2 / 1000 und die Entfernungsrate auf 0,1 ein.
\begin{align}
\beta &=0.2/1000 \\
\gamma &=0.1 \\
\end{align}
Berechnen Sie abschließend R0 der Basisreproduktionsnummer. Wenn R0> 1 ist, bedeutet dies, dass diese Infektionskrankheit nicht konvergiert, sondern sich ausbreitet.
#parameters
t_max = 160
dt = 0.01
beta_const = 0.2/1000
gamma_const = 0.1
#initial_state
S_0=999
I_0=1
R_0=0
ini_state = [S_0,I_0,R_0] #[S[0], I[0], R[0]]
#numerical integration
times =np.arange(0,t_max, dt)
args =(beta_const, gamma_const)
#R0
N_total = S_0+I_0+R_0
R0 = N_total*beta_const *(1/gamma_const)
print(R0)
Das numerische Integrationsergebnis wird im Ergebnis gespeichert und dieses Ergebnis wird auf der Zeitachse aufgezeichnet.
#Numerical Solution using scipy.integrate
#Solver SIR model
result = odeint(SIR_EQ, ini_state, times, args)
#plot
plt.plot(times,result)
plt.legend(['Susceptible','Infectious', 'Removed'])
Aus dieser Grafik geht hervor, dass bei Auftreten einer infizierten Person (infektiös (0)) in einer Bevölkerung von 1.000 Personen etwa 800 Personen (entfernt (160)) möglicherweise an der Infektion leiden. Und es ist zu sehen, dass der Höhepunkt infizierter Menschen (infektiös) etwa 70 Tage beträgt und dann die Infektion konvergiert. Auf diese Weise ist es möglich, die Auswirkungen von Infektionskrankheiten auf die Bevölkerung anhand der Parameter zu bewerten, die sich auf Infektionskrankheiten beziehen.
-Coronavirus COVID-19 Global Cases https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html?fbclid=IwAR2FwOf4Cjm4okosqFt0Ddr4k0dUgswM28oAqYkkVY6QT6BBCZQ1NlfPDXk#/bda7594740fd40299423467b48e9ecf6
https://qiita.com/Student-M/items/4e3e286bf08b7320b665
https://scipython.com/book/chapter-8-scipy/additional-examples/the-sir-epidemic-model/
https://www.math.unm.edu/~sulsky/mathcamp/ApplyData.pdf