Remove all objects from workspace.
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
creat equations
sis_model = function (current_timepoint, state_values, parameters)
{
# create state variables (local variables)
Sm = state_values [1] # susceptibles men
Im = state_values [2] # infectious men
Sw = state_values [3] # susceptibles women
Iw = state_values [4] # infectious women
with (
as.list (parameters), # variable names within parameters can be used
{ # compute derivatives
dSm = (-beta_mw * Sm * Iw) + (gamma * Im)
dIm = ( beta_mw * Sm * Iw) - (gamma * Im)
dSw = (-beta_wm * Sw * Im) + (gamma * Iw)
dIw = ( beta_wm * Sw * Im) - (gamma * Iw)
# combine results
results = c (dSm, dIm, dSw, dIw)
list (results)
}
)
}
Parameters
contact_rate_men_acquirefrom_women = 50 # number of contacts per year
contact_rate_women_acquirefrom_men = 50 # number of contacts per year
transmission_probability_men_from_women = 0.05 # transmission probability
transmission_probability_women_from_men = 0.1 # transmission probability
infectious_period = 1 # infectious period (year)
Compute values of beta (tranmission rate) and gamma (recovery rate).
beta_mw_value = contact_rate_men_acquirefrom_women * transmission_probability_men_from_women
beta_wm_value = contact_rate_women_acquirefrom_men * transmission_probability_women_from_men
gamma_value = 1 / infectious_period
Compute Ro - Reproductive number.
Ro.m = beta_mw_value / gamma_value
Ro.W = beta_wm_value / gamma_value
Disease dynamics parameters.
parameter_list = c (beta_mw = beta_mw_value, beta_wm = beta_wm_value ,gamma = gamma_value)
Initial values for sub-populations.
A = 10000 # susceptible men
B = 11000 # susceptible women
C = 1 # infectious men
D = 1 # infectious women
Compute total population.
N = A+B+C+D
Initial state values for the differential equations.
initial_values = c (Sm = A/N, Im = C/N, Sw = B/N, Iw = D/N )
Output timepoints.
timepoints = seq (0, 10 , by = 0.5)
Simulate the SIS epidemic.
output = lsoda (initial_values, timepoints, sis_model, parameter_list)
Plot dynamics of Susceptibles sub-population.
plot (Sm ~ time, data = output, type='b', col = 'blue')
Plot dynamics of Infectious sub-population.
plot (Im ~ time, data = output, type='b', col = 'red')
Plot dynamics of Susceptibles sub-population.
plot (Sw ~ time, data = output, type='b', col = 'purple')
Plot dynamics of Infectious sub-population.
plot (Iw ~ time, data = output, type='b', col = 'green')
Plot dynamics of Susceptibles and infectious sub-populations in the same plot.
# susceptible men over time
plot (Sm ~ time, data = output, type='b', ylim = c(-0.2,0.8), col = 'blue', ylab = 'S, I, S', main = 'SIS Heterogeneous')
text(5,0.4, "Sm", col = 'blue')
# remain on same frame
par (new = TRUE)
# susceptible women over time
plot (Sw ~ time, data = output, type='b', ylim = c(-0.2,0.8), col = 'purple', ylab = '', axes = FALSE)
text(5,0.6, "Sw", col = 'purple')
# remain on same frame
par (new = TRUE)
# infectious men over time
plot (Im ~ time, data = output, type='b', ylim = c(-0.2,0.8), pch = 18, col = 'red', ylab = '', axes = FALSE)
text(4,0.05, "Im", col = 'red')
# remain on same frame
par (new = TRUE)
# infectious women over time
plot (Iw ~ time, data = output, type='b', ylim = c(-0.2,0.8), col = 'green', ylab = '', axes = FALSE)
text(4,-0.05, "Iw", col = 'green')
Description: SIS heterogeneous model is used to describe a hetero sexaully transmitted infection. The model has two compartments (S and I) of each sex (male and female). All equations of each sex must be combined for construct this model.