[PYTHON] Mathematisches Vorhersagemodell für Infektionskrankheiten (SIR-Modell): Fallstudie (1)

1. Einleitung

Im vorherigen Artikel habe ich das SIR-Modell vorgestellt, ein mathematisches Vorhersagemodell für Infektionskrankheiten.

Titel: Einführung des mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell) https://qiita.com/kotai2003/items/3078f4095c3e94e5325c

Dieses Mal werden wir die tatsächlich aufgetretenen Infektionsfälle auflisten und die prädiktive Leistung dieses SIR-Modells bestätigen.

2. Influenza-Infektion in einem Internat im Vereinigten Königreich (1978)

Im Januar 1978 kam es in einem Internat im Norden Englands zu einem Influenza-Ausbruch. Von den 763 Jungen im Alter von 10 bis 18 Jahren wurde bestätigt, dass alle bis auf 30 mit Influenza infiziert waren. Davon waren 512 während der Epidemie vom 22. Januar bis 4. Februar krank. Die Infektion begann auch mit einem Jungen.

figure01.png https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1603269/pdf/brmedj00115-0064.pdf

Die Tabelle zeigt den aus der Abbildung geschätzten Wert der Anzahl der Personen mit Erkrankungen (infektiöse infizierte Personen).

Day Number of Infectious
1 3
2 8
3 28
4 75
5 221
6 291
7 255
8 235
9 190
10 125
11 70
12 28
13 12
14 5

Zeichnen Sie diese Daten in die Abbildung. Die Anzahl der Infektiösen erreichte am 6. Tag mit einem Wert von 255 ihren Höhepunkt.

real_data.png

3. Parameterschätzung

Bestätigen Sie nun die Differentialgleichung des SIR-Modells erneut. Um dieses Modell zu lösen, müssen wir die Anfangsbedingungen jeder Variablen kennen. Da die Infektion von einem der 763 Schüler ausging, war S0 = 762, I0, R0 = 0.


\begin{align}

\frac{dS}{dt} &= -\beta SI \\
\frac{dI}{dt} &=  \beta SI -\gamma I \\
\frac{dR}{dt} &=  \gamma I \\

\end{align} 
\begin{align}
S &:Infizierbare Person\quad \text{(Susceptible)} \\
I &:Infizierte Person\quad \text{(Infectious)} \\
R &:Diejenigen, die nach einer Infektion starben oder Immunität erlangten\quad \text{(Removed)} \\
\beta &:Infektionsrate\quad \text{(The infectious rate)} \quad [1/day] \\
\gamma &:Ausschlussrate\quad \text{(The Recovery rate)} \quad [1/day] \\
\end{align}

Das Problem ist die Infektionsrate und Eliminationsrate. Im Allgemeinen wird das SIR-Modell früh im Ausbruch einer Infektion benötigt. Schätzen Sie schnell die Parameter für die Infektionsrate und die Eliminationsrate aus den Daten früher infizierter Personen und berechnen Sie die SIR-Modelle, um festzustellen, ob sich diese Infektion ausbreitet oder konvergiert. Wenn das SIR-Modell zeigt, dass sich die Infektion ausbreitet (R0> 1), werden gesundheitspolitische Maßnahmen wie die Trennung infizierter Personen und die Einschränkung der Personenbewegung priorisiert, um diese Ausbreitung zu verhindern.

Frühe Infektionen zeigten, dass ein kranker Junge einen Tag später zwei weitere Jungen infizieren würde. Als grobe Schätzung wird erwartet, dass die Anzahl der infizierbaren Personen um 2 pro Tag abnimmt.

\frac{dS}{dt} \simeq -2 \\

Da S_0 = 762 und I_0 = 1 als Anfangsbedingungen bekannt sind, wird die Infektionsrate nach der folgenden Formel berechnet.

\beta = 
\frac{-dS/dt}{S_0I_0}\simeq\frac{2}{762\times  1}=0.0026

Als nächstes folgt die Schätzung der Entfernungsrate. Die Entfernungsrate ist die Rate, mit der infizierte Personen aufgrund von Tod und Immunität von der Anzahl infizierter Personen abnehmen. Berichten zufolge erholten sich die Jungen, die ins Krankenhaus eingeliefert wurden, innerhalb von ein oder zwei Tagen. Unter der Annahme einer Erholung in 2 Tagen wird daher täglich etwa die Hälfte der infizierten Bevölkerung entfernt.

\gamma = \frac{1}{2\text{days}}=0.5[\frac{1}{day} ]


Berechnen Sie als Referenz das Verhältnis zwischen der Entfernungsrate und der Infektionsrate. Sein Wert ist 192.

\rho = \frac{\gamma}{\beta}=\frac{0.5}{0.0026}= 192

4. Vergleich der Modellvorhersage und der tatsächlichen Messdaten

Stellen Sie die obigen Bedingungen und lösen Sie das SIR-Modell durch numerische Integration.

