Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
message = FALSE,
warning = FALSE,
dpi = 300
)
## ----setup, class.source = 'fold-hide'----------------------------------------
library(finalsize)
## ----class.source = 'fold-hide'-----------------------------------------------
# Replicate the contact matrix
repmat <- function(X, m, n) {
mx <- dim(X)[1]
nx <- dim(X)[2]
matrix(t(matrix(X, mx, nx * n)), mx * m, nx * n, byrow = TRUE)
}
# Calculate the proportion of individuals infected
final_size_r <- function(r0, contact_matrix,
demography_vector, susceptibility, p_susceptibility) {
# check p_susceptibility
stopifnot(all(rowSums(p_susceptibility) == 1))
p_susc <- as.vector(p_susceptibility)
susc <- as.vector(susceptibility)
demo_v <- rep(demography_vector, ncol(p_susceptibility)) * p_susc
nsteps <- 10000
# epidemiological parameters
h <- 0.1
beta <- r0
gamma <- 1
# initial conditions
I <- 1e-8 * demo_v
S <- demo_v - I
R <- 0
# prepare contact matrix
m <- repmat(contact_matrix, ncol(p_susceptibility), ncol(p_susceptibility))
# multiply contact matrix by susceptibility
m <- m * susc
# iterate over compartmental transitions
for (i in seq_len(nsteps)) {
force <- (m %*% I) * S * h * beta
S <- S - force
g <- I * gamma * h
I <- I + force - g
R <- R + g
}
# return proportion of individuals recovered
as.vector(R / demo_v)
}
## -----------------------------------------------------------------------------
r0 <- 2.0
## -----------------------------------------------------------------------------
# estimated population size for the UK is 67 million
population_size <- 67e6
# estimate using finalsize::final_size
final_size_finalsize <- final_size(
r0 = r0,
contact_matrix = matrix(1) / population_size,
demography_vector = population_size,
susceptibility = matrix(1),
p_susceptibility = matrix(1),
solver = "newton"
)
# estimate from SIR model
final_size_sir <- final_size_r(
r0 = r0,
contact_matrix = 0.99 * matrix(1) / population_size,
demography_vector = population_size,
susceptibility = matrix(1),
p_susceptibility = matrix(1)
)
# View the estimates
final_size_finalsize
final_size_sir
## -----------------------------------------------------------------------------
# function to check error in final size estimates
final_size_error <- function(x, r0, tolerance = 1e-6) {
error <- abs(x - (1.0 - exp(-r0 * x)))
if (any(error > tolerance)) {
print("Final size estimate error is greater than tolerance!")
}
# return error
error
}
## -----------------------------------------------------------------------------
# error for estimate using finalsize::final_size()
final_size_error(final_size_finalsize$p_infected, r0)
# error for estimate from SIR model
final_size_error(final_size_sir, r0)
## ----class.source = 'fold-hide'-----------------------------------------------
# Load example POLYMOD data included with the package
data(polymod_uk)
# Define contact matrix (entry {ij} is contacts in group i
# reported by group j)
contact_matrix <- polymod_uk$contact_matrix
# Define population in each age group
demography_vector <- polymod_uk$demography_vector
## -----------------------------------------------------------------------------
contact_matrix
demography_vector
## -----------------------------------------------------------------------------
# Define susceptibility of each group
susceptibility <- matrix(
data = c(1.0, 0.5, 0.5),
nrow = length(demography_vector),
ncol = 1
)
# Assume uniform susceptibility within age groups
p_susceptibility <- matrix(
data = 1.0,
nrow = length(demography_vector),
ncol = 1
)
## -----------------------------------------------------------------------------
# from {finalsize} using finalsize::final_size
final_size(
r0 = r0,
contact_matrix = contact_matrix,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility,
solver = "newton"
)
# using SIR model
final_size_r(
r0 = r0,
contact_matrix = contact_matrix * 0.99,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility
)
## -----------------------------------------------------------------------------
# Define susceptibility of each group
# Here
susceptibility <- matrix(
c(1.0, 0.1),
nrow = length(demography_vector), ncol = 2,
byrow = TRUE
)
# view the susceptibility matrix
susceptibility
# Assume variation in susceptibility within age groups
# A higher proportion of 0 -- 20s are in the lower susceptibility group
p_susceptibility <- matrix(1, nrow = length(demography_vector), ncol = 2)
p_susceptibility[, 2] <- c(0.6, 0.5, 0.3)
p_susceptibility[, 1] <- 1 - p_susceptibility[, 2]
# view p_susceptibility
p_susceptibility
## -----------------------------------------------------------------------------
# estimate group-specific final sizes using finalsize::final_size
final_size(
r0 = r0,
contact_matrix = contact_matrix,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility
)
# estimate group-specific final sizes from the SIR model
final_size_r(
r0 = r0,
contact_matrix = contact_matrix,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility
)
## -----------------------------------------------------------------------------
# Define susceptibility of each group
susceptibility <- matrix(1, nrow = length(demography_vector), ncol = 2)
susceptibility[, 2] <- 0.0
# view susceptibility
susceptibility
# Assume that some proportion are completely immune
# complete immunity is more common among younger individuals
p_susceptibility <- matrix(1, nrow = length(demography_vector), ncol = 2)
p_susceptibility[, 2] <- c(0.6, 0.5, 0.3)
p_susceptibility[, 1] <- 1 - p_susceptibility[, 2]
# view p_susceptibility
p_susceptibility
## -----------------------------------------------------------------------------
final_size(
r0 = r0,
contact_matrix = contact_matrix,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility
)
final_size_r(
r0 = r0,
contact_matrix = contact_matrix,
demography_vector = demography_vector,
susceptibility = susceptibility,
p_susceptibility = p_susceptibility
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.