Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding mixing models (need examples) #16

Merged
merged 29 commits into from
Aug 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
9e73018
Adding mixing models (need examples)
gvegayon Apr 27, 2024
b5a5a66
Updating readme with figures and list of models
gvegayon Apr 27, 2024
87d5994
Adding entity to the model
gvegayon May 1, 2024
2f03327
Adding new entity wrappers
gvegayon May 2, 2024
04f4006
Starting off with entity vignette
gvegayon May 3, 2024
c1950bb
Working on the vignette
gvegayon May 7, 2024
218888a
Updating version of epiworld
gvegayon Jun 4, 2024
96534a6
Updating README
gvegayon Jun 4, 2024
c5e8960
Refactoring how virus and tools are added
gvegayon Jun 7, 2024
2cb7782
Updating calling methods
gvegayon Jun 7, 2024
c1b1b76
Finally passing
gvegayon Jun 7, 2024
c22106e
Adding a note on the news file
gvegayon Jun 7, 2024
9607b1e
Adding defunct message
gvegayon Jun 8, 2024
7f18e9c
Solving conflicts
gvegayon Jun 11, 2024
a23d2a0
Updating roxygen
gvegayon Jun 11, 2024
5931ee8
Updating news and minor updates to README.md
gvegayon Jun 11, 2024
cea704c
Working on entity
gvegayon Jun 11, 2024
9a67de2
Correcting mixing vignette
gvegayon Jun 11, 2024
a324965
Adding the dist functions (starting to). Expected to fail [skip ci]
gvegayon Jun 12, 2024
18dc27d
Updating interface
gvegayon Jun 13, 2024
f4627c8
Updating version of acions
gvegayon Jun 18, 2024
6a0f919
Updating epiworld c++
gvegayon Jun 18, 2024
476a6ea
Updating epiworld (warnings)
gvegayon Jun 18, 2024
97e074a
Removing dangling calls
gvegayon Jun 20, 2024
db82d03
Final check errors
gvegayon Jun 20, 2024
26b04c8
Missed Rd file
gvegayon Jun 20, 2024
05b9eb5
Updating reference
gvegayon Jun 21, 2024
c2dbe7b
Adding examples and cleaning docs.
gvegayon Jul 4, 2024
4893553
Updating
gvegayon Aug 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM rocker/r-base:latest

Check warning on line 1 in .devcontainer/Dockerfile

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.devcontainer/Dockerfile#L1

Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag

RUN \
echo 'options(repos=c(CRAN="https://cloud.r-project.org"))' >> ~/.Rprofile && \
Rscript --vanilla -e 'getOption("repos")'

# Adding Git
RUN apt-get update && apt-get install -y --no-install-recommends git

Check notice on line 8 in .devcontainer/Dockerfile

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

.devcontainer/Dockerfile#L8

Delete the apt-get lists after installing something

# Adding R packages
RUN \
wget https://github.com/jgm/pandoc/releases/download/3.2.1/pandoc-3.2.1-1-amd64.deb && \
dpkg -i pandoc-3.2.1-1-amd64.deb

RUN install2.r cpp11 rmarkdown roxygen2 tinytest data.table netplot
23 changes: 23 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/cpp
{
"name": "epiworldR",
"build": {
"dockerfile": "Dockerfile"
},

// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "gcc -v",

// Configure tool-specific properties.
// "customizations": {},

// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
"remoteUser": "root"
}
4 changes: 2 additions & 2 deletions .github/workflows/r.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
R_KEEP_PKG_SOURCE: yes

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- uses: r-lib/actions/setup-pandoc@v2

Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
error-on: '"warning"'

