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.
{superspreading}
is an R package that provides a set of
functions to estimate and understand individual-level variation the in
transmission of infectious diseases from data on secondary cases.
{superspreading}
implements methods outlined in
Lloyd-Smith et al. (2005),
Adam J. Kucharski et al. (2020), and Kremer
et al. (2021), as
well as additional functions.
{superspreading}
is developed at the Centre
for the Mathematical Modelling of Infectious Diseases at the London School of Hygiene and Tropical
Medicine as part of Epiverse-TRACE.
The package can be installed from CRAN using
install.packages("superspreading")
The easiest way to install the development version of
{superspreading}
from GitHub is to use the {pak}
package:
# check whether {pak} is installed
if(!require("pak")) install.packages("pak")
::pak("epiverse-trace/superspreading") pak
Alternatively, install pre-compiled binaries from the Epiverse TRACE R-universe
install.packages("superspreading", repos = c("https://epiverse-trace.r-universe.dev", "https://cloud.r-project.org"))
library(superspreading)
Case study using data from early Ebola outbreak in Guinea in 2014, stratified by index and non-index cases, as in Adam J. Kucharski et al. (2016). Data on transmission from index and secondary cases for Ebola in 2014.
Source: Faye et al. (2015) & Althaus (2015).
{fitdistrplus}
is a well-developed and stable R package that provides a variety of
methods for fitting distribution models to data (Delignette-Muller
and Dutang 2015). Therefore, it is used throughout the documentation
of {superspreading}
and is a recommended package for those
wanting to fit distribution models, for example those supplied in
{superspreading}
(Poisson-lognormal and Poisson-Weibull).
We recommend reading the {fitdistrplus}
documentation
(specifically ?fitdist
) to explore the full range of
functionality.
In this example we fit the negative binomial distribution to estimate
the reproduction number (\(R\), which
is the mean of the distribution) and the dispersion (\(k\), which a measure of the variance of the
distribution). The parameters are estimated via maximum likelihood (the
default method for fitdist()
).
# we use {fitdistrplus} to fit the models
library(fitdistrplus)
#> Loading required package: MASS
#> Loading required package: survival
# transmission events from index cases
<- c(2, 17, 5, 1, 8, 2, 14)
index_case_transmission
# transmission events from secondary cases
<- c(
secondary_case_transmission 1, 2, 1, 4, 4, 1, 3, 3, 1, 1, 4, 9, 9, 1, 2, 1, 1, 1, 4, 3, 3, 4, 2, 5,
1, 2, 2, 1, 9, 1, 3, 1, 2, 1, 1, 2
)
# Format data into index and non-index cases
# total non-index cases
<- sum(c(index_case_transmission, secondary_case_transmission))
n_non_index # transmission from all non-index cases
<- c(
non_index_cases
secondary_case_transmission,rep(0, n_non_index - length(secondary_case_transmission))
)
# Estimate R and k for index and non-index cases
<- fitdist(data = index_case_transmission, distr = "nbinom")
param_index # rename size and mu to k and R
names(param_index$estimate) <- c("k", "R")
$estimate
param_index#> k R
#> 1.596646 7.000771
<- fitdist(data = non_index_cases, distr = "nbinom")
param_non_index # rename size and mu to k and R
names(param_non_index$estimate) <- c("k", "R")
$estimate
param_non_index#> k R
#> 0.1937490 0.6619608
The reproduction number (\(R\)) is higher for index cases than for non-index cases, but the heterogeneity in transmission is higher for non-index cases (i.e. \(k\) is lower).
Given the reproduction number (\(R\)) and the dispersion (\(k\)), the probability that a infectious
disease will cause an epidemic, in other words the probability it does
not go extinct, can be calculated using
probability_epidemic()
. Here we use
probability_epidemic()
for the parameters estimated in the
above section for Ebola, assuming there are three initial infections
seeding the potential outbreak.
# Compare probability of a large outbreak when k varies according to
# index/non-index values, assuming 3 initial spillover infections
<- 3
initial_infections
# Probability of an epidemic using k estimated from index cases
probability_epidemic(
R = param_index$estimate[["R"]],
k = param_index$estimate[["k"]],
num_init_infect = initial_infections
)#> [1] 0.9995741
# Probability of an epidemic using k estimated from non-index cases
probability_epidemic(
R = param_non_index$estimate[["R"]],
k = param_non_index$estimate[["k"]],
num_init_infect = initial_infections
)#> [1] 0
The probability of causing a sustained outbreak is high for the index cases, but is zero for non-index cases (i.e. disease transmission will inevitably cease assuming transmission dynamics do not change).
More details on how to use {superspreading}
can be found
in the online
documentation as package vignettes, under “Articles”.
{superspreading}
does not provide plotting functions,
instead we provide example code chunks in the package’s vignettes that
can be used as a templates upon which data visualisations can be
modified. We recommend users copy and edit the examples for their own
purposes. (This is permitted under the package’s MIT license). By
default code chunks for plotting are folded, in order to unfold them and
see the code simply click the code button at the top left of the
plot.
To report a bug please open an issue
Contributions to {superspreading}
are welcomed. Please
follow the package
contributing guide.
Please note that the {superspreading} project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
citation("superspreading")
#> To cite package 'superspreading' in publications use:
#>
#> Lambert J, Kucharski A, Adam D (2025). _superspreading: Understand
#> Individual-Level Variation in Infectious Disease Transmission_. R
#> package version 0.2.0.9000,
#> https://epiverse-trace.github.io/superspreading/,
#> <https://github.com/epiverse-trace/superspreading>.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {superspreading: Understand Individual-Level Variation in Infectious Disease
#> Transmission},
#> author = {Joshua W. Lambert and Adam Kucharski and Dillon C. Adam},
#> year = {2025},
#> note = {R package version 0.2.0.9000,
#> https://epiverse-trace.github.io/superspreading/},
#> url = {https://github.com/epiverse-trace/superspreading},
#> }
This project has some overlap with other R packages:
{epichains}
is another Epiverse-TRACE R package that analyses transmission chain
data to infer the likelihood for either the size or length of an
outbreak cluster, or simulate transmission chains. It is based on the,
now retired, {bpmodels}
package.
Two main differences between {superspreading}
and
{epichains}
are: 1) {superspreading}
has
functions to compute metrics that characterise outbreaks and
superspreading events (e.g. probability_epidemic()
,
probability_extinct()
,
proportion_cluster_size()
&
proportion_transmission()
); whereas
{epichains}
has functions to calculate the likelihood of a
transmission chain size and length. 2) {epichains}
exports
functions to simulate a single-type branching process
(simulate_chains()
&
simulate_chain_stats()
).
{modelSSE}
has a similar scope to {superspreading}
, it contains
functions to infer offspring distribution parameters. It exports several
infectious disease outbreak datasets (see
data(package = "modelSSE")
). Both
{superspreading}
and {modelSSE}
export
functions to calculate the proportion of transmission using different
methods. It also imports the {Delaporte}
package to model the offspring distribution as a Delaporte
distribution.
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.