[PYTHON] Quantifizieren Sie den Grad der Selbstbeherrschung, der erforderlich ist, um das neue Koronavirus einzudämmen

Einführung

Die neue Coronavirus-Infektion (COVID-19) ist weltweit weit verbreitet, und in verschiedenen Regionen wie China, Europa, den USA und Asien werden städtische Blockaden, sogenannte Lockdowns, durchgeführt. Auch in Japan gibt es seit dem 4. April 3360 infizierte Menschen in Japan und 891 Menschen in Tokio, und der Gouverneur fordert, an Wochenenden nicht auszugehen und bestimmte Lebensmittel- und Getränkeunternehmen zu meiden. Darüber hinaus verbreitet es sich nicht nur in Zentral-Tokio und Osaka, sondern im ganzen Land, und man kann sagen, dass die Situation einer Notsituation, in der es zu Überschwingungen kommt, so nahe wie möglich kommt. Um einen solchen Notfall zu vermeiden, werden in Government Expert Meeting usw. 3 dichte Räume (geschlossen und dicht) ・ Wir rufen aktiv dazu auf, zu vermeiden (schließen). Wie viel sollten wir dann solche drei dichten Räume vermeiden? In diesem Artikel möchte ich den Grad der Vermeidung von 3 dichten Räumen, der zur Verhinderung der Ausbreitung einer Infektion erforderlich ist, als numerischen Wert quantifizieren.

3 dichter Raum und Grundanzahl der Reproduktionen

Die Grundanzahl der Reproduktionen beträgt

Ist definiert als. Mit anderen Worten, es ist die Stärke, mit der eine infizierte Person andere Menschen mit dem neuen Koronavirus infizieren kann. Wenn seine Stärke stark ist, infiziert es viele Menschen gleichzeitig und es treten Cluster auf. Laut der vom Ministerium für Gesundheit, Arbeit und Soziales veröffentlichten Nationalen Clusterkarte sind die folgenden Elemente als Elemente des Clusters aufgeführt.

Was sie gemeinsam haben, sind wahrscheinlich die drei dichten Räume. Darüber hinaus schätzt das Team für Cluster-Gegenmaßnahmen die Ergebnisse der Analyse der grundlegenden Reproduktionszahlen nach Umgebung.

Q14.jpg

Diese Abbildung legt nahe, dass die Häufigkeitsverteilung der Grundreproduktionszahlen unterschiedlich ist, je nachdem, ob sich die Infektionsquelle in einer schlecht belüfteten Umgebung oder in anderen Umgebungen befindet. Mit anderen Worten, ** 3 ändert sich die Wahrscheinlichkeitsverteilung der Anzahl der Grundreproduktionen stark in Abhängigkeit davon, ob es sich um einen dichten Raum handelt **. Daher möchte ich die Parameter, die die Unterschiede in der Umgebung darstellen, wie folgt definieren.

Der Code zur groben Berechnung der Grundreproduktionsnummer mit dem obigen Parameter er wird dann in Vorheriger Artikel angezeigt. Die obige Figur wird ungefähr durch die Kombination von bedingter Verzweigung und gleichmäßiger Verteilung dargestellt.

"""
 er: good environment ratio (0.-1.)
"""
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

Welcher Wert des Umgebungsparameters er kann dann die Grundreproduktionszahl kleiner als 1 machen (in Richtung der Konvergenz der Infektion)? Im Folgenden möchte ich die Verwendung statistischer Tools in Betracht ziehen.

Zentralpolbegrenzung

Was ist die zentrale Polbegrenzung?

  1. Beobachtungen $ X_1, X_2, \ cdots, X_n $ sind probabilistische Variablen, die unabhängig voneinander sind und alle der gleichen Verteilung folgen.
  2. Für alle i ist $ E [X_i] = \ mu, V [X_i] = \ sigma $.

Wenn für die Stichprobe $ \ bar {X} _n $ der beobachteten Werte bedeutet,

\frac{\bar{X}_n - \mu}{\left( \frac{\sigma}{\sqrt{n}} \right)} \sim N(0,1)\  ({\rm as}\ n \rightarrow \infty) \\
\bar{X}_n = \frac{1}{n} \sum_{i=1}^n X_i

War zu halten. Wichtig ist hierbei, dass es keine anderen Annahmen über die Wahrscheinlichkeitsverteilung der Bevölkerung gibt als die Existenz wahrer Werte für Mittelwert und Varianz. Daher kann dieser Satz auf die Wahrscheinlichkeitsverteilung der Grundreproduktionszahl angewendet werden.