import numpy as np
from scipy.integrate import odeint
from scipy.optimize import minimize
import matplotlib.pyplot as plt
%matplotlib inline
#Define differential equation of SIR model

'''
dS/dt = -beta * S * I
dI/dt = beta * S * I - gamma * I
dR/dt = gamma * I

[v[0], v[1], v[2]]=[S, I, R]

dv[0]/dt = -beta * v[0] * v[1]
dv[1]/dt = beta * v[0] * v[1] - gamma * v[1]
dv[2]/dt = gamma * v[1]

'''
def SIR_EQ(v, t, beta, gamma):
    return [-beta*v[0]*v[1], beta * v[0] * v[1] - gamma * v[1], gamma * v[1]]

Geben Sie in diesem Teil die Anfangsbedingungen S_0, I_0, R_0 sowie die Infektions- und Entfernungsrate ein.

#parameters
t_max = 14
dt = 0.01

beta_const = 0.0026
gamma_const = 0.5


#initial_state
S_0=762
I_0=1
R_0=0
ini_state = [S_0,I_0,R_0] #[S[0], I[0], R[0]]

#numerical integration
times =np.arange(1,t_max, dt)
args  =(beta_const, gamma_const)

#R0
N_total = S_0+I_0+R_0
R0 = N_total*beta_const *(1/gamma_const)
print(R0)
#Numerical Solution using scipy.integrate
#Solver SIR model
result = odeint(SIR_EQ, ini_state, times, args)
#plot
plt.plot(times,result)
plt.legend(['Susceptible','Infectious', 'Removed'])
plt.title("Influenza 1978: a=0.0026, b=0.5, $S_0$=762, $I_0$=1")
plt.xlabel('time(days)')
plt.ylabel('population')

plt.show()

calc_01.png

Zeichnen wir die tatsächlichen Daten der infizierten Person zusammen mit dem SIR-Modell.

# Real Data
data_day = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
data_infectious = [3,8,28,75,221,291,255,235,190,125,70,28,12,5]

#SIR model Plot
plt.plot(times,result)

# Real Data Plot

plt.scatter(data_day, data_infectious,s=10, c="pink", alpha=0.5, linewidths="2",
            edgecolors="red")
plt.title("Influenza 1978: a=0.0026, b=0.5, $S_0$=762, $I_0$=1")
plt.legend(['Susceptible','Infectious', 'Removed','data'])
plt.xlabel('time(days)')
plt.ylabel('population')
plt.show()

calc_real.png

Beim Vergleich des SIR-Modells Infektiös (infizierte Person) in der Abbildung mit den Daten der tatsächlich infizierten Person (Daten) kann bestätigt werden, dass die Trends im Allgemeinen übereinstimmen. Die von diesem SIR-Modell vorhergesagte maximale Anzahl infizierter Personen (Infections_Max) betrug 306, und die tatsächliche maximale Anzahl infizierter Personen betrug 291. Der Fehler betrug 5%. Und die letzte infizierbare Person (= Anzahl der Personen, die bis zum Ende nicht infiziert waren), die vom SIR-Modell vorhergesagt wurde, war 16. In Wirklichkeit gab es 30 Leute.

5. Zusammenfassung

Dieses Mal haben wir die Wirksamkeit des SIR-Modells anhand tatsächlicher Fälle von Infektionskrankheiten bestätigt. Aus den Informationen infizierter Personen im Anfangsstadium wurden die Anfangsbedingungen und die Parameter der Infektionsrate und der Entfernungsrate geschätzt. Durch Vergleich mit den tatsächlich infizierten Personendaten wurde dann bestätigt, dass sie fast mit dem Vorhersageergebnis des SIR-Modells übereinstimmten.

6. Referenzmaterialien

  1. https://qiita.com/kotai2003/items/3078f4095c3e94e5325c
  2. https://www.researchgate.net/publication/336701551_On_parameter_estimation_approaches_for_predicting_disease_transmission_through_optimization_deep_learning_and_statistical_inference_methods
  3. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1603269/pdf/brmedj00115-0064.pdf

Recommended Posts

Mathematisches Vorhersagemodell für Infektionskrankheiten (SIR-Modell): Fallstudie (1)
Einführung eines mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell)
Implementieren Sie mit Open Modelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten
Implementieren Sie mit OpenModelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten (siehe Wirkung des Impfstoffs)
Implementieren Sie mit OpenModelica das mathematische Modell "SIR-Modell" von Infektionskrankheiten (Beispiel für wiederholte Regulierung und Entspannung)
Implementieren Sie das mathematische Modell "SIR-Modell" von Infektionskrankheiten in OpenModelica (das die Sterblichkeitsrate und die Reinfektionsrate widerspiegelt).
Mathematisches Modell von Infektionskrankheiten
Vorhersage von Epidemien von Infektionskrankheiten mit dem SIR-Modell