Je ne suis pas un spécialiste des maladies infectieuses, veuillez donc le lire après avoir compris.
La nouvelle pneumonie corona (Covid-19) survenue à Wuhan, dans la province du Hubei, en Chine à partir de décembre 2019, s'est propagée au Japon et le nombre de personnes infectées augmente. Je m'intéresse à la manière dont le nombre de personnes infectées au Japon augmentera à l'avenir. Par conséquent, j'ai recherché des articles sur le modèle de prédiction des infections. Des modèles d'infection ont déjà été annoncés dans le monde entier, mais des paramètres tels que le taux d'infection et le taux d'isolement ont une grande influence sur la précision lors de la prédiction avec le modèle d'infection. Si ces paramètres diffèrent des valeurs réelles, la prédiction sera loin de la situation réelle.
L'autre jour, un chercheur chinois a annoncé un modèle prédictif du nombre de personnes infectées par le coronavirus. COVID-19 in Japan: What could happen in the future?
Dans cet article, nous prédisons que le nombre de personnes infectées peut être prédit avec précision en appliquant le modèle de prédiction à différentes parties de la Chine (Wuhan, Pékin, Shanghai ...), et que le nombre de personnes infectées augmentera à l'avenir en l'appliquant au Japon. Je suis. En outre, dans cet article, le taux d'infection et le taux d'isolement, qui sont les paramètres nécessaires à la prédiction, ont été annoncés (même s'il serait correct de dire que les paramètres ont été ajustés pour correspondre au nombre réel de personnes infectées).
Les modèles SIR et SEIR sont utilisés dans le modèle des maladies infectieuses, mais cet article utilise un modèle légèrement différent. Nous l'appelons le modèle dynamique statistique de retard temporel.
[Citation COVID-19 au Japon: que pourrait-il se passer dans le futur?]
La formule de calcul est la suivante. t: jour I (t): nombre cumulé de personnes infectées J (t): nombre cumulé de personnes infectées (apparition confirmée à l'hôpital) G (t): personne infectée survenue à ce moment-là (valeur non cumulative, l'apparition n'est pas confirmée) I0 (t): Nombre d'infections potentielles (infectées mais non confirmées ou mises en quarantaine) I0(t) = I(t) − J(t) − G(t) [Citation COVID-19 au Japon: que pourrait-il se passer dans le futur?]
Il existe des paramètres importants pour l'utilisation de ce modèle: l'incidence et l'hospitalisation. En ce qui concerne les paramètres, un exemple chinois a été décrit dans cet article.
zone | Taux de croissance | Taux d'infection l1 | Taux d'infection l2 | tl |
---|---|---|---|---|
Shanghai | 0.3137 | 0.1713 | 0.6149 | 2020/1/16 |
Pékin | 0.3125 | 0.1824 | 0.5880 | 2020/1/17 |
Wuhan | 0.3019 | 0.1142 | 0.4567 | 2020/1/17 |
Le taux de croissance est le taux auquel une personne infecte une autre. Cela a été établi comme suit sur la base des chiffres en Chine dans le document. r = 0.3
Le taux de quarantaine est le taux auquel les personnes infectées sont mises en quarantaine. Cela a été établi comme suit sur la base des chiffres en Chine dans le document. l = 0,1 (jusqu'au 28/02/2020) l = 0,5 (à partir du 29 février 2020)
f2 (t) Probabilité de transition de l'infection à l'apparition Cela n'a pas été mentionné dans le document. J'ai entendu la nouvelle que 70 à 80% des personnes ne développent pas la maladie même si elles sont infectées. De plus, comme il faut au plus 14 jours pour développer la maladie, nous la définissons comme suit. f2(t) = 0.2/14 × t (t < 14) f2(t) = 0.2 (t >= 14)
f4 (t) Probabilité de transition de l'infection à l'hospitalisation Le taux d'infection et d'hospitalisation est totalement inconnu. Par conséquent, en supposant que 1/4 des personnes touchées seront hospitalisées, les paramètres sont les suivants. 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 #Taux de croissance
self.tl = 15 #Date de début de l'isolement
self.l1 = 0.1 #Taux d'isolement avant la date de début de l'isolement
self.l2 = 0.5 #Taux d'isolement après la date de début de l'isolement
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):
#Taux d'incidence
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):
#Taux d'hospitalisation
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):
#Taux d'isolement
if t < self.tl:
return self.l1
else:
return self.l2
def func_i(self, t):
#Nombre cumulé de personnes infectées
# 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):
#Nombre cumulé de personnes infectées(Confirmé à l'hôpital)
# 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):
#Personne infectée survenue momentanément(Non confirmé être infecté à l'hôpital)
# 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):
#Nombre d'infections potentielles(Infecté mais non confirmé ou mis en quarantaine)
# 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):
#Initialisation
period = day + 1
predict_data = np.zeros([period, 5])
df_predict = pd.DataFrame(predict_data, columns=['day', 'I', 'J', 'G', 'I0'])
self.set_start()
#Prévoir
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()
Nous avons obtenu le nombre de personnes infectées au début de la simulation à partir des matériaux publiés quotidiennement dans communiqué de presse du ministère de la Santé, du Travail et du Bien-être social. Prédiction à partir du 15/02 sur la base de 21 personnes infectées le 14/02/2020. Les résultats de la prédiction sont les suivants.
Date | Nombre de personnes infectées(Annoncé par le ministère de la Santé, du Travail et des Affaires sociales) | Nombre de personnes infectées(Prévoir) |
---|---|---|
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 |
L'erreur était grande sur le chemin, mais le 28/02, l'erreur n'était que de 5 personnes. (Peut-être que ça arrive ...)
Le nombre de personnes infectées ci-dessus correspond uniquement à ceux dont l'infection a été confirmée à l'hôpital. La simulation calcule également le nombre d'infections potentielles. Le résultat est illustré dans la figure ci-dessous. Orange: personnes confirmées infectées à l'hôpital (cumulatif) Bleu marine: personnes infectées cachées (cumulatif) dont l'infection n'a pas été confirmée à l'hôpital Il y a beaucoup plus de personnes infectées cachées que de personnes dont l'infection a été confirmée à l'hôpital, environ 10 fois plus.
Le ministère de la Santé, du Travail et des Affaires sociales mène-t-il également une telle simulation?
https://www.medrxiv.org/content/10.1101/2020.02.21.20026070v2
D'autres ont écrit le blog Hatena en utilisant le programme de cet article. https://kibashiri.hatenablog.com/entry/2020/03/02/171223 Il y avait une erreur dans le programme sur son blog. C'était certainement une erreur de code dans le calcul de func_g (). Programme et résultats fixes.
On prévoit que le nombre de personnes infectées après le 29/29 augmentera de près de 100 chaque jour. Le ministère de la Santé, du Travail et du Bien-être a annoncé un nouveau nombre de personnes infectées (cas nationaux - à l'exclusion des rapatriés sur les vols charters), je l'ai donc comparé aux résultats prévus.
Date | Nombre de personnes infectées(Annoncé par le ministère de la Santé, du Travail et des Affaires sociales) | Nombre de personnes infectées(Prévoir) | Nombre de testeurs PCR(En un jour) |
---|---|---|---|
2020/2/29 | 215 | 259 | 130 |
2020/3/1 | 224 | 334 | 178 |
2020/3/2 | 239 | 428 | 96 |
2020/3/3 | 253 | 546 | 71 |
La valeur prédite est significativement différente du nombre réel de personnes infectées, et il semble que les performances prévues après le 29/29 n'étaient pas bonnes. J'ai essayé de prédire le nombre de personnes infectées au Japon avec les mêmes paramètres qu'en Chine, mais j'ai trouvé que la situation est différente entre le Japon et la Chine, et il y a une limite à la prédiction avec les mêmes paramètres.
Selon les médias, la capacité de test PCR du Japon était de 3800 personnes / jour, mais le nombre réel de personnes testées par jour est de 130, 178, 96 et 71, ce qui est étonnamment faible.
Recommended Posts