La nouvelle infection à coronavirus (COVID-19) se propage de la Chine vers l'Europe et les Amériques et est endémique. Au Japon également, au 27 mars, il y avait 1 254 personnes infectées au Japon, et le gouverneur de Tokyo demande également des restrictions sur les sorties de week-end à Tokyo. Cependant, par rapport aux pays du G7 où les soins médicaux semblent relativement bien développés, le nombre de personnes au Japon est faible, avec 85594 aux États-Unis, 80589 en Italie, 43938 en Allemagne, 9155 en France, 11658 au Royaume-Uni et 4043 au Canada. Cela se démarque. Dans cet article, comme hypothèse pour expliquer cette raison, nous avons examiné si elle pouvait être expliquée par ** un modèle mathématique axé sur les contre-mesures de cluster **. Le flux d'examen est constitué des problèmes du modèle conventionnel, de l'examen du nouveau modèle, de la simulation et de la considération.
Tout d'abord, de la conclusion,
Dans l'article ci-dessous, j'ai calculé à l'aide d'un modèle appelé modèle SEIR, qui calcule la transition des maladies infectieuses.
Pour le dire simplement, le modèle SEIR est S: sensible, E: exposé, I: infectieux, R: infectieux. C'est un modèle qui exprime comment la distribution d'un certain groupe change parmi les quatre personnes qui se sont rétablies de la maladie et ont acquis l'immunité (récupérées) par une équation différentielle. Il semble qu'il soit souvent utilisé dans l'analyse des tendances des maladies infectieuses, et il apparaît souvent dans les documents explicatifs du ministère de la Santé au Japon, du ministère de la Santé au Royaume-Uni et du CDC américain. Cependant, si vous essayez de calculer le groupe de population S sur la base d'un grand groupe tel que tout le pays ou toute la préfecture, ce ne sera pas du tout un chiffre **. Par exemple, dans le calcul du modèle SEIR examiné dans l'article ci-dessus, en supposant une population de 1000 personnes, il culmine en 60 jours, et au sommet, plus de 30% de la population est infectée, mais en termes de ratio de population Même si vous regardez l'Italie, où le nombre de personnes infectées est extrêmement élevé, le nombre actuel de personnes infectées n'est que d'environ 0,1% de la population de 60,48 millions. Il y a plusieurs raisons possibles, mais les suivantes sont supposées, par exemple.
Alors, réfléchissons à ** Existe-t-il un modèle qui peut expliquer davantage les faits à partir des données réellement observées **?
Par conséquent, vérifions le phénomène réellement observé. La figure ci-dessous est le résultat calculé par Examinons le temps de convergence à partir de la tendance globale du nombre de reproduction effectif du nouveau virus corona.
Les chiffres du graphique sont calculés sur la base d'une certaine norme pour le nombre de reproductions de base effectives (** ci-dessous, appelé Rp. **). La ligne pointillée est une expression approximative (linéaire logique) qui se rapproche du graphique. Les tendances qui peuvent être lues à partir de ce graphique sont les suivantes.
Alors ** modélisons docilement cette tendance observée **. En particulier,
Ce sera comme ça une fois écrit dans une formule mathématique.
Rp(t) = Rp(t_0) \cdot 2^{-\frac{t-t_0}{T_h}}, T_h=7.5[days]
Incorporer ce nombre de reproduction effective Rp (t) dans le modèle SEIR pour en faire un ** modèle SEIR basé sur des grappes **.
\begin{eqnarray}
\frac{dRp}{dt} &=& - \frac{ln2}{T_h}Rp \\
\frac{dS}{dt} &=& -\frac{1}{ip} Rp \cdot I \\
\frac{dE}{dt} &=& -\frac{dS}{dt} - \frac{1}{lp} E \\
\frac{dI}{dt} &=& \frac{1}{lp} E - \frac{1}{ip} I \\
\frac{dR}{dt} &=& \frac{1}{ip} I
\end{eqnarray}
Le fait est que, contrairement au modèle SEIR original, il ne dépend pas de la valeur initiale de ** S (t) **. Dans ce qui suit, j'aimerais examiner ce modèle avec l'effet de l'anti-clustering, c'est-à-dire l'effet de découvrir un cluster et de découvrir et d'isoler les personnes infectées provenant du cluster **.
Calculons le modèle SEIR basé sur les clusters ci-dessus en Python. Importez la bibliothèque.
import numpy as np
import matplotlib.pyplot as plt
Définissez ODE. Ici, pour calculer l'effet des contre-mesures de cluster, après un certain temps $ T_c $, il est calculé avec $ Rp = 0 $.
#define differencial equation of seir model
def seir_eq7(v, t, keys):
Th = keys['Th']
lp = keys['lp']
ip = keys['ip']
Tc = keys['Tc']
#
Rp = v[0];
s = v[1];
e = v[2];
i = v[3];
r = v[4];
#
if t >= Tc:
Rp = 0
#
dRp = - np.log(2)/Th * Rp
ds = - Rp/ip * i
de = - ds - (1/lp) * e
di = (1/lp)*e - (1/ip)*i
dr = (1/ip)*i
return [dRp, ds, de, di, dr]
Définissez une fonction pour résoudre ODE.
def my_odeint(deq, ini_state, tseq, keys):
sim = None
v = np.array(ini_state).astype(np.float64)
dt = (tseq[1] - tseq[0])*1.0
for t in tseq:
dv = deq(v,t, keys)
v = v + np.array(dv) * dt
if sim is None:
sim = v
else:
sim = np.vstack((sim, v))
return sim
C'est le code à simuler en modifiant la valeur initiale du cluster $ Rp (t_0) $ de différentes manières. Les paramètres sont $ lp = 5, ip = 8, Th = 7,5 $.
# case 7.1
def calcsim(Rp0, keys):
# solve seir model
# Rp S E I R
ini_state=[Rp0, 0, 0, 1, 0]
t_max=180
dt=0.01
t=np.arange(0,t_max,dt)
#
sim = my_odeint(seir_eq7, ini_state, t, keys)
#
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
ax.plot(t,sim[:,[2,3,4]]) # extract Rp, E I R
ax.set_xticks(np.linspace(0,t_max,19))
ax.grid(which='both')
ax.legend([ 'Exposed', 'Infected','Recoverd'])
ax.set_xlabel('date')
ax.set_ylim(0,)
plt.show()
print("R(tmax):{}".format(sim[-1,4]))
# try different Rp0
keys = {'lp':5, 'ip':8, 'Th':7.5, 'Tc':200 }
calcsim(100, keys)
calcsim(30, keys)
calcsim(20, keys)
calcsim(10, keys)
# try different Tc
keys = {'lp':5, 'ip':8, 'Th':7.5, 'Tc':20 }
calcsim(10, keys)
keys = {'lp':5, 'ip':8, 'Th':7.5, 'Tc':10 }
calcsim(10, keys)
C'est le code à simuler en modifiant le temps de contre-mesure du cluster $ T_c $ de différentes manières.
# case 7.2
def calcTctoRp(Rp0):
# Rp S E I R
ini_state=[Rp0, 0, 0, 1, 0]
t_max=180
dt=0.01
t=np.arange(0,t_max,dt)
#
lp = 5
ip = 8
keys = {'lp':lp, 'ip':ip, 'Th':7.5, 'Tc':(5+0) }
#
rslt = []
for i in range(0,60):
keys['Tc'] = lp + i
sim = my_odeint(seir_eq7, ini_state, t, keys)
rslt.append([keys['Tc'], sim[-1:,4]]) # (i, R(tmax))
#
rslt = np.array(rslt)
ymax = max(rslt[:,1])
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
#
ax.plot([0 , 0],[0,ymax],'m:')
ax.plot([lp,lp],[0,ymax],'b:')
ax.plot([lp+ip,lp+ip],[0,ymax],'g:')
#
ax.plot( rslt[:,0], rslt[:,1], 'r')
ax.legend([ '0 day', 'lp days','lp + ip days','Total infected'], loc='lower right')
ax.grid(which='both')
ax.set_xlabel('cluster shutdown date since cluster occured')
ax.set_ylabel('R(tmax)')
#
for tat in [10,13,20,30,40]:
idx = [i for i in range(len(rslt[:,0])) if rslt[i,0] >= tat][0]
print("R_fin with Tc:{} is {}".format(rslt[idx,0], rslt[idx,1]))
#
ax.set_xlim(-1,)
ax.set_ylim(0,)
plt.show()
calcTctoRp(100)
calcTctoRp(30)
calcTctoRp(20)
calcTctoRp(10)
Jetons un coup d'œil aux résultats du calcul. Le résultat de la modification du numéro de reproduction initial $ Rp (t_0) $ par certains modèles, de la correction de $ Rp (t_0) $ et de la modification du temps de contre-mesure du cluster $ T_c $ par certains modèles est affiché.
Finalement, 113 personnes seront infectées.
Finalement, 3493 personnes seront infectées.
Finalement, 58 437 personnes seront infectées.
Lorsque le nombre de reproduction initial Rp (t_0) = 10, le temps de contre-mesure de cluster Tc est modifié et vérifié. Bien sûr, plus tôt les contre-mesures de cluster seront prises, plus elles seront efficaces. Dans la simulation ci-dessus, 113 personnes ont finalement été infectées sans mesures de cluster.
Si les personnes infectées peuvent être isolées dans les 10 jours suivant le cluster, le nombre final d'infectés peut être réduit de 113 à 21.
Si les personnes infectées peuvent être mises en quarantaine dans les 20 jours suivant le cluster, le nombre final d'infectés peut être réduit de 113 à 64.
Représentons graphiquement la relation entre le temps de contre-mesure du cluster Tc et le nombre final de personnes infectées. Des lignes pointillées sont tracées en trois points: lorsqu'un cluster se produit, lorsque la période de latence lp s'est écoulée et lorsque la période de latence + période d'infection (lp + ip) s'est écoulée.
Comparé à lorsque Rp (t_0) = 10, l'effet des mesures de grappes est relativement accru.
Comparé à lorsque Rp (t_0) = 20, l'effet des mesures de grappes est relativement accru.
De ce qui précède, les tendances suivantes peuvent être dérivées de la simulation concernant la transition du nombre de personnes infectées et l'effet du temps de contre-mesure de cluster basé sur le modèle SEIR basé sur les clusters.
Même dans le modèle SEIR basé sur des grappes qui ne prend pas la valeur initiale de + S, la courbe a presque la même forme que le modèle SEIR normal.
Je me suis référé à la page suivante.
Recommended Posts