[PYTHON] Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen

zunaechst

Ich bin kein Experte für Infektionskrankheiten. Bitte lesen Sie es nach dem Verständnis.

Die neue Koronapneumonie (Covid-19), die ab Dezember 2019 in Wuhan, Provinz Hubei, China, auftrat, hat sich auf Japan ausgeweitet und die Zahl der Infizierten nimmt zu. Ich bin daran interessiert, wie die Zahl der Infizierten in Japan in Zukunft zunehmen wird. Daher habe ich nach Artikeln zum Infektionsvorhersagemodell gesucht. Infektionsmodelle aus der ganzen Welt wurden bereits angekündigt, aber Parameter wie Infektionsrate und Isolationsrate haben einen großen Einfluss auf die Genauigkeit bei der Vorhersage mit dem Infektionsmodell. Wenn diese Parameter von den tatsächlichen Werten abweichen, ist die Vorhersage weit von der tatsächlichen Situation entfernt.

Neulich kündigte ein chinesischer Forscher ein Vorhersagemodell für die Anzahl der mit Coronavirus infizierten Personen an. COVID-19 in Japan: What could happen in the future?

In diesem Artikel sagen wir voraus, dass die Anzahl der Infizierten durch Anwendung des Vorhersagemodells auf verschiedene Teile Chinas (Wuhan, Peking, Shanghai ...) genau vorhergesagt werden kann und dass die Anzahl der Infizierten in Zukunft durch Anwendung auf Japan zunehmen wird. Ich bin. In diesem Artikel wurden auch die Infektionsrate und die Isolationsrate angekündigt, die für die Vorhersage erforderlich sind (obwohl es richtig ist zu sagen, dass die Parameter an die tatsächliche Anzahl infizierter Personen angepasst werden).

Vorhersagemodell

Die Modelle SIR und SEIR werden im Modell für Infektionskrankheiten verwendet, in diesem Artikel wird jedoch ein etwas anderes Modell verwendet. Wir nennen es das statistische dynamische Zeitverzögerungsmodell.

model_picture.png

[Zitat COVID-19 in Japan: Was könnte in Zukunft passieren?]

Die Berechnungsformel lautet wie folgt. model.png t: Tag I (t): Kumulierte Anzahl infizierter Personen J (t): Kumulierte Anzahl infizierter Personen (bestätigter Beginn im Krankenhaus) G (t): Infizierte Person, die zu diesem Zeitpunkt aufgetreten ist (kein kumulativer Wert, Beginn ist nicht bestätigt) I0 (t): Anzahl potenzieller Infektionen (infiziert, aber nicht bestätigt oder unter Quarantäne gestellt)       I0(t) = I(t) − J(t) − G(t) [Zitat COVID-19 in Japan: Was könnte in Zukunft passieren?]

Parameter

Es gibt wichtige Parameter für die Verwendung dieses Modells: Inzidenz und Krankenhausaufenthalt. In diesem Artikel wurde ein chinesisches Beispiel für die Parameter beschrieben.

Bereich Wachstumsrate Infektionsrate l1 Infektionsrate l2 tl
Shanghai 0.3137 0.1713 0.6149 2020/1/16
Peking 0.3125 0.1824 0.5880 2020/1/17
Wuhan 0.3019 0.1142 0.4567 2020/1/17

r Wachstumsrate

Die Wachstumsrate ist die Rate, mit der eine Person eine andere infiziert. Dies wurde auf der Grundlage der Zahlen in China in der Zeitung wie folgt festgelegt.   r = 0.3

l Isolationsrate

Die Quarantänerate ist die Rate, mit der infizierte Personen unter Quarantäne gestellt werden. Dies wurde auf der Grundlage der Zahlen in China in der Zeitung wie folgt festgelegt. l = 0,1 (bis 2020/2/28) l = 0,5 (ab 2020/2/29)

Inzidenzrate

f2 (t) Übergangswahrscheinlichkeit von der Infektion zum Beginn Dies wurde in der Zeitung nicht erwähnt. Ich habe die Nachricht gehört, dass 70-80% der Menschen die Krankheit nicht entwickeln, selbst wenn sie infiziert sind. Da die Entwicklung der Krankheit höchstens 14 Tage dauert, stellen wir sie wie folgt ein.  f2(t) = 0.2/14 × t (t < 14)  f2(t) = 0.2 (t >= 14)

Hospitalisierungsrate

f4 (t) Übergangswahrscheinlichkeit von der Infektion zum Krankenhausaufenthalt Die Infektions- und Krankenhausrate ist völlig unbekannt. Unter der Annahme, dass 1/4 der Betroffenen ins Krankenhaus eingeliefert wird, sind die Einstellungen daher wie folgt.  f4(t) = 0.05/14 × t (t < 14)  f4(t) = 0.05 (t >= 14)

Programm

predict.py


from __future__ import print_function
import numpy as np
import pandas as pd

default_output  = 'predict.csv'

