epiworldR 0.17.1-0
Syncs the C++ core with epiworld 0.17.1.
New features
- New functions
set_transmission_mode(),get_transmission_mode(),get_last_transmission_mode()andget_transmission_kappa()control how network models compute transmission each day."push"has each infected agent add its infection odds to its susceptible neighbors,"pull"has each susceptible agent look at its infected neighbors, and"auto"(the default) picks the cheaper one each day. Both give the same distribution of infections but draw different random numbers, so"pull"reproduces the runs of epiworldR 0.15 and earlier. See?"transmission-mode".
User-visible changes
The
"auto"transmission mode picks the cheaper step more reliably around the peak of large outbreaks on heterogeneous networks, where it used to pull although pushing was cheaper. Its thresholdkappanow defaults to 0.5 (was 0.25). Seeded results of network models can change, since a different day-by-day choice draws different random numbers; the distribution of outcomes is the same.Pulling is slightly faster (about 5% on small-world networks).
epiworldR 0.17.0-1
User-visible changes
- The GeoPops vignette (“Using external network data: GeoPops synthetic populations”) is now an article on the package website only, and its GeoPops extract is no longer installed with the package (
system.file("extdata", "geopops", package = "epiworldR")is gone). The data now lives next to the article in the GitHub repository, undervignettes/articles/geopops. This keeps the package within CRAN’s size limit.
epiworldR 0.17.0-0
Syncs the C++ core with epiworld 0.17.0.
New features
-
bubbles()gains atiesargument that controls what being in a bubble together does to the contact network."existing", the default, keeps the previous behaviour: the bubble is only a transmission rule."complete"also ties every pair of agents sharing a bubble while the policy is in force, so households become complete and merged households meet in full. The ties are withdrawn when the bubbles are redrawn, when the policy lifts, and on the last day of the run, so a run always leaves the network as it found it."complete"requires an undirected network. See the updated “Social bubbles” vignette for an example.
User-visible changes
Directed networks are now directed. Networks built with
agents_from_edgelist(..., directed = TRUE)oragents_smallworld(..., d = TRUE)were silently made undirected. A tiesource -> targetis now kept by the source only:targetis one ofsource’s neighbors, and since agents are exposed to their own neighbors,targetcan infectsourcebut not the reverse.get_network()now returns the ties as given. Results change for directed networks; undirected networks give the same results as before.Directed networks no longer use the queuing system, so large directed networks may run slower.
agents_from_edgelist()builds the network about 10 times faster (under 20 ms instead of about 150 ms for 100,000 agents with 10 ties each).agents_smallworld()andagents_sbm()are somewhat faster too. The networks, and so the results for a given seed, are unchanged.
Bug fixes
- Rebuilding a model’s network (e.g., calling
agents_smallworld()again) afterrun_multiple()now takes effect. Before, the next run restored the network backed up byrun_multiple(), population size included.
epiworldR 0.16.1-0
Syncs the C++ core with epiworld 0.16.1.
User-visible changes
Network models (
ModelSIR(),ModelSIS(),ModelSISD(),ModelSIRD(),ModelSEIR(),ModelSEIRD(), and models built withupdate_fun_susceptible()) now simulate transmission faster. At each step, the model either has infected agents push infection to their neighbors or has susceptible agents pull it from theirs, whichever is cheaper. Both give the same distribution of outcomes.Results for a given seed change in those models, and wherever the random distribution functions below are used. Only the random draws change; the model’s behaviour does not.
Bug fixes
distribute_tool_to_set()anddistribute_virus_to_set()no longer take time quadratic in the number of agents: the set of IDs was copied every time an agent received the tool or virus. Protecting 24,000 of 100,000 agents went from about 0.75 seconds to a few milliseconds.distribute_tool_randomly()withagents_idsnow picks agents from that set. It used to pick among the firstlength(agents_ids)agents of the model instead.distribute_tool_randomly(),distribute_virus_randomly(),distribute_tool_to_entities()anddistribute_virus_to_entities()now pick every candidate with the same probability. The last candidate was never picked for the first recipient, and the one before it was picked twice as often.A transition or contact with probability exactly 1 now always happens. Before, the last option was chosen instead, so a death probability of 1 could end in recovery.
get_hist_tool()now labels thetoolcolumn with the model’s tool names. It previously used the virus names instead, and could read past the end of the name list (undefined behaviour) when a model had more tools than viruses.
epiworldR 0.15.1-0
User-visible changes
The new function
bubbles()implements social-bubble contact restrictions on network models, with the household- and peer-based rules used during COVID-19 (see the “Social bubbles on a small-world network” vignette). How leaky the bubbles are is held in a model parameter ("Bubble transmission factor"by default), which scales transmission along out-of-bubble contacts and can be read withget_param()and changed withset_param()at any point. Each copy of a model keeps its own bubbles, so replicates run on any number of threads.sample_household_sizes()draws household sizes to go with it.New vignette, “Using external network data: GeoPops synthetic populations”, showing how to bring an externally-generated population and its contact networks into a model with
agents_from_edgelist(), and how to give transmission a weekday/weekend rhythm with the global events module. It comes with a small extract of a GeoPops synthetic population insystem.file("extdata", "geopops", package = "epiworldR").The new functions
get_contact_matrix()andset_contact_matrix()allow users to access contact matrices in mixing models.Saved
run_multiple()results now have documented plotting support, including transition-matrix diagrams throughplot_multiple_transition().The new helper
compute_ts_ci_area()computes polygon and median-line data for plotting uncertainty intervals in time series.draw_mermaid()is now documented with the model-diagram helpers and consistently returns anepiworld_diagramobject.
Bugs
The
ModelSEIRMixingQuarantinemodel was not officially tracking hospitalizations. This means that using the saver to extract hospitalizations would return zero.Using
globalevent_fun()withrun_multiple(..., nthreads > 1)was not compatible because R is not thread-safe.run_multiple()now warns the user and automatically switches tonthreads = 1.
epiworldR 0.15.0-0
- Updates to epiworld C++ 0.15.0.
User-visible changes
The
ModelSEIRMixingQuarantinenow features a single hospitalization state instead of two. The model now assumes that hospitalized individuals are detected immediately and trigger the quarantine process.The package now includes the function
agents_sbm(), which implements the Stochastic-Block Model by Batahelj and Brandes (2005).The mixing models–
ModelSEIRMixing(),ModelSIRMixing(), andModelSEIRMixingQuarantine()–lost thecontact_rateparameter in favor of a more flexible model: instead of using mixing matrices (row-stochastic), the model now uses a contact matrix, which allows groups to have different contact rates.New model builder functions
Model(),add_state(),update_fun_susceptible(), andupdate_fun_rate()expose a new approach to build models in the package. Using these functions, users can create models from zero (to hero!). The package includes a new vignette demonstrating its usage.The new function
compute_reproduction_number()provides a way to estimate either the basic or the effective reproductive number. This is most useful for mixing models.
Internal changes
Fixes a bug in how
GlobalEvents polymorphism is implemented in the core library.Removed the
measles-related headers (were unused by this package).Introduced an optimization for accelerating binomial draws based on Le Cam’s inequality. The function defaults to poisson draws (faster) in case of rare events.
epiworldR 0.14.0.0
CRAN release: 2026-03-28
- The way
seedis passed torun()andrun_multiple()has been modified to ensure comparability with the C++ version. Now, a random seed number is drawn only if seed is not specified.
Internal changes
(epiworld#189) Addressing memory access issues that arise when calling
run_multipleusing OpenMP. The latest version reduces usage of points (including smart) to make the code more reliable. No penalties on its performance are expected.Switch vignette building engine to
quarto.
epiworldR 0.13.0.0
CRAN release: 2026-03-12
No significant changes on the user side.
Internal changes
(epiworld#169) The
Entitiessystem was still causing issues. The system was refactored to use indices instead without any pointers.(same issue) The system completely avoids binding via pointers (with the exception of
DataBase). This provides a cleaner API reducing issues related to memory/address problems.Model::clone_ptrnow returns smart pointers instead.(epiworld#163) Changed the main engine for Pseudo Random Number Generation to xorshiro** (more in this website and this paper by Blackman and Vigna). This change makes random number generation significantly faster (twice as much, compared to Mersenne Twister).
epiworldR 0.12.0.0
CRAN release: 2026-02-21
Bug fixes
Updates to
epiworldversion 0.12.0, including a patch to theModelSEIRMixingQuarantinemodel. It was underestimating the outbreak size. This is a similar issue detected in the collection of the measles models.The
ModelSEIRMixingQuarantinegained a couple of extra checks for validating the inputs.
Internal changes
Simplified build configuration to comply with CRAN policies: removed custom
configurescript, using R’s built-in OpenMP settings ($(SHLIB_OPENMP_CXXFLAGS)) and specifying C++17 viaCXX_STDin Makevars andSystemRequirementsin DESCRIPTION.Changing how
Entitiesare managed in the system, moved away from using pointers and instead usereference_wrapper.
epiworldR 0.11.2.0
CRAN release: 2026-02-03
- Updates to
epiworldversion 0.11.2 including minor patches to avoid warnings and notes from clang.
Bug Fixes
These changes will be reflected in the measles R package (so no changes for the epiworldR package):
The measles school model was not including the number of recovered agents in the population that it could sample from, which resulted in a minor overestimation of the outbreak size (about 5 to 10 percent).
The measles mixing models were assuming the number of available agents did not change when sampling contacts. This has been corrected. Outbreak sizes are now expected to be larger on average.
epiworldR 0.11.0.1
CRAN release: 2026-01-14
- Minor release fixing errors in tests in some OSs (reported by CRAN).
epiworldR 0.11.0.0
CRAN release: 2025-12-22
New Features
New distribution functions
distribute_virus_to_entities()anddistribute_tool_to_entities()that allow distributing viruses and tools to agents based on their entity membership (new in epiworld 0.11.0).New function
add_entities_from_dataframe()that allows adding multiple entities to a model based on a data.frame (wrapper aroundadd_entity()).New functions
get_outbreak_size()andget_active_cases()allow extracting timeseries of the outbreak size and number of active cases (individuals with a virus) (new in epiworld 0.11.0).New function
get_hospitalizations()that allows extracting timeseries of hospitalizations from the model results (new in epiworld 0.11.0).
Bug Fixes
- The saver was not correctly saving the history of tools and viruses when using
virus_histandtools_hist, respectively. This has been fixed (new in epiworld 0.11.0).
Breaking Changes
-
Measles models have been removed from epiworldR. The measles-specific models (
ModelMeaslesSchool,ModelMeaslesMixing,ModelMeaslesMixingRiskQuarantine, and the deprecatedModelMeaslesQuarantine) have been moved to a separate package. Users who need measles models should install themeaslespackage.
epiworldR 0.10.0.0
CRAN release: 2025-11-14
New Features
New model
ModelMeaslesMixingRiskQuarantinethat implements a measles model with mixing, risk-based contacts, and quarantine has been added. This is part of a joint effort with our partners at the Utah Department of Health and Human Services (DHHS).Added
printandplotmethods forepiworld_diagramobjects. This allows easy visualization of model diagrams generated withDiagrammeR.
Improvements
- The function
run_multiple_get_results()has two new arguments:freaderand..., which allows the user to specify a custom function to read the results of each simulation (e.g.,data.table::fread).
Bug Fixes
The rewiring algorithm was not changing the edges, but only the weights of the edges. This has been fixed in epiworld 0.9.4.
The saver associated with
tools_histhad a bug that caused it to not save the history of tools correctly. This has been fixed in epiworld 0.10.0. This was detected during work with @margowheatley and @AliseMendoza.
Misc
The
ModelMeaslesQuarantinemodel has been updated to warn the user if the deprecated parametervax_improved_recoveryis used. This parameter is no longer used and has been removed.Various legacy C++ files have been removed from the
inst/include/epiworldfolder.We now include model diagrams in the documentation of each model (new feature of
epiworld0.10.0).Various improvements to the documentation of the package and models.
epiworldR 0.9.1.0
epiworldR 0.8.3.0 (CRAN)
CRAN release: 2025-06-12
Improvements
- epiworld was storing empty entries in the transition matrix. This was making reading the saved data significantly slower.
Bug Fixes
The
run_multiple()function was failing to correctly backup the agents’ edgelist in the case of network models. This was due to a bug in the C++ library that was not correctly copying the edgelist. This has been fixed.When multiple transitions happened in a single step, e.g., I->E->S, the model was only recording E->S, but not I->S (which is the correct).
epiworldR 0.8.2.0
CRAN release: 2025-05-13
Changes
In the
ModelMeaslesQuarantinemodel, isolated individuals now have a different parameter for the number of days in isolation. Previously, the same parameter was used for both isolated and quarantined individuals. The new parameter isisolation_period.The
ModelMeaslesQuarantinemodel changed a couple of parameter names to improve consistency. We also improved the documentation of the model.The mixing models were using the wrong sampling scheme for the contact event between agents. The new implementation allows using the regular basic reproductive number calculation for its calibration.
The functions
distribute_(virus|tool)_to_setnow have an additional argument that allows restricting the set of agents.
epiworldR 0.8.1.0
CRAN release: 2025-04-22
New Features
Adds the
ModelMeaslesQuarantinemodel, which implements a measles model with quarantine.Adds the capability of generating model diagrams using
mermaidthrough thedraw_mermaid()model function and theModelDiagramset of functions.
epiworldR 0.6.1.0
CRAN release: 2025-01-28
Updates to reflect changes in the
epiworldC++ library (mostly bug fixes)Package now requires R version >=4.1.0, because it uses the pipe
|>
epiworldR 0.6.0.0
CRAN release: 2025-01-16
The package now includes the
LFMCMCmodule that implements the likelihood-free Markov Chain Monte Carlo algorithm. This module is used to estimate the parameters of the models.The new function
add_param()allows the user to add parameters to the model.The new function
rm_globalevent()allows the user to remove global events from the model.The function
today()returns the current day (step) of the simulation.We changed the versioning system. To allow the R package to increase version number while preserving epiworld (C++) versioning, we added a fourth number that indicates R-only patches (similar to RcppArmadillo).
epiworldR 0.3-2
CRAN release: 2024-10-08
Starting version 0.3-0,
epiworldRis versioned using the same version as the C++ library,epiworld.Adds the new mixing models
ModelSIRMixingandModelSEIRMixing.Ports the
Entityclass. Entities are used to group agents within a model.Refactors
add_tool,add_virus, andadd_entitysimplifying syntax. Now, these functions only receive the model and object. Prevalence is specified in the object itself.add_tool_nandadd_virus_nare now deprecated.globalaction_*are now defunct. Useglobalevent_*instead.New functions to specify how viruses, tools, and entities are distributed among agents:
distribute_viruses,distribute_tools, anddistribute_entities.
epiworldR 0.1-0
CRAN release: 2024-04-08
- Force model to update agents’ states when running a simulation. This was causing issues when calling
run_multiple()after a single call ofrun(). Reported on 14.
epiworldR 0.0-4
CRAN release: 2024-02-09
Added missing checks of tool class when adding a model with
add_too_n.Various small improvements.
epiworldR 0.0-3
CRAN release: 2023-09-08
Added the following models:
ModelSEIRD,ModelSEIRDCONN,ModelSIRD,ModelSIRDCONN, andModelSISD.Fixed a bug reported on issue 6.
epiworldR 0.0-2
CRAN release: 2023-06-21
Added a
NEWS.mdfile to track changes to the package.Fixed bug reported by CRAN about reference to nullptr.
Renamed arguments across Models in favor of consistency.
Figures now show virus/tool name instead of id.
Fixed bug in
run_multipleand added more tests (C++).Redid autoconf and Makevars using RcppArmadillo as a template for checking for OpenMP.
