[PYTHON] Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR

introduction

Depuis le 5 mars 2020, la situation au Japon contre le nouveau virus corona (COVID-19) a été prise très au sérieux, y compris les restrictions d'immigration en provenance d'autres pays. Le gouvernement a demandé que toutes les écoles primaires, secondaires et secondaires soient fermées dans tout le pays, et si certains en ont remis en question l'effet, il est également entendu que le jugement politique est nécessaire car il est difficile de démontrer une base scientifique. Je peux le faire. Cet article utilise le modèle SEIR, qui est l'un des modèles mathématiques des maladies infectieuses, pour vérifier s'il est possible de contrôler le pic d'infection en prenant un certain temps de congé dans un établissement scolaire / commercial (avec une échelle de 1000 personnes). est. Cependant, cet article est une simulation sous des hypothèses limitées et ne fournit pas de confirmation scientifique ou de preuves académiques. Nous ne prenons aucune responsabilité car cela peut être utile ou incorrect. Pour la plupart des programmes, j'ai fait référence à cet article.

Conditions préalables

Les détails du modèle SEIR sont omis dans cet article, mais dans Wikipedia Selon

Il est composé de, et son acronyme est appelé modèle SEIR. Il semble. Les paramètres du modèle SEIR comprennent

il y a. Selon Ministère de la santé, du travail et du bien-être, "La période de latence est actuellement connue de l'OMS. Est de 1 à 12,5 jours (principalement de 5 à 6 jours) », supposons donc 5,5 jours. La durée de l'infection est inconnue, mais on dit que l'apparition de la fièvre se poursuivra pendant environ 4 jours, puis elle se rétablira ou s'aggravera, donc on suppose qu'elle est de 8 jours. (Si la condition s'aggrave, on considère que le patient sera hospitalisé, mais la personne légèrement malade se rétablira tout en menant une vie normale sans en avoir conscience.) Le plus important est le taux d'infection, mais sur la base des données fournies par le ministère de la Santé, du Travail et des Affaires sociales, nous avons fait ce qui suit.

Taux d'infection

Selon Q&R of Ministry of Health, Labour and Welfare, la fréquence d'une personne infectée causant une infection secondaire est indiquée dans la figure ci-dessous. Il semble. Q14.jpg À partir de ces données, en utilisant des nombres aléatoires uniformes, Définissez une fonction pour calculer le taux R0 (nombre de reproduction de base) qui produit une infection secondaire.

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

Ici, er est défini comme la probabilité que la source de l'infection se trouve dans un environnement mal ventilé.

Paramètres supplémentaires

Nous voulons également évaluer l'impact du congé, nous allons donc introduire les paramètres suivants.

Sur la base de R0 et de ces paramètres, j'ai modifié le modèle SEIR comme suit:

#define differencial equation of seir model
def seir_eq5(v,t, keys):
    er = keys['er']
    lp = keys['lp']
    ip = keys['ip']
    tb = keys['tb']
    te = keys['te']
    #
    if t >= tb and t <= te: #Période de vacances
        R0 = 0 #Complètement fermé (lorsqu'il n'y a personne dans l'école / le bureau des affaires)
    else:
        R0 = COVID19R0(er)
    #
    ds = - R0/ip * v[2] if v[0] >= 0 else 0 # note: s >= 0
    de = -ds - (1/lp) * v[1]
    di = (1/lp)*v[1] - (1/ip)*v[2]
    dr = (1/ip)*v[2]
    return [ds, de, di, dr]

Autres programmes

Importez la bibliothèque pour exécuter la simulation.

import numpy as np
import matplotlib.pyplot as plt

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

Code qui calcule et trace les résultats.

