## ----pressure, echo=FALSE, fig.align="left", fig.cap="**Figure 1.** Illustration of movements between nodes. Each time step depicts movements during one time unit, for example, a day. The network has *N=4* nodes where node *1* is infected and nodes *2*--*4* are non-infected. Arrows indicate movements of individuals from a source node to a destination node and labels denote the size of the shipment. Here, infection may spread from node *1* to node *3* at *t=2* and then from node *3* to node *2* at *t=3*.", out.width = '100%'----
url <- paste0(
  "https://raw.githubusercontent.com/",
  "stewid/SimInf/refs/heads/main/vignettes/img/temporal-network.svg")
knitr::include_graphics(url)

## -------------------------------------------------------------------
library(SimInf)

## ----eval = TRUE, echo = TRUE, message = FALSE----------------------
events <- data.frame(
  event      = rep("extTrans", 6),  ## Event "extTrans" is
                                    ##  a movement between nodes
  time       = c(1, 1, 2, 2, 3, 3), ## The time that the event happens
  node       = c(3, 3, 1, 4, 3, 4), ## In which node does the event occur
  dest       = c(4, 2, 3, 3, 2, 2), ## Which node is the destination node
  n          = c(9, 2, 8, 3, 5, 4), ## How many individuals are moved
  proportion = c(0, 0, 0, 0, 0, 0), ## This is not used when n > 0
  select     = c(4, 4, 4, 4, 4, 4), ## Use the 4th column in
                                    ## the model select matrix
  shift      = c(0, 0, 0, 0, 0, 0)  ## Not used in this example
)

## -------------------------------------------------------------------
events

## -------------------------------------------------------------------
u0 <- data.frame(
  S = c(10, 15, 20, 25),
  I = c(5,  0,  0,  0),
  R = c(0,  0,  0,  0)
)

## -------------------------------------------------------------------
model <- SIR(
  u0 = u0,
  tspan = 0:3,
  beta = 0,
  gamma = 0,
  events = events
)

## -------------------------------------------------------------------
select_matrix(model)

## -------------------------------------------------------------------
set.seed(1)
set_num_threads(1)
result <- run(model)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 2.** Number of susceptible, infected and recovered individuals in each node."----
plot(result, range = FALSE)

## -------------------------------------------------------------------
trajectory(result)

## -------------------------------------------------------------------
u0 <- data.frame(
  S = c(100, 0),
  I = c(100, 0),
  R = c(100, 0)
)

