Events include symptom onset, admission, death, test sampling, test processing
Usage
sim_apply_delay(
df,
...,
fn_p_symptomatic = ~0.5,
fn_p_admitted = ~0.1,
fn_p_died = ~0.05,
fn_p_tested = ~0.8,
seed = Sys.time()
)
Arguments
- df
a line list dataframe arising from e.g.
sim_branching_process()
- ...
Named arguments passed on to
sim_apply_delay.linelist
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 ofdf
are also available as well as thesymptomatic
,died
,andadmitted
flags. The function must be vectorised on its inputs (and consume additional inputs with...
). Apurrr
style 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_time
rather than time of infection. This is the time from sampling to the result being available.
Named arguments passed on to
sim_apply_delay.count_data
fn_symptom_profile,fn_admission_profile,fn_death_profile
a 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_profile
a function that takes time and returns the probability density of test sample being taken over time since symptoms.
fn_result_profile
a 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
purrr
style lambda is OK (e.g.~ 1
for 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...
)- seed
RNG seed for reproducibility
Value
Depends on input, either:
a wide format line list with additional
XX
,XX_time
andXX_delay
columns, for each of the set of statistics generated.a long format set of counts of different statistics i.e.
infections
,symptoms
,admission
,death
,sample
(tests taken),results
(test results) .
Examples
tmp = sim_branching_process(
changes = tibble::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: 42,202
#> Columns: 20
#> $ 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, TRUE, FALSE, FALSE, TRUE, TRUE,…
#> $ symptom_delay <dbl> NA, 1.4145076, 3.7457009, 1.5959996, NA, NA, 8.121…
#> $ symptom_time <time_prd> NA, 1.4145076, 3.7457009, 1.5959996, NA, NA, …
#> $ admitted <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FAL…
#> $ admitted_delay <dbl> NA, NA, NA, 4.233242, NA, NA, 13.278138, NA, NA, N…
#> $ admitted_time <time_prd> NA, NA, NA, 4.233242, NA, NA, 13.278138, NA, …
#> $ death <lgl> FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FA…
#> $ death_delay <dbl> NA, NA, NA, 7.931225, NA, NA, NA, NA, NA, NA, NA, …
#> $ death_time <time_prd> NA, NA, NA, 7.931225, NA, NA, NA, NA, NA, NA,…
#> $ tested <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
#> $ sample_delay <dbl> 2.3550527, 4.2549255, 0.3404628, 3.1655928, 1.6074…
#> $ sample_time <time_prd> 2.3550527, 4.2549255, 0.3404628, 3.1655928, 1…
#> $ result <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TR…
#> $ result_delay <dbl> 2.5151891, 4.6165771, 0.4029820, 3.4785471, 1.7402…
#> $ result_time <time_prd> 4.8702418, 8.8715026, 0.7434448, 6.6441399, 3…