class  Corona():
    def __init__(self, max_day):
        self.r  = 0.3 #Wachstumsrate
        self.tl = 15  #Startdatum der Isolierung
        self.l1 = 0.1 #Isolationsrate vor dem Startdatum der Isolation
        self.l2 = 0.5 #Isolationsrate nach dem Startdatum der Isolation
        self.i  = np.zeros(max_day + 1)
        self.i0 = np.zeros(max_day + 1)
        self.j  = np.zeros(max_day + 1)
        self.g  = np.zeros(max_day + 1)

    def set_start(self):
        # self.j[0]  = 11 # 2020/1/30
        self.j[0]  = 21 # 2020/2/14
        self.i[0]  = self.j[0] * 10
        self.g[0]  = 0
        self.i0[0] = self.func_i0(0)

    def f2(self, t):
        #Inzidenzrate
        if t < 14:
            a = 0.2/14.0
            b = 0.0
            y = a * t + b
        else:
            y = 0.2
        return y

    def f4(self, t):
        #Hospitalisierungsrate
        if t < 14:
            a = 0.05/14.0
            b = 0.0
            y = a * t + b
        else:
            y = 0.05
        return y

    def func_l(self, t):
        #Isolationsrate
        if t < self.tl:
            return self.l1
        else:
            return self.l2

    def func_i(self, t):
        #Kumulierte Anzahl infizierter Personen
        # I(t + 1) = I(t) + r I0(t),
        new_i = self.i[t] + self.r * self.i0[t]
        return new_i

    def func_j(self, t):
        #Kumulierte Anzahl infizierter Personen(Im Krankenhaus bestätigt)
        # J(t + 1) = J(t) + r Σs<t f4(t - s) I0(s)
        sum1 = 0
        for s in range(t):
            sum1 += self.f4(t - s) * self.i0[s]
        new_j = self.j[t] + self.r * sum1
        return new_j

    def func_g(self, t):
        #Infizierte Person, die vorübergehend auftrat(Nicht bestätigt, im Krankenhaus infiziert zu sein)
        # G(t + 1) = G(t) + f2(t) Σs<t f2(t - s) I0(s) - Σs<t f4(t - s) I0(s).
        sum1 = 0
        sum2 = 0
        for s in range(t):
            sum1 += self.f2(t - s) * self.i0[s]
        for s in range(t):
            sum2 += self.f4(t - s) * self.i0[s]
        new_g = self.g[t] + self.func_l(t) * sum1 - self.func_l(t) * sum2
        return new_g

    def func_i0(self, t):
        #Anzahl möglicher Infektionen(Infiziert, aber nicht bestätigt oder unter Quarantäne gestellt)
        # I0(t) := I(t) - J(t) - G(t)
        new_i0 = self.i[t] - self.j[t] - self.g[t]
        if new_i0 < 0.0:
            new_i0 = 0.0
        return new_i0

    def predict(self, day):
        #Initialisieren
        period = day + 1
        predict_data = np.zeros([period, 5])
        df_predict = pd.DataFrame(predict_data, columns=['day', 'I', 'J', 'G', 'I0'])
        self.set_start()

        #Prognose
        for i in range(period - 1):
            self.i[i+1]  = self.func_i(i)
            self.j[i+1]  = self.func_j(i)
            self.g[i+1]  = self.func_g(i)
            self.i0[i+1] = self.func_i0(i)

            df_predict.loc[i, 'day'] = i+1
            df_predict.loc[i, 'I']   = self.i[i+1]
            df_predict.loc[i, 'J']   = self.j[i+1]
            df_predict.loc[i, 'G']   = self.g[i+1]
            df_predict.loc[i, 'I0']  = self.i0[i+1]

        return df_predict

def main():
    corona = Corona(25)
    predict = corona.predict(25)
    predict.to_csv(default_output, index=False)
 
if __name__ == "__main__":
    main()

Ergebnis

Anzahl der infizierten Personen (diejenigen, deren Infektion im Krankenhaus bestätigt wurde)

Die Anzahl der infizierten Personen zu Beginn der Simulation haben wir aus den Materialien ermittelt, die täglich in Pressemitteilung des Ministeriums für Gesundheit, Arbeit und Soziales veröffentlicht wurden. Voraussichtlich vom 15.02. Basierend auf 21 infizierten Personen am 14.02.2020. Die Vorhersageergebnisse sind wie folgt.

predict_japan1_20200303.png

Datum Anzahl der infizierten Personen(Angekündigt vom Ministerium für Gesundheit, Arbeit und Soziales) Anzahl der infizierten Personen(Prognose)
2020/2/14 21 21
2020/2/15 21 21
2020/2/16 21 21
2020/2/17 46 22
2020/2/18 53 23
2020/2/19 60 25
2020/2/20 70 29
2020/2/21 79 35
2020/2/22 90 43
2020/2/23 114 54
2020/2/24 126 69
2020/2/25 140 90
2020/2/26 149 118
2020/2/27 171 153
2020/2/28 195 200

Der Fehler war auf dem Weg groß, aber am 28. Februar waren es nur 5 Personen. (Vielleicht passiert es ...)

