Introduction
Wir erstellen ein Python-Paket CovsirPhy, mit dem Sie COVID-19-Daten (z. B. die Anzahl der PCR-Positiven) einfach herunterladen und analysieren können. Wir planen, Artikel zu Analysebeispielen mithilfe von Paketen und den dabei erstellten Kenntnissen (Python, GitHub, Sphinx, ...) zu veröffentlichen.
Die englische Version des Dokuments lautet CovsirPhy: COVID-19-Analyse mit phasenabhängigen SIRs, Kaggle: COVID-19-Daten mit SIR-Modell.
** Dieses Mal möchte ich das SIR-F-Modell vorstellen. ** Es sind keine aktuellen Daten verfügbar. Englische Version: Verwendung (Details: theoretische Datensätze)
CovsirPhy kann mit der folgenden Methode installiert werden! Bitte verwenden Sie Python 3.7 oder höher oder Google Colaboratory.
--Stabile Version: pip install covsirphy --upgrade
pip install" git + https://github.com/lisphilar/covid19-sir.git#egg=covsirphy "
#Zur Datenanzeige
from pprint import pprint
# CovsirPhy
import covsirphy as cs
cs.__version__
# '2.8.2'
Ausführungsumgebung | |
---|---|
OS | Windows Subsystem for Linux |
Python | version 3.8.5 |
Das SIR-F-Modell ist ein abgeleitetes Modell, das auf dem bekannten Grundmodell SIR-Modell [^ 1] basiert. Ich habe es erstellt, während ich mit der Analyse unter Verwendung von Kaggles Daten fortfuhr [^ 2].
(Ich denke, es ist ein neuartiges Modell, aber wenn Sie das Originalpapier kennen, das vor Februar 2020 veröffentlicht wurde, lassen Sie es mich bitte wissen! Ich bin kein Experte für Infektionskrankheiten ...)
[^ 1]: [CovsirPhy] COVID-19 Python-Paket für die Datenanalyse: SIR-Modell
SIR model Zunächst definiert das SIR-Modell die Wahrscheinlichkeit einer Infektion, wenn Susceptible mit Infected in Kontakt kommt, als effektive Kontaktrate $ \ beta $ [1 / min]. $ \ Gamma $ [1 / min] ist die Wahrscheinlichkeit des Übergangs von Infiziert zu Wiederhergestellt [^ 3] [^ 4].
\begin{align*}
\mathrm{S} \overset{\beta I}{\longrightarrow} \mathrm{I} \overset{\gamma}{\longrightarrow} \mathrm{R} \\
\end{align*}
SIR-D model Fatal (Anzahl der tödlichen Fälle) wird im SIR-Modell jedoch nicht berücksichtigt oder ist in Recovered enthalten. Im Fall von COVID-19 wurden Daten über die Anzahl der bestätigten Fälle (Anzahl der PCR-Positiven), die Anzahl der Wiederhersteller und die Anzahl der Todesfälle von der Johns Hopkins University usw. gesammelt [^ 5] und können als Modellvariablen verwendet werden. Ich kann es schaffen Die Anzahl der bestätigten Fälle ist die Summe aus der Anzahl der infizierten Personen $ I $, der Anzahl der Geneser $ R $ und der Anzahl der Todesfälle $ D $.
SIR-D model: $ \ Alpha_2 $ [1 / min] als Sterblichkeitsrate infizierter Personen
\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 Darüber hinaus ist es im Fall von COVID-19 schwierig, eine endgültige Diagnose einer Infektion zu stellen, und es wurde über viele Fälle berichtet, die vor der endgültigen Diagnose sterben, insbesondere in den frühen Stadien. Das Modell, das diese Fälle widerspiegelt, ist wie folgt. $ S ^ {\ ast} $ ist der Prozentsatz der infizierten Personen mit einer endgültigen Diagnose, und $ \ alpha_1 $ [-] ist der Prozentsatz von $ S ^ {\ ast} $, der zum Zeitpunkt der endgültigen Diagnose verstorben ist (keine Einheit) ) Wird gezeigt.
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*}
Wenn $ \ alpha_1 = 0 $ ist, stimmt das SIR-F-Modell mit dem SIR-D-Modell überein.
Als Gesamtbevölkerung $ 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*}
Sie können damit umgehen, aber es ist dimensionslos, da der Parameterbereich auf $ (0, 1) $ begrenzt ist. Obwohl in diesem Artikel nicht erwähnt, ist es effektiv bei der Berechnung von Parametern aus tatsächlichen Daten.
$ (S, I, R, F) = N \ mal (x, y, z, w) $, $ (T, \ alpha_1, \ alpha_2, \ beta, \ gamma) = (\ straff, \ 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*}
In diesem Moment,
\begin{align*}
& 0 \leq (x, y, z, w, \theta, \kappa, \rho, \sigma) \leq 1 \\
\end{align*}
Die (grundlegende / effektive) Reproduktionsnummer des SIR-F-Modells wird wie folgt definiert, indem die Definitionsformel [^ 6] des SIR-Modells erweitert wird.
\begin{align*}
R_t = \rho (1 - \theta) (\sigma + \kappa)^{-1} = \beta (1 - \alpha_1) (\gamma + \alpha_2)^{-1}
\end{align*}
Stellen Sie den Parameter $ (\ theta, \ kappa, \ rho, \ sigma) = (0,002, 0,005, 0,2, 0,075) $ sowie den Anfangswert und das Diagramm ein.
# 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}}
(Basic / Effective) Anzahl der Reproduktionen:
# 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
Grafikanzeige:
# 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 "
)
Das nächste Mal werde ich das Verfahren zum Herunterladen und Überprüfen der tatsächlichen Daten erläutern.
Recommended Posts