En ce qui concerne la nouvelle infection à coronavirus (COVID-19), le nombre de reproductions efficaces [^ 1] est analysé par préfecture https://qiita.com/oki_mebarun/items/e68b34b604235b1f28a1), et [classement] , mais cette fois, nous examinerons les données mondiales et examinerons si le temps de convergence peut être prédit à partir de la transition du nombre de reproduction effectif. Je l'ai vu. En particulier, puisque les Jeux olympiques de Tokyo 2020 sont sur le point de se tenir en juillet, on espère que la convergence se fera le plus rapidement possible non seulement au Japon mais également dans le monde.
Tout d'abord, pour expliquer brièvement à partir de la conclusion,
La formule de base est la même que le contenu de Article précédent. Je n'ai pas non plus changé les paramètres. De plus, nous utiliserons le New Corona Virus Dataset. J'ai fait. Nous rendons hommage aux efforts fournis avec ces données publiques. En raison du délai pour trouver un test positif après la période de latence et la période d'infection, les résultats avant les deux dernières semaines n'ont pas été obtenus.
Ce code est disponible sur GitHub. Il est enregistré au format Jupyter Notebook. (Nom de fichier: 03_R0_estimation-WLD-02b.ipynb)
En particulier, il n'y a pas beaucoup de changements car il fait suite à l'article précédent. Pour parler franchement, nous prenons la différence pour changer les données de valeur cumulative en données fixes quotidiennes.
def readCsvOfWorldArea(area : None):
#Téléchargez à partir de l'URL ci-dessous
# https://hackmd.io/@covid19-kenmo/dataset/https%3A%2F%2Fhackmd.io%2F%40covid19-kenmo%2Fdataset
fcsv = u'World-COVID-19.csv'
df = pd.read_csv(fcsv, header=0, encoding='sjis', parse_dates=[u'Date'])
#Date,Extraire les pays cibles
if area is not None:
df1 = df.loc[:,[u'Date',area]]
else:
df1 = df.loc[:,[u'Date',u'Les personnes infectées dans le monde']]
df1.columns = ['date','Psum']
##Cumulative ⇒ conversion quotidienne
df2 = df1.copy()
df2.columns = ['date','P']
df2.iloc[0,1] = 0
##Chaîne de caractères ⇒ valeur numérique
getFloat = lambda e: float('{}'.format(e).replace(',',''))
##Calcul de la différence
for i in range(1,len(df1)):
df2.iloc[i, 1] = getFloat(df1.iloc[i, 1]) - getFloat(df1.iloc[i-1, 1] )
##
return df2
Une moyenne mobile a été ajoutée au processus de calcul R. La moyenne est prise pendant 3 jours avant et après.
def calcR0(df, keys):
lp = keys['lp']
ip = keys['ip']
nrow = len(df)
getP = lambda s: df.loc[s, 'P'] if s < nrow else np.NaN
getP2 = lambda s: np.average([ getP(s + r) for r in range(-1,2)])
for t in range(1, nrow):
df.loc[t, 'Ppre'] = sum([ getP2(s) for s in range(t+1, t + ip + 1)])
df.loc[t, 'Pat' ] = getP2(t + lp + ip)
if df.loc[t, 'Ppre'] > 0:
df.loc[t, 'R0' ] = ip * df.loc[t, 'Pat'] / df.loc[t, 'Ppre']
else:
df.loc[t, 'R0' ] = np.NaN
return df
Aussi, pour rendre les axes plus faciles à voir, ils sont affichés sur des axes logarithmiques.
def showResult3(dflist, title):
# R0=1
dfs = dflist[0][0]
ptgt = pd.DataFrame([[dfs.iloc[0,0],1],[dfs.iloc[len(dfs)-1,0],1]])
ptgt.columns = ['date','target']
ax = ptgt.plot(title='COVID-19 R0', x='date',y='target',style='r--', figsize=(10,8))
ax.set_yscale("symlog", linthreshy=1)
#
for df, label in dflist:
showResult2(ax, df, label)
#
ax.grid(True)
ax.set_ylim(0,)
plt.show()
fig = ax.get_figure()
fig.savefig("R0_{}.png ".format(title))
J'ai pu le gérer sans trop changer le code d'origine, ce qui a été utile.
Jetons maintenant un œil aux résultats du calcul. Si $ R_0> 1 $, l'infection a tendance à se propager, et si $ R_0 <1 $, l'infection a tendance à converger.
Voici les résultats pour la Chine continentale, l'Italie, les États-Unis, l'Espagne, l'Iran et la Corée du Sud.
Voici le résultat de la collecte de pays avec de nombreuses personnes infectées en Europe, y compris l'Italie.
Voici les résultats pour Taiwan, le Japon, Hong Kong et Singapour.
En regardant le graphique, sinon tout, voici le résultat de la collecte des pays où $ R $ évolue à un niveau élevé et il n'y a pas de tendance à converger.
En regardant les changements du nombre de reproductions effectives, après une forte augmentation, le nombre a tendance à diminuer progressivement de manière exponentielle. En particulier, si l'on regarde les résultats en Europe, on constate la même tendance à la convergence quel que soit le pays. Par conséquent, je l'ai appliqué avec la formule d'approximation suivante.
R(t) = R(t_0) \cdot 2^{-\frac{t-t_0}{T}}
En d'autres termes, le modèle est que la demi-vie de $ R (t) $ est $ T $. En fait, si vous définissez $ T = 7,5 [jours] $ et que vous le faites correspondre avec le graphique de la région européenne, ce sera comme suit (la ligne en pointillé sur la figure est la formule d'estimation).
À partir de là, si vous remplacez spécifiquement la date par $ R (t) $,
Le résultat est. Bien sûr, c'est une approximation, donc ce n'est peut-être pas le cas. Cependant, si $ R <1 $ a été atteint le 21 mars le plus récent, une tendance à une augmentation constante des nouvelles infections devrait être observée vers le 4 avril, 13 jours plus tard. .. Si tel est le cas, le nombre de patients hospitalisés diminuera régulièrement et une convergence sera observée.
De plus, voici le résultat de l'application de la formule d'approximation ci-dessus à d'autres régions.
Je me suis référé à la page suivante.
[^ 1]: Dans cet article, il est défini comme le nombre d'infections secondaires par une personne infectée (à un certain instant t, sous certaines mesures).
Recommended Posts