events <- data.frame(
  event      = rep("extTrans", 300), ## "extTrans" is a movement between nodes
  time       = 1:300,                ## The time that the event happens
  node       = rep(1, 300),          ## In which node does the event occur
  dest       = rep(2, 300),          ## Which node is the destination node
  n          = rep(1, 300),          ## How many individuals are moved
  proportion = rep(0, 300),          ## This is not used when n > 0
  select     = rep(4, 300),          ## Use the 4th column in the select matrix
  shift      = rep(0, 300)           ## Not used in this example
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 3.** The individuals have an equal probability of being selected regardless of compartment."----
model <- SIR(
  u0 = u0,
  tspan = 1:300,
  events = events,
  beta = 0,
  gamma = 0
)

plot(run(model), index = 2)

## -------------------------------------------------------------------
select_matrix(model) <- data.frame(
  compartment = c("S", "I", "R"),
  select      = c(4, 4, 4),
  value       = c(1, 2, 1)
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 4.** The individuals in the $I$ compartment are more likely of being selected for a movement event."----
plot(run(model), index = 2)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 5.** The individuals in the $I$ compartment are even more likely of being selected for a movement event compared to the previous example."----
select_matrix(model) <- data.frame(
  compartment = c("S", "I", "R"),
  select      = c(4, 4, 4),
  value       = c(1, 10, 1)
)

plot(run(model), index = 2)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 6.** The individuals in the $I$ and $R$ compartments are more likely of being selected for a movement event compared to individuals in the $S$ compartment."----
select_matrix(model) <- data.frame(
  compartment = c("S", "I", "R"),
  select      = c(4, 4, 4),
  value       = c(1, 10, 4)
)

plot(run(model), index = 2)

## -------------------------------------------------------------------
u0 <- data.frame(
  S = 20,
  I = 10,
  R = 0
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 7.** The number of susceptible ($S$) individuals increases by 10 individuals at each scheduled event."----
events <- data.frame(
  event      = rep("enter", 3), ## "enter" add new individuals to a node
  time       = c(5, 10, 15),    ## The time that the event happens
  node       = c(1, 1, 1),      ## In which node does the event occur
  dest       = c(0, 0, 0),      ## Not used for enter events
  n          = c(10, 10, 10),   ## How many individuals are added
  proportion = c(0, 0, 0),      ## Not used when n > 0
  select     = c(1, 1, 1),      ## Target the S compartment
  shift      = c(0, 0, 0)       ## Not used in this example
)

model <- SIR(
  u0 = u0,
  tspan = 0:20,
  events = events,
  beta = 0,
  gamma = 0
)

plot(run(model))

## -------------------------------------------------------------------
u0 <- data.frame(
  S = 20,
  I = 10,
  R = 0
)

## -------------------------------------------------------------------
events <- data.frame(
  event      = rep("enter", 300), ## "enter" add new individuals to a node
  time       = 1:300,             ## The time that the event happens
  node       = rep(1, 300),       ## In which node does the event occur
  dest       = rep(0, 300),       ## Not used for enter events
  n          = rep(1, 300),       ## How many individuals are added
  proportion = rep(0, 300),       ## Not used when n > 0
  select     = rep(1, 300),       ## Target the S and R compartments
                                  ## (after modifying E)
  shift      = rep(0, 300)        ## Not used in this example
)

model <- SIR(
  u0 = u0,
  tspan = 0:300,
  events = events,
  beta = 0,
  gamma = 0
)

## -------------------------------------------------------------------
select_matrix(model) <- data.frame(
  compartment = c("S", "R"),
  select      = c(1, 1),
  value       = c(1, 1)
)

## -------------------------------------------------------------------
select_matrix(model)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 8.** The number of susceptible ($S$) and recovered ($R) individuals increases over time."----
plot(run(model))

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 9.** Individuals are more likely to enter as susceptible ($S$) compared to as recovered ($R$)"----
select_matrix(model) <- data.frame(
  compartment = c("S", "R"),
  select      = c(1, 1),
  value       = c(2, 1)
)

plot(run(model))

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 10.** The number of susceptible ($S$) individuals decreases by 5 individuals at each scheduled event."----
u0 <- data.frame(
  S = 20,
  I = 10,
  R = 0
)

events <- data.frame(
  event      = rep("exit", 3),  ## "exit" remove individuals from a node
  time       = c(5, 10, 15),    ## The time that the event happens
  node       = c(1, 1, 1),      ## In which node does the event occur
  dest       = c(0, 0, 0),      ## Not used for exit events
  n          = c(5, 5, 5),      ## How many individuals are removed
  proportion = c(0, 0, 0),      ## Not used when n > 0
  select     = c(1, 1, 1),      ## Target the S compartment
  shift      = c(0, 0, 0)       ## Not used in this example
)

model <- SIR(
  u0 = u0,
  tspan = 0:20,
  events = events,
  beta = 0,
  gamma = 0
)

plot(run(model))

## -------------------------------------------------------------------
u0 <- data.frame(
  S = 100,
  I = 100,
  R = 0
)

events <- data.frame(
  event      = rep("exit", 100), ## "exit" remove individuals from a node
  time       = 1:100,            ## The time that the event happens
  node       = rep(1, 100),      ## In which node does the event occur
  dest       = rep(0, 100),      ## Not used for exit events
  n          = rep(1, 100),      ## How many individuals are removed
  proportion = rep(0, 100),      ## Not used when n > 0
  select     = rep(1, 100),      ## Target the S and I compartments
                                 ## (after modifying E)
  shift      = rep(0, 100)       ## Not used in this example
)

model <- SIR(
  u0 = u0,
  tspan = 0:100,
  events = events,
  beta = 0,
  gamma = 0
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 11.** The number of infected ($I$) individuals decreases faster compared to susceptibles ($S$)."----
select_matrix(model) <- data.frame(
  compartment = c("S", "I"),
  select      = c(1, 1),
  value       = c(1, 5)
)

plot(run(model))

## -------------------------------------------------------------------
u0 <- data.frame(
  S = 100,
  I = 10,
  R = 0
)

## -------------------------------------------------------------------
events <- data.frame(
  event      = "intTrans", ## "intTrans" move individuals within a node
  time       = 10,         ## The time that the event happens
  node       = 1,          ## In which node does the event occur
  dest       = 0,          ## Not used for intTrans events
  n          = 30,         ## How many individuals are vaccinated
  proportion = 0,          ## Not used when n > 0
  select     = 1,          ## Target the S compartment
  shift      = 1           ## Use shift column 1 (after modifying N)
)

model <- SIR(
  u0 = u0,
  tspan = 0:20,
  events = events,
  beta = 0,
  gamma = 0
)

## -------------------------------------------------------------------
shift_matrix(model) <- data.frame(
  compartment = "S",
  shift = 1,
  value = 2
)

## -------------------------------------------------------------------
shift_matrix(model)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 12.** The number of recovered ($R$) individuals increases at $t=10$."----
plot(run(model))

## -------------------------------------------------------------------
u0 <- data.frame(
  S = 20,
  I = 15,
  R = 10
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 13.** The number of individuals decrease at $t=10$."----
events <- data.frame(
  event      = "exit", ## "exit" remove individuals from a node
  time       = 10,     ## The time that the event happens
  node       = 1,      ## In which node does the event occur
  dest       = 0,      ## Not used for exit events
  n          = 0,      ## n = 0 triggers proportion sampling
  proportion = 0.2,    ## Remove 20% of selected individuals
  select     = 4,      ## Target all compartments
  shift      = 0       ## Not used in this example
)

model <- SIR(
  u0 = u0,
  tspan = 0:20,
  events = events,
  beta = 0,
  gamma = 0
)

plot(run(model))

## -------------------------------------------------------------------
u0 <- data.frame(
  S = c(20, 30),
  I = c(15, 25),
  R = c(10, 5)
)

## ----fig.width=7, fig.height=4, fig.align="left", fig.cap="**Figure 14.** Multiple events have been processed at $t=5$."----
events <- data.frame(
  event      = c("exit", "enter", "intTrans", "extTrans"),
  time       = c(5, 5, 5, 5),
  node       = c(1, 1, 1, 1),
  dest       = c(0, 0, 0, 2),
  n          = c(10, 20, 5, 15),
  proportion = c(0, 0, 0, 0),
  select     = c(4, 1, 1, 4),
  shift      = c(0, 0, 1, 0)
)

model <- SIR(
  u0 = u0,
  tspan = 0:10,
  events = events,
  beta = 0,
  gamma = 0
)

shift_matrix(model) <- data.frame(
  compartment = "S",
  shift = 1,
  value = 2
)

plot(run(model), range = FALSE)

