# Simulate infections using a given trajectory of the time-varying reproduction number

Source:`R/simulate_infections.R`

`simulate_infections.Rd`

This function simulates infections using an existing fit to observed cases
but with a modified time-varying reproduction number. This can be used to
explore forecast models or past counterfactuals. Simulations can be run in
parallel using `future::plan`

.

## Usage

```
simulate_infections(
estimates,
R = NULL,
model = NULL,
samples = NULL,
batch_size = 10,
verbose = interactive()
)
```

## Arguments

- estimates
The

`estimates`

element of an`epinow`

run that has been done with output = "fit", or the result of`estimate_infections`

with`return_fit`

set to TRUE.- R
A numeric vector of reproduction numbers; these will overwrite the reproduction numbers contained in

`estimates`

, except elements set to NA. Alternatively accepts a data.frame containing at least`date`

and`value`

(integer) variables and optionally`sample`

. More (or fewer) days than in the original fit can be simulated.- model
A compiled stan model as returned by

`rstan::stan_model`

.- samples
Numeric, number of posterior samples to simulate from. The default is to use all samples in the

`estimates`

input.- batch_size
Numeric, defaults to 10. Size of batches in which to simulate. May decrease run times due to reduced IO costs but this is still being evaluated. If set to NULL then al simulations are done at once.

- verbose
Logical defaults to

`interactive()`

. Should a progress bar (from`progressr`

) be shown.

## Value

A list of output as returned by `estimate_infections()`

but based on
results from the specified scenario rather than fitting.

## Examples

```
# \donttest{
# set number of cores to use
old_opts <- options()
options(mc.cores = ifelse(interactive(), 4, 1))
# get example case counts
reported_cases <- example_confirmed[1:50]
# set up example generation time
generation_time <- get_generation_time(
disease = "SARS-CoV-2", source = "ganyani"
)
# set delays between infection and case report
incubation_period <- get_incubation_period(
disease = "SARS-CoV-2", source = "lauer"
)
reporting_delay <- dist_spec(
mean = convert_to_logmean(2, 1), mean_sd = 0.1,
sd = convert_to_logsd(2, 1), sd_sd = 0.1, max = 15
)
# fit model to data to recover Rt estimates
est <- estimate_infections(reported_cases,
generation_time = generation_time_opts(generation_time),
delays = delay_opts(incubation_period + reporting_delay),
rt = rt_opts(prior = list(mean = 2, sd = 0.1), rw = 7),
stan = stan_opts(control = list(adapt_delta = 0.9)),
obs = obs_opts(scale = list(mean = 0.1, sd = 0.01)),
gp = NULL, horizon = 0
)
# update Rt trajectory and simulate new infections using it
R <- c(rep(NA_real_, 26), rep(0.5, 10), rep(0.8, 7))
sims <- simulate_infections(est, R)
#> Warning: number of items to replace is not a multiple of replacement length
plot(sims)
# with a data.frame input of samples
R_dt <- data.frame(
date = seq(
min(summary(est, type = "parameters", param = "R")$date),
by = "day", length.out = length(R)
),
value = R
)
sims <- simulate_infections(est, R_dt)
#> Warning: number of items to replace is not a multiple of replacement length
plot(sims)
#' # with a data.frame input of samples
R_samples <- summary(est, type = "samples", param = "R")
R_samples <- R_samples[,
.(date, sample, value)][sample <= 1000][date <= "2020-04-10"
]
R_samples <- R_samples[date >= "2020-04-01", value := 1.1]
sims <- simulate_infections(est, R_samples)
plot(sims)
options(old_opts)
# }
```