[PYTHON] Hypothese, warum das neue Koronavirus in städtischen Gebieten wie Tokio nicht so häufig vorkommt

Einführung

Wenn Sie den Übergang der Anzahl der mit der neuen Coronavirus-Infektion (COVID-19) infizierten Personen auf Karte der neuen mit Coronavirus infizierten Personen nach Präfektur usw. überprüfen Ab dem 7. März 2020 gibt es eine beträchtliche Anzahl von Menschen vor Ort, darunter 98 in Hokkaido und 21 in Sagamihara City, 73 in Tokio, 41 in Osaka und 8 in Kyoto. Es ist der Eindruck, dass es in städtischen Gebieten relativ wenige gibt, in denen viel Verkehr herrschen sollte. Die Zahl der Infizierten ist in städtischen Gebieten überraschend gering, obwohl Hunderttausende oder Millionen Menschen jeden Tag zur Arbeit pendeln, zur Schule gehen oder Sightseeing machen und in dicht besiedelten Gebieten in Kontakt miteinander arbeiten. Es ist sehr seltsam, nicht wahr? Daher habe ich in diesem Artikel eine Hypothese aufgestellt und getestet, ob der Grund mit einem mathematischen Modell erklärt werden kann. Die grundlegenden Werkzeuge finden Sie unter Artikel, der neulich veröffentlicht wurde.

der Begriff

Wie ich in Vorheriger Artikel geschrieben habe, werde ich die grundlegenden Begriffe überprüfen.

Verwenden Sie außerdem die folgenden Parameter.

Hypothese

Die in diesem Artikel vorgeschlagene Hypothese ist, kurz gesagt, der Reinigungseffekt von Bedtown. Bitte sehen Sie zunächst die folgende Abbildung. COVID-Tokyo.jpg Definieren Sie zunächst die Wörter.

Wie in der Abbildung gezeigt, pendeln S1-Personen in den Vororten zur Arbeit und zur Schule, und S2-Personen im Stadtgebiet schließen sich derselben Schule oder demselben Arbeitsplatz an. Dort wird es von der infizierten Person I übertragen und wird zu E1 bzw. E2. Übergang von E1 und E2 zu I1 bzw. I2 und schließlich zu R1 und R2. Von den in den Vororten lebenden I1 pendeln jedoch nur diejenigen mit einem bestimmten Prozentsatz r $ (0 \ leq r \ leq 1) $ wieder zur Arbeit oder zur Schule im Stadtgebiet. Das verbleibende Verhältnis 1-r Personen darf nicht in städtische Gebiete ziehen, indem sie zu Hause warten oder ins Krankenhaus eingeliefert werden. Aus diesem Fluss habe ich die folgende Hypothese gemacht.

SEIR-Modelländerung

Die obige Hypothese wird durch das SEIR-Modell modifiziert und als Formel ausgedrückt. Schauen wir uns das an.

\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 

In den ersten beiden Formeln wird die von der infizierten Person produzierte sekundär infizierte Person (I2 + rI1) nach S1 und S2 aufgeteilt. Andere Formeln sind die gleichen wie beim SEIR-Modell.

Versuchen Sie mit Python zu rechnen

Berechnen wir die obige Hypothese in Python. Importieren Sie die Bibliothek.

import numpy as np
import matplotlib.pyplot as plt

Definieren Sie eine Funktion, die R0 berechnet.

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

ODE definieren.

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]

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

Zum Schluss der Code für Simulation und Anzeige.

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