# Upload the built package as an artifact
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
if: ${{ matrix.config.os == 'ubuntu-latest' && matrix.config.r == 'release' }}
with:
name: ${{ matrix.config.os }}-pkg
Expand Down
3 changes: 2 additions & 1 deletion .vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"/usr/local/include",
"/usr/lib/R/site-library/cpp11/include",
"/usr/lib/R/site-library/Rcpp/include",
"/usr/share/R/include"
"/usr/share/R/include",
"inst/include/epiworld"
],
"intelliSenseMode": "linux-gcc-x64",
"compilerPath": "/usr/bin/gcc",
Expand Down
6 changes: 3 additions & 3 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Package: epiworldR
Type: Package
Title: Fast Agent-Based Epi Models
Version: 0.1-1
Date: 2024-04-07
Version: 0.3-2
Date: 2024-06-12
Authors@R: c(
person("Derek", "Meyer", role=c("aut","cre"),
email="[email protected]", comment = c(ORCID = "0009-0005-1350-6988")),
Expand All @@ -21,7 +21,7 @@ URL: https://github.com/UofUEpiBio/epiworldR,
https://uofuepibio.github.io/epiworldR-workshop/
BugReports: https://github.com/UofUEpiBio/epiworldR/issues
License: MIT + file LICENSE
RoxygenNote: 7.3.1
RoxygenNote: 7.3.2
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
LinkingTo: cpp11
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Capture the current value of the version of the package in DESCRIPTION
VERSION := $(shell grep Version DESCRIPTION | sed -e 's/Version: //')


build:
cd .. && R CMD build epiworldR

Expand Down
35 changes: 29 additions & 6 deletions NAMESPACE
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Generated by roxygen2: do not edit by hand

S3method("[",epiworld_agents)
S3method("[",epiworld_entities)
S3method(add_tool,epiworld_model)
S3method(add_tool_n,epiworld_model)
S3method(add_virus,epiworld_model)
S3method(add_virus,epiworld_seir)
S3method(add_virus,epiworld_seirconn)
Expand All @@ -12,14 +12,10 @@ S3method(add_virus,epiworld_sir)
S3method(add_virus,epiworld_sirconn)
S3method(add_virus,epiworld_sird)
S3method(add_virus,epiworld_sirdconn)
S3method(add_virus_n,epiworld_model)
S3method(add_virus_n,epiworld_seir)
S3method(add_virus_n,epiworld_seirconn)
S3method(add_virus_n,epiworld_sir)
S3method(add_virus_n,epiworld_sirconn)
S3method(agents_from_edgelist,epiworld_model)
S3method(agents_smallworld,epiworld_model)
S3method(as.array,epiworld_hist_transition)
S3method(get_agents,epiworld_model)
S3method(get_hist_tool,epiworld_model)
S3method(get_hist_total,epiworld_model)
S3method(get_hist_transition_matrix,epiworld_model)
Expand Down Expand Up @@ -48,16 +44,23 @@ S3method(plot,epiworld_seir)
S3method(plot,epiworld_seirconn)
S3method(plot,epiworld_seird)
S3method(plot,epiworld_seirdconn)
S3method(plot,epiworld_seirmixing)
S3method(plot,epiworld_sir)
S3method(plot,epiworld_sirconn)
S3method(plot,epiworld_sird)
S3method(plot,epiworld_sirdconn)
S3method(plot,epiworld_sirmixing)
S3method(plot,epiworld_sis)
S3method(plot,epiworld_sisd)
S3method(plot,epiworld_surv)
S3method(plot_epi,epiworld_hist)
S3method(plot_epi,epiworld_hist_virus)
S3method(plot_epi,epiworld_model)
S3method(print,epiworld_agent)
S3method(print,epiworld_agents)
S3method(print,epiworld_agents_tools)
S3method(print,epiworld_entities)
S3method(print,epiworld_entity)
S3method(print,epiworld_globalevent)
S3method(print,epiworld_model)
S3method(print,epiworld_saver)
Expand All @@ -82,14 +85,17 @@ export(ModelSEIR)
export(ModelSEIRCONN)
export(ModelSEIRD)
export(ModelSEIRDCONN)
export(ModelSEIRMixing)
export(ModelSIR)
export(ModelSIRCONN)
export(ModelSIRD)
export(ModelSIRDCONN)
export(ModelSIRLogit)
export(ModelSIRMixing)
export(ModelSIS)
export(ModelSISD)
export(ModelSURV)
export(add_entity)
export(add_globalevent)
export(add_tool)
export(add_tool_agent)
Expand All @@ -101,10 +107,22 @@ export(agents_from_edgelist)
export(agents_smallworld)
export(change_state)
export(clone_model)
export(distribute_entity_randomly)
export(distribute_entity_to_set)
export(distribute_tool_randomly)
export(distribute_tool_to_set)
export(distribute_virus_randomly)
export(distribute_virus_set)
export(entity)
export(entity_add_agent)
export(entity_get_agents)
export(get_agents)
export(get_agents_data_ncols)
export(get_agents_states)
export(get_agents_tools)
export(get_entities)
export(get_entity_name)
export(get_entity_size)
export(get_generation_time)
export(get_hist_tool)
export(get_hist_total)
Expand Down Expand Up @@ -138,12 +156,14 @@ export(globalevent_tool_logit)
export(has_tool)
export(has_virus)
export(initial_states)
export(load_agents_entities_ties)
export(make_saver)
export(plot_generation_time)
export(plot_incidence)
export(plot_reproductive_number)
export(queuing_off)
export(queuing_on)
export(rm_entity)
export(rm_tool)
export(rm_virus)
export(run)
Expand All @@ -153,6 +173,9 @@ export(set_agents_data)
export(set_death_reduction)
export(set_death_reduction_fun)
export(set_death_reduction_ptr)
export(set_distribution_entity)
export(set_distribution_tool)
export(set_distribution_virus)
export(set_incubation)
export(set_incubation_fun)
export(set_incubation_ptr)
Expand Down
19 changes: 19 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
# epiworldR 0.3-2 (dev)

* Starting version 0.3-0, `epiworldR` is versioned using the same version as the C++ library, `epiworld`.

* Adds the new mixing models `ModelSIRMixing` and `ModelSEIRMixing`.

* Ports the `Entity` class. Entities are used to group agents within a model.

* Refactors `add_tool`, `add_virus`, and `add_entity` simplifying syntax. Now,
these functions only receive the model and object. Prevalence is
specified in the object itself. `add_tool_n` and `add_virus_n` are now
deprecated.

* `globalaction_*` are now defunct. Use `globalevent_*` instead.

* New functions to specify how viruses, tools, and entities are distributed
among agents: `distribute_viruses`, `distribute_tools`, and `distribute_entities`.


# epiworldR 0.1-0`

* Force model to update agents' states when running a simulation.
Expand Down
4 changes: 2 additions & 2 deletions R/ModelSEIRCONN.R
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
#' plot(model_seirconn)
#'
#' # Adding the flu
#' flu <- virus("Flu", .9, 1/7)
#' add_virus(model_seirconn, flu, .001)
#' flu <- virus("Flu", .9, 1/7, prevalence = 0.001, as_proportion = TRUE)
#' add_virus(model_seirconn, flu)
#'
#' #' # Running and printing
#' run(model_seirconn, ndays = 100, seed = 1912)
Expand Down
8 changes: 6 additions & 2 deletions R/ModelSEIRDCONN.R
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,12 @@
#' plot(model_seirdconn)
#'
#' # Adding the flu
#' flu <- virus("Flu", prob_infecting = .3, recovery_rate = 1/7, prob_death = 0.001)
#' add_virus(model = model_seirdconn, virus = flu, proportion = .001)
#' flu <- virus(
#' "Flu", prob_infecting = .3, recovery_rate = 1/7,
#' prob_death = 0.001,
#' prevalence = 0.001, as_proportion = TRUE
#' )
#' add_virus(model = model_seirdconn, virus = flu)
#'
#' #' # Running and printing
#' run(model_seirdconn, ndays = 100, seed = 1912)
Expand Down
91 changes: 91 additions & 0 deletions R/ModelSEIRMixing.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#' Susceptible Exposed Infected Removed model (SEIR) with mixing
#' @param name String. Name of the virus
#' @param prevalence Double. Initial proportion of individuals with the virus.
#' @param contact_rate Numeric scalar. Average number of contacts per step.
#' @param transmission_rate Numeric scalar between 0 and 1. Probability of
#' transmission.
#' @param incubation_days Numeric scalar. Average number of days in the
#' incubation period.
#' @param recovery_rate Numeric scalar between 0 and 1. Probability of recovery.
#' @param x Object of class SIRCONN.
#' @param ... Currently ignore.
#' @param n Number of individuals in the population.
#' @param contact_matrix Matrix of contact rates between individuals.
#' @export
#' @family Models
#' @details
#' The `contact_matrix` is a matrix of contact rates between entities. The
#' matrix should be of size `n x n`, where `n` is the number of entities.
#' This is a row-stochastic matrix, i.e., the sum of each row should be 1.
#'
#' The [initial_states] function allows the user to set the initial state of the
#' model. In particular, the user can specify how many of the non-infected
#' agents have been removed at the beginning of the simulation.
#' @returns
#' - The `ModelSEIRMixing`function returns a model of class [epiworld_model].
#' @aliases epiworld_seirmixing
#'
#' @examples
#'
#' # Start off creating three entities.
#' # Individuals will be distribured randomly between the three.
#' e1 <- entity("Population 1", 3e3, as_proportion = FALSE)
#' e2 <- entity("Population 2", 3e3, as_proportion = FALSE)
#' e3 <- entity("Population 3", 3e3, as_proportion = FALSE)
#'
#' # Row-stochastic matrix (rowsums 1)
#' cmatrix <- c(
#' c(0.9, 0.05, 0.05),
#' c(0.1, 0.8, 0.1),
#' c(0.1, 0.2, 0.7)
#' ) |> matrix(byrow = TRUE, nrow = 3)
#'
#' N <- 9e3
#'
#' flu_model <- ModelSEIRMixing(
#' name = "Flu",
#' n = N,
#' prevalence = 1 / N,
#' contact_rate = 20,
#' transmission_rate = 0.1,
#' recovery_rate = 1 / 7,
#' incubation_days = 7,
#' contact_matrix = cmatrix
#' )
#'
#' # Adding the entities to the model
#' flu_model |>
#' add_entity(e1) |>
#' add_entity(e2) |>
#' add_entity(e3)
#'
#' set.seed(331)
#' run(flu_model, ndays = 100)
#' summary(flu_model)
#' plot_incidence(flu_model)
#'
#' @seealso epiworld-methods
ModelSEIRMixing <- function(
name, n, prevalence, contact_rate, transmission_rate,
incubation_days, recovery_rate, contact_matrix
) {

structure(
ModelSEIRMixing_cpp(
name, n, prevalence, contact_rate,
transmission_rate, incubation_days,
recovery_rate, as.vector(contact_matrix)
),
class = c("epiworld_seirmixing", "epiworld_model")
)

}

#' @rdname ModelSEIRMixing
#' @export
#' @returns The `plot` function returns a plot of the SEIRMixing model of class
#' [epiworld_model].
#' @param main Title of the plot
plot.epiworld_seirmixing <- function(x, main = get_name(x), ...) { # col = NULL
plot_epi(x, main = main, ...)
}
Loading
Loading