The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This package contains two functions useful to compute the incubation
period distribution from outbreak data. The inputs needed for each
patient are given as a data.frame
or linelist
object and must contain:
The function empirical_incubation_dist()
computes the
discrete probability distribution by giving equal weight to each
patient. Thus, in the case of N
patients, the
n
possible exposure dates of a given patient get the
overall weight 1/(n*N)
. The function returns a data frame
with column incubation_period
containing the different
incubation periods with a time step of one day and their
relative_frequency
.
The function fit_gamma_incubation_dist()
takes the same
inputs, but directly samples from the empirical distribution and fits a
discrete gamma distribution to it by the means of
fit_disc_gamma
.
Load environment:
Make a linelist object containing toy data with several possible exposure dates for each case:
ll <- sim_linelist(15)
x <- 0:15
y <- distcrete("gamma", 1, shape = 12, rate = 3, w = 0)$d(x)
mkexposures <- function(i) {
i - sample(x, size = sample.int(5, size = 1), replace = FALSE, prob = y)
}
exposures <- sapply(ll$date_of_onset, mkexposures)
ll$dates_exposure <- exposures
print(ll)
#> id date_of_onset date_of_report gender outcome
#> 1 1 2020-01-23 2020-02-01 male recovery
#> 2 2 2020-02-14 2020-02-18 male death
#> 3 3 2020-01-25 2020-01-29 female recovery
#> 4 4 2020-01-16 2020-01-30 male recovery
#> 5 5 2020-01-22 2020-01-28 male death
#> 6 6 2020-01-26 2020-01-31 male recovery
#> 7 7 2020-02-09 2020-02-16 female recovery
#> 8 8 2020-02-17 2020-02-24 female recovery
#> 9 9 2020-01-14 2020-01-20 male recovery
#> 10 10 2020-02-22 2020-03-12 male recovery
#> 11 11 2020-02-26 2020-03-04 male recovery
#> 12 12 2020-01-06 2020-01-10 male recovery
#> 13 13 2020-02-23 2020-02-29 female recovery
#> 14 14 2020-01-08 2020-01-16 female recovery
#> 15 15 2020-01-21 2020-01-26 male recovery
#> dates_exposure
#> 1 18281, 18280
#> 2 18303, 18305
#> 3 18282
#> 4 18274, 18273, 18275, 18272, 18271
#> 5 18279
#> 6 18281
#> 7 18297, 18298
#> 8 18306, 18304, 18305, 18307
#> 9 18270, 18272
#> 10 18308, 18311, 18310, 18313, 18312
#> 11 18315, 18316, 18314, 18317, 18313
#> 12 18264, 18263, 18265, 18262
#> 13 18313, 18312, 18310, 18309
#> 14 18264, 18265, 18266
#> 15 18279, 18277, 18280, 18278
Empirical distribution:
incubation_period_dist <- empirical_incubation_dist(ll, date_of_onset, dates_exposure)
print(incubation_period_dist)
#> # A tibble: 7 × 2
#> incubation_period relative_frequency
#> <dbl> <dbl>
#> 1 0 0
#> 2 1 0.06
#> 3 2 0.107
#> 4 3 0.262
#> 5 4 0.312
#> 6 5 0.149
#> 7 6 0.11
ggplot(incubation_period_dist, aes(incubation_period, relative_frequency)) +
geom_col()
Fit discrete gamma:
fit <- fit_gamma_incubation_dist(ll, date_of_onset, dates_exposure)
print(fit)
#> $mu
#> [1] 4.229868
#>
#> $cv
#> [1] 0.32265
#>
#> $sd
#> [1] 1.364767
#>
#> $ll
#> [1] -1729.577
#>
#> $converged
#> [1] TRUE
#>
#> $distribution
#> A discrete distribution
#> name: gamma
#> parameters:
#> shape: 9.60586714704713
#> scale: 0.440342153837883
x = c(0:10)
y = fit$distribution$d(x)
ggplot(data.frame(x = x, y = y), aes(x, y)) +
geom_col(data = incubation_period_dist, aes(incubation_period, relative_frequency)) +
geom_point(stat="identity", col = "red", size = 3) +
geom_line(stat="identity", col = "red")
Note that if the possible exposure dates are
consecutive for all patients then
empirical_incubation_dist()
and
fit_gamma_incubation_dist()
can take date ranges as inputs
instead of lists of individual exposure dates (see help for
details).
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.