Berechnen wir einige Muster, indem wir die S1- und S2-Teile von init_state ändern. Das Verhältnis r wird mit 0,01 angenommen. Darüber hinaus sind andere Parameter dieselben wie im vorherigen Artikel (https://qiita.com/oki_mebarun/items/60592c703dd4e8d1ff72).

Simulationsergebnis

Wir gehen von dem Staat aus, in dem 1000 Menschen im Stadtgebiet leben und am 0. Tag eine infizierte Person (S2 = 999, I2 = 1). 1000 Personen sind ein vorläufiger Wert für eine einfache Berechnung.

Der erste ist, wenn der Zufluss S1 aus den Vororten 0 ist.

m6_2_s1_0_all.png

Die Zahl der infizierten I2 in städtischen Gebieten erreichte am 62. Tag einen Höchststand von etwa 320.

Dies ist der Fall, wenn der Zufluss S1 aus den Vororten 50% beträgt.

Ich habe mit S1 = 500 angefangen. m6_2_s1_50_all.png Die Zahl der infizierten I2 in städtischen Gebieten erreichte am 102. Tag einen Höchststand von etwa 260. Mit anderen Worten, der Peak ist um ungefähr 40 Tage verzögert, und die Anzahl der Peak-Infizierten ist um ungefähr 19% verringert. Übrigens laut Tokyo Metropolitan Press Material die Volkszählung 2015 Als Ergebnis von

Daher beträgt das Verhältnis von S1 und S2 als Richtwert 430: 1000.

m6_2_s1_80_all.png

Es begann bei S1 = 800. Die Zahl der Infizierten I2 in städtischen Gebieten erreichte am 142. Tag einen Höchststand von etwa 210. Mit anderen Worten, der Peak ist um ungefähr 80 Tage verzögert, und die Anzahl der Peak-Infizierten ist um ungefähr 34% verringert. Es scheint eine Menge von 80% zu geben, aber laut dieser Seite, "Im Jahr 2018 Die Zahl der ausländischen Touristen, die Tokio besuchen, betrug ungefähr 14,24 Millionen, und die Zahl der japanischen Touristen betrug ungefähr 536,5 Millionen. “Nach einfacher Berechnung werden also täglich 1,5 Millionen Menschen einströmen. Ich werde. Überlegung Aus den obigen Ausführungen können die folgenden Trends aus der Simulation in Bezug auf die maximale Infektionsschwankung aufgrund der in den Vororten lebenden infizierten Person (zu Hause warten / in den Vororten ins Krankenhaus eingeliefert) abgeleitet werden, während die Bevölkerung von der Vorstadtbettstadt in das Stadtgebiet fließt. + Wenn der Zustrom aus den Vororten 50% der städtischen Bevölkerung beträgt, verzögert sich der Höchststand um etwa 40 Tage und die Höchstzahl der Infizierten um etwa 19%.

Daher scheint der ** Reinigungseffekt von Bedtown ** angemessen zu sein.

Außerdem ...

Referenzlink

Ich habe auf die folgende Seite verwiesen Karte der mit dem neuen Koronavirus infizierten Personen nach Präfektur Überblick über die Tagesbevölkerung in Tokio (Bevölkerung nach Arbeitsort / Schule) Umfrage zur Anzahl der Touristen, die Tokio im Jahr 2018 besuchen SEIR-Modell Beginn des mathematischen Modells für Infektionskrankheiten: Überblick über das SEIR-Modell von Python und Einführung in die Parameterschätzung Überprüfen Sie die Auswirkung des Urlaubs als Gegenmaßnahme gegen das neue Koronavirus mit dem SEIR-Modell

Recommended Posts

Hypothese, warum das neue Koronavirus in städtischen Gebieten wie Tokio nicht so häufig vorkommt
Lassen Sie uns die medizinische Kollapshypothese des neuen Koronavirus testen
Überlegen Sie, warum Kubernetes als "Linux in der Cloud-Welt" beschrieben wird.
Wenn die Genauigkeit des PCR-Tests schlecht ist, warum nicht den Test wiederholen?
Zeichnen Sie die Ausbreitung des neuen Koronavirus
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Schätzen Sie die maximale Infektiosität des neuen Coronavirus ab
Was ist der Grund, warum der Mensch keine grundlegenden Befehle auf Japanisch anzeigt?