{EpiNow2}
estimates the time-varying reproduction
number, growth rate, and doubling time using a range of open-source
tools (Abbott
et al.), and current best practices (Gostic et al.).
It aims to help users avoid some of the limitations of naive
implementations in a framework that is informed by community feedback
and is actively supported.
Forecasting is also supported for the time-varying reproduction number, infections, and reported cases using the same generative process approach as used for estimation.
{EpiNow2}
estimates the time-varying reproduction number
on cases by date of infection (using a similar approach to that
implemented in {EpiEstim}
).
True infections, treated as latent and unobserved, are estimated and
then mapped to observed data (for example cases by date of report) via
one or more delay distributions (in the examples in the package
documentation these are an incubation period and a reporting delay) and
a reporting model that can include weekly periodicity.
Uncertainty is propagated from all inputs into the final parameter estimates, helping to mitigate spurious findings. This is handled internally. The time-varying reproduction estimates and the uncertain generation time also give time-varying estimates of the rate of growth.
{EpiNow2}
provides three models:
estimate_infections()
: Reconstruct cases by date of
infection from reported cases.
estimate_secondary()
: Estimate the relationship
between primary and secondary observations, for example, deaths
(secondary) based on hospital admissions (primary), or bed occupancy
(secondary) based on hospital admissions (primary).
estimate_truncation()
: Estimate a truncation
distribution from multiple snapshots of the same data source over time.
For more flexibility, check out the {epinowcast}
package.
The default model in estimate_infections()
uses a
non-stationary Gaussian process to estimate the time-varying
reproduction number and infer infections. Other options, which generally
reduce runtimes at the cost of the granularity of estimates or real-time
performance, include:
By default, all these models are fit with MCMC
sampling using the rstan
R package as the backend. Users can, however, switch to use approximate
algorithms like variational
inference, the pathfinder
algorithm, or Laplace
approximation especially for quick prototyping. The latter two
methods are provided through the cmdstanr
R
package, so users will have to install that separately.
The documentation for estimate_infections
provides
examples of the implementation of the different options available.
{EpiNow2}
is designed to be used via a single function
call to two functions:
epinow()
: Estimate Rt and cases by date of infection
and forecast these infections into the future.
regional_epinow()
: Efficiently run
epinow()
across multiple regions in an efficient
manner.
These two functions call estimate_infections()
, which
works to reconstruct cases by date of infection from reported cases.
For more details on using each function corresponding function documentation.
Install the released version of the package:
install.packages("EpiNow2")
Install the development version of the package with:
install.packages("EpiNow2", repos = c("https://epiforecasts.r-universe.dev", getOption("repos")))
Alternatively, install the development version of the package with pak as follows (few users should need to do this):
# check whether {pak} is installed
if (!require("pak")) {
install.packages("pak")
}::pkg_install("epiforecasts/EpiNow2") pak
If using pak
fails, try:
# check whether {remotes} is installed
if (!require("remotes")) {
install.packages("remotes")
}::install_github("epiforecasts/EpiNow2") remotes
To build {EpiNow2}
from source, users will need to
configure their C toolchain. This is because {EpiNow2}
implements the underlying models in Stan (a statistical modelling
programming language), which is built on C++.
Each operating system has a different set up procedure. Windows users need to install an appropriate version of RTools. Mac users can follow these steps, and Linux users can use this guide. For simple deployment/development a prebuilt docker image is also available (see documentation here).
The Getting Started vignette (see vignette("EpiNow2")
)
is your quickest entry point to the package. It provides a quick run
through of the two main functions in the package and how to set up them
up. It also discusses how to summarise and visualise the results after
running the models.
More broadly, users can also learn the details of estimating delay distributions, nowcasting, and forecasting in a structured way through the free and open short-course, “Nowcasting and forecasting infectious disease dynamics”, developed by some authors of this package.
The package has two websites: one for the stable release version on CRAN, and another for the version in development. These two provide various resources for learning about the package, including the function reference, details about each model (model definition), workflows for each model (usage), and case studies or literature of applications of the package. However, the development website may contain experimental features and information not yet available in the stable release.
The workflow vignette (see
vignette("estimate_infections_workflow")
) provides guidance
on the end-to-end process of estimating reproduction numbers and
performing short-term forecasts for a disease spreading in a
In different vignettes we provide the mathematical definition of each
model. For example, the model definition vignette for
estimate_infections()
can be found in
vignette("estimate_infections")
.
A simple example of using the package to estimate a national Rt for Covid-19 can be found here.
We welcome all contributions. If you have identified an issue with the package, you can file an issue here. We also welcome additions and extensions to the underlying model either in the form of options or improvements. If you wish to contribute in any form, please follow the package contributing guide.
All contributions to this project are gratefully acknowledged using
the allcontributors
package following the all-contributors specification.
Contributions of any kind are welcome!
seabbs, sbfnk, jamesmbaazam, joeHickson, hsbadr, pitmonticone, actions-user, ellisp, jdmunday, pearsonca, JAllen42, kaitejohnson, adamkucharski, andrjohns, Bisaloo, LloydChapman, medewitt, nikosbosse, sophiemeakin
raulfernandezn, pcarbo, johnaponte, sophie-schiller, munozedg, kathsherratt, yungwai, kgostic, fkrauer, philturk, krageth, tony352, username-rp, HAKGH, AndrewRiceMGW, brynhayder, RichardMN, andrybicio, rhamoonga, furqan915, MFZaini1984, fabsig, affans, GauriSaran, davidvilanova, jrcpulliam, dajmcdon, joshwlambert, avallecam, athowes, lorenzwalthert, nlinton, martinamcm, adrian-lison