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).
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.
[Zitat COVID-19 in Japan: Was könnte in Zukunft passieren?]
Die Berechnungsformel lautet wie folgt. 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?]
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 |
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
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)
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)
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)
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()
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.
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 ...)
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.
Führt das Ministerium für Gesundheit, Arbeit und Soziales auch eine solche Simulation durch?
https://www.medrxiv.org/content/10.1101/2020.02.21.20026070v2
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.
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