Le nouveau virus corona est une épidémie dans le monde entier et l'Organisation mondiale de la santé (OMS) a déclaré une urgence le 30 janvier. Des tentatives ont longtemps été faites pour prédire les épidémies en simulant des maladies infectieuses telles que le coronavirus à l'aide de modèles mathématiques. Dans cet article, nous présenterons le modèle SIR le plus élémentaire parmi les modèles mathématiques d'épidémies de maladies infectieuses et effectuerons des simulations numériques à l'aide de Python.
Le modèle SIR est une équation modèle classique qui décrit de manière déterministe le processus épidémique à court terme des maladies infectieuses [1]. Le nom du modèle provient de Susceptible, infecté, récupéré ou supprimé après infection. Ce modèle a été proposé par W. O. Kermack et A. G. McKendrick en 1927. [2] Ce modèle peut être représenté par l'équation différentielle ordinaire suivante.
\begin{align}
\frac{dS(t)}{dt}&=-\beta S(t)I(t) \\
\frac{dI(t)}{dt}&=\beta S(t)I(t)-\gamma I(t) \\
\frac{dR(t)}{dt}&=-\gamma I(t)
\end{align}
Ici, la signification de chaque variable est la suivante.
Le modèle SIR étant une équation différentielle normale simultanée, il est difficile de trouver une solution générale. Par conséquent, dans cet article, nous utiliserons la méthode Rungecutta, souvent utilisée dans les calculs numériques, pour la simulation. Les conditions initiales de la simulation sont les suivantes (* Les valeurs utilisées ici sont déterminées de manière appropriée, et il n'y a pas de base particulière à cela).
main.py
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def main():
#Réglage de chaque paramètre
N = 1000000
alpha=0.5/N
beta=0.07
dt=0.1
init_SIR_value=[N-100, 100, 0] #Définition des conditions initiales
times = np.arange(0.0, 100, dt) #Réglage de la période
results = odeint(SIR, init_SIR_value, times, args=(alpha,beta)) #Calculé avec odeint
#Visualisation
plt.title("SIR Model")
plt.plot(times[::10],results[::10,0]/N, color=(0.0,1,0.0), linewidth=1.0, label='S')
plt.plot(times[::10],results[::10,1]/N, color=(1.0,0,0.0), linewidth=1.0, label='I')
plt.plot(times[::10],results[::10,2]/N, color=(0.0,0,1.0), linewidth=1.0, label='R')
plt.xlim(0,100)
plt.legend()
plt.xlabel('day')
plt.ylabel('value')
plt.grid(True)
plt.show()
def SIR(v,t,alpha,beta):
return [-alpha*v[0]*v[1], alpha*v[0]*v[1]-beta*v[1], beta*v[1]]
if __name__ == '__main__':
main()
Si vous exécutez le programme ci-dessus, vous obtiendrez les résultats suivants.
On peut voir sur le graphique que le nombre de personnes infectées diminue après avoir atteint un certain pic.
Dans cet article, nous avons présenté le modèle SIR, qui est l'un des modèles mathématiques des épidémies de maladies infectieuses, et effectué la transition des épidémies de maladies infectieuses par simulation. Contrairement aux maladies infectieuses comme la grippe, le nouveau virus corona a une longue période de latence, on dit donc qu'il ne convient pas d'appliquer ce modèle. Par conséquent, un modèle mathématique appelé modèle SEIR qui prend en compte la période de latence a également été proposé pour ce modèle. Je ne présenterai pas ce modèle cette fois, mais je le présenterai dans un autre article si j'en ai l'occasion.
[1] [Modèle SIR -Wikipedia-](https://ja.wikipedia.org/wiki/SIR modèle) [2] A Contribution to the Mathematical Theory of Epidemics
Recommended Posts