Skip to contents

Tools are functions that affect how agents react to the virus. They can be used to simulate the effects of vaccination, isolation, and social distancing.

Usage

tool(
  name,
  prevalence,
  as_proportion,
  susceptibility_reduction,
  transmission_reduction,
  recovery_enhancer,
  death_reduction
)

set_name_tool(tool, name)

get_name_tool(tool)

add_tool(model, tool, proportion)

rm_tool(model, tool_pos)

tool_fun_logit(vars, coefs, model)

set_susceptibility_reduction(tool, prob)

set_susceptibility_reduction_ptr(tool, model, param)

set_susceptibility_reduction_fun(tool, model, tfun)

set_transmission_reduction(tool, prob)

set_transmission_reduction_ptr(tool, model, param)

set_transmission_reduction_fun(tool, model, tfun)

set_recovery_enhancer(tool, prob)

set_recovery_enhancer_ptr(tool, model, param)

set_recovery_enhancer_fun(tool, model, tfun)

set_death_reduction(tool, prob)

set_death_reduction_ptr(tool, model, param)

set_death_reduction_fun(tool, model, tfun)

# S3 method for class 'epiworld_agents_tools'
print(x, max_print = 10, ...)

set_distribution_tool(tool, distfun)

distribute_tool_randomly(prevalence, as_proportion)

distribute_tool_to_set(agents_ids)

Arguments

name

Name of the tool

prevalence

Numeric scalar. Prevalence of the tool.

as_proportion

Logical scalar. If TRUE, prevalence is interpreted as a proportion of the total number of agents in the model.

susceptibility_reduction

Numeric. Proportion it reduces susceptibility.

transmission_reduction

Numeric. Proportion it reduces transmission.

recovery_enhancer

Numeric. Proportion it improves recovery.

death_reduction

Numeric. Proportion it reduces probability of death.e

tool

An object of class epiworld_tool

model

Model

proportion

Deprecated.

tool_pos

Positive integer. Index of the tool's position in the model.

vars

Integer vector. Indices (starting from 0) of the positions of the variables used to compute the logit probability.

coefs

Numeric vector. Of the same length of vars, is a vector of coefficients associated to the logit probability.

prob

Numeric scalar. A probability (between zero and one).

param

Character scalar. Name of the parameter featured in model that will be added to the tool (see details).

tfun

An object of class epiworld_tool_fun.

x

An object of class epiworld_agents_tools.

max_print

Numeric scalar. Maximum number of tools to print.

...

Currently ignored.

distfun

An object of class epiworld_tool_distfun.

agents_ids

Integer vector. Indices of the agents to which the tool will be assigned.

Value

  • The tool function creates a tool of class epiworld_tool.

  • The set_name_tool function assigns a name to the tool of class epiworld_tool and returns the tool.

  • The get_name_tool function returns the name of the tool of class epiworld_tool.

  • The rm_tool function removes the specified tool from a model.

  • The set_susceptibility_reduction function assigns a probability reduction to the specified tool of class epiworld_tool.

  • The set_transmission_reduction function assigns a probability reduction to the specified tool of class epiworld_tool.

  • The set_recovery_enhancer function assigns a probability increase to the specified tool of class epiworld_tool.

  • The set_death_reduction function assigns a probability decrease to the specified tool of class epiworld_tool.

  • The distribute_tool_randomly function returns a distribution function of class epiworld_tool_distfun.

  • The distribute_tool_to_set function returns a distribution function of class epiworld_tool_distfun.

Details

The name of the epiworld_tool object can be manipulated with the functions set_name_tool() and get_name_tool().

The add_tool function adds the specified tool to the model of class epiworld_model with specified proportion.

In the case of set_susceptibility_reduction_ptr, set_transmission_reduction_ptr, set_recovery_enhancer, and set_death_reduction_ptr, the corresponding parameters are passed as a pointer to the tool. The implication of using pointers is that the values will be read directly from the model object, so changes will be reflected.

The set_distribution_tool function assigns a distribution function to the specified tool of class epiworld_tool. The distribution function can be created using the functions distribute_tool_randomly() and distribute_tool_to_set().

The distribute_tool_randomly function creates a distribution function that randomly assigns the tool to a proportion of the population.

The distribute_tool_to_set function creates a distribution function that assigns the tool to a set of agents.

Examples

# Simple model
model_sirconn <- ModelSIRCONN(
  name                = "COVID-19",
  n                   = 10000,
  prevalence          = 0.01,
  contact_rate        = 5,
  transmission_rate   = 0.4,
  recovery_rate       = 0.95
)

# Running and printing
run(model_sirconn, ndays = 100, seed = 1912)
#> _________________________________________________________________________
#> Running the model...
#> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#>  done.
plot(model_sirconn)


epitool <- tool(
  name = "Vaccine",
  prevalence = 0.5,
  as_proportion = TRUE,
  susceptibility_reduction = .9,
  transmission_reduction = .5,
  recovery_enhancer = .5, 
  death_reduction = .9
)

epitool
#> Tool       : Vaccine
#> Id         : (empty)
#> state_init : -99
#> state_post : -99
#> queue_init : 0
#> queue_post : 0

set_name_tool(epitool, 'Pfizer') # Assigning name to the tool
get_name_tool(epitool) # Returning the name of the tool
#> [1] "Pfizer"
add_tool(model_sirconn, epitool)
run(model_sirconn, ndays = 100, seed = 1912)
#> _________________________________________________________________________
#> Running the model...
#> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#>  done.
model_sirconn
#> ________________________________________________________________________________
#> Susceptible-Infected-Removed (SIR) (connected)
#> It features 10000 agents, 1 virus(es), and 1 tool(s).
#> The model has 3 states.
#> The final distribution is: 8546 Susceptible, 0 Infected, and 1454 Recovered.
plot(model_sirconn)


# To declare a certain number of individuals with the tool
rm_tool(model_sirconn, 0) # Removing epitool from the model
# Setting prevalence to 0.1
set_distribution_tool(epitool, distribute_tool_randomly(0.1, TRUE))
add_tool(model_sirconn, epitool)
run(model_sirconn, ndays = 100, seed = 1912)
#> _________________________________________________________________________
#> Running the model...
#> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#>  done.

# Adjusting probabilities due to tool
set_susceptibility_reduction(epitool, 0.1) # Susceptibility reduction 
#> Tool       : Pfizer
#> Id         : 0
#> state_init : -99
#> state_post : -99
#> queue_init : 0
#> queue_post : 0
set_transmission_reduction(epitool, 0.2) # Transmission reduction
set_recovery_enhancer(epitool, 0.15) # Probability increase of recovery
set_death_reduction(epitool, 0.05) # Probability reduction of death

rm_tool(model_sirconn, 0) 
add_tool(model_sirconn, epitool)
run(model_sirconn, ndays = 100, seed = 1912) # Run model to view changes
#> _________________________________________________________________________
#> Running the model...
#> ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#>  done.


# Using the logit function --------------
sir <- ModelSIR(
  name = "COVID-19", prevalence = 0.01, 
  transmission_rate = 0.9, recovery_rate = 0.1
  )

# Adding a small world population
agents_smallworld(
  sir,
  n = 10000,
  k = 5,
  d = FALSE,
  p = .01
)

# Creating a tool
mask_wearing <- tool(
  name = "Mask",
  prevalence               = 0.5,
  as_proportion            = TRUE,
  susceptibility_reduction = 0.0,
  transmission_reduction   = 0.3, # Only transmission
  recovery_enhancer        = 0.0,
  death_reduction          = 0.0
)

add_tool(sir, mask_wearing)

run(sir, ndays = 50, seed = 11)
#> _________________________________________________________________________
#> |Running the model...
#> |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#> | done.
hist_0 <- get_hist_total(sir)

# And adding features
dat <- cbind(
  female = sample.int(2, 10000, replace = TRUE) - 1,
  x      = rnorm(10000)
)

set_agents_data(sir, dat)

# Creating the logit function
tfun <- tool_fun_logit(
  vars  = c(0L, 1L),
  coefs = c(-1, 1),
  model = sir
)

# The infection prob is lower
hist(plogis(dat %*% rbind(.5,1)))


tfun # printing
#> An epiworld_tool_function object.
#> (model: Susceptible-Infected-Recovered (SIR))
#> This function was built using -tool_fun_logit()-. and it features the following coefficients:
#>   0: -1.00
#>   1:  1.00 


set_susceptibility_reduction_fun(
  tool  = get_tool(sir, 0),
  model = sir,
  tfun  = tfun
  )
  
run(sir, ndays = 50, seed = 11)
#> _________________________________________________________________________
#> |Running the model...
#> |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| done.
#> | done.
hist_1 <- get_hist_total(sir)

op <- par(mfrow = c(1, 2))
plot(hist_0); abline(v = 30)
plot(hist_1); abline(v = 30)

par(op)