Les mesures visant à prévenir la propagation de la nouvelle infection à coronavirus (COVID-19) comprennent le blocus urbain, la maîtrise du comportement et des ventes, l'inspection RT-PCR et les mesures de cluster, l'application de suivi des contacts, l'application de surveillance du comportement des personnes infectées, etc. Il est abordé dans divers pays. Jusqu'à présent, le Japon s'est concentré sur l'inspection PCR, le suivi par l'équipe de contre-mesures du cluster et la maîtrise de soi des actions et des ventes en déclarant une urgence, mais depuis le 6 mai 2020, en Chine, en Italie, en Iran, aux États-Unis, etc. Cela n'a pas conduit à la propagation explosive de l'infection observée. Cependant, continuer à s'abstenir d'agir et de faire des affaires en l'état a des effets néfastes sur divers aspects tels que l'économie, l'éducation et la culture, et nous sommes au stade de la recherche d'une stratégie de sortie. Les vaccins sont activement développés, mais compte tenu de la confirmation de leur innocuité et de leur efficacité et de la mise en place d'un système de production, il est prévu qu'une période d'un an ou plus sera nécessaire au plus tôt. Des mesures plus efficaces pour isoler les personnes infectées sont nécessaires pour éviter l'effondrement des soins médicaux et lever progressivement les restrictions de comportement et de vente. Comme élément important, je voudrais vérifier l'effet ** de l'introduction de l'application de suivi des contacts ** par simulation.
Tout d'abord, examinons la situation médicale actuelle du COVID-19 dans le monde. La figure ci-dessous montre la valeur moyenne avec le taux de guérison (nombre de guérisseurs / nombre de personnes nécessitant un traitement) sur l'axe horizontal et le taux de mortalité (nombre de décès / nombre de personnes nécessitant un traitement) sur l'axe vertical dans les pays de 10000 personnes infectées ou plus. C'est un graphique. Voir cet article pour la méthode de calcul.
Le Japon est dans une position avec un taux de récupération de 1,5% et un taux de mortalité d'environ 0,25%. En termes de taux de récupération, il équivaut à la France, à la Belgique et à Singapour, et en termes de taux de mortalité, il équivaut à l'Allemagne, l'Autriche, le Pakistan et la Biélorussie. Parmi eux, les applications de suivi corona telles que la Chine, Israël, Singapour et la Corée du Sud auraient réussi, mais à l'exception de la Chine, qui était considérée comme la source de l'infection et dont la réponse initiale a été retardée, il est vrai qu'Israël, Singapour et la Corée du Sud sont morts. Le taux est bas. Plus de 10 types d'applications de suivi corona ont déjà été développés dans le monde. (Référence: Top 10 des applications de smartphone populaires pour suivre Covid-19) Il semble que le Japon développe également une application utilisant une API développée conjointement par Apple et Google. (Référence: À propos du développement des applications de suivi des contacts). Apple et Google exigent l'approbation des autorités nationales pour enregistrer l'application Corona Tracking dans le magasin, donc je ne pense pas qu'il y aura plusieurs applications dans le désordre. (Référence: Comment les applications de contre-mesure corona dans chaque pays mettent-elles en œuvre les mesures de confidentialité?)
À propos, l'application de suivi corona qui est introduite de cette manière, en tant qu'effet attendu,
Divers effets sont attendus, mais cette fois je voudrais me concentrer sur 1 et évaluer les effets quantitativement.
À ce moment-là, le modèle SEIR basé sur les clusters présenté dans l'article précédent est utilisé comme modèle de calcul. Les principales raisons d'utiliser ce modèle sont:
En particulier, dans le modèle SEIR normal, lorsque le nombre de reproduction de base est $ R_0 = 2,5 $, on dit que le pic se produit dans environ 60% de la population (1-1 $ / 2,5 = 0,6 $). (Acquisition de l'immunité de masse) Même si vous regardez les pays où le nombre de personnes infectées par million est élevé, il est de 5000 à 6000 (/ 1 million) au Qatar et en Espagne, donc le taux d'infection est d'au plus 0,6% ** Est estimé. ** Seulement 0,01% au Japon. ** Donc ** il semble raisonnable à ce stade de penser que le phénomène de pointe observé du COVID-19 ne peut pas être expliqué par un simple modèle SEIR **.
La formule de calcul s'affiche. Tout d'abord, introduisez les variables.
Introduisez les éléments suivants comme paramètres.
La formule suivante est un modèle SEIR basé sur un cluster qui intègre l'effet d'isolation de l'application.
\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 - \alpha E\\
\frac{dI}{dt} &=& \frac{1}{lp} E - \frac{1}{ip} I - \alpha I\\
\frac{dR_1}{dt} &=& \frac{1}{ip} I \\
\frac{dR_2}{dt} &=& \alpha E + \alpha I \\
\frac{dR}{dt} &=& \frac{dR_1}{dt} +\frac{dR_2}{dt}
\end{eqnarray}
À propos, l'équation suivante est vraie.
\frac{d}{dt}(S+E+I+R_1+R_2)=\frac{d}{dt}(S+E+I+R)=0
Le fait est que l'effet d'application vous isole de E et I à un taux constant.
Cette fois, je voudrais d'abord montrer les résultats. La valeur initiale du nombre de reproductions effectives est $ R_p (0) = 10 $. Aussi, soit l'état initial $ (E, I, R) = (0,1,0) $.
Lorsqu'il n'y a pas d'isolation par l'application. Finalement, 113 personnes seront infectées.
Lorsque le taux d'isolement par l'application est de 10 [% / jour]. En d'autres termes, supposons que 10% des personnes infectées soient mises en quarantaine par jour. Finalement, 26 personnes seront infectées (R1 + R2). Le nombre de personnes infectées a diminué de 77%.
Lorsque le taux d'isolement par l'application est de 20 [% / jour]. Finalement, 11 personnes seront infectées (R1 + R2). ** Le nombre de personnes infectées a diminué de 90%. ** **
Représentons graphiquement la relation entre le taux d'isolement par l'application $ \ alpha $ et le nombre final de personnes infectées $ R (T_ {max}), R_1 (T_ {max}), R_2 (T_ {max}) $. À environ ** $ \ alpha = 0,07 $ ou plus, les quarantaines d'applications sont plus nombreuses que les quarantaines non liées aux applications **.
À partir de ce qui précède, les tendances suivantes peuvent être dérivées de la simulation concernant l'effet de l'isolement précoce par l'application de suivi corona basée sur le modèle SEIR basé sur les clusters.
Je me suis référé à la page suivante.
Enfin, je vais coller le code Python utilisé dans cet article.
import numpy as np
import matplotlib.pyplot as plt
# ODE solver
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
#define differencial equation of seir model
def seir_eq8(v, t, keys):
Th = keys['Th']
lp = keys['lp']
ip = keys['ip']
al = keys['al']
#
Rp = v[0];
s = v[1];
e = v[2];
i = v[3];
r1 = v[4];
r2 = v[5];
r = v[6];
#
dRp = - np.log(2)/Th * Rp
ds = - Rp/ip * i
de = - ds - (1/lp) * e - al * e
di = (1/lp)*e - (1/ip) * i - al * i
dr1 = (1/ip)*i
dr2 = al * e + al * i
dr = dr1 + dr2
return [dRp, ds, de, di, dr1, dr2, dr]
# simulation 1
def calcsim(Rp0, keys):
# solve seir model
# Rp S E I R1 R2 R
ini_state=[Rp0, 0, 0, 1, 0, 0, 0]
t_max=180
dt=0.01
t=np.arange(0,t_max,dt)
#
sim = my_odeint(seir_eq8, ini_state, t, keys)
#
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
ax.plot(t,sim[:,[2,3,4,5]]) # extract E I R1 R2
ax.set_xticks(np.linspace(0,t_max,19))
yw = 10; yn = int(120/yw)+1
ax.set_yticks(np.linspace(0,yw*(yn-1), yn))
ax.grid(which='both')
ax.legend([ 'Exposed', 'Infected','Recoverd1(normal)', 'Recoverd2(App-based)'])
ax.set_xlabel('date')
ax.set_ylim(0,)
plt.show()
print("R(tmax):{}".format(sim[-1,6]))
# do simulation 1
keys = {'lp':5, 'ip':8, 'Th':7.5, 'al':0.0 }
calcsim(10, keys)
keys = {'lp':5, 'ip':8, 'Th':7.5, 'al':0.1 }
calcsim(10, keys)
keys = {'lp':5, 'ip':8, 'Th':7.5, 'al':0.2 }
calcsim(10, keys)
# simulation 2
def calcAltoRfin(Rp0):
# Rp S E I R1 R2 R
ini_state=[Rp0, 0, 0, 1, 0, 0, 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, 'al':(0.) }
#
mklist = lambda e, l : np.append(np.array(e),l)
#
rslt = []
for i in np.linspace(0,0.4,20):
keys['al'] = i
sim = my_odeint(seir_eq8, ini_state, t, keys)
r = mklist(keys['al'], sim[-1][4:]) # (i, R(tmax), R1(tmax), R2(tmax))
rslt.append(r)
#
rslt = np.array(rslt)
ymax = max(rslt[:,2])
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
#
ax.plot( rslt[:,0], rslt[:,3], 'b')
ax.plot( rslt[:,0], rslt[:,1], 'g')
ax.plot( rslt[:,0], rslt[:,2], 'r')
ax.legend([ 'R(Total infected)', 'R1(normal purge)', 'R2(App-based purge)'], loc='upper right')
ax.grid(which='both')
ax.set_xlabel('application-based purge rate [/day]')
ax.set_ylabel('total infected cases at tmax')
yw = 10; yn = int(120/yw)+1
ax.set_yticks(np.linspace(0,yw*(yn-1), yn))
#
for tat in [0,0.1,0.2,0.3,0.4]:
idx = [i for i in range(len(rslt[:,0])) if rslt[i,0] >= tat][0]
print("R_fin with Al:{} is {}".format(rslt[idx,0], rslt[idx,3]))
#
ax.set_xlim(0,)
ax.set_ylim(0,)
plt.show()
# do simulation 2
calcAltoRfin(10)
Recommended Posts