Schätzung des Konfidenzintervalls des Bevölkerungsdurchschnitts

Wie schätzen Sie den Bevölkerungsdurchschnitt der Grundreproduktionen für jeden Umweltparameter ein? Laut Statistiklehrbüchern wird unten eine Schätzung des Bevölkerungsmittels (mit einem Konfidenzintervall von $ 1- \ alpha $) angegeben, wenn die Populationsvarianz unbekannt ist.

\left[ \bar{X}_n - \frac{U}{\sqrt{n}} t_{\alpha / 2} (n-1),  \bar{X}_n + \frac{U}{\sqrt{n}} t_{\alpha / 2} (n-1) \right]\\
U^2 = \frac{1}{n-1} \sum_{i=1}^n (X_i - \bar{X}_n)^2

Hier ist $ U $ die unverzerrte Stichprobenvarianz, $ t_ {\ alpha} (n-1) $ ist der $ \ alpha / 2 $ -Punkt der t-Verteilung mit $ n-1 $ Freiheit (der Endbereich der Wahrscheinlichkeitsverteilung ist $). Der Wert der Wahrscheinlichkeitsvariablen \ alpha / 2 $). Beim Lesen des Lehrbuchs scheint dieses Konfidenzintervall als Ergebnis der Schätzung und Kombination des Populationsmittelwerts gemäß der Normalverteilung und der Populationsvarianz nach der $ χ ^ 2 $ -Verteilung basierend auf der Theorie der zentralen Polbegrenzung abgeleitet zu werden.

Versuchen Sie mit Python zu rechnen

Verwenden wir nun Python, um den Populationsmittelwert und das Konfidenzintervall der Basisreproduktionsnummer R0 in Abhängigkeit vom Umgebungsparameter er zu berechnen.

Importieren Sie zunächst die Bibliothek.

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

Dies ist die grundlegende Funktion zur Erzeugung von Reproduktionsnummern.

"""
 er: good environment ratio (0.-1.)
"""
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

Eine Funktion, die den Stichprobenmittelwert und die unverzerrte Varianz berechnet, indem N Stücke gemäß der gegebenen Wahrscheinlichkeitsverteilung $ f $ abgetastet werden.

def EstFromNsample(f, N):
    #N Abtastung nach der Wahrscheinlichkeitsverteilung f
    sample = [f() for i in range(N)]
    #Stichprobenmittelwert
    Eave = np.average(sample)
    #Unvoreingenommene Probendispersion
    Esig2 = 1./(np.float(N)-1.) * np.sum([pow(s - Eave, 2) for s in sample]) 
    return Eave, Esig2

Diese Funktion berechnet die geschätzten Werte des Populationsmittelwerts und der Populationsvarianz, indem der Umgebungsparameter er von 0 bis 1 mit einem Netz graviert und jeweils abgetastet wird.

def makeERsamples(keys):
    ediv = keys['ediv']
    N = keys['N']
    #
    l = []
    #
    for e in np.linspace(0, 1, ediv):
        f = lambda : COVID19R0(e) #Abtastfunktion in einem bestimmten Umgebungsparameter
        Eave, Esig2 = EstFromNsample(f, N)
        l.append([e, Eave, Esig2])
    return np.array(l)

Eine Funktion, die das Konfidenzintervall berechnet. Beachten Sie, dass Alpha die entgegengesetzte Bedeutung von $ \ alpha $ oben hat. Laut scipy.stats "Endpunkte des Bereichs, der Alpha-Prozent der Verteilung enthält" , T_dist.interval ist eine Funktion, die die Endpunkte des Intervalls zurückgibt, das den Alpha-Prozentsatz der t-Verteilung enthält.

def calcBand01(ave, sigma, N, alpha):
    t_dist = stats.t(loc=0,scale=1,df=N-1)
    b, u = t_dist.interval(alpha=alpha)
    b = ave + b * sigma / np.sqrt(N)
    u = ave + u * sigma / np.sqrt(N)
    return b, u

Eine Funktion, die die Schätzung des Populationsmittelwerts und das Konfidenzintervall anzeigt.

