Le nombre de personnes infectées par la nouvelle pneumonie corona (Covid-19) survenue à Wuhan, dans la province du Hubei, en Chine en décembre 2019, augmente également au Japon. Comprendre dans quel processus 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 la vaccination et l'isolement des personnes infectées. Est également important. Dans l'article précédent, j'ai expliqué le modèle SIR, mais je présenterai le modèle SEIR qui prend en compte la période de latence des maladies infectieuses. Je présenterai le processus de calcul de ce modèle avec Python et le résultat du calcul de la propagation du nouveau virus corona à l'aide de ce modèle SEIR.
Addendum: J'ai essayé d'en faire une interface graphique basée sur le contenu de cet article.
** Simulation GUI du nouveau virus corona (modèle SEIR) ** https://qiita.com/kotai2003/items/f6cf36e9c22c3e776dee
Dans le modèle SEIR, 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 --E (exposés): ceux qui ont une maladie infectieuse pendant la période latente --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 / diminution de la population de chaque groupe est exprimée par l'équation différentielle suivante.
\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 &:Infectable, infectable sans immunité\quad \text{(Susceptible)} \\
E &:Maladie infectieuse pendant la latence\quad \text{(Infectious)} \\
I &:Ceux qui ont une maladie infectieuse, ceux qui peuvent être infectés par contact(S)Infecté par la maladie\quad \text{(Infectious)} \\
R &:Ceux qui sont décédés après une infection ou qui ont acquis une immunité\quad
\text{(Removed)} \\
N &:Population totale, S+E+I+R
\end{align}
\begin{align}
\beta &:Taux d'infection\quad \text{(The infectious rate)} \\
\epsilon &:Taux d'infection après exposition\quad \text{(The rate at which an exposed person becomes infective)} \quad [1/day] \\
\gamma &:Taux d'exclusion\quad \text{(The Recovery rate)} \quad [1/day] \\
\end{align}
\begin{align}
\ l_p &:Temps d'attente pour l'infection\text{(latency period [day])}\quad \epsilon= \frac{1}{l_p} \\
\ i_p &:Période d'infection\text{(Infectious period [day])}\quad \gamma= \frac{1}{i_p} \\
\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é.
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
import matplotlib.pyplot as plt
Ensuite, décrivez l'équation différentielle du modèle SIR sous une forme qui peut être calculée par odeint. Ici, v [0], v [1], v [2], v [3] correspondent respectivement à 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]]
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 personne avec une infection précoce pendant la période latente. Réglez le taux d'infection à 1, le temps d'attente pour l'infection à 2 jours et la période d'infection à 7,4 jours.
# 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]]
#Taux d'infection
beta_const = 1 #Taux d'infection
#Taux d'infection après exposition
latency_period = 2 #days
epsilon_const = 1/latency_period
#Taux de récupération et taux d'isolement
infectious_period = 7.4 #days
gamma_const = 1/infectious_period
Stockez le résultat d'intégration numérique dans résultat et tracez ce résultat sur l'axe des temps.
# 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()
À partir de ce graphique, on peut dire que dans une population de 100 personnes, une personne (Exposée (0)) a une infection pendant la période latente, et finalement 100 personnes (Supprimé (100)) connaîtront l'infection. C'est. On peut voir que le pic de personnes infectées (infectieuses) survient vers 18 jours, puis l'infection converge. De cette manière, il est possible d'évaluer l'effet des maladies infectieuses sur la population avec des paramètres liés aux maladies infectieuses.
Actuellement, de nombreux articles de recherche ont été publiés pour estimer les paramètres SEIR à partir des cas de nouveau coronavirus. Cette fois, je vais calculer le modèle SEIR avec les estimations de paramètres publiées dans l'article publié le 16 février. (Référence 2)
Parameter | Chine continentale (à l'exclusion de la province du Hubei) | Province du Hubei (à l'exclusion de Wuhan) | Wuhan |
---|---|---|---|
Population N(million) | 1340 | 45 | 14 |
Taux d'infection[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 |
Le résultat du calcul s'affiche. Notez que chacun a un chiffre de population différent sur l'axe vertical. Le premier graphique est une prévision de la propagation de l'infection en Chine continentale à l'exclusion de la province du Hubei.
Le deuxième graphique est une prévision de la propagation de l'infection dans la province du Hubei, à l'exclusion de Wuhan.
Le troisième graphique est une prédiction de la propagation de l'infection à Wuhan.
Avec ce paramètre, le nombre de personnes infectées culmine en 30 à 40 jours, et finalement presque 100% de la population sera infectée (Supprimé (100)). J'étais vraiment surpris. Probablement, le résultat de la prédiction est basé sur le pire des cas. Je pense qu'il faut faire attention à chaque étape de ce virus corona.
SEIR and SEIR models https://institutefordiseasemodeling.github.io/Documentation/general/model-seir.html
Epidemic analysis of COVID-19 in China by dynamical modeling https://arxiv.org/abs/2002.06563
Présentation d'articles qui prédisaient l'épidémie de coronavirus en 2015 https://qiita.com/kotai2003/private/a44ca921314d17cc62e3
Recommended Posts