Introduction
Nous créons un package Python CovsirPhy qui vous permet de télécharger et d'analyser facilement les données COVID-19 (comme le nombre de PCR positifs). Nous prévoyons de publier des articles sur des exemples d'analyse en utilisant des packages et des connaissances acquises lors de leur création (Python, GitHub, Sphinx, ...).
La version anglaise du document est CovsirPhy: COVID-19 analysis with phase-depend SIRs, Kaggle: COVID-19 data with SIR model.
** Cette fois, je voudrais vous présenter le modèle SIR-F. ** Aucune donnée réelle n'est disponible. Version anglaise: Utilisation (détails: ensembles de données théoriques)
CovsirPhy peut être installé par la méthode suivante! Veuillez utiliser Python 3.7 ou supérieur, ou Google Colaboratory.
--Version stable: pip install covsirphy --upgrade
--Version de développement: pip install" git + https://github.com/lisphilar/covid19-sir.git#egg=covsirphy "
#Pour l'affichage des données
from pprint import pprint
# CovsirPhy
import covsirphy as cs
cs.__version__
# '2.8.2'
Environnement d'exécution | |
---|---|
OS | Windows Subsystem for Linux |
Python | version 3.8.5 |
Le modèle SIR-F est un modèle dérivé créé à partir du modèle de base bien connu modèle SIR [^ 1]. Je l'ai créé en procédant à l'analyse en utilisant les données de Kaggle [^ 2].
(Je pense que c'est un nouveau modèle, mais si vous connaissez l'article original publié avant février 2020, faites-le moi savoir! Je ne suis pas un expert en maladies infectieuses ...)
[^ 1]: [CovsirPhy] COVID-19 Python Package for Data Analysis: SIR model
SIR model Premièrement, le modèle SIR définit la probabilité d'être infecté lorsque Susceptible entre en contact avec Infected comme Taux de contact effectif $ \ beta $ [1 / min]. $ \ Gamma $ [1 / min] est la probabilité de transition d'Infecté à Récupéré [^ 3] [^ 4].
\begin{align*}
\mathrm{S} \overset{\beta I}{\longrightarrow} \mathrm{I} \overset{\gamma}{\longrightarrow} \mathrm{R} \\
\end{align*}
SIR-D model Cependant, Fatal (nombre de cas mortels) n'est pas pris en compte dans le modèle SIR, ou il est inclus dans Récupéré. Dans le cas du COVID-19, des données sur le nombre de cas confirmés (nombre de positifs PCR), le nombre de guérisseurs et le nombre de décès ont été collectées par l'Université Johns Hopkins, etc. [^ 5] et peuvent être utilisées comme variables de modèle. Je peux le faire. Le nombre de cas confirmés est le total du nombre de personnes infectées $ I $, le nombre de guérisseurs $ R $ et le nombre de décès $ D $.
SIR-D model: $ \ Alpha_2 $ [1 / min] comme taux de mortalité des personnes infectées
\begin{align*}
\mathrm{S} \overset{\beta I}{\longrightarrow}\ & \mathrm{I} \overset{\gamma}{\longrightarrow} \mathrm{R} \\
& \mathrm{I} \overset{\alpha_2}{\longrightarrow} \mathrm{D} \\
\end{align*}
SIR-F model De plus, dans le cas du COVID-19, il est difficile de poser un diagnostic définitif d'infection, et de nombreux cas ont été rapportés qui meurent avant le diagnostic définitif, en particulier dans les premiers stades. Le modèle qui reflète ces cas est le suivant. $ S ^ {\ ast} $ est le pourcentage de personnes infectées avec un diagnostic définitif, et $ \ alpha_1 $ [-] est le pourcentage de $ S ^ {\ ast} $ décédés au moment du diagnostic définitif (sans unité) ) Est montré.
SIR-F model:
\begin{align*}
\mathrm{S} \overset{\beta I}{\longrightarrow} \mathrm{S}^\ast \overset{\alpha_1}{\longrightarrow}\ & \mathrm{F} \\
\mathrm{S}^\ast \overset{1 - \alpha_1}{\longrightarrow}\ & \mathrm{I} \overset{\gamma}{\longrightarrow} \mathrm{R} \\
& \mathrm{I} \overset{\alpha_2}{\longrightarrow} \mathrm{F} \\
\end{align*}
Lorsque $ \ alpha_1 = 0 $, le modèle SIR-F correspond au modèle SIR-D.
En tant que population totale $ N = S + I + R + F $
\begin{align*}
& \frac{\mathrm{d}S}{\mathrm{d}T}= - N^{-1}\beta S I \\
& \frac{\mathrm{d}I}{\mathrm{d}T}= N^{-1}(1 - \alpha_1) \beta S I - (\gamma + \alpha_2) I \\
& \frac{\mathrm{d}R}{\mathrm{d}T}= \gamma I \\
& \frac{\mathrm{d}F}{\mathrm{d}T}= N^{-1}\alpha_1 \beta S I + \alpha_2 I \\
\end{align*}
Vous pouvez le gérer tel quel, mais il sera sans dimension car la plage de paramètres est limitée à $ (0, 1) $. Bien que cela ne soit pas mentionné dans cet article, il est efficace lors du calcul des paramètres à partir de données réelles.
$ (S, I, R, F) = N \ fois (x, y, z, w) $, $ (T, \ alpha_1, \ alpha_2, \ beta, \ gamma) = (\ taut, \ theta, \ tau ^ {-1} \ kappa, \ tau ^ {-1} \ rho, \ tau ^ {-1} \ sigma) $, $ 1 \ leq \ tau \ leq 1440 $ [min]
\begin{align*}
& \frac{\mathrm{d}x}{\mathrm{d}t}= - \rho x y \\
& \frac{\mathrm{d}y}{\mathrm{d}t}= \rho (1-\theta) x y - (\sigma + \kappa) y \\
& \frac{\mathrm{d}z}{\mathrm{d}t}= \sigma y \\
& \frac{\mathrm{d}w}{\mathrm{d}t}= \rho \theta x y + \kappa y \\
\end{align*}
En ce moment,
\begin{align*}
& 0 \leq (x, y, z, w, \theta, \kappa, \rho, \sigma) \leq 1 \\
\end{align*}
Le nombre de reproduction (de base / effectif) du modèle SIR-F est défini comme suit en étendant la formule de définition [^ 6] du modèle SIR.
\begin{align*}
R_t = \rho (1 - \theta) (\sigma + \kappa)^{-1} = \beta (1 - \alpha_1) (\gamma + \alpha_2)^{-1}
\end{align*}
Définissez le paramètre $ (\ theta, \ kappa, \ rho, \ sigma) = (0,002, 0,005, 0,2, 0,075) $ et la valeur initiale et le graphique.
# Parameters
pprint(cs.SIRF.EXAMPLE, compact=True)
# {'param_dict': {'kappa': 0.005, 'rho': 0.2, 'sigma': 0.075, 'theta': 0.002},
# 'population': 1000000,
# 'step_n': 180,
# 'y0_dict': {'Fatal': 0,
# 'Infected': 1000,
# 'Recovered': 0,
# 'Susceptible': 999000}}
(Basique / Effectif) Nombre de reproductions:
# Reproduction number
eg_dict = cs.SIRF.EXAMPLE.copy()
model_ins = cs.SIRF(
population=eg_dict["population"],
**eg_dict["param_dict"]
)
model_ins.calc_r0()
# 2.5
affichage graphique:
# Set tau value and start date of records
example_data = cs.ExampleData(tau=1440, start_date="01Jan2020")
# Add records with SIR-F model
model = cs.SIRF
area = {"country": "Full", "province": model.NAME}
example_data.add(model, **area)
# Change parameter values if needed
# example_data.add(model, param_dict={"kappa": 0.001, "kappa": 0.002, "rho": 0.4, "sigma": 0.0150}, **area)
# Records with model variables
df = example_data.specialized(model, **area)
# Plotting
cs.line_plot(
df.set_index("Date"),
title=f"Example data of {model.NAME} model",
y_integer=True,
filename="sirf.png "
)
La prochaine fois, j'expliquerai la procédure de téléchargement et de vérification des données réelles.
Recommended Posts