def showBandEstimation(sample, keys):
    #
    alpha = keys['alpha']
    N = keys['N']
    #
    x = sample[:,0]
    y = sample[:,1]
    s2 = sample[:,2]
    s = np.sqrt(s2)
    #
    yb, yu = calcBand01(y, s, N, alpha)
    #
    fig, ax = plt.subplots(1,1,figsize=(5,4), dpi=200)
    ax.plot([0,1],[1,1], 'r--')
    ax.plot(x, y, label='ave')
    ax.plot(x, yu, '.', label='upper')
    ax.plot(x, yb, '.', label='lower')
    ax.fill_between(x, yu, yb, facecolor='r',alpha=0.2)
    ax.set_xlabel('er')
    ax.set_ylabel('R0')
    ax.set_xticks(np.linspace(0,1,11))
    ax.grid(b=True, which='both', axis='x')
    ax.legend()
    plt.show()

Schließlich ist es der Teil, der die Stichprobe durchführt und den geschätzten Wert des Populationsmittelwerts und das Konfidenzintervall anzeigt.

keys = {'N':100, 'ediv':100, 'alpha':0.95 }

sample = makeERsamples(keys)
fig = showBandEstimation(sample, keys)

Berechnungsergebnis

Schauen wir uns nun die Berechnungsergebnisse an.

Für die Anzahl der Proben (N = 100)

R0ave_BandEstimation_N100.png

Für die Anzahl der Proben (N = 1000)

R0ave_BandEstimation_N1000.png

Für die Anzahl der Proben (N = 10000)

R0ave_BandEstimation_N10000.png

Bei $ N = 100 $ gibt es viele Variationen, aber bei $ N = 10000 $ sieht es so aus, als ob es fast konvergiert. Daher scheint es, dass mit ungefähr 10.000 Proben eine ziemlich zuverlässige Schätzung vorgenommen werden kann. Der wichtige Punkt ist, dass diese Schätzung 1 ist. 2. Der Stichprobenmittelwert konvergiert nach der Theorie der Zentralpolbegrenzung gegen eine Normalverteilung. Dies bedeutet, dass es durch einen zweistufigen Ansatz zur Schätzung des Konfidenzintervalls basierend auf der t-Verteilung erstellt wird. Daher ist es wichtig zu bestimmen, wie viel $ N $ ausreicht, um diese Schätzung vorzunehmen.

Erwägung

Aus dem Obigen können die folgenden Trends aus der Simulation hinsichtlich der Schätzung des Populationsdurchschnitts der Grundreproduktionszahl R0 für den Umgebungsparameter er abgeleitet werden (wie 3 dichte Räume vermieden werden).

Außerdem ...

Referenzlink

Ich habe auf die folgende Seite verwiesen.

Recommended Posts

Quantifizieren Sie den Grad der Selbstbeherrschung, der erforderlich ist, um das neue Koronavirus einzudämmen
Zeichnen Sie die Ausbreitung des neuen Koronavirus
Schätzen Sie die maximale Infektiosität des neuen Coronavirus ab
Hat die Anzahl der Ladenschließungen aufgrund des Einflusses des neuen Koronavirus zugenommen?
zoom Ich habe versucht, den Grad der Aufregung der Geschichte auf der Konferenz zu quantifizieren
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Folding @ Home unter Linux Mint soll zur Analyse des neuen Corona-Virus beitragen
GUI-Simulation des neuen Koronavirus (SEIR-Modell)
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Lassen Sie uns die medizinische Kollapshypothese des neuen Koronavirus testen
Die Theorie, dass der Schlüssel zur Kontrolle der Infektion des neuen Coronavirus die Hyperdispersion der Anfälligkeit ist.
Ich habe versucht, die Eigenschaften der neuen Informationen über mit dem Corona-Virus infizierte Personen mit Wordcloud zu visualisieren
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Verwenden Sie Hash, um das Kollisionsurteil von etwa 1000 Bällen in Python zu erleichtern (im Zusammenhang mit dem neuen Corona-Virus).
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Analysieren Sie den altersspezifischen Schweregrad des Coronavirus
Ergänzung zur Erklärung von vscode
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Berechnen wir den Übergang der Grundreproduktionszahl des neuen Koronavirus nach Präfektur
Die Geschichte des Versuchs, den Client wieder zu verbinden
Skript zum Ändern der Beschreibung von Fasta
10 Methoden zur Verbesserung der Genauigkeit von BERT
So überprüfen Sie die Version von Django
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
(Jetzt) Ich habe versucht, das neue Koronavirus (COVID-19) zu analysieren.
Die Geschichte von pep8 wechselt zu pycodestyle
Konvertieren Sie das PDF der Produktliste mit wirksamen Tensiden für das neue Coronavirus in CSV
Die epidemische Vorhersage des neuen Koronavirus wurde mit explosiver Geschwindigkeit im Internet veröffentlicht
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen