[PYTHON] Hypothèse pour laquelle le nouveau virus corona n'est pas si populaire dans les zones urbaines comme Tokyo

introduction

Si vous vérifiez la transition du nombre de personnes infectées par la nouvelle infection à coronavirus (COVID-19) sur Carte des nouveaux personnes infectées par coronavirus par préfecture etc. Au 7 mars 2020, il y avait un nombre considérable de personnes localement, dont 98 à Hokkaido et 21 à Sagamihara City, 73 à Tokyo, 41 à Osaka et 8 à Kyoto. On a l'impression qu'il y en a relativement peu dans les zones urbaines où il devrait y avoir beaucoup de trafic. Le nombre de personnes infectées est étonnamment faible dans les zones urbaines, même si des centaines de milliers ou des millions de personnes se rendent au travail, vont à l'école ou font du tourisme chaque jour et travaillent en contact les unes avec les autres dans des zones densément peuplées. C'est très étrange, n'est-ce pas? Par conséquent, dans cet article, j'ai fait une hypothèse et testé si la raison pouvait être expliquée à l'aide d'un modèle mathématique. Veuillez vous référer à Article publié l'autre jour pour l'outillage de base.

le terme

Comme je l'ai écrit dans Article précédent, je vais passer en revue les termes de base.

Utilisez également les paramètres suivants.

hypothèse

Maintenant, l'hypothèse proposée dans cet article est, en un mot, ** l'effet purificateur de Bedtown **. Tout d'abord, veuillez consulter la figure ci-dessous. COVID-Tokyo.jpg Tout d'abord, définissez les mots.

Comme le montre la figure, les personnes S1 des banlieues se rendent au travail et à l'école et les personnes S2 de la zone urbaine rejoignent la même école ou le même lieu de travail. Là, il est transmis par la personne infectée I et devient respectivement E1 et E2. A partir de E1 et E2, transition vers I1 et I2, respectivement, et enfin vers R1 et R2. Cependant, parmi les I1 vivant en banlieue, seuls ceux qui ont un certain pourcentage r $ (0 \ leq r \ leq 1) $ doivent faire la navette pour se rendre au travail ou à l'école à nouveau dans la zone urbaine. Les autres personnes du ratio 1-r ne doivent pas se déplacer vers les zones urbaines en attendant à la maison ou en étant hospitalisées. À partir de ce flux, j'ai fait l'hypothèse suivante.

Modification du modèle SEIR

L'hypothèse ci-dessus est modifiée par le modèle SEIR et exprimée sous forme de formule. Regardons.

\frac{dS_1}{dt}
 = - \frac{R_0}{ip} (I_2 + r I_1) \frac{S_1}{S_1 + S_2} , S_1 \geq 0
 \\
\frac{dS_2}{dt}
 = - \frac{R_0}{ip} (I_2 + r I_1) \frac{S_2}{S_1 + S_2}, S_2 \geq 0
 \\
\frac{dE_1}{dt}
 = -\frac{dS_1}{dt} - \frac{1}{lp} E_1 \\
\frac{dE_2}{dt}
 = -\frac{dS_2}{dt} - \frac{1}{lp} E_2 \\
\frac{dI_1}{dt}
 = \frac{1}{lp}E_1 - \frac{1}{ip} I_1 \\
\frac{dI_2}{dt}
 = \frac{1}{lp}E_2 - \frac{1}{ip} I_2 \\
\frac{dR_1}{dt}
 = \frac{1}{ip} I_1 \\
\frac{dR_2}{dt}
 = \frac{1}{ip} I_2 

Dans les deux premières formules, la personne infectée secondaire produite par la personne infectée (I2 + rI1) est répartie par S1 et S2. Les autres formules sont les mêmes que le modèle SEIR.

Essayez de calculer avec Python

Calculons l'hypothèse ci-dessus en Python. Importez la bibliothèque.

import numpy as np
import matplotlib.pyplot as plt

Définissez une fonction qui calcule R0.

def COVID19R0(er):
    if np.random.rand() < er:
        # good environment
        if np.random.rand() < 0.8:
            R0 = 0
        else:
            R0 = np.random.randint(1,4)*1.0
    else:
        # bad environment
        R0 = np.random.randint(0,12)*1.0
    return R0

Définissez ODE.

