Es wurde eine Notfallerklärung zur Konvergenz der neuen Coronavirus-Infektion (COVID-19) abgegeben, und obwohl dies in anderen Ländern nicht so sehr wie eine Sperrung war, wurden verschiedene Branchen geschlossen, Veranstaltungen abgesagt, Fernarbeit, verschiedene Selbstbeherrschungen usw. Beeinflusst das Leben vieler Menschen. Die Bedingung für die Konvergenz einer Infektionskrankheit wie Korona ist, dass die Anzahl der wirksamen Reproduktionen (die Gesamtzahl der von einer infizierten Person verursachten Sekundärinfektionen) dauerhaft unter 1 liegt. Vorheriger Artikel beschreibt die Latenzzeit und die Infektionsperiode als eine der Methoden zur Berechnung der effektiven Reproduktionszahl aus den Daten der Anzahl infizierter Personen in chronologischer Reihenfolge. Ich habe eine einfache Methode gezeigt, um separat zu berechnen. Was passiert in diesem Artikel, wenn die Infektiosität, dh die Intensität des Färbens anderer nach der Infektion, mit dem Effekt berücksichtigt wird, der sich mit der Zeit ändert, ** insbesondere wie viele Tage nach der Infektion der Höhepunkt der Infektiosität * Ich würde gerne über * schätzen. Kann es insbesondere auch während der Latenzzeit durch Medienberichte infiziert werden? Da der Verdacht gemeldet wurde, denke ich, dass dies auch eine Überprüfung seiner Echtheit sein wird.
Hier sind drei Studien, die die Grundlage für die Überprüfung dieses Artikels bilden. Die erste ist Umfrage der Cluster Countermeasures Group des Ministeriums für Gesundheit, Arbeit und Soziales. Laut der Gruppe der Cluster-Gegenmaßnahmen wird die Anzahl der grundlegenden Reproduktionen (es scheint, dass Umweltfaktoren nicht berücksichtigt werden, wenn sie grundlegend sind, und Richtlinien werden auch ergriffen, wenn sie wirksam sind) wie in der folgenden Grafik dargestellt erfasst. Zum Glück wird ** der Durchschnittswert mit 1,49 ** angegeben (hier wichtig). Mit anderen Worten, während die meisten Menschen nicht infizieren (0 Personen), können viele Menschen gleichzeitig infiziert werden, z. B. 11 oder 12. Daher sollte R0 als eine breitschwänzige Verteilung betrachtet werden. Der zweite ist [Forschungsbericht Nr. 13](https://www.imperial.ac.uk/mrc-global-infectious-disease-analysis/covid-19/report-13-europe] des Imperial College London im Vereinigten Königreich. -npi-Auswirkungen /). Die Universität hat frühzeitig einen Bericht über COVID-19 veröffentlicht und scheint einen starken Einfluss auf die britische Politik zu haben. In diesem Bericht ist zu beachten, dass die Infektiosität unter Verwendung der Gammaverteilung ausgedrückt wird, wie in der folgenden Abbildung gezeigt. Der Durchschnittswert beträgt 6,5 [Tage], aber der Spitzenwert scheint zwischen dem 4. und 5. Tag zu liegen. Der dritte ist Bericht über die Latenzzeit von COVID-19 der Johns Hopkins University in den USA. Schätzungen-5-Tage-für-Inkubationszeit.html). Demnach beträgt die mittlere Latenzzeit 5,1 Tage **. Dies, kombiniert mit der Grafik aus der zweiten Studie, deutet darauf hin, dass ** vor dem Beginn ** möglicherweise ein Höhepunkt der Infektiosität vorliegt **. Basierend auf den oben genannten drei Studien werden wir die maximale Infektiosität untersuchen, insbesondere anhand von Daten zur Anzahl der Infizierten in Japan.
Um die Grundanzahl der Reproduktionen unter Berücksichtigung der Infektiosität zu berechnen, betrachten Sie ein Modell, das auf dem SEIR-Modell basiert, einer leicht verbesserten Version von Vorheriger Artikel. Ich würde gerne. Siehe folgende Abbildung. Im vorherigen Artikel wurde gesagt, dass Sekundärinfektionen mit der gleichen Infektionsintensität von infizierten Personen während des Infektionszeitraums auftreten (I), aber dieses Mal werden wir die folgenden Annahmen treffen.
Zusätzlich nimmt die Funktion der Infektionsintensität von 3 eine Binomialverteilung an. Dies liegt daran, dass die Handhabung einfacher ist, da im Vergleich zur Gammaverteilung nur ein Parameter erforderlich ist. Nun wird die Formel für die Anzahl der Grundreproduktionen basierend auf der Binomialverteilung wie folgt bestimmt.
R_0(y) = r_0 \cdot {}_N C_y \cdot \theta^y (1-\theta)^{N-y}
$ r_0 $ ist eine Konstante, $ \ theta $ ist ein binärer Verteilungsparameter, $ y $ ist die Anzahl der Tage seit dem Infektionsdatum und $ N $ ist die Summe aus Latenzzeit und Infektionsperiode (= 13). Eine Sekundärinfektion von einer infizierten Person zu einer infizierten Person wird durch Faltung definiert, wie in der folgenden Gleichung gezeigt. $ P (t) $ ist die Anzahl der bestätigten Positiven zum Zeitpunkt $ t $.
P(t+N) = \sum_{y=0}^N R_0(N-y) P(t+y)
Wenn Sie diese transformieren, erhalten Sie die Formel zur Berechnung von $ r_0 $.
r_0 = \frac{P(t+N)}{\sum_{y=0}^N {}_N C_{N-y} \cdot \theta^{N-y} (1-\theta)^{y} P(t+y)}
Es ist ein wenig unnatürlich, dass sowohl der Nenner als auch das Molekül $ P (t + N) $ haben, aber die Berechnung beinhaltet den Effekt, dass unmittelbar am Tag der Infektion eine Sekundärinfektion verursacht wird. Nun möchte ich gemäß diesem $ R_0 (y) $ den Infektiositätsintensitätsparameter $ \ theta $ bestimmen, dh den Zeitpunkt, zu dem die Infektiosität maximiert ist $ N \ theta $, aber ich werde mit der folgenden Strategie fortfahren.
In Schritt 4 könnte, wenn die Verteilung der Clustergruppe numerische Daten sind, eine Methode wie das Berechnen des Abstands zwischen den Wahrscheinlichkeitsverteilungen und deren Optimierung in Betracht gezogen werden, da das Bild jedoch nur Daten enthält ** Ich gab auf…. Ich möchte, dass Sie es auf CSV veröffentlichen. (Chilla | д ゚)
Karte der Anzahl der durch die Präfektur infizierten neuen Koronaviren (bereitgestellt von Jag Japan Co., Ltd.) haben wir die öffentlich verfügbaren CSV-Daten verwendet. Es war. Ich finde es wunderbar, dass sich private Unternehmen freiwillig melden, um solche Daten zu sammeln und zu veröffentlichen.
Dieses Mal möchte ich die Ergebnisse gleichzeitig bei der Berechnung sehen.
Stellen Sie die Bibliothek und die Schriftart ein.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import locale
#
from scipy.special import comb
font = {'family' : 'IPAexGothic'}
plt.rc('font', **font)
Es ist eine Funktion, die die Anzahl der Infizierten nach Präfektur aus den Daten von Jag Japan zählt.
def readCsvOfJapanPref(pref : None):
#Download von der unten stehenden URL
# https://jag-japan.com/covid19map-readme/
fcsv = u'COVID-19.csv'
df = pd.read_csv(fcsv, header=0, encoding='utf8', parse_dates=[u'Festes Datum'])
#Festes Datum,Extrahieren Sie nur die Präfektur Beratung
df1 = df.loc[:,[u'Festes Datum',u'Beratungspräfektur']]
df1.columns = ['date','pref']
#Extrahiert durch Konsultationspräfektur
if pref is None or pref == u'In Japan':
df1 = df1
else:
df1 = df1[df1.pref == pref]
df1 = df1.loc[:,'date']
#Auf festes Datum zählen
df2 = pd.DataFrame( df1.value_counts() ).reset_index()
df2.columns = ['date','P']
df2 = df2.sort_values('date').reset_index(drop = True)
#
return df2
Es ist eine Funktion, die Grundreproduktionszahl unter Berücksichtigung der Infektionsintensität zu berechnen. Wir haben Null-Prozent-Maßnahmen ergriffen.
def binomi(y, N, th):
c = comb(N, y)
p = c * pow(th, y) * pow(1. - th, N - y)
return p
def calcR0(df, keys):
#Binäre Verteilung
N = keys['N']
th = keys['th']
bcoef = [binomi(y, N, th) for y in range(N+1) ]
#
nrow = len(df)
getP = lambda s: df.loc[s, 'P' ] if (s >= 0 and s < nrow) else np.NaN
for t in range(1, nrow):
df.loc[t, 'Ppre' ] = sum([ getP(t + y) * bcoef[N - y] for y in range(0, N + 1)])
df.loc[t, 'Pat' ] = getP(t + N )
if df.loc[t, 'Ppre'] > 0.1: #Null Prozent Maßnahmen
df.loc[t, 'R0' ] = df.loc[t, 'Pat'] / df.loc[t, 'Ppre']
else:
df.loc[t, 'R0' ] = np.NaN
return df
Diese Funktion berechnet die Grundanzahl der Reproduktionen nach Präfektur.
def makeCalcFrame(days):
t_1 = pd.Timestamp(2020,1,24) #Startdatum der Berechnung
td = pd.Timedelta('1 days')
#
npd = [[t_1 + td * i, 0, 0, 0 ] for i in range(0,days)]
df1 = pd.DataFrame(npd)
df1.columns = ['date', 'Ppre','Pat', 'R0']
#
return df1
def mergeCalcFrame(df1, df2):
return pd.merge(df1, df2, on='date', how='left').fillna(0)
def R0inJapanPref(pref, keys):
#
df1 = makeCalcFrame(100)
df2 = readCsvOfJapanPref(pref)
df = mergeCalcFrame(df1, df2)
#
df = calcR0(df, keys)
#
return df
Berechnen wir nun die Grundreproduktionszahl für jeden Parameter $ \ theta $, der in der Infektionsintensität $ R_0 (y) $ nach Präfektur enthalten ist, und sehen wir seine Verteilung. Eine Funktion zur Berechnung. Die Kandidaten für den Parameter $ \ theta $ werden im Raster berechnet.
def calcDfMean(dflist):
mlist = []
for df, pref in dflist:
R0list = df[(df.R0 >= 0)]['R0']
m = np.mean(R0list)
mlist.append(m)
return np.mean(mlist)
def calcThToDfMean():
preflist = [u'In Japan', u'Tokio', u'Präfektur Osaka', u'Präfektur Aichi', u'Präfektur Fukuoka', u'Hokkaido']
keys = {'N':13}
dc = {}
for y in np.linspace(0, 13, 14):
keys['th'] = y / keys['N']
dflist = [[R0inJapanPref(pref, keys), pref] for pref in preflist]
dm = calcDfMean(dflist)
dc[y] = dm
#
return dc
Dies ist der Teil, der berechnet und angezeigt werden soll. Es wird einige Minuten dauern.
dc = calcThToDfMean()
fig = plt.figure(figsize=(5,5))
ax1 = fig.add_subplot(1,1,1)
ax1.plot(list(dc.keys()), list(dc.values()))
ax1.set_xlabel('Nθ=E[y]')
ax1.set_ylabel('E[R0(y)]')
ax1.set_xticks(np.linspace(0,13,14))
ax1.set_xlim(0,)
ax1.set_ylim(0,)
ax1.grid()
ax1.set_title('The peak day vs the expected R0')
plt.show()
Sehen wir uns das Berechnungsergebnis an. Die horizontale Achse repräsentiert $ N \ theta $, dh den Durchschnittswert der Binomialverteilung, und die vertikale Achse repräsentiert den Durchschnittswert der Grundreproduktionszahl $ r_0 $. In der Grafik der ** Cluster-Gegenmaßnahmengruppe zuvor betrug die durchschnittliche Anzahl der Grundreproduktionen 1,49. ** ** ** Wenn Sie sich in diesem Diagramm die Schnittposition ansehen, an der die vertikale Achse 1,49 beträgt, sehen Sie, dass $ N \ theta = 5 $ ist. Nehmen wir daher an, dass der Parameter $ \ theta $ einen geschätzten Wert von $ 5 / N = 0,385 $ hat. ** ** **
Als nächstes betrachten wir die Verteilung der grundlegenden Reproduktionszahlen unter Verwendung des geschätzten Parameters $ \ theta = 0,385 $. Eine Funktion zur Berechnung der Verteilung.
def makeR0frame(dflist):
dc = {}
for df, pref in dflist:
R0list = df[(df.R0 >= 0)]['R0']
dc[pref] = R0list
return pd.DataFrame(dc)
def showR0bar(ax, df):
color = dict(boxes="Gray",whiskers="DarkOrange",medians="Black",caps="Gray")
df.plot.box(color=color, ax = ax)
def showBCoef(ax, keys):
N = keys['N']
th = keys['th']
ylist = [y for y in range(N+1) ]
bcoef = [binomi(y, N, th) for y in ylist ]
ax.plot(ylist, bcoef)
ax.set_xticks(np.linspace(0,N,N+1))
ax.grid()
ax.set_ylim(0,)
ax.set_xlim(0,)
Dies ist der Teil, der die Verteilung berechnet und anzeigt.
preflist = [u'In Japan', u'Tokio', u'Präfektur Osaka', u'Präfektur Aichi', u'Präfektur Fukuoka', u'Hokkaido']
keys = {'N':13, 'th':5./13. }
dflist = [[R0inJapanPref(pref, keys), pref] for pref in preflist]
fig = plt.figure(figsize=(10,5))
plt.rcParams["font.size"] = 10
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
#
df1 = makeR0frame(dflist)
showR0bar(ax1, df1)
showBCoef(ax2, keys)
ax1.legend()
ax1.set_title("R0")
ax2.set_xlabel('Nθ=E[y]')
ax2.set_ylabel('P(y;θ)')
ax2.set_title('binomi(y;θ)')
plt.show()
Sehen wir uns das Berechnungsergebnis an. Die linke Seite zeigt die Verteilung der Grundreproduktionszahlen nach Präfekturen und die rechte Seite die Binomialverteilung der Infektionsintensität. Wenn Sie sich die Abbildung links ansehen, sehen Sie, dass die Verteilung einen ziemlich langen Saum hat. Darüber hinaus liegt der maximale Ausreißer in Hokkaido bei 17,5. Wie Sie durch Ändern der Parameter sehen können, scheint es kaum einen Unterschied zwischen Präfekturen mit diesem Parameter zu geben. Wenn ich mir die Abbildung rechts ansehe, habe ich das Gefühl, dass sie der Gammaverteilung im Bericht des Imperial College London ähnlich ist. Die Spitzenposition ist am 5. Tag, also liegt dies etwas zurück.
Erstellen Sie abschließend ein Histogramm der Anzahl der Grundreproduktionen und versuchen Sie, die Antwort mit dem Histogramm der Cluster-Gegenmaßnahmengruppe abzugleichen. Der zu berechnende Code.
def showR0hist(ax, df, pref):
R0list = df[df.R0 >= 0]['R0']
R0list = R0list / R0list.sum() * 100
R0list.hist( bins=30, label=pref, ax=ax)
fig = plt.figure(figsize=(5,5))
ax1 = fig.add_subplot(1,1,1)
for df, pref in dflist:
showR0hist(ax1, df, pref)
ax1.legend()
#
plt.show()
Sehen wir uns das Berechnungsergebnis an. Das linke ist R0, geschätzt aus den Daten der Anzahl der infizierten Personen, und das rechte ist R0, das durch die Umfrage des Cluster-Gegenmaßnahmen-Teams aggregiert wurde. Die Form ist ziemlich gut. Es ist eine Form, die durch eine Exponentialverteilung angenähert werden kann. Die Durchschnittswerte sind die gleichen, also Yoshi! Sagen wir.
Aus dem Obigen können die folgenden Trends aus den Berechnungsergebnissen hinsichtlich der Schätzung der maximalen Infektiosität basierend auf den Daten infizierter Personen in jeder Präfektur in Japan abgeleitet werden.
Ich habe auf die folgende Seite verwiesen.
Recommended Posts