[PYTHON] Lassen Sie uns den Unterschied in der Ausbreitung des neuen Koronavirus zwischen Japan und anderen Ländern anhand eines Cluster-Gegenmaßnahmenmodells erklären

Einführung

Die neue Coronavirus-Infektion (COVID-19) breitet sich von China nach Europa und Amerika aus und ist weit verbreitet. In Japan gibt es seit dem 27. März 1.254 Infizierte in Japan, und in Tokio fordert der Gouverneur von Tokio Beschränkungen für das Unterlassen, an Wochenenden auszugehen. Im Vergleich zu den G7-Ländern, in denen die medizinische Versorgung relativ gut entwickelt zu sein scheint, ist die Zahl der Menschen in Japan jedoch gering: 85594 in den USA, 80589 in Italien, 43938 in Deutschland, 9155 in Frankreich, 11658 in Großbritannien und 4043 in Kanada. Es steht heraus. In diesem Artikel haben wir als eine Hypothese zur Erklärung dieses Grundes untersucht, ob dies durch ** ein mathematisches Modell erklärt werden kann, das sich auf Cluster-Gegenmaßnahmen ** konzentriert. Der Untersuchungsfluss sind die Probleme des konventionellen Modells, die Prüfung des neuen Modells, die Simulation und die Betrachtung.

Fazit

Zunächst aus der Schlussfolgerung,

  1. Wenn der Ausbruch von Clustern unbeaufsichtigt bleibt, steigt die Gesamtzahl der infizierten Personen explosionsartig an. ** Es gibt 113 Cluster mit 10 anfänglichen Reproduktionen, 3493 Cluster mit 20 anfänglichen Reproduktionen und 30 Cluster mit 30 anfänglichen Reproduktionen. Produziert 58.437 Infizierte **.
  2. Die Wirkung von Cluster-Gegenmaßnahmen kann so schnell wie möglich erwartet werden. Je größer der Cluster ist, desto größer ist die Möglichkeit, dass sich die Gesamtzahl der infizierten Personen halbiert oder mehr halbiert, wenn sie innerhalb von 20 Tagen ab dem Zeitpunkt des Auftretens des Clusters isoliert werden. ** Gibt es.
  3. 50 Tage nach dem Auftreten des Clusters verschwinden die Auswirkungen der Cluster-Gegenmaßnahmen jedoch fast **.
  4. Wenn daher die Zahl der Infizierten zunimmt, die dem Weg nicht folgen können, ist es sinnvoll, das frühzeitige Ausgehen von Uniformen zu verbieten.
  5. Die Faktoren, die den Unterschied zwischen den westlichen G7-Ländern und Japan ausmachen, sind: ** Frühzeitige Cluster-Gegenmaßnahmen, zurückhaltende Cluster mit hoher Anfangsproduktion durch Verzicht auf Großveranstaltungen und zusätzlich zu religiösen Einrichtungen Es ist möglich, dass es nur wenige Besprechungen gibt **.

Einschränkungen des konventionellen Modells (SEIR-Modell)

Im folgenden Artikel habe ich ein Modell namens SEIR-Modell berechnet, das den Übergang von Infektionskrankheiten berechnet.

Einfach ausgedrückt ist das SEIR-Modell S: Susceptible, E: Exposed, I: Infectious, R: Infectious. Es ist ein Modell, das ausdrückt, wie sich die Verteilung einer bestimmten Gruppe unter den vier Personen ändert, die sich von der Krankheit erholt und durch eine Differentialgleichung Immunität (wiederhergestellt) erworben haben. Es scheint, dass es häufig in der Trendanalyse von Infektionskrankheiten verwendet wird, und es erscheint häufig in Erklärungsmaterialien des japanischen Gesundheitsministeriums, des britischen Gesundheitsministeriums und der amerikanischen CDC. Wenn Sie jedoch versuchen, die Bevölkerungsgruppe S anhand einer großen Gruppe wie dem ganzen Land oder der gesamten Präfektur zu berechnen, ist dies überhaupt keine Ziffer **. Beispielsweise wird bei der Berechnung des im obigen Artikel untersuchten SEIR-Modells unter der Annahme einer Bevölkerung von 1000 Personen innerhalb von 60 Tagen ein Höchststand erreicht, und auf dem Höchststand werden mehr als 30% der Bevölkerung infiziert, jedoch in Bezug auf das Bevölkerungsverhältnis Selbst wenn Sie sich Italien ansehen, wo die Zahl der Infizierten extrem hoch ist, beträgt die derzeitige Zahl der Infizierten nur etwa 0,1% der Bevölkerung von 60,48 Millionen. Es gibt verschiedene mögliche Gründe, aber die folgenden werden zum Beispiel angenommen.

