The SIS Model

Author
Affiliation

University of Washington

TipSimBA

The model has been implemented in ramp.xds. See the vignette..

The Model

Malaria is complex, but a good starting point is a simple model, called the SIS compartment model. A population is subdivided into susceptible (\(S\)) and infected and infectious (\(I\)) individuals, where the total population is \(H = S+I.\)

  • We let \(h\) denote the force of infection (FoI).

  • We let \(r\) denote the clearance rate for infections.

We assume that individuals become susceptible after recovering (See Fig. 1).


Fig 1: A diagram of the SIS Compartment Model

The dynamics are described by a pair of equations:

\[ \begin{array}{rl} \dot{I} &= h S - rI \\ \dot{S} &= -hS + rI \end{array} \]

If we know \(H\), then one of these equations is redundant. Here, we compute:

\[ \dot{I} = h (H-I) - rI \]

Steady States

Let the variable \(x\) denote the fraction infected, \((x = I/H)\). Substituting, we get:

\[ \dot{x} = h (1-x) - rx \]

If \(h\) is constant, then we can easily compute prevalence at the steady state (denoted \(\bar x\)):

\[\bar x = \frac{h}{h+r}\]

At the steady state, the odds of infection are:

\[ \frac{\bar x}{1- \bar x} = \frac {h}{r}\]

Solutions

We can solve the equation above. Assuming no one is initially infected at time \(t=0,\) (i.e. \(x(0) = 0\)), the prevalence of infection increases dynamics with respect to age are given by the function:

\[x(t) = \left(1-e^{-(h+r)t}\right) \frac{h}{h+r}\]

For example, in a population where the FoI is one infection per year (\(h=1/365\)), and infections last around 200 days (\(r=1/200\)), we can plot the prevalence of infection over time in a cohort that was initially fully susceptible:

h=1/365
r=1/200
x_t = function(t, h, r){
  (1-exp(-(h+r)*t))*h/(h+r) 
}
bar_x = h/(h+r)
tt = seq(0, 730, by=5)
plot(tt, x_t(tt, h, r), type = "l", ylim = c(0,1),
     ylab = expression(x(t)), 
     xlab = expression(t)) 

segments(0, bar_x, 730, bar_x, lty = 2)

SimBA

We can also solve the model numerically. This implements the same model using SimBA

library(ramp.xds)
Xo = list(b=1,r=1/200, I=0)
mod <- xds_setup_eir(eir=1/365, Xname = "SIS", XHoptions = Xo)
mod <- xds_solve(mod, Tmax=730, dt=5)
xds_plot_PR(mod)
lines(tt, x_t(tt, h, r), lty=3, col = "yellow")

One advantage of the numerical approach is that it is not constrained by the need to find closed form solutions. For example, suppose that the FoI has a seasonal pattern:

mod <- last_to_inits(mod)
mod$EIR_obj$season_par <- makepar_F_sin(bottom = 0.1, pw=2)
mod$EIR_obj$F_season <- make_function(mod$EIR_obj$season_par)
show_season(mod)

mod <- xds_solve(mod, Tmax=730, dt=5)
xds_plot_PR(mod)