[PYTHON] Introduction d'un modèle de prédiction mathématique pour les maladies infectieuses (modèle SIR)

1. Introduction

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

2. Modèle de prédiction mathématique des maladies infectieuses (modèle SIR)

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.)

Figure01.png

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.

3. Calcul du modèle SIR

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'])

download.png

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.

4. Documents de référence

-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

Introduction d'un modèle de prédiction mathématique pour les maladies infectieuses (modèle SIR)
Modèle de prédiction mathématique des maladies infectieuses (modèle SIR): étude de cas (1)
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses avec Open Modelica
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (voir l'effet du vaccin)
Modèle mathématique des épidémies de maladies infectieuses
Implémenter le modèle mathématique «modèle SIR» des maladies infectieuses avec OpenModelica (exemple de régulation répétée et de relaxation)
Mettre en œuvre le modèle mathématique «modèle SIR» des maladies infectieuses dans OpenModelica (reflétant le taux de mortalité et de réinfection)
[Introduction au modèle des maladies infectieuses] Toutes les régions du Japon se terminent ... ♬
[Introduction au modèle SIR] Considérez le résultat de l'ajustement de Diamond Princess ♬
Enregistrement de l'introduction de Python pour les nouveaux arrivants
Somme des variables dans un modèle mathématique
Prédire les épidémies de maladies infectieuses avec le modèle SIR
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Test mathématique 2 (modèle mathématique de la théorie de la réaction des items)