Denken wir also über ** Gibt es ein Modell, das die Fakten anhand der tatsächlich beobachteten Daten besser erklären kann **?

Betrachten Sie ein clusterbasiertes SEIR-Modell

Lassen Sie uns daher das tatsächlich beobachtete Phänomen überprüfen. Die folgende Abbildung ist das Ergebnis, das von [Untersuchen wir die Konvergenzzeit anhand des globalen Trends der effektiven Reproduktionszahl des neuen Koronavirus] berechnet wurde (https://qiita.com/oki_mebarun/items/24e0dbb3e2e4dff1abee#comments). R0_爆発的感染が観測された地域+推定.png

Die Zahlen in der Grafik werden basierend auf einem bestimmten Standard für die Anzahl der effektiven Grundreproduktionen berechnet (** unten als Rp. ** bezeichnet). Die gepunktete Linie ist ein ungefährer Ausdruck (logisch linear), der sich dem Diagramm annähert. Die Trends, die aus dieser Grafik abgelesen werden können, sind wie folgt.

Also ** lasst uns diesen beobachteten Trend gehorsam modellieren **. Speziell,

Es wird so sein, wenn es in einer mathematischen Formel geschrieben wird.

Rp(t) = Rp(t_0) \cdot 2^{-\frac{t-t_0}{T_h}},  T_h=7.5[days]

Integrieren Sie diese effektive Reproduktionsnummer Rp (t) in das SEIR-Modell, um es zu einem ** clusterbasierten SEIR-Modell ** zu machen.

\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}

Der Punkt ist, dass es im Gegensatz zum ursprünglichen SEIR-Modell nicht vom Anfangswert von ** S (t) ** abhängt. Im Folgenden möchte ich dieses Modell mit dem Effekt von Anti-Clustering untersuchen, dh dem Effekt, einen Cluster zu entdecken und infizierte Personen, die aus dem Cluster stammen, zu entdecken und zu isolieren **.

Versuchen Sie mit Python zu rechnen

Berechnen wir das obige clusterbasierte SEIR-Modell in Python. Importieren Sie die Bibliothek.

import numpy as np
import matplotlib.pyplot as plt

ODE definieren. Um den Effekt von Cluster-Gegenmaßnahmen zu berechnen, wird dieser nach einer bestimmten Zeit $ T_c $ mit $ Rp = 0 $ berechnet.

#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]

Definieren Sie eine Funktion zum Lösen von 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

Dies ist der zu simulierende Code, indem der anfängliche Clusterwert $ Rp (t_0) $ auf verschiedene Arten geändert wird. Die Parameter sind $ 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)

Dies ist der zu simulierende Code, indem die Zeit für die Cluster-Gegenmaßnahme $ T_c $ auf verschiedene Weise geändert wird.

# 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)

Simulationsergebnis

Werfen wir einen Blick auf die Berechnungsergebnisse. Das Ergebnis der Änderung einiger Muster der anfänglichen Reproduktionsnummer $ Rp (t_0) $ und der Änderung der Cluster-Gegenmaßnahmenzeit $ T_c $ durch Festlegen von $ Rp (t_0) $ wird angezeigt.

1. Wirkung der anfänglichen Reproduktionsnummer Rp (t_0)

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 10 ist

Schließlich werden 113 Menschen infiziert sein. m7_1_Rp0_10_Tc_200.jpg

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 20 ist