#solve seir model
ini_state=[999,0,1,0]
t_max=180
dt=0.01
t=np.arange(0,t_max,dt)
#
keys = {'er':0.5, 'lp':5.5, 'ip':8, 'tb':0, 'te':0}
sim = my_odeint(seir_eq5, ini_state, t, keys)
#
plt.rcParams["font.size"] = 12
fig, ax = plt.subplots(figsize=(10,5))
ax.plot(t,sim)
ax.set_xticks(np.linspace(0,t_max,19))
ax.set_yticks(np.linspace(0,1000,11))
ax.grid(which='both')
ax.legend(['Susceptible','Exposed','Infected','Recovered'])
plt.show()

Ici, er (probabilité que la source de l'infection se trouve dans un environnement mal ventilé) a été supposé être de 0,5.

résultat de la simulation

Nous commencerons avec une personne infectée le 0ème jour sur 1000 bureaux.

Le premier est lorsque vous ne prenez aucun congé.

nonstop.png Le pic est vers le 60e jour, et il y a des jours où il y a jusqu'à environ 320 personnes infectées.

C'est le cas lorsque nous sommes fermés pendant 20 jours à un stade très précoce (30e jour).

tb30te50.png Le pic est vers le 95ème jour, et il y a des jours où il y a jusqu'à 310 personnes infectées. Il est intéressant de noter que les jours de retard de pointe (35 = 95-60) sont plus longs que les vacances (20 jours).

C'est le cas lorsque le patient est fermé pendant 20 jours à compter du stade où l'infection commence à augmenter rapidement (jour 50).

tb50te70.png Les pics sont dispersés les jours 52 et 90, avec jusqu'à 200 jours infectés au jour 90.

C'est le cas lorsque nous sommes fermés pendant 20 jours à compter du stade où l'infection commence à se calmer (60e jour).

tb60te80.png Le résultat est le même que si vous ne prenez aucun congé. On pense que cela est dû au fait qu'au 60e jour, personne (sensible) n'était immunisé contre l'infection S:.

Considération

De ce qui précède, les tendances suivantes peuvent être dérivées de la simulation concernant le contrôle maximal de l'infection en prenant une certaine période (20 jours) de congé de l'établissement scolaire / commercial (jusqu'à 1000 personnes).

Par conséquent, si vous souhaitez prendre un congé, il peut être plus efficace de le faire du «stade où l'infection commence à augmenter rapidement» à «avant que l'infection ne commence à disparaître».

En outre ...

Lien de référence

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

Recommended Posts

Vérifiez l'effet du congé comme contre-mesure contre le nouveau virus corona avec le modèle SEIR
Simulons l'effet de l'introduction d'une application de suivi des contacts comme contre-mesure contre le nouveau virus corona
Simulation GUI du nouveau virus corona (modèle SEIR)
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
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
Analysez le modèle thématique pour devenir romancier avec GensimPy3
Tracez la propagation du nouveau virus corona
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
L'histoire de l'étudiant qui a développé le nouveau site de contre-mesures contre le virus corona (version Ishikawa)
Estimer le pic d'infectivité du nouveau virus corona
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
Un modèle qui identifie la guitare avec fast.ai
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
La théorie selon laquelle la clé du contrôle de l'infection du nouveau coronavirus est l'hyperdispersion de la sensibilité.
J'ai essayé de visualiser les caractéristiques des nouvelles informations sur les personnes infectées par le virus corona avec wordcloud
Établissons un classement du nombre de reproductions efficaces du nouveau virus corona par préfecture
Obtenez le nom de la variable sous forme de chaîne de caractères.
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Testons l'hypothèse d'effondrement médical du nouveau virus corona
Tâches au démarrage d'un nouveau projet python
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV
Calculer le produit des matrices avec une expression de caractère?
(Premier article) Une histoire sur le calcul numérique de la grippe et du nouveau coronavirus de la pneumonie avec Tensorflow
Nouvelle infection par le virus Corona: comprendre le rôle des stratégies de distance sociale avec un modèle simple
Si les habitants de Tokyo tombent gravement malades du nouveau virus corona, ils peuvent être emmenés dans un hôpital de la préfecture de Kagoshima.