Remove all objects from workspace.

r remove (list = objects() ) Load add-on packages - deSolve - contains lsoda function - differential equation solver.

library (deSolve)
## 
## Attaching package: 'deSolve'
## 
## The following object is masked from 'package:graphics':
## 
##     matplot

Function to compute derivatives of the differential equations.

seis_model = function (current_timepoint, state_values, parameters)
{
  # create state variables (local variables)
  S = state_values [1]        # susceptibles
  E = state_values [2]        # exposed
  I = state_values [3]        # infectious
 
  with ( 
    as.list (parameters),     # variable names within parameters can be used 
         {
           # compute derivatives
           dS = (-beta * S * I) + (gamma * I)
           dE = (beta * S * I) - (delta * E)
           dI = (delta * E) - (gamma * I)
           
           # combine results
           results = c (dS, dE, dI)
           list (results)
         }
    )
}

Parameters

contact_rate = 10                     # number of contacts per day
transmission_probability = 0.07       # transmission probability
infectious_period = 5                 # infectious period
latent_period = 3                    # latent period

Compute values of beta (tranmission rate), gamma (recovery rate), and delta (exposion rate)

beta_value = contact_rate * transmission_probability
gamma_value = 1 / infectious_period
delta_value = 1 / latent_period

Compute Ro - Reproductive number.

Ro = beta_value / gamma_value

Disease dynamics parameters.

parameter_list = c (beta = beta_value, gamma = gamma_value, delta = delta_value)

Initial values for sub-populations.

X = 9996        # susceptible hosts
Y = 3        # exposed hosts
Z = 2          # infectious hosts

Compute total population.

N = X + Y + Z 

Initial state values for the differential equations.

initial_values = c (S = X/N, E = Y/N, I = Z/N)

Output timepoints.

timepoints = seq (0, 50, by=1)

Simulate the SEIS epidemic.

output = lsoda (initial_values, timepoints, seis_model, parameter_list)

Plot dynamics of Susceptibles sub-population.

plot (S ~ time, data = output, type='b', col = 'blue')

Plot dynamics of Exposed sub-population.

plot (E ~ time, data = output, type='b', col = 'purple')

Plot dynamics of Infectious sub-population.

plot (I ~ time, data = output, type='b', col = 'red')   

Plot dynamics of Susceptibles, Exposed, and Infectious sub-populations in the same plot.

# susceptible hosts over time
plot (S ~ time, data = output, type='b', ylim = c(0,1), col = 'blue', ylab = 'S, E, I, S', main = 'SEIS epidemic') 

# remain on same frame
par (new = TRUE)    
 
# exposed hosts over time
plot (E ~ time, data = output, type='b', ylim = c(0,1), col = 'purple', ylab = '', axes = FALSE) 

# remain on same frame
par (new = TRUE)  

# infectious hosts over time
plot (I ~ time, data = output, type='b', ylim = c(0,1), col = 'red', ylab = '', axes = FALSE) 

# remain on same frame
par (new = TRUE)  

In the Susceptible Exposed Infectious Susceptible epidemiological model, the numbers of susceptible (blue), infectious (red), and exposed (purple) hosts over time are analyzed, computed, and illustrated. The exposure time (latent period) prolongs the number of infectious hosts. The number of susceptible hosts and number of infectious hosts eventually approach one another as the number of exposed hosts increases.