Schließlich werden 3493 Menschen infiziert sein. m7_1_Rp0_20_Tc_200.jpg

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 30 ist

Schließlich werden 58.437 Menschen infiziert sein. m7_1_Rp0_30_Tc_200.jpg

2. Auswirkung der Cluster-Gegenmaßnahmenzeit Tc

Wenn die anfängliche Reproduktionsnummer Rp (t_0) = 10 ist, wird die Cluster-Gegenmaßnahmenzeit Tc geändert und verifiziert. Je früher die Cluster-Maßnahmen ergriffen werden, desto effektiver wird sie natürlich erwartet. In der obigen Simulation wurden 113 Personen schließlich ohne Clustermaßnahmen infiziert.

Wenn die Cluster-Gegenmaßnahmezeit Tc = 10 [Tage] ist

Wenn der Infizierte innerhalb von 10 Tagen nach dem Cluster isoliert werden kann, kann die endgültige Anzahl der Infizierten von 113 auf 21 reduziert werden. m7_1_Rp0_10_Tc_10.jpg

Bei Cluster-Gegenmaßnahmezeit Tc = 20 [Tage]

Wenn der Infizierte innerhalb von 20 Tagen nach dem Cluster unter Quarantäne gestellt werden kann, kann die endgültige Anzahl der Infizierten von 113 auf 64 reduziert werden. m7_1_Rp0_10_Tc_20.jpg

3. Beziehung zwischen der Cluster-Gegenmaßnahmezeit Tc und der endgültigen Anzahl infizierter Personen

Lassen Sie uns die Beziehung zwischen der Cluster-Gegenmaßnahmenzeit Tc und der endgültigen Anzahl infizierter Personen grafisch darstellen. Gepunktete Linien werden an drei Punkten gezeichnet: wenn ein Cluster auftritt, wenn die Latenzzeit lp abgelaufen ist und wenn die Latenzzeit + Infektionsperiode (lp + ip) abgelaufen ist.

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 10 ist

m7_2_Rp0_10.jpg

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 20 ist

Im Vergleich zu Rp (t_0) = 10 ist der Effekt von Clustermaßen relativ erhöht. m7_2_Rp0_20.jpg

Wenn die anfängliche Wiedergabennummer Rp (t_0) = 30 ist

Im Vergleich zu Rp (t_0) = 20 ist der Effekt von Clustermaßen relativ erhöht. m7_2_Rp0_30.jpg

Erwägung

Aus dem Obigen können die folgenden Trends aus der Simulation hinsichtlich des Übergangs der Anzahl infizierter Personen und der Auswirkung der Cluster-Gegenmaßnahmenzeit basierend auf dem clusterbasierten SEIR-Modell abgeleitet werden.

Selbst im clusterbasierten SEIR-Modell, das nicht den Anfangswert von + S annimmt, hat die Kurve fast die gleiche Form wie das normale SEIR-Modell.

Außerdem ...

Referenzlink

Ich habe auf die folgende Seite verwiesen.

  1. SEIR-Modell
  2. Überblick über die Strategie zur Clusterunterstützung (vorläufige Version am 10. März 2020)

Recommended Posts

Lassen Sie uns den Unterschied in der Ausbreitung des neuen Koronavirus zwischen Japan und anderen Ländern anhand eines Cluster-Gegenmaßnahmenmodells erklären
Überprüfen Sie die Wirkung des Urlaubs als Gegenmaßnahme gegen das neue Koronavirus mit dem SEIR-Modell
[Python] Erläutert anhand eines Beispiels den Unterschied zwischen strftime und strptime im datetime-Modul
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Über den Unterschied zwischen "==" und "is" in Python
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Simulieren wir den Effekt der Einführung einer Kontaktverfolgungs-App als Gegenmaßnahme gegen den neuen Koronavirus
Werfen wir einen Blick auf die Infektionstendenz des neuen Coronavirus COVID-19 in jedem Land und den Status der medizinischen Reaktion (zusätzliche Informationen).
Was ist der Unterschied zwischen symbolischen und harten Links?
Speichern Sie das Pystan-Modell und erhalten Sie eine Pickle-Datei
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden