
Augment a line list of infection with a set of events
Source:R/simulation-utils.R
sim_apply_delay.linelist.RdEvents include symptom onset, admission, death, test sampling, test processing
Usage
sim_apply_delay.linelist(
df = i_sim_linelist,
...,
fn_p_symptomatic = ~0.5,
fn_symptom_delay = ~rgamma2(.x, mean = 5),
fn_p_admitted = ~0.1,
fn_admission_delay = cfg_weekly_gamma_rng(c(8, 8, 8, 8, 8, 9.5, 9)),
fn_p_died = ~0.05,
fn_death_delay = ~rgamma2(.x, mean = 14),
fn_p_tested = ~0.8,
fn_sample_delay = cfg_weekly_gamma_rng(c(1, 1, 1, 1, 1, 1.5, 1.4)),
fn_result_delay = cfg_weekly_gamma_rng(c(1, 1, 1, 1, 1, 1.6, 1.5)),
seed = Sys.time()
)Arguments
- df
a line list dataframe arising from e.g.
sim_branching_process()- a dataframe with columns:id (unique_id) - Patient level unique id
time (ggoutbreak::time_period) - Time of infection. A `time_period`
Any grouping allowed.
- ...
Named arguments passed on to
sim_apply_delay.linelistfn_symptom_delay,fn_admission_delay,fn_death_delaya function that calculates the time to event onset from infection. This will be called with a vector of infection times as the first parameter (
time) but all other columns ofdfare also available as well as thesymptomatic,died,andadmittedflags. The function must be vectorised on its inputs (and consume additional inputs with...). Apurrrstyle lambda is OK e.g.~ stats::rgamma(.x, shape = 3), and the first parameter will be infection time. if you have an discrete probability profile for this then you can usecfg_ip_sampler_rng(ip_symptoms).fn_sample_delayThis function returns the time from either symptom onset (symptomatic) or from infection (asymptomatic) until a sample is taken. (N.B. this might be better to do a screening test probability plus screening test frequency rather than overloading this.)
fn_result_delayIdentical to other functions except the first parameter will be
sample_timerather than time of infection. This is the time from sampling to the result being available.
Named arguments passed on to
sim_apply_delay.count_datafn_symptom_profile,fn_admission_profile,fn_death_profilea function that takes time and returns the probability density of symptoms, admissions, or deaths over time since infection (i.e.
tau) as an ip delay distribution. If possible it is a very good idea to pre-compute these distributions as they need to be assigned to every line in the input and this can be very slow.fn_sample_profilea function that takes time and returns the probability density of test sample being taken over time since symptoms.
fn_result_profilea function that takes time and returns the probability density of test result being available over time since test sampling.
- fn_p_symptomatic, fn_p_admitted, fn_p_died, fn_p_tested
Function that returns a probability between 0 and 1 for each row of the input dataframe. A
purrrstyle lambda is OK (e.g.~ 1for always true) the first parameter of this will be time of infection. The function must be vectorised on its inputs (and consume additional inputs with...)- fn_symptom_delay, fn_admission_delay, fn_death_delay,
a function that calculates the time to event onset from infection. This will be called with a vector of infection times as the first parameter (
time) but all other columns ofdfare also available as well as thesymptomatic,died,andadmittedflags. The function must be vectorised on its inputs (and consume additional inputs with...). Apurrrstyle lambda is OK e.g.~ stats::rgamma(.x, shape = 3), and the first parameter will be infection time. if you have an discrete probability profile for this then you can usecfg_ip_sampler_rng(ip_symptoms).- fn_sample_delay
This function returns the time from either symptom onset (symptomatic) or from infection (asymptomatic) until a sample is taken. (N.B. this might be better to do a screening test probability plus screening test frequency rather than overloading this.)
- fn_result_delay
Identical to other functions except the first parameter will be
sample_timerather than time of infection. This is the time from sampling to the result being available.- seed
RNG seed for reproducibility
Examples
tmp = sim_branching_process(
changes = dplyr::tibble(t = c(0,20,40,60,80,110), R = c(1.8,1.5,0.9,1.5,0.8,1.2)),
max_time = 120,
seed = 100
)
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> .
#> complete
tmp2 = tmp %>% sim_apply_delay()
tmp2 %>% dplyr::glimpse()
#> Rows: 37,440
#> Columns: 19
#> $ time <time_prd> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
#> $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,…
#> $ generation_interval <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ infector <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
#> $ generation <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
#> $ symptom <lgl> FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRU…
#> $ symptom_delay <dbl> NA, 5.104935, 4.942697, NA, NA, NA, NA, 9.164180, …
#> $ symptom_time <time_prd> NA, 5.104935, 4.942697, NA, NA, NA, NA, 9.164…
#> $ admitted <lgl> FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FA…
#> $ admitted_delay <dbl> NA, 9.324265, NA, NA, NA, NA, NA, NA, NA, 7.332350…
#> $ admitted_time <time_prd> NA, 9.324265, NA, NA, NA, NA, NA, NA, NA, 7.3…
#> $ death <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F…
#> $ death_delay <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 12.01725, NA, …
#> $ death_time <time_prd> NA, NA, NA, NA, NA, NA, NA, NA, NA, 12.01725,…
#> $ tested <lgl> FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE…
#> $ sample_delay <dbl> NA, 1.1810764, 1.1037197, NA, NA, 2.4924666, NA, 1…
#> $ sample_time <time_prd> NA, 1.1810764, 1.1037197, NA, NA, 2.4924666, …
#> $ result_delay <dbl> NA, 0.5051897, 3.2419648, NA, NA, 1.8982649, NA, 1…
#> $ result_time <time_prd> NA, 1.6862660, 4.3456844, NA, NA, 4.3907314, …