Anzahl potenzieller Infektionen (diejenigen, deren Infektion im Krankenhaus nicht bestätigt wurde)

Bei der oben genannten Anzahl infizierter Personen handelt es sich nur um Personen, deren Infektion im Krankenhaus bestätigt wurde. Die Simulation berechnet auch die Anzahl potenzieller Infektionen. Das Ergebnis ist in der folgenden Abbildung dargestellt. Orange: Personen, deren Infektion im Krankenhaus bestätigt wurde (kumulativ) Marineblau: Versteckte infizierte Personen (kumulativ), deren Infektion im Krankenhaus nicht bestätigt wurde Es gibt weit mehr versteckte Infizierte als diejenigen, von denen bestätigt wurde, dass sie im Krankenhaus infiziert sind, etwa zehnmal so viele.

predict_japan2_20200303.png

Impressionen

Führt das Ministerium für Gesundheit, Arbeit und Soziales auch eine solche Simulation durch?

Verweise

https://www.medrxiv.org/content/10.1101/2020.02.21.20026070v2

Änderung 2020/3/3

Programmänderung

Andere haben den Hatena-Blog mit dem Programm in diesem Beitrag geschrieben.   https://kibashiri.hatenablog.com/entry/2020/03/02/171223 In seinem Blog wies er auf einen Fehler im Programm hin. Sicher war es ein Codefehler bei der Berechnung von func_g (). Festes Programm und Ergebnisse.

Vorhersageergebnis

Es wird vorausgesagt, dass die Zahl der Infizierten nach dem 29. Februar täglich um fast 100 zunehmen wird. Das Ministerium für Gesundheit, Arbeit und Soziales hat eine neue Anzahl infizierter Personen angekündigt (inländische Fälle ohne Rückkehrer auf Charterflügen), daher habe ich sie mit den vorhergesagten Ergebnissen verglichen.

Datum Anzahl der infizierten Personen(Angekündigt vom Ministerium für Gesundheit, Arbeit und Soziales) Anzahl der infizierten Personen(Prognose) Anzahl der PCR-Tester(In einem Tag)
2020/2/29 215 259 130
2020/3/1 224 334 178
2020/3/2 239 428 96
2020/3/3 253 546 71

Der vorhergesagte Wert unterscheidet sich signifikant von der tatsächlichen Anzahl infizierter Personen, und es scheint, dass die vorhergesagte Leistung nach 2/29 nicht gut war. Ich habe versucht, die Anzahl der Infizierten in Japan mit denselben Parametern wie in China vorherzusagen, aber ich habe festgestellt, dass die Situation zwischen Japan und China unterschiedlich ist und die Vorhersage mit denselben Parametern begrenzt ist.

Medienberichten zufolge betrug Japans PCR-Testkapazität 3.800 Personen pro Tag, aber die tatsächliche Anzahl der pro Tag getesteten Personen beträgt 130, 178, 96 und 71, was unerwartet gering ist.

Recommended Posts

Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Menschen in Japan nach der Methode des neuesten Papiers in China vorherzusagen
Ich habe versucht, die Anzahl der mit dem Coronavirus infizierten Personen unter Berücksichtigung der Auswirkung des Verzichts auf das Ausgehen vorherzusagen
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
In Anbetracht der Situation in Japan durch den Statistiker Nate Silver: "Die Anzahl der mit Coronavirus infizierten Personen ist bedeutungslos."
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus
Ich habe versucht, die neuen mit dem Corona-Virus infizierten Menschen in Ichikawa City, Präfektur Chiba, zusammenzufassen
Ich habe versucht, die Eigenschaften der neuen Informationen über mit dem Corona-Virus infizierte Personen mit Wordcloud zu visualisieren
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
Ich habe versucht, den Verkauf von Spielesoftware mit VARISTA anhand des Artikels von Codexa vorherzusagen
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich wollte die Anzahl der Zeilen in mehreren Dateien wissen und versuchte, sie mit einem Befehl abzurufen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, das Bild mit OpenCV im "Skizzenstil" zu verarbeiten
Ich ließ RNN Sin Wave lernen und versuchte vorherzusagen
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services mit Python zu überprüfen. # 1
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2
Ich habe versucht, den Inhalt jedes von Python pip gespeicherten Pakets in einer Zeile zusammenzufassen
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die optimale Route des Traumlandes durch (Quanten-) Tempern zu finden
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe eine fraktale Dimensionsanalyse mit der Box-Count-Methode in 3 Dimensionen versucht
[Linux] Ich habe versucht, die sichere Bestätigungsmethode von FQDN (CentOS7) zu überprüfen.
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, den Höhenwert von DTM in einem Diagramm anzuzeigen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
[Python & SQLite] Ich habe den erwarteten Wert eines Rennens mit Pferden im 1x-Gewinnbereich ① analysiert
Einführung in die KI-Erstellung mit Python! Teil 2 Ich habe versucht, den Hauspreis in Boston mit einem neuronalen Netz vorherzusagen
Ich habe versucht, die Verschlechterung des Lithium-Ionen-Akkus mithilfe des Qore SDK vorherzusagen
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen