From bfc962742c0e2876f028bbe074044d0401983ced Mon Sep 17 00:00:00 2001 From: Tini Garske Date: Fri, 8 Mar 2024 11:44:05 +0000 Subject: [PATCH] rename class vip_population -> popim_population --- NAMESPACE | 2 +- R/apply_vacc.R | 18 ++++++++--------- R/calc_new_immunity.R | 6 +++--- R/is_population.R | 6 +++--- R/util_assert.R | 4 ++-- R/vacc_from_immunity.R | 10 ++++----- R/vip_vacc_activities.R | 10 ++++----- README.Rmd | 18 ++++++++--------- README.md | 19 +++++++++--------- man/add_immunity_rate.Rd | 8 ++++---- man/apply_vacc.Rd | 4 ++-- man/apply_vaccs.Rd | 6 +++--- man/calc_pop_immunity.Rd | 8 ++++---- man/complete_vacc_activities.Rd | 4 ++-- man/coverage_from_doses.Rd | 4 ++-- man/doses_from_coverage.Rd | 4 ++-- man/figures/README-calc_pop_immunity-1.png | Bin 21786 -> 21777 bytes man/popim-package.Rd | 2 +- ...{vip_population.Rd => popim_population.Rd} | 18 ++++++++--------- man/read_vacc_activities.Rd | 4 ++-- man/vacc_from_immunity.Rd | 4 ++-- man/vip_pop_from_file.Rd | 10 ++++----- popim goals and terminology.docx | Bin 0 -> 22365 bytes tests/testthat/test-add_immunity_rate.R | 4 ++-- tests/testthat/test-apply_vacc.R | 2 +- tests/testthat/test-apply_vaccs.R | 4 ++-- tests/testthat/test-calc_pop_immunity.R | 6 +++--- .../testthat/test-complete_vacc_activities.R | 14 ++++++------- tests/testthat/test-coverage_from_doses.R | 6 +++--- tests/testthat/test-doses_from_coverage.R | 6 +++--- tests/testthat/test-is_population.R | 18 ++++++++--------- tests/testthat/test-popim_population.R | 12 +++++++++++ tests/testthat/test-vacc_from_immunity.R | 6 +++--- tests/testthat/test-vip_population.R | 12 ----------- 34 files changed, 130 insertions(+), 129 deletions(-) rename man/{vip_population.Rd => popim_population.Rd} (80%) create mode 100644 popim goals and terminology.docx create mode 100644 tests/testthat/test-popim_population.R delete mode 100644 tests/testthat/test-vip_population.R diff --git a/NAMESPACE b/NAMESPACE index c5bfd45..4722232 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,8 +5,8 @@ export(apply_vaccs) export(calc_pop_immunity) export(complete_vacc_activities) export(plot_immunity) +export(popim_population) export(read_vacc_activities) export(vacc_from_immunity) export(vip_pop_from_file) -export(vip_population) importFrom(rlang,.data) diff --git a/R/apply_vacc.R b/R/apply_vacc.R index 9db673b..4ff9cef 100644 --- a/R/apply_vacc.R +++ b/R/apply_vacc.R @@ -3,11 +3,11 @@ ##' If the vaccination activity has non-missing entries for both ##' coverage and doses, the coverage is used - there is no test ##' whether the coverage and doses information are consistent with the -##' target population size in the vip_population object to which the +##' target population size in the popim_population object to which the ##' vaccination activity is applied. ##' ##' @param pop_df population dataframe object such as created by -##' function 'vip_population' +##' function 'popim_population' ##' @param region region of the vaccination activity ##' @param year year of the vaccination activity ##' @param age_first age of the youngest age group targeted @@ -71,11 +71,11 @@ apply_vacc <- function(pop_df, region, year, age_first = 0, age_last = Inf, ##' ##' Takes the vaccination activities listed in the input object ##' vaccs_df (a data.frame object of class vip_vacc_activities), and -##' applies them to the vip_population object pop_df, then returns +##' applies them to the popim_population object pop_df, then returns ##' that updated object. ##' -##' @param pop_df object of class vip_population such as created by -##' function 'vip_population' +##' @param pop_df object of class popim_population such as created by +##' function 'popim_population' ##' @param vaccs_df object of class 'vip_vacc_activities' such as ##' created by reading from file with function ##' 'read_vacc_activities' @@ -106,8 +106,8 @@ apply_vaccs <- function(pop_df, vaccs_df) { ##' given number of doses. The target population is the sum of the ##' population of the targeted age groups in the targeted region(s). ##' -##' @param pop_df object of class vip_population such as created by -##' function `vip_population` +##' @param pop_df object of class popim_population such as created by +##' function `popim_population` ##' @param doses number of vaccine doses available for the vaccination ##' activity ##' @param region region to be targeted @@ -158,8 +158,8 @@ coverage_from_doses <- function(pop_df, doses, region, year, age_first = 0, ##' is the sum of the population of the targeted age groups in the ##' targeted region(s). ##' -##' @param pop_df object of class vip_population such as created by -##' function `vip_population` +##' @param pop_df object of class popim_population such as created by +##' function `popim_population` ##' @param coverage proportion of the target population to be covered, ##' 0 <= coverage <= 1 ##' @param region region to be targeted diff --git a/R/calc_new_immunity.R b/R/calc_new_immunity.R index d8f7263..5459b02 100644 --- a/R/calc_new_immunity.R +++ b/R/calc_new_immunity.R @@ -57,11 +57,11 @@ assert_valid_targeting <- function(x, name = deparse(substitute(x))) { } ##' Calculate the overall population immunity (aggregating over age) -##' from the supplied vip_population object +##' from the supplied popim_population object ##' -##' @param pop vip_population object for which the population size and +##' @param pop popim_population object for which the population size and ##' immunity will be aggregated over age. -##' @return dataframe containing the vip_population aggregated by age. +##' @return dataframe containing the popim_population aggregated by age. ##' @author Tini Garske ##' @export calc_pop_immunity <- function(pop) { diff --git a/R/is_population.R b/R/is_population.R index 567980a..42bf722 100644 --- a/R/is_population.R +++ b/R/is_population.R @@ -1,15 +1,15 @@ -##' Test if argument is a valid vip_population object +##' Test if argument is a valid popim_population object ##' ##' This function tests whether the supplied argument is a valid ##' population dataframe such as might be generated by the function -##' "vip_population". +##' "popim_population". ##' @param x argument to be tested if it fulfils the requirements for ##' a population dataframe. ##' @param tol numerical, determines the tolerance when comparing two ##' numbers. Defaults to the square root of machine ##' precision. This is used for checking if the cohort == year - ##' age (as the cohort column is redundant). -##' @return logical: TRUE if the argument is a valid vip_population +##' @return logical: TRUE if the argument is a valid popim_population ##' object, FALSE otherwise. ##' @author Tini Garske ##' @noRd diff --git a/R/util_assert.R b/R/util_assert.R index 9a430e5..f72480d 100644 --- a/R/util_assert.R +++ b/R/util_assert.R @@ -125,8 +125,8 @@ assert_is <- function(x, what, name = deparse(substitute(x))) { } assert_population <- function(x, name = deparse(substitute(x))) { - if(!inherits(x, "vip_population")) - stop(sprintf("'%s' must be of class 'vip_population'", name), + if(!inherits(x, "popim_population")) + stop(sprintf("'%s' must be of class 'popim_population'", name), call. = FALSE) } diff --git a/R/vacc_from_immunity.R b/R/vacc_from_immunity.R index 3354022..d1f6667 100644 --- a/R/vacc_from_immunity.R +++ b/R/vacc_from_immunity.R @@ -1,6 +1,6 @@ ##' Infer vaccination activities from population ##' -##' Given a vip_population object and an assumption of how vaccine is +##' Given a popim_population object and an assumption of how vaccine is ##' targeted in a partially immune population, this function infers ##' the vaccination activities that returns a vip_vacc_activities ##' object that details the vaccination activities that have given @@ -26,7 +26,7 @@ ##' also never be picked up as this age group will have aged out of ##' the population (i.e., died) before the immunity is updated in the ##' next year. -##' @param pop vip_population object for which vaccination activities +##' @param pop popim_population object for which vaccination activities ##' are to be inferred ##' @param targeting string to determine the assumption of how doses ##' are allocated. Valid options are "random", "correlated", @@ -68,10 +68,10 @@ vacc_from_immunity <- function(pop, targeting = "random", n_digits = 10) { vaccs } -##' Add the rate of immunity change to a vip_population object +##' Add the rate of immunity change to a popim_population object ##' -##' @param pop vip_population_object -##' @return the input vip_population object with an added column +##' @param pop popim_population_object +##' @return the input popim_population object with an added column ##' `immunity_diff` that holds the difference in immunity between ##' the current and next year. ##' @author Tini Garske diff --git a/R/vip_vacc_activities.R b/R/vip_vacc_activities.R index f86258a..4c09c63 100644 --- a/R/vip_vacc_activities.R +++ b/R/vip_vacc_activities.R @@ -2,7 +2,7 @@ ##' ##' The "vip_vacc_activities" object is a dataframe that holds ##' information on vaccination activities that are typically meant to -##' be applied to a "vip_population" object. +##' be applied to a "popim_population" object. ##' ##' The input parameters are the columns of the "vip_vacc_activities" ##' object to be returned, they should be vectors of the same length, @@ -118,8 +118,8 @@ validate_vacc_activities <- function(x, name = deparse(substitute(x))) { ##' "vip_vacc_activities" object generated here), these can be ##' converted into each other, when both are given, they may be ##' inconsistent with each other once applied to a specific -##' "vip_population" object. The consistency between these two colums -##' cannot be confirmed in without reference to a vip_population +##' "popim_population" object. The consistency between these two colums +##' cannot be confirmed in without reference to a popim_population ##' object, but this function requires that at least one of these is ##' non-missing in each row. ##' @@ -168,13 +168,13 @@ read_vacc_activities <- function(file) { ##' ##' For each line in the "vip_vacc_activities" object the given ##' information of coverage is converted to doses, or vice versa, -##' using the target population size implied by the "vip_population" +##' using the target population size implied by the "popim_population" ##' object supplied. If both coverage and doses are given for any ##' activity, the function checks if they are consistent with the ##' population size, and fails if there are any inconsistencies. ##' ##' @param vaccs vip_vaccination_activities object -##' @param pop_df vip_population object +##' @param pop_df popim_population object ##' @return vip_vaccination_activities object, updated to have both ##' doses and coverage information ##' @author Tini Garske diff --git a/README.Rmd b/README.Rmd index eb1d6e1..2ba61db 100644 --- a/README.Rmd +++ b/README.Rmd @@ -13,7 +13,7 @@ knitr::opts_chunk$set( ) ``` -# vip +# popim [![R-CMD-check](https://github.com/mrc-ide/vip/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/mrc-ide/vip/actions/workflows/R-CMD-check.yaml) @@ -29,29 +29,29 @@ target specific age groups. ## Installation -You can install the development version of vip from +You can install the development version of popim from [GitHub](https://github.com/) with: ``` r # install.packages("devtools") -devtools::install_github("mrc-ide/vip") +devtools::install_github("mrc-ide/popim") ``` ## Example 1 -This package defines an S3 class `vip_population` which is a dataframe +This package defines an S3 class `popim_population` which is a dataframe with at least the columns year, age, cohort (the year of birth for the individuals tracked in this row), and immunity (as a proportion of this cohort). Year, age and cohort are tracked as annual time steps and age groups. A basic, totally naive population dataframe can be setup using the -function `vip_population()`: +function `popim_population()`: ```{r example} -library(vip) +library(popim) -pop <- vip_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2010, +pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2010, age_min = 0, age_max = 10) dim(pop) @@ -112,7 +112,7 @@ diagonal fashion. ## Example 2 A more realistic scenario is to read in some real population data to -set up the vip_population, and then apply some vaccination activities +set up the popim_population, and then apply some vaccination activities to this. Information on the vaccination activities may be given in coverage (typical for routine infant vaccination) or doses (typical for mass vaccination campaigns). @@ -198,7 +198,7 @@ ggplot(pop_agg, aes(x = year, y = immunity, col = region)) + ``` -Given a `vip_population` object, the vaccination activities that would +Given a `popim_population` object, the vaccination activities that would be needed to achieve the specified population immunity can be inferred with the function `vacc_from_immunity()`, given an assumption on the targeting method of the vaccination activities. Using this function on diff --git a/README.md b/README.md index 9e2f7d3..1bdd5b0 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ -# vip +# popim +[![R-CMD-check](https://github.com/mrc-ide/vip/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/mrc-ide/vip/actions/workflows/R-CMD-check.yaml) **Vaccine Immunity Propagation** @@ -17,29 +18,29 @@ age groups. ## Installation -You can install the development version of vip from +You can install the development version of popim from [GitHub](https://github.com/) with: ``` r # install.packages("devtools") -devtools::install_github("mrc-ide/vip") +devtools::install_github("mrc-ide/popim") ``` ## Example 1 -This package defines an S3 class `vip_population` which is a dataframe +This package defines an S3 class `popim_population` which is a dataframe with at least the columns year, age, cohort (the year of birth for the individuals tracked in this row), and immunity (as a proportion of this cohort). Year, age and cohort are tracked as annual time steps and age groups. A basic, totally naive population dataframe can be setup using the -function `vip_population()`: +function `popim_population()`: ``` r -library(vip) +library(popim) -pop <- vip_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2010, +pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2010, age_min = 0, age_max = 10) dim(pop) @@ -115,7 +116,7 @@ fashion. ## Example 2 A more realistic scenario is to read in some real population data to set -up the vip\_population, and then apply some vaccination activities to +up the popim\_population, and then apply some vaccination activities to this. Information on the vaccination activities may be given in coverage (typical for routine infant vaccination) or doses (typical for mass vaccination campaigns). @@ -274,7 +275,7 @@ ggplot(pop_agg, aes(x = year, y = immunity, col = region)) + -Given a `vip_population` object, the vaccination activities that would +Given a `popim_population` object, the vaccination activities that would be needed to achieve the specified population immunity can be inferred with the function `vacc_from_immunity()`, given an assumption on the targeting method of the vaccination activities. Using this function on diff --git a/man/add_immunity_rate.Rd b/man/add_immunity_rate.Rd index a00b554..96eee5d 100644 --- a/man/add_immunity_rate.Rd +++ b/man/add_immunity_rate.Rd @@ -2,20 +2,20 @@ % Please edit documentation in R/vacc_from_immunity.R \name{add_immunity_rate} \alias{add_immunity_rate} -\title{Add the rate of immunity change to a vip_population object} +\title{Add the rate of immunity change to a popim_population object} \usage{ add_immunity_rate(pop) } \arguments{ -\item{pop}{vip_population_object} +\item{pop}{popim_population_object} } \value{ -the input vip_population object with an added column +the input popim_population object with an added column \code{immunity_diff} that holds the difference in immunity between the current and next year. } \description{ -Add the rate of immunity change to a vip_population object +Add the rate of immunity change to a popim_population object } \author{ Tini Garske diff --git a/man/apply_vacc.Rd b/man/apply_vacc.Rd index 318744d..575de5a 100644 --- a/man/apply_vacc.Rd +++ b/man/apply_vacc.Rd @@ -17,7 +17,7 @@ apply_vacc( } \arguments{ \item{pop_df}{population dataframe object such as created by -function 'vip_population'} +function 'popim_population'} \item{region}{region of the vaccination activity} @@ -52,7 +52,7 @@ updated immunity to reflect the vaccination activity. If the vaccination activity has non-missing entries for both coverage and doses, the coverage is used - there is no test whether the coverage and doses information are consistent with the -target population size in the vip_population object to which the +target population size in the popim_population object to which the vaccination activity is applied. } \author{ diff --git a/man/apply_vaccs.Rd b/man/apply_vaccs.Rd index a54b0de..d4456d5 100644 --- a/man/apply_vaccs.Rd +++ b/man/apply_vaccs.Rd @@ -7,8 +7,8 @@ apply_vaccs(pop_df, vaccs_df) } \arguments{ -\item{pop_df}{object of class vip_population such as created by -function 'vip_population'} +\item{pop_df}{object of class popim_population such as created by +function 'popim_population'} \item{vaccs_df}{object of class 'vip_vacc_activities' such as created by reading from file with function @@ -22,7 +22,7 @@ supplied in vaccs_df. \description{ Takes the vaccination activities listed in the input object vaccs_df (a data.frame object of class vip_vacc_activities), and -applies them to the vip_population object pop_df, then returns +applies them to the popim_population object pop_df, then returns that updated object. } \author{ diff --git a/man/calc_pop_immunity.Rd b/man/calc_pop_immunity.Rd index 6fdd5bb..6e0fe8f 100644 --- a/man/calc_pop_immunity.Rd +++ b/man/calc_pop_immunity.Rd @@ -3,20 +3,20 @@ \name{calc_pop_immunity} \alias{calc_pop_immunity} \title{Calculate the overall population immunity (aggregating over age) -from the supplied vip_population object} +from the supplied popim_population object} \usage{ calc_pop_immunity(pop) } \arguments{ -\item{pop}{vip_population object for which the population size and +\item{pop}{popim_population object for which the population size and immunity will be aggregated over age.} } \value{ -dataframe containing the vip_population aggregated by age. +dataframe containing the popim_population aggregated by age. } \description{ Calculate the overall population immunity (aggregating over age) -from the supplied vip_population object +from the supplied popim_population object } \author{ Tini Garske diff --git a/man/complete_vacc_activities.Rd b/man/complete_vacc_activities.Rd index bcbb25a..1f4973e 100644 --- a/man/complete_vacc_activities.Rd +++ b/man/complete_vacc_activities.Rd @@ -10,7 +10,7 @@ complete_vacc_activities(vaccs, pop_df) \arguments{ \item{vaccs}{vip_vaccination_activities object} -\item{pop_df}{vip_population object} +\item{pop_df}{popim_population object} } \value{ vip_vaccination_activities object, updated to have both @@ -19,7 +19,7 @@ doses and coverage information \description{ For each line in the "vip_vacc_activities" object the given information of coverage is converted to doses, or vice versa, -using the target population size implied by the "vip_population" +using the target population size implied by the "popim_population" object supplied. If both coverage and doses are given for any activity, the function checks if they are consistent with the population size, and fails if there are any inconsistencies. diff --git a/man/coverage_from_doses.Rd b/man/coverage_from_doses.Rd index 6f835a5..6868973 100644 --- a/man/coverage_from_doses.Rd +++ b/man/coverage_from_doses.Rd @@ -8,8 +8,8 @@ given number of doses} coverage_from_doses(pop_df, doses, region, year, age_first = 0, age_last = Inf) } \arguments{ -\item{pop_df}{object of class vip_population such as created by -function \code{vip_population}} +\item{pop_df}{object of class popim_population such as created by +function \code{popim_population}} \item{doses}{number of vaccine doses available for the vaccination activity} diff --git a/man/doses_from_coverage.Rd b/man/doses_from_coverage.Rd index 14f3b2a..62ed13b 100644 --- a/man/doses_from_coverage.Rd +++ b/man/doses_from_coverage.Rd @@ -15,8 +15,8 @@ doses_from_coverage( ) } \arguments{ -\item{pop_df}{object of class vip_population such as created by -function \code{vip_population}} +\item{pop_df}{object of class popim_population such as created by +function \code{popim_population}} \item{coverage}{proportion of the target population to be covered, 0 <= coverage <= 1} diff --git a/man/figures/README-calc_pop_immunity-1.png b/man/figures/README-calc_pop_immunity-1.png index e53055f524d890ee4b7b4d0708aecdc4a49a2614..4a46ad0ee6e296ab39906ad336833d35d8cb0be7 100644 GIT binary patch literal 21777 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 L3^9cl?SlRTVNkH3 diff --git a/man/popim-package.Rd b/man/popim-package.Rd index 8c2bad9..175cf01 100644 --- a/man/popim-package.Rd +++ b/man/popim-package.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/vip-package.R +% Please edit documentation in R/popim-package.R \docType{package} \name{popim-package} \alias{popim} diff --git a/man/vip_population.Rd b/man/popim_population.Rd similarity index 80% rename from man/vip_population.Rd rename to man/popim_population.Rd index 16452e4..ddec3c3 100644 --- a/man/vip_population.Rd +++ b/man/popim_population.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/vip_population.R -\name{vip_population} -\alias{vip_population} -\title{Constructor of an object of the "vip_population" class} +% Please edit documentation in R/popim_population.R +\name{popim_population} +\alias{popim_population} +\title{Constructor of an object of the "popim_population" class} \usage{ -vip_population( +popim_population( region = character(), year_min = integer(), year_max = integer(), @@ -26,7 +26,7 @@ vip_population( 100. Must be non-negative, and >= age_min.} } \value{ -S3 object of class "vip_population": a dataframe with +S3 object of class "popim_population": a dataframe with columns region, year, age, cohort, immunity and pop_size, where year and age cover the ranges given by the input parameters. Cohort = year - age and gives the year of @@ -35,7 +35,7 @@ handling. Immunity and pop_size are initialised as 0 and NA, respectively, throughout the whole population. } \description{ -The "vip_population" object is a dataframe that models an +The "popim_population" object is a dataframe that models an age-structured population through time, tracking population size and vaccine-induced immunity in the population. } @@ -51,9 +51,9 @@ immunity can be generated through applying vaccination activities to the population with \code{\link[=apply_vaccs]{apply_vaccs()}}. } \examples{ -pop <- vip_population(region = "UK", year_min = 2000, year_max = 2010) +pop <- popim_population(region = "UK", year_min = 2000, year_max = 2010) -pop <- vip_population(region = c("FRA", "UK"), +pop <- popim_population(region = c("FRA", "UK"), year_min = 2000, year_max = 2010, age_min = 0, age_max = 80) diff --git a/man/read_vacc_activities.Rd b/man/read_vacc_activities.Rd index 047d749..28f82ef 100644 --- a/man/read_vacc_activities.Rd +++ b/man/read_vacc_activities.Rd @@ -47,8 +47,8 @@ population size (which is not recorded in the "vip_vacc_activities" object generated here), these can be converted into each other, when both are given, they may be inconsistent with each other once applied to a specific -"vip_population" object. The consistency between these two colums -cannot be confirmed in without reference to a vip_population +"popim_population" object. The consistency between these two colums +cannot be confirmed in without reference to a popim_population object, but this function requires that at least one of these is non-missing in each row. diff --git a/man/vacc_from_immunity.Rd b/man/vacc_from_immunity.Rd index 32b9b44..c73e4ca 100644 --- a/man/vacc_from_immunity.Rd +++ b/man/vacc_from_immunity.Rd @@ -7,7 +7,7 @@ vacc_from_immunity(pop, targeting = "random", n_digits = 10) } \arguments{ -\item{pop}{vip_population object for which vaccination activities +\item{pop}{popim_population object for which vaccination activities are to be inferred} \item{targeting}{string to determine the assumption of how doses @@ -21,7 +21,7 @@ rounded.} vip_vacc_activites object } \description{ -Given a vip_population object and an assumption of how vaccine is +Given a popim_population object and an assumption of how vaccine is targeted in a partially immune population, this function infers the vaccination activities that returns a vip_vacc_activities object that details the vaccination activities that have given diff --git a/man/vip_pop_from_file.Rd b/man/vip_pop_from_file.Rd index c6773be..c517234 100644 --- a/man/vip_pop_from_file.Rd +++ b/man/vip_pop_from_file.Rd @@ -1,8 +1,8 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/vip_population.R +% Please edit documentation in R/popim_population.R \name{vip_pop_from_file} \alias{vip_pop_from_file} -\title{Reading vip_population data from a .csv file} +\title{Reading popim_population data from a .csv file} \usage{ vip_pop_from_file(file) } @@ -12,13 +12,13 @@ are to be read. If it does not contain an absolute path, the file name is relative to the current working directory.} } \value{ -An object of class "vip_population", a dataframe with one row +An object of class "popim_population", a dataframe with one row per birth cohort/year/region, with columns "region", "year", "age", "cohort", "immunity", "pop_size". } \description{ Reads a population data from a .csv file, checks if -the data fulfils the requirements for a "vip_population" +the data fulfils the requirements for a "popim_population" object, and if so returns this object. } \details{ @@ -36,7 +36,7 @@ Limitations for values: } } \seealso{ -\code{\link[=vip_population]{vip_population()}} for details of the S3 class, and +\code{\link[=popim_population]{popim_population()}} for details of the S3 class, and \code{\link[utils:read.table]{utils::read.csv()}} which handles the reading of the .csv file. } diff --git a/popim goals and terminology.docx b/popim goals and terminology.docx new file mode 100644 index 0000000000000000000000000000000000000000..11ee9e1d2c6e8aaec24bbf9a8293a168b6ca5d7f GIT binary patch literal 22365 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 literal 0 HcmV?d00001 diff --git a/tests/testthat/test-add_immunity_rate.R b/tests/testthat/test-add_immunity_rate.R index 8c50afb..34c42bc 100644 --- a/tests/testthat/test-add_immunity_rate.R +++ b/tests/testthat/test-add_immunity_rate.R @@ -5,7 +5,7 @@ test_that("add_immunity_rate adds a column immunity_diff correctly", { year_max <- 2005 age_min <- 0 age_max <- 4 - pop <- vip_population(region = "UK", year_min, year_max, + pop <- popim_population(region = "UK", year_min, year_max, age_min, age_max) pop$pop_size <- 100 @@ -50,7 +50,7 @@ test_that("add_immunity_rate works when pop already has an immunity_diff column" year_max <- 2005 age_min <- 0 age_max <- 4 - pop <- vip_population(region = "UK", year_min, year_max, + pop <- popim_population(region = "UK", year_min, year_max, age_min, age_max) pop_1 <- add_immunity_rate(pop) diff --git a/tests/testthat/test-apply_vacc.R b/tests/testthat/test-apply_vacc.R index b5a412b..541090a 100644 --- a/tests/testthat/test-apply_vacc.R +++ b/tests/testthat/test-apply_vacc.R @@ -1,6 +1,6 @@ test_that("apply_vacc modifies the correct rows", { - df <- vip_population("UK", 2000, 2005, 0, 5) + df <- popim_population("UK", 2000, 2005, 0, 5) df <- apply_vacc(df, region = "UK", year = 2000, age_first = 0, age_last = 0, coverage = 0.2, doses = NA, targeting = "random") diff --git a/tests/testthat/test-apply_vaccs.R b/tests/testthat/test-apply_vaccs.R index e6b7b95..2d98858 100644 --- a/tests/testthat/test-apply_vaccs.R +++ b/tests/testthat/test-apply_vaccs.R @@ -1,6 +1,6 @@ test_that("apply_vaccs correctly uses apply_vacc for a single vacc_activity", { ## get a population object - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2010, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2010, age_min = 0, age_max = 10) ## get a vaccine object vacc <- new_vacc_activities(region = "UK", year = 2001, @@ -21,7 +21,7 @@ test_that("apply_vaccs correctly uses apply_vacc for a single vacc_activity", { }) test_that("apply_vaccs gives the same result as apply_vacc used twice for two activities", { ## get a population object - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2010, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2010, age_min = 0, age_max = 10) ## get a vaccine object vacc <- new_vacc_activities(region = "UK", year = c(2001, 2003), diff --git a/tests/testthat/test-calc_pop_immunity.R b/tests/testthat/test-calc_pop_immunity.R index dec5e94..4057ca0 100644 --- a/tests/testthat/test-calc_pop_immunity.R +++ b/tests/testthat/test-calc_pop_immunity.R @@ -1,6 +1,6 @@ test_that("calc_pop_immunity aggregates correctly over age", { ## a sample population with missing pop_size - pop <- vip_population(region = "UK", year_min = 2001, year_max = 2003, + pop <- popim_population(region = "UK", year_min = 2001, year_max = 2003, age_min = 0, age_max = 4) pop_exp <- data.frame(region = "UK", year = 2001:2003, @@ -9,7 +9,7 @@ test_that("calc_pop_immunity aggregates correctly over age", { ## a sample population with 0 immunity - pop <- vip_population(region = "UK", year_min = 2001, year_max = 2003, + pop <- popim_population(region = "UK", year_min = 2001, year_max = 2003, age_min = 0, age_max = 4) pop$pop_size <- 100 @@ -30,7 +30,7 @@ test_that("calc_pop_immunity aggregates correctly over age", { expect_equal(pop |> calc_pop_immunity() |> as.data.frame(), pop_exp) ## a sample population with 2 regions - pop <- vip_population(region = c("FRA", "UK"), + pop <- popim_population(region = c("FRA", "UK"), year_min = 2000, year_max = 2000, age_min = 0, age_max = 4) pop$pop_size = 100 diff --git a/tests/testthat/test-complete_vacc_activities.R b/tests/testthat/test-complete_vacc_activities.R index ef70ba0..e69b769 100644 --- a/tests/testthat/test-complete_vacc_activities.R +++ b/tests/testthat/test-complete_vacc_activities.R @@ -1,6 +1,6 @@ test_that("complete_vacc_activities adds appropriate doses information for a single activity", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -15,7 +15,7 @@ test_that("complete_vacc_activities adds appropriate doses information for a sin test_that("complete_vacc_activities adds appropriate doses information for several activities", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -30,7 +30,7 @@ test_that("complete_vacc_activities adds appropriate doses information for sever test_that("complete_vacc_activities adds appropriate coverage information for a single activity", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -45,7 +45,7 @@ test_that("complete_vacc_activities adds appropriate coverage information for a test_that("complete_vacc_activities adds appropriate coverage information for several activities", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -60,7 +60,7 @@ test_that("complete_vacc_activities adds appropriate coverage information for se test_that("complete_vacc_activities flags inconsistend coverage and doses information for a single activity", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -73,7 +73,7 @@ test_that("complete_vacc_activities flags inconsistend coverage and doses inform test_that("complete_vacc_activities adds appropriate coverage information for several activities", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 @@ -90,7 +90,7 @@ test_that("complete_vacc_activities adds appropriate coverage information for se test_that("complete_vacc_activities fails conflicting coverage/doses information for several activities", { - pop <- vip_population(region = "UK", year_min = 2000, year_max = 2002, + pop <- popim_population(region = "UK", year_min = 2000, year_max = 2002, age_min = 0, age_max = 5) pop$pop_size <- 100 diff --git a/tests/testthat/test-coverage_from_doses.R b/tests/testthat/test-coverage_from_doses.R index 2278c93..a216a61 100644 --- a/tests/testthat/test-coverage_from_doses.R +++ b/tests/testthat/test-coverage_from_doses.R @@ -1,5 +1,5 @@ test_that("coverage_from_doses returns the correct coverage for sensible inputs", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 @@ -25,7 +25,7 @@ test_that("coverage_from_doses returns the correct coverage for sensible inputs" }) test_that("coverage_from_doses fails if the population object doesn't contain all targeted cohorts", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 @@ -42,7 +42,7 @@ test_that("coverage_from_doses fails if the population object doesn't contain al }) test_that("coverage_from_doses fails for silly input values", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 diff --git a/tests/testthat/test-doses_from_coverage.R b/tests/testthat/test-doses_from_coverage.R index 7255cd4..39a8284 100644 --- a/tests/testthat/test-doses_from_coverage.R +++ b/tests/testthat/test-doses_from_coverage.R @@ -1,5 +1,5 @@ test_that("doses_from_coverage returns the correct number of doses for sensible inputs", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 @@ -20,7 +20,7 @@ test_that("doses_from_coverage returns the correct number of doses for sensible }) test_that("doses_from_coverage fails if the population object doesn't contain all targeted cohorts", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 @@ -37,7 +37,7 @@ test_that("doses_from_coverage fails if the population object doesn't contain al }) test_that("coses_from_coverage fails for silly input values", { - pop <- vip_population(region = c("UK", "FRA"), + pop <- popim_population(region = c("UK", "FRA"), year_min = 2000, year_max = 2005, age_min = 0, age_max = 3) pop$pop_size <- 100 diff --git a/tests/testthat/test-is_population.R b/tests/testthat/test-is_population.R index 9470a3d..1bca2d3 100644 --- a/tests/testthat/test-is_population.R +++ b/tests/testthat/test-is_population.R @@ -1,11 +1,11 @@ -test_that("vip_population generates a df that passes the is_population check", { - expect_true(is_population(vip_population("UK", 2000, 2005))) - expect_true(is_population(vip_population("UK", 0, 100, 5, 10))) +test_that("popim_population generates a df that passes the is_population check", { + expect_true(is_population(popim_population("UK", 2000, 2005))) + expect_true(is_population(popim_population("UK", 0, 100, 5, 10))) }) test_that("is_population rejects df with missing columns", { - df <- vip_population("UK", 2000, 2010) + df <- popim_population("UK", 2000, 2010) df$cohort <- NULL expect_false(is_population(df)) @@ -13,7 +13,7 @@ test_that("is_population rejects df with missing columns", { test_that("is_population rejects df with incorrectly typed columns", { - df <- vip_population("UK", 2000, 2010, 0, 10) + df <- popim_population("UK", 2000, 2010, 0, 10) df$year <- "a" expect_false(is_population(df)) @@ -21,7 +21,7 @@ test_that("is_population rejects df with incorrectly typed columns", { test_that("is_population rejects df with negative ages", { - df <- vip_population("UK", 2000, 2005, 0, 5) + df <- popim_population("UK", 2000, 2005, 0, 5) df$age <- df$age - 2 expect_false(is_population(df)) @@ -29,18 +29,18 @@ test_that("is_population rejects df with negative ages", { test_that("is_population rejects df with immunity outside (0, 1)", { - df <- vip_population("UK", 2000, 2005, 0, 5) + df <- popim_population("UK", 2000, 2005, 0, 5) df$immunity[5] <- -1 expect_false(is_population(df)) - df <- vip_population("UK", 2000, 2005, 0, 5) + df <- popim_population("UK", 2000, 2005, 0, 5) df$immunity[5] <- 1.3 expect_false(is_population(df)) }) test_that("is_population rejects when attributes are missing", { - df <- vip_population("UK", 2000, 2003, 0, 2) + df <- popim_population("UK", 2000, 2003, 0, 2) attr(df, "region") <- NULL expect_false(is_population(df)) diff --git a/tests/testthat/test-popim_population.R b/tests/testthat/test-popim_population.R new file mode 100644 index 0000000..51e37e9 --- /dev/null +++ b/tests/testthat/test-popim_population.R @@ -0,0 +1,12 @@ +test_that("popim_population returns a dataframe of expected dimensions", { + + pop <- popim_population("UK", 2000, 2005) + expect_equal(dim(pop), c(606, 6)) +}) + +test_that("popim_population fails for invalid inputs", { + expect_error(popim_population(2000, 2005)) + expect_error(popim_population("UK", 18, 10, 0, 10)) + expect_error(popim_population("UK", 2000:2005, 0, 100)) + expect_error(popim_population("UK", 2000, 2005, -1, 5)) +}) diff --git a/tests/testthat/test-vacc_from_immunity.R b/tests/testthat/test-vacc_from_immunity.R index dd40c07..be7cc3f 100644 --- a/tests/testthat/test-vacc_from_immunity.R +++ b/tests/testthat/test-vacc_from_immunity.R @@ -1,6 +1,6 @@ test_that("vacc_from_immunity returns the correct vacc_activities for random targeting", { - pop0 <- vip_population(region = "UK", year_min = 2000, year_max = 2005, + pop0 <- popim_population(region = "UK", year_min = 2000, year_max = 2005, age_min = 0, age_max = 4) pop0$pop_size <- 100 @@ -68,7 +68,7 @@ test_that("vacc_from_immunity returns the correct vacc_activities for random tar test_that("vacc_from_immunity returns the correct vacc_activities for non-random targeting", { - pop0 <- vip_population(region = "UK", year_min = 2000, year_max = 2005, + pop0 <- popim_population(region = "UK", year_min = 2000, year_max = 2005, age_min = 0, age_max = 4) pop0$pop_size <- 100 @@ -120,7 +120,7 @@ test_that("vacc_from_immunity returns the correct vacc_activities for non-random test_that("vacc_from_immunity behaves sensibly with no change in immunity", { - pop0 <- vip_population(region = "UK", year_min = 2000, year_max = 2005, + pop0 <- popim_population(region = "UK", year_min = 2000, year_max = 2005, age_min = 0, age_max = 4) pop0$pop_size <- 100 diff --git a/tests/testthat/test-vip_population.R b/tests/testthat/test-vip_population.R deleted file mode 100644 index db6735e..0000000 --- a/tests/testthat/test-vip_population.R +++ /dev/null @@ -1,12 +0,0 @@ -test_that("vip_population returns a dataframe of expected dimensions", { - - pop <- vip_population("UK", 2000, 2005) - expect_equal(dim(pop), c(606, 6)) -}) - -test_that("vip_population fails for invalid inputs", { - expect_error(vip_population(2000, 2005)) - expect_error(vip_population("UK", 18, 10, 0, 10)) - expect_error(vip_population("UK", 2000:2005, 0, 100)) - expect_error(vip_population("UK", 2000, 2005, -1, 5)) -})