def seir_eq6(v,t, keys):
    er = keys['er']
    lp = keys['lp']
    ip = keys['ip']
    r  = keys['r']
    #
    R0 = COVID19R0(er)
    #
    s1 = v[0]; s2 = v[1]
    e1 = v[2]; e2 = v[3]
    i1 = v[4]; i2 = v[5]
    r1 = v[6]; r2 = v[7]    
    #
    ds1 = - R0/ip * (i2 + r * i1) * (s1/(s1 + s2)) if s1 >= 0 else 0 # note: s1 >= 0
    ds2 = - R0/ip * (i2 + r * i1) * (s2/(s1 + s2)) if s2 >= 0 else 0 # note: s2 >= 0
    de1 = -ds1 - (1/lp) * e1
    de2 = -ds2 - (1/lp) * e2
    di1 = (1/lp)*e1 - (1/ip)*i1
    di2 = (1/lp)*e2 - (1/ip)*i2
    dr1 = (1/ip)*i1
    dr2 = (1/ip)*i2
    return [ds1, ds2, de1, de2, di1, di2, dr1, dr2]

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

Enfin, le code de simulation et d'affichage.

ini_state=[430, 999, 0, 0, 0, 1, 0, 0]
t_max=180
dt=0.01
t=np.arange(0,t_max,dt)
#
keys = {'er':0.5, 'lp':5.5, 'ip':8, 'r':0.01 }
sim = my_odeint(seir_eq6, ini_state, t, keys)
#
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
ax.plot(t,sim[:,[4,5]]) # extract Infected1, Infected2
ax.set_xticks(np.linspace(0,t_max,19))
yw = 100; yn = int(500/yw)+1
ax.set_yticks(np.linspace(0,yw*(yn-1), yn))
ax.grid(which='both')
ax.legend(['Infected1(Outside)','Infected2(in City)'])
ax.set_xlabel('date')
plt.show()

Calculons quelques modèles en modifiant les parties S1 et S2 de init_state. Le rapport r est supposé égal à 0,01. De plus, les autres paramètres sont les mêmes que Article précédent.

résultat de la simulation

Nous partirons de l'état où la population de la zone urbaine est de 1 000 habitants et il y a une personne infectée le 0ème jour (S2 = 999, I2 = 1). 1000 personnes est une valeur provisoire pour faciliter le calcul.

Le premier est lorsque l'afflux S1 des banlieues est égal à 0.

m6_2_s1_0_all.png

Le nombre d'I2 infectés dans les zones urbaines a culminé à environ 320 le 62e jour.

C'est le cas lorsque l'afflux S1 de la banlieue est de 50%.

Je suis parti de S1 = 500. m6_2_s1_50_all.png Le nombre d'I2 infectées dans les zones urbaines a culminé à environ 260 le 102e jour. En d'autres termes, le pic est retardé d'environ 40 jours et le nombre de personnes infectées au pic est réduit d'environ 19%. À propos, selon Tokyo Metropolitan Press Material, le recensement national de 2015 En conséquence de

Par conséquent, le rapport de S1 et S2 est de 430: 1000 à titre indicatif.

C'est le cas lorsque l'afflux S1 de la banlieue est de 80%.

Cela a commencé à partir de S1 = 800. m6_2_s1_80_all.png Le nombre d'I2 infectés dans les zones urbaines a culminé à environ 210 le 142e jour. En d'autres termes, le pic est retardé d'environ 80 jours et le nombre de personnes infectées au pic est réduit d'environ 34%. Il semble y avoir beaucoup de chiffres de 80%, mais selon cette page, "En 2018 Le nombre de touristes étrangers visitant Tokyo était d'environ 14,24 millions, et le nombre de touristes japonais était d'environ 536,5 millions. »Ainsi, par simple calcul, 1,5 million de personnes afflueront chaque jour. Je vais.

Considération

À partir de ce qui précède, les tendances suivantes peuvent être dérivées de la simulation concernant la fluctuation maximale de l'infection due au fait que la personne infectée reste en banlieue (en attente à la maison / hospitalisée en banlieue) tandis que la population circule de la ville-lit de banlieue vers la zone urbaine.

Par conséquent, il semble que ** l'effet de purification de Bedtown ** soit raisonnable.

En outre ...

Lien de référence

Je me suis référé à la page suivante Carte des personnes infectées par le nouveau virus corona par préfecture Aperçu de la population de jour de Tokyo (population par lieu d'emploi / école) Enquête factuelle sur le nombre de touristes visitant Tokyo en 2018 Modèle SEIR Début du modèle mathématique des maladies infectieuses: aperçu du modèle SEIR par Python et introduction à l'estimation des paramètres Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR

Recommended Posts

Hypothèse pour laquelle le nouveau virus corona n'est pas si populaire dans les zones urbaines comme Tokyo
Testons l'hypothèse d'effondrement médical du nouveau virus corona
Réfléchissez aux raisons pour lesquelles Kubernetes est décrit comme «Linux dans le monde du cloud»
Si la précision du test PCR est mauvaise, pourquoi ne pas répéter le test?
Tracez la propagation du nouveau virus corona
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
Estimer le pic d'infectivité du nouveau virus corona
Quelle est la raison pour laquelle l'homme n'affiche pas les commandes de base en japonais?