Le nombre de personnes infectées par le nouveau virus corona (Convid-19) survenu à Wuhan, en Chine en décembre 2019, augmente au Japon. Comprendre comment des maladies infectieuses telles que la grippe, le SIDA, le SRAS, etc. se propagent dans la population humaine est de confirmer l'effet des politiques de santé telles que le cadre de vaccination et l'isolement des personnes infectées. Est également important. Ici, nous allons introduire le modèle SIR, qui est la base du modèle de prédiction mathématique des maladies infectieuses, et introduire le processus de calcul de ce modèle en Python.
Addendum: Bien que cela n'ait rien à voir avec la programmation, un article prédisant l'épidémie du nouveau virus corona a été publié dans le poème Nature de 2015. Si vous êtes intéressé, veuillez lire l'article lié ci-dessous car il vous donnera un indice sur la façon dont la situation de ce nouveau virus corona va converger.
** Présentation d'articles prédisant l'épidémie du nouveau virus corona en 2015 ** https://qiita.com/kotai2003/private/a44ca921314d17cc62e3
Le modèle SIR est un modèle de base qui décrit le processus épidémique des maladies infectieuses. Le nom du modèle vient de l'acronyme Susceptible, Infectious, Recovered pour les noms de variables du modèle. 1927 Présenté pour la première fois dans un article de W.O. Kermack et A.G. McKendrick.
Dans le modèle SIR, la population entière est classée dans les groupes suivants, et l'augmentation / la diminution de la population de chaque groupe par rapport au temps est exprimée par une équation différentielle. --S (sensible): pas d'immunité contre les maladies infectieuses. Personne infectable --I infectieux): une personne qui tombe malade en raison d'une infection et peut être transmise à une personne qui peut être infectée (S). Personne infectée --R (Supprimé): Ceux qui se sont rétablis du début de la maladie et ont acquis une immunité. Ou ceux qui sont morts sans pouvoir se remettre de l'apparition de la maladie. (Il est appelé Supprimé car il est exclu du système de ce modèle.)
L'augmentation / la diminution de la population de chaque groupe est exprimée par l'équation différentielle suivante.
\begin{align}
\frac{dS}{dt} &= -\beta SI \\
\frac{dI}{dt} &= \beta SI -\gamma I \\
\frac{dR}{dt} &= \gamma I \\
\end{align}
\begin{align}
S &:Personne infectable\quad \text{(Susceptible)} \\
I &:Personne infectée\quad \text{(Infectious)} \\
R &:Ceux qui sont décédés après une infection ou qui ont acquis une immunité\quad \text{(Removed)} \\
\beta &:Taux d'infection\quad \text{(The infectious rate)} \quad [1/day] \\
\gamma &:Taux d'exclusion\quad \text{(The Recovery rate)} \quad [1/day] \\
\end{align}
Prérequis pour ce modèle SIR ――Une personne qui a acquis une immunité ne sera plus jamais infectée et ne perdra pas son immunité. --Il n'y a pas d'entrée ou de sortie de l'extérieur dans la population totale. Personne n'est mort pour des causes autres que la naissance et l'infection.
Le modèle SIR est résolu en utilisant l'intégration numérique. Ici, nous utilisons la fonction odeint qui résout l'équation Runge-Kutta du module Python Scipy.
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize
import matplotlib.pyplot as plt
%matplotlib inline
Ensuite, l'équation différentielle du modèle SIR est décrite sous une forme qui peut être calculée par odeint. Les codes v [0], v [1], v [2] correspondent respectivement à 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]]
Ensuite, définissez chaque paramètre et les conditions initiales nécessaires à l'intégration numérique. Supposons que pour une population de 1 000 habitants, il y ait une infection initiale. Réglez le taux d'infection à 0,2 / 1000 et le taux d'élimination à 0,1.
\begin{align}
\beta &=0.2/1000 \\
\gamma &=0.1 \\
\end{align}
Enfin, calculez R0 du nombre de reproduction de base. Si R0> 1, cela signifie que cette maladie infectieuse ne converge pas mais se propage.
#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)
Le résultat de l'intégration numérique est stocké dans result, et ce résultat est tracé sur l'axe des temps.
#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'])
Ce que l'on peut dire de ce graphique, c'est que si une personne infectée (infectieuse (0)) survient dans une population de 1 000 personnes, environ 800 personnes (supprimée (160)) connaîtront éventuellement l'infection. Et on peut voir que le pic de personnes infectées (infectieuses) se produit vers 70 jours, puis l'infection converge. De cette manière, il est possible d'évaluer l'impact des maladies infectieuses sur la population en utilisant les paramètres liés aux maladies infectieuses.
-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
Recommended Posts