[PYTHON] Simulons l'effet de l'introduction d'une application de suivi des contacts comme contre-mesure contre le nouveau virus corona

introduction

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.

Situation dans le monde

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. CRD_COVID-19_Map_WLD.png

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é?)

Hypothèses de calcul

À propos, l'application de suivi corona qui est introduite de cette manière, en tant qu'effet attendu,

  1. ** Effet de la détection rapide des contacts étroits et de la promotion rapide de l'examen, de l'isolement et du traitement (en particulier les personnes infectées asymptomatiques) **
  2. Réduction des cas où "la voie de l'infection est inconnue" lors des entretiens
  3. Détection précoce des grappes
  4. En tant que passeport pour éloigner les personnes infectées des zones à haut risque
  5. En outre, accumulation de connaissances épidémiologiquement utiles, etc.

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

Modèle de calcul

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.

Résultat du calcul

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

Lorsque le taux d'isolement de l'application α = 0

Lorsqu'il n'y a pas d'isolation par l'application. Finalement, 113 personnes seront infectées. m8_1_Rp0_10_Al_0.0.jpg

Lorsque le taux d'isolement de l'application α = 0,1

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%. m8_1_Rp0_10_Al_0.1.jpg

Lorsque le taux d'isolement de l'application α = 0,2

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%. ** ** m8_1_Rp0_10_Al_0.2.jpg

Relation entre le taux d'isolement de l'application α et le nombre final de personnes infectées

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 **. m8_2_Rp0_10.jpg

Considération

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

En outre ...

Lien de référence

Je me suis référé à la page suivante.

  1. Top 10 popular smartphone apps to track Covid-19
  2. Développement de l'application de suivi des contacts
  3. Comment les applications de contre-mesures corona dans chaque pays mettent-elles en œuvre les mesures de confidentialité?
  4. Testons l'hypothèse d'effondrement médical du nouveau virus corona
  5. Explication de la différence de propagation du nouveau virus corona entre le Japon et d'autres pays à l'aide d'un modèle de contre-mesure en cluster

Code Python

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

Simulons l'effet de l'introduction d'une application de suivi des contacts comme contre-mesure contre le nouveau virus corona
Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR
Testons l'hypothèse d'effondrement médical du nouveau virus corona
Établissons un classement du nombre de reproductions efficaces du nouveau virus corona par préfecture
Tracez la propagation du nouveau virus corona
L'histoire de l'étudiant qui a développé le nouveau site de contre-mesures contre le virus corona (version Ishikawa)
Calculons la transition du nombre de reproduction de base du nouveau virus corona par préfecture
Estimer le pic d'infectivité du nouveau virus corona
Expliquons la différence dans la façon dont le nouveau virus corona se propage entre le Japon et d'autres pays avec un modèle de contre-mesure en cluster
Simulation GUI du nouveau virus corona (modèle SEIR)
Examinons le temps de convergence de la tendance mondiale du nombre de reproduction effectif du nouveau virus corona