SIS-malli
Lähde löytyy täältä.
SIS-malli kuvaa tilannetta, jossa taudin sairastaminen ei tuotakaan pysyvää immuniteettia, vaan henkilö palaakin takaisin lähtötilanteeseen eli taudille alttiiksi.
\begin{equation}I(t+\triangle t) = I(t)+\beta \triangle t S(t) I(t) - \gamma \triangle t I(t), \end{equation}
kun kolmio-t lähestyy nollaa, saadaan differentiaaliyhtälö
\begin{equation}\frac{dI}{dt} =\frac{\beta SI}{N} - \frac{\gamma I}{N}. \end{equation}
sekä vastineeksi
\begin{equation} \frac{dS}{dt}=-\frac{\beta SI}{N}+\frac{\gamma I}{N}.\end{equation}
Oletus I+S=N saadaan käännettyä muotoon S=N-I, sekä sijoittamalla saatu muoto edelliseen differentiaalityhtälöön saadaan
\begin{equation}\frac{dI}{dt} \beta (N-I)I - \gamma I. \end{equation}
sekä edelleen muotoilemalla
\begin{equation}\frac{dI}{dt} = (\beta N - \gamma)I(1-\frac{\beta I}{N-\gamma}), \end{equation}
joka on siis logistinen kasvumalli.
Edellinen differentiaaliyhtälö voidaan edelleen ratkaista. Ratkaisun pituuden ja monimutkaisuuden vuoksi en käy ratkaisumenetelmää yksityiskohtaisesti tässä läpi, täydellinen ratkaisu löytyy tästä Khanin, Sabbirin ja Sadiqin artikkelista. Differentiaaliyhtälön ratkaisu lähtee ylempänä muotoillun yhtälön integroinnista. Kun muuttujan I differentiaaliyhtälö on saatu ratkaistua, saadaan muuttujan S ratkaisu yksinkertaisesti käyttämällä identiteettiä S = N-I, jolloin ratkaisuiksi saadaan
\begin{equation}S=N - \frac{\beta N - \gamma}{\beta - (\beta N - \gamma)\frac{\beta N - \gamma - i_0 \beta}{(\beta N - \gamma)i_0}e^{-(\beta N - \gamma )t}}. \end{equation}
sekä muuttujan I yhtälöksi
\begin{equation}I=\frac{\beta N - \gamma}{\beta - (\beta N - \gamma)\frac{\beta N -
\gamma - i_0 \beta}{(\beta N - \gamma)i_0}e^{-(\beta N - \gamma )t}}.
\end{equation}
Skipataan tässä yksinkertaisemmassa mallissa tasapainopisteiden haku sekä niiden stabiiliusominaisuuksien analyysi. Aiheesta löytyy erinomainen esitelmä täältä.
Tartuntoja kuvaavien differentiaaliyhtälöiden kuvaaja on
SIS-mallissa perustartuntaluku on muotoa
\begin{equation}R_0 = \frac{\beta N}{\gamma}, \end{equation}
eli jos R_0 > 1, epidemia käynnistyy. Tällöin sairastuneella on vähintään yksi kontakti, ja tauti voi siten lähteä leviämään.
SIRVI-malli
SIRVI-malli
lähtee pitkälti samoista oletuksista kuin kaksi edellistäkin, sillä
erotuksella, ettei rokotus tällä kertaa annakaan pysyvää immuniteettiä.
SIRVIn asetelma muistuttaa siis vahvasti koronarokotteen vaikutuksia, ja
on siksi hyvin ajankohtainen. Koronarokote ei siis antanut kestävää
immuniteettia tautia vastaan, estänyt ketään sairastamasta tai
levittämästä tautia, mutta vahvisti hetkellisesti immuniteettia tautia
vastaan. SIRVIin löytyy erinomaisen perusteellinen lähde täältä, ja käytän sitä myös tämän blogipostauksen pohjana. Kaikki olennainen tieto on peräisin Turkyilmazoglun artikkelista, enkä ota tästä kunniaa itselleni.
SIRVI-malli muodostuu yhtälöistä:
\begin{equation} \frac{dS}{dt}=-\beta SI -vS\end{equation}
\begin{equation} \frac{dI}{dt}=\beta SI + \alpha VI -\gamma I\end{equation}
\begin{equation} \frac{dR}{dt}=\gamma I \end{equation}
\begin{equation} \frac{dV}{dt}=v S - \alpha VI \end{equation}
missä
alfa, beta, gamma ja v ovat rokotettujen tartuntamäärä, epäiltyjen
tartuntamäärä, parantumismäärä ja epäiltyjen rokotusmäärä.
Hetkellä t=0 annettujen funktioiden muuttujille pätee:
\begin{equation} S_0 = 1-\tau \end{equation}
\begin{equation} I_0 = \tau \end{equation}
\begin{equation} R_0 = 0 \end{equation}
\begin{equation} V_0 = 0 \end{equation}.
Tällöin on voimassa myös yhtälö
Mallin perustartuntaluku on
\begin{equation}R_0=\frac{S_0 \beta -V_0 \alpha}{\gamma}\end{equation}
sekä tasapainopisteet
\begin{equation}(S,I)=(0,0)\end{equation}
\begin{equation}(V,R)=(0 \leq V, R \leq 1)\end{equation}
SIRVI-mallin Jacobin matiiris on muotoa
\begin{equation}J=\begin{bmatrix}-v & -SB & 0 & 0 \\ 0 & V \alpha + S \beta - \gamma & 0 & 0 \\ v & -V \alpha & 0 & 0 \\ 0 & \gamma & 0 & 0 \end{bmatrix}\end{equation}
SIRVI-mallin stabiilisuusominaisuuksista voidaan ainakin sanoa, että nollasta eroavat ominaisarvot
\begin{equation}\lambda_1 = -v \end{equation}
sekä
\begin{equation}\lambda_2 = V \alpha + S \beta - \gamma, \end{equation}
mistä huomataan, että stabiilisuus pätee rokotetulla ja taudista vapaalla populaatiolla kun
\begin{equation}V \leq \frac{\gamma}{\alpha}\end{equation}
Kuvaaja on siis muotoa
Vaikka tässä käsiteltiinkin vain kolmea erityistä epidemiologista mallia, riittää vastaavia sovellutuksia maailmassa vaikka kuinka paljon. Epidemiologia on yksi sovelletun matematiikan merkittävimmistä haaroista.
Käytetyt koodit, perusten aiempaan SIR-mallissa käytettyyn Python-koodiin:
# SIS-malli
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Total population, N.
N = 1000
# Initial number of infected and recovered individuals, I0 and R0.
I0 = 1
# Everyone else, S0, is susceptible to infection initially.
S0 = N - I0
# Contact rate, beta, and mean recovery rate, gamma, (in 1/days).
beta, gamma = 0.09, 2.0
# A grid of time points (in days)
t = np.linspace(0, 160, 160)
# The SIR model differential equations.
def deriv(y, t, N, beta, gamma):
S, I = y
dSdt = -beta * S * I / N + gamma * I/N
dIdt = beta * S * I / N - gamma * I/N
return dSdt, dIdt
# Initial conditions vector
y0 = S0, I0,
# Integrate the SIR equations over the time grid, t.
ret = odeint(deriv, y0, t, args=(N, beta, gamma))
S, I = ret.T
# Plot the data on three separate curves for S(t), I(t) and R(t)
fig = plt.figure(facecolor='w')
ax = fig.add_subplot(111, facecolor='#dddddd', axisbelow=True)
ax.plot(t, S/1000, 'b', alpha=0.5, lw=2, label='Susceptible')
ax.plot(t, I/1000, 'r', alpha=0.5, lw=2, label='Infected')
ax.set_xlabel('Time /days')
ax.set_ylabel('Number (1000s)')
ax.set_ylim(0,1.2)
ax.yaxis.set_tick_params(length=0)
ax.xaxis.set_tick_params(length=0)
ax.grid(b=True, which='major', c='w', lw=2, ls='-')
legend = ax.legend()
legend.get_frame().set_alpha(0.5)
for spine in ('top', 'right', 'bottom', 'left'):
ax.spines[spine].set_visible(False)
plt.show()
#################################################################
# SIRVI-malli
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# Total population, N.
N = 1000
# Initial number of infected and recovered individuals, I0 and R0.
I0, R0, V0 = 1, 0, 0
# Everyone else, S0, is susceptible to infection initially.
S0= N - I0 - R0 -V0
# Contact rate, beta, and mean recovery rate, gamma, (in 1/days).
beta, gamma, v ,alpha= 0.2, 2.10, 0.03, 0.03
# A grid of time points (in days)
t = np.linspace(0, 160, 160)
# The SIR model differential equations.
def deriv(y, t, N, beta, gamma, v, alpha):
S, I, R, V = y
dSdt = -beta * S * I/N - v * S
dIdt = beta * S * I/N + alpha*V*I/N - gamma * I/N
dRdt = gamma * I/N
dVdt = v * S-alpha*V*I/N
return dSdt, dIdt, dRdt, dVdt
# Initial conditions vector
y0 = S0, I0, R0, V0
# Integrate the SIR equations over the time grid, t.
ret = odeint(deriv, y0, t, args=(N, beta, gamma,v,alpha))
S, I, R, V = ret.T
# Plot the data on three separate curves for S(t), I(t) and R(t)
fig = plt.figure(facecolor='w')
ax = fig.add_subplot(111, facecolor='#dddddd', axisbelow=True)
ax.plot(t, S/1000, 'b', alpha=0.5, lw=2, label='Susceptible')
ax.plot(t, I/1000, 'r', alpha=0.5, lw=2, label='Infected')
ax.plot(t, R/1000, 'g', alpha=0.5, lw=2, label='Recovered with immunity')
ax.plot(t,V/1000, 'y', alpha=0.5, lw=2, label = 'vaccinated' )
ax.set_xlabel('Time /days')
ax.set_ylabel('Number (1000s)')
ax.set_ylim(0,1.2)
ax.yaxis.set_tick_params(length=0)
ax.xaxis.set_tick_params(length=0)
ax.grid(b=True, which='major', c='w', lw=2, ls='-')
legend = ax.legend()
legend.get_frame().set_alpha(0.5)
for spine in ('top', 'right', 'bottom', 'left'):
ax.spines[spine].set_visible(False)
plt.show()


Ei kommentteja:
Lähetä kommentti