[PYTHON] Simulieren wir den Effekt der Einführung einer Kontaktverfolgungs-App als Gegenmaßnahme gegen den neuen Koronavirus

Einführung

Maßnahmen zur Verhinderung der Ausbreitung der neuen Coronavirus-Infektion (COVID-19) umfassen städtische Blockade, Selbstbeherrschung in Verhalten und Verkauf, RT-PCR-Inspektion und Cluster-Gegenmaßnahmen, Kontaktverfolgungs-App, App zur Überwachung des Verhaltens infizierter Personen usw. Es wird in verschiedenen Ländern angegangen. Bisher konzentrierte sich Japan auf PCR-Inspektionen, die Verfolgung durch Cluster-Gegenmaßnahmen-Teams und die Selbstbeherrschung von Maßnahmen und Verkäufen durch die Erklärung eines Notfalls. Ab dem 6. Mai 2020 jedoch in China, Italien, Iran, den USA usw. Es hat nicht zu einer explosiven Ausbreitung der Infektion geführt. Wenn wir jedoch weiterhin auf Handeln und Geschäft verzichten, hat dies schädliche Auswirkungen auf verschiedene Aspekte wie Wirtschaft, Bildung und Kultur, und wir befinden uns in der Phase der Suche nach einer Ausstiegsstrategie. Impfstoffe werden aktiv entwickelt, aber angesichts der Bestätigung der Sicherheit und Wirksamkeit und der Einrichtung eines Produktionssystems wird erwartet, dass frühestens ein Jahr oder länger erforderlich sein wird. Effizientere Segregationsmaßnahmen für infizierte Menschen sind erforderlich, um den Zusammenbruch der medizinischen Versorgung zu verhindern und die Verhaltens- und Verkaufsbeschränkungen schrittweise aufzuheben. Als wichtiges Element möchte ich den ** Effekt der Einführung der Kontaktverfolgungs-App ** durch Simulation überprüfen.

Situation auf der ganzen Welt

Lassen Sie uns zunächst einen Blick auf die aktuelle medizinische Situation von COVID-19 auf der ganzen Welt werfen. Die folgende Abbildung zeigt den Durchschnittswert mit der Genesungsrate (Anzahl der Geneser / Anzahl der zu behandelnden Personen) auf der horizontalen Achse und der Sterblichkeitsrate (Anzahl der Todesfälle / Anzahl der zu behandelnden Personen) auf der vertikalen Achse in Ländern mit 10.000 oder mehr infizierten Personen. Es ist eine Grafik. Siehe dieser Artikel für die Berechnungsmethode. CRD_COVID-19_Map_WLD.png

Japan ist in einer Position mit einer Wiederherstellungsrate von 1,5% und einer Sterblichkeitsrate von rund 0,25%. In Bezug auf die Wiederherstellungsrate entspricht dies Frankreich, Belgien und Singapur, und in Bezug auf die Sterblichkeitsrate entspricht es Deutschland, Österreich, Pakistan und Weißrussland. Unter ihnen sollen Corona-Tracking-Apps wie China, Israel, Singapur und Südkorea erfolgreich gewesen sein, aber mit Ausnahme von China, das als Infektionsquelle angesehen wurde und dessen erste Reaktion sich verzögerte, ist es wahr, dass Israel, Singapur und Südkorea gestorben sind. Die Rate ist niedrig. Weltweit wurden bereits mehr als 10 Arten von Corona-Tracking-Apps entwickelt. (Referenz: Top 10 der beliebtesten Smartphone-Apps zur Verfolgung von Covid-19) Es scheint, dass Japan auch eine App entwickelt, die eine von Apple und Google gemeinsam entwickelte API verwendet. (Referenz: Informationen zur Entwicklung von Kontaktverfolgungs-Apps). Apple und Google benötigen die Genehmigung der nationalen Behörden, um die Corona Tracking-App im Store zu registrieren. Ich glaube also nicht, dass mehrere Apps durcheinander geraten werden. (Referenz: Wie implementieren die Corona-Gegenmaßnahmen-Apps in den einzelnen Ländern Datenschutzmaßnahmen?)

Berechnungsannahmen

Übrigens, die Corona-Tracking-App, die auf diese Weise als erwarteter Effekt eingeführt wird,

  1. ** Wirkung der schnellen Erkennung enger Kontakte und der sofortigen Förderung der Untersuchung, Isolierung und Behandlung (insbesondere asymptomatisch infizierter Personen) **
  2. Reduzierung von Fällen, in denen "Infektionsweg unbekannt ist" während der Interviews
  3. Früherkennung von Clustern
  4. Als Reisepass, um zu verhindern, dass infizierte Personen Risikogebiete betreten
  5. Darüber hinaus Anhäufung von epidemiologisch nützlichem Wissen usw.

Es werden verschiedene Effekte erwartet, aber dieses Mal möchte ich mich auf 1 konzentrieren und die Effekte quantitativ bewerten.

Verwenden Sie zu diesem Zeitpunkt das im vorherigen Artikel gezeigte Cluster-basierte SEIR-Modell als Berechnungsmodell. Die Hauptgründe für die Verwendung dieses Modells sind:

Insbesondere im normalen SEIR-Modell, wenn die Grundreproduktionszahl $ R_0 = 2,5 $ ist, wird gesagt, dass der Peak-Out bei etwa 60% der Bevölkerung auftritt ($ 1-1 / 2,5 = 0,6 $). (Erwerb der Massenimmunität) Selbst wenn man sich Länder mit einer großen Anzahl infizierter Menschen pro Million Menschen ansieht, gibt es in Katar und Spanien 5.000 bis 6.000 Menschen (/ 1 Million Menschen), sodass die Infektionsrate höchstens 0,6% beträgt ** Wird geschätzt. ** Nur 0,01% in Japan. ** Daher ** erscheint es an dieser Stelle vernünftig zu glauben, dass das beobachtete Peak-Out-Phänomen von COVID-19 nicht durch ein einfaches SEIR-Modell erklärt werden kann **.

Berechnungsmodell

Die Berechnungsformel wird angezeigt. Stellen Sie zunächst die Variablen vor.

Führen Sie Folgendes als Parameter ein.

Die folgende Formel ist ein clusterbasiertes SEIR-Modell, das den Isolationseffekt der App berücksichtigt.

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

Übrigens gilt die folgende Gleichung.

\frac{d}{dt}(S+E+I+R_1+R_2)=\frac{d}{dt}(S+E+I+R)=0

Der Punkt ist, dass der App-Effekt Sie mit einer konstanten Rate von E und I isoliert.

Berechnungsergebnis

Dieses Mal möchte ich zuerst die Ergebnisse zeigen. Der Anfangswert der Anzahl der effektiven Reproduktionen ist $ R_p (0) = 10 $. Der Anfangszustand sei auch $ (E, I, R) = (0,1,0) $.

Wenn die Anwendungsisolationsrate α = 0 ist

Wenn es keine Isolation durch die App gibt. Schließlich werden 113 Menschen infiziert sein. m8_1_Rp0_10_Al_0.0.jpg

Wenn die Anwendungsisolationsrate α = 0,1 ist

Wenn die Isolationsrate der App 10 [% / Tag] beträgt. Mit anderen Worten, nehmen Sie an, dass 10% der Infizierten pro Tag unter Quarantäne gestellt werden. Schließlich werden 26 Personen infiziert (R1 + R2). Die Zahl der Infizierten ist um 77% gesunken. m8_1_Rp0_10_Al_0.1.jpg

Wenn die Anwendungsisolationsrate α = 0,2 ist

Wenn die Isolationsrate der App 20 [% / Tag] beträgt. Schließlich werden 11 Personen infiziert (R1 + R2). ** Die Anzahl der Infizierten ist um 90% gesunken. ** ** ** m8_1_Rp0_10_Al_0.2.jpg

Beziehung zwischen der App-Isolationsrate α und der endgültigen Anzahl infizierter Personen

Lassen Sie uns die Beziehung zwischen der Isolationsrate durch die App $ \ alpha $ und der endgültigen Anzahl infizierter Personen $ R (T_ {max}), R_1 (T_ {max}), R_2 (T_ {max}) $ grafisch darstellen. Bei etwa ** $ \ alpha = 0,07 $ oder mehr sind App-Quarantänen zahlreicher als Nicht-App-Quarantänen **. m8_2_Rp0_10.jpg

Erwägung

Aus dem Obigen können die folgenden Trends aus der Simulation hinsichtlich des Effekts der frühen Isolierung durch die Corona-Tracking-App abgeleitet werden, die auf dem clusterbasierten SEIR-Modell basiert.

Außerdem ...

Referenzlink

Ich habe auf die folgende Seite verwiesen.

  1. Top 10 popular smartphone apps to track Covid-19
  2. Entwicklung der Kontaktverfolgungs-App
  3. Wie setzen die Corona-Gegenmaßnahmen-Apps in jedem Land Datenschutzmaßnahmen um?
  4. Testen wir die Hypothese des medizinischen Kollapses des neuen Koronavirus
  5. Erklärung des Unterschieds in der Verbreitung des neuen Koronavirus zwischen Japan und anderen Ländern unter Verwendung eines Cluster-Gegenmaßnahmenmodells

Python-Code

Zum Schluss füge ich den in diesem Artikel verwendeten Python-Code ein.

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

Simulieren wir den Effekt der Einführung einer Kontaktverfolgungs-App als Gegenmaßnahme gegen den neuen Koronavirus
Überprüfen Sie die Wirkung des Urlaubs als Gegenmaßnahme gegen das neue Koronavirus mit dem SEIR-Modell
Lassen Sie uns die medizinische Kollapshypothese des neuen Koronavirus testen
Lassen Sie uns eine Rangfolge der Anzahl der wirksamen Reproduktionen des neuen Koronavirus nach Präfektur erstellen
Zeichnen Sie die Ausbreitung des neuen Koronavirus
Die Geschichte des Studenten, der die neue Website für Gegenmaßnahmen gegen Koronaviren entwickelt hat (Ishikawa-Version)
Berechnen wir den Übergang der Grundreproduktionszahl des neuen Koronavirus nach Präfektur
Schätzen Sie die maximale Infektiosität des neuen Coronavirus ab
Lassen Sie uns den Unterschied in der Ausbreitung des neuen Koronavirus zwischen Japan und anderen Ländern anhand eines Cluster-Gegenmaßnahmenmodells erklären
GUI-Simulation des neuen Koronavirus (SEIR-Modell)
Lassen Sie uns die Konvergenzzeit anhand des globalen Trends der effektiven Reproduktionszahl des neuen Koronavirus untersuchen