## ----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)