From da28a28d917a94dd1e3d9ed0a09bdf2667f59297 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 21 Oct 2024 16:34:24 -0700 Subject: [PATCH 01/48] Make `extra_keys =` into soft "deprecation" of a different behavior to ease epipredict transition. --- DESCRIPTION | 2 +- R/key_colnames.R | 19 +++++++++++++++---- tests/testthat/test-key_colnames.R | 30 ++++++++++++++---------------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 502dfccba..88a7ab5da 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: epiprocess Type: Package Title: Tools for basic signal processing in epidemiology -Version: 0.10.1 +Version: 0.10.2 Authors@R: c( person("Jacob", "Bien", role = "ctb"), person("Logan", "Brooks", , "lcbrooks+github@andrew.cmu.edu", role = c("aut", "cre")), diff --git a/R/key_colnames.R b/R/key_colnames.R index 0d8e777f9..3d7009753 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -27,7 +27,16 @@ #' @keywords internal #' @export key_colnames <- function(x, ..., exclude = character()) { - UseMethod("key_colnames") + provided_args <- rlang::call_args_names(rlang::call_match()) + if ("extra_keys" %in% provided_args) { + lifecycle::deprecate_soft("0.9.6", "key_colnames(extra_keys=)", "key_colnames(other_keys=)") + redispatch <- function(..., extra_keys) { + key_colnames(..., other_keys = extra_keys) + } + redispatch(x, ..., exclude = exclude) + } else { + UseMethod("key_colnames") + } } #' @rdname key_colnames @@ -44,7 +53,7 @@ key_colnames.data.frame <- function(x, ..., assert_character(time_keys) assert_character(other_keys) assert_character(exclude) - keys = c(geo_keys, other_keys, time_keys) + keys <- c(geo_keys, other_keys, time_keys) if (!all(keys %in% names(x))) { cli_abort(c( "Some of the specified key columns aren't present in `x`", @@ -67,11 +76,13 @@ key_colnames.epi_df <- function(x, ..., check_dots_empty0(...) if (!identical(geo_keys, "geo_value")) { cli_abort('If `x` is an `epi_df`, then `geo_keys` must be `"geo_value"`', - class = "epiprocess__key_colnames__mismatched_geo_keys") + class = "epiprocess__key_colnames__mismatched_geo_keys" + ) } if (!identical(time_keys, "time_value")) { cli_abort('If `x` is an `epi_df`, then `time_keys` must be `"time_value"`', - class = "epiprocess__key_colnames__mismatched_time_keys") + class = "epiprocess__key_colnames__mismatched_time_keys" + ) } expected_other_keys <- attr(x, "metadata")$other_keys if (is.null(other_keys)) { diff --git a/tests/testthat/test-key_colnames.R b/tests/testthat/test-key_colnames.R index 250c6049f..86ae1c991 100644 --- a/tests/testthat/test-key_colnames.R +++ b/tests/testthat/test-key_colnames.R @@ -1,4 +1,5 @@ test_that("`key_colnames` on non-`epi_df`-like tibbles works as expected", { + withr::local_options(list(lifecycle_verbosity = "warning")) # for extra_keys tests k1k2_tbl <- tibble::tibble(k1 = 1, k2 = 1) @@ -35,11 +36,9 @@ test_that("`key_colnames` on non-`epi_df`-like tibbles works as expected", { key_colnames(k1k2_tbl, geo_keys = c("k1", "k2"), other_keys = character(0L)), c("k1", "k2") ) - }) test_that("`key_colnames` on `epi_df`s and similar tibbles works as expected", { - gat_tbl <- tibble::tibble(geo_value = 1, age_group = 1, time_value = 1) gat_edf <- as_epi_df(gat_tbl, other_keys = "age_group", as_of = 2) @@ -76,16 +75,6 @@ test_that("`key_colnames` on `epi_df`s and similar tibbles works as expected", { class = "epiprocess__key_colnames__mismatched_time_keys" ) - # For either class, `extra_keys` is not accepted: - expect_error( - key_colnames(gat_tbl, extra_keys = "age_group"), - class = "rlib_error_dots_nonempty" - ) - expect_error( - key_colnames(gat_edf, extra_keys = "age_group"), - class = "rlib_error_dots_nonempty" - ) - # We can exclude keys: expect_equal( key_colnames(gat_tbl, other_keys = "age_group", exclude = c("time_value")), @@ -104,10 +93,22 @@ test_that("`key_colnames` on `epi_df`s and similar tibbles works as expected", { c("age_group") ) + # Using `extra_keys =` is soft-deprecated and routes to `other_keys =`: + expect_warning( + gat_tbl_extra_keys_res <- key_colnames(gat_tbl, extra_keys = "age_group"), + class = "lifecycle_warning_deprecated" + ) + expect_equal(gat_tbl_extra_keys_res, c("geo_value", "age_group", "time_value")) + + expect_warning( + gat_edf_extra_keys_exclude_res <- + key_colnames(gat_edf, extra_keys = "age_group", exclude = c("geo_value", "time_value")), + class = "lifecycle_warning_deprecated" + ) + expect_equal(gat_edf_extra_keys_exclude_res, c("age_group")) }) test_that("`key_colnames` on tsibbles works as expected", { - k1k2i_tsbl <- tsibble::tsibble(k1 = 1, k2 = 1, i = 1, key = c(k1, k2), index = i) # Normal operation: @@ -133,11 +134,9 @@ test_that("`key_colnames` on tsibbles works as expected", { key_colnames(k1k2i_tsbl %>% tsibble::index_by(fake_coarser_i = i)), class = "epiprocess__key_colnames__incomplete_reindexing_operation" ) - }) test_that("`key_colnames` on `epi_archive`s works as expected", { - gatv_ea <- tibble(geo_value = 1, age_group = 1, time_value = 1, version = 2) %>% as_epi_archive(other_keys = "age_group") @@ -168,5 +167,4 @@ test_that("`key_colnames` on `epi_archive`s works as expected", { key_colnames(gatv_ea, exclude = c("version", "time_value")), c("geo_value", "age_group") ) - }) From 8b5d9053ae91ca28b40b583c38510bf36f681bd3 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 9 Oct 2024 16:35:31 -0700 Subject: [PATCH 02/48] fix(revision_summary): use selected value col, not last col --- R/revision_analysis.R | 3 ++- tests/testthat/test-revision-latency-functions.R | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 8efc4fce2..4879b1032 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -82,6 +82,7 @@ revision_summary <- function(epi_arch, rel_spread_threshold = 0.1, compactify_tol = .Machine$double.eps^0.5, should_compactify = TRUE) { + assert_class(epi_arch, "epi_archive") arg <- names(eval_select(rlang::expr(c(...)), allow_rename = FALSE, data = epi_arch$DT)) if (length(arg) == 0) { # Choose the first column that's not a key or version @@ -91,7 +92,7 @@ revision_summary <- function(epi_arch, } if (is.null(abs_spread_threshold)) { abs_spread_threshold <- .05 * epi_arch$DT %>% - pull(...) %>% + pull(!!arg) %>% max(na.rm = TRUE) } # for each time_value, get diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index ff7220684..df10937a8 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -35,7 +35,17 @@ test_that("revision_summary works for a dummy dataset", { expect_snapshot(dummy_ex %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, width = 300)) }) test_that("tidyselect is functional", { - expect_no_error(revision_summary(dummy_ex, value)) - expect_no_error(revision_summary(dummy_ex, starts_with("val"))) + expect_no_error(quiet(revision_summary(dummy_ex, value))) + expect_no_error(quiet(revision_summary(dummy_ex, starts_with("val")))) + with_later_key_col <- dummy_ex$DT %>% + select(geo_value, time_value, value, version) %>% + as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) + expect_equal(quiet(revision_summary(with_later_key_col)), + quiet(revision_summary(dummy_ex))) + with_later_val_col <- dummy_ex$DT %>% + mutate(value2 = 0) %>% + as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) + expect_equal(quiet(revision_summary(with_later_val_col, value)), + quiet(revision_summary(dummy_ex, value))) }) test_that("revision_summary works for various timetypes", {}) From 06c5d1bdc58e357f03d255251781717aab742872 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 9 Oct 2024 17:43:34 -0700 Subject: [PATCH 03/48] Tweak revision_summary tidyselect, remove redundant arrange * Produce error rather than default selection when user provides a tidyselection in ... but it selects zero columns. * Change time_within_x_latest to take `values` as a vector * Use `.data` instead of `pick` etc. in some places --- NAMESPACE | 1 + R/revision_analysis.R | 48 +++++++++++-------- man/f_no_na.Rd | 4 +- man/time_within_x_latest.Rd | 2 +- .../test-revision-latency-functions.R | 39 ++++++++------- 5 files changed, 54 insertions(+), 40 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 1269c5ef7..1da07e538 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -195,6 +195,7 @@ importFrom(rlang,caller_arg) importFrom(rlang,caller_env) importFrom(rlang,check_dots_empty) importFrom(rlang,check_dots_empty0) +importFrom(rlang,dots_n) importFrom(rlang,enquo) importFrom(rlang,enquos) importFrom(rlang,env) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 4879b1032..488689ff1 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -67,7 +67,7 @@ #' #' @export #' @importFrom cli cli_inform cli_abort cli_li -#' @importFrom rlang list2 syms +#' @importFrom rlang list2 syms dots_n #' @importFrom dplyr mutate group_by arrange filter if_any all_of across pull pick c_across #' everything ungroup summarize if_else %>% revision_summary <- function(epi_arch, @@ -83,12 +83,19 @@ revision_summary <- function(epi_arch, compactify_tol = .Machine$double.eps^0.5, should_compactify = TRUE) { assert_class(epi_arch, "epi_archive") - arg <- names(eval_select(rlang::expr(c(...)), allow_rename = FALSE, data = epi_arch$DT)) - if (length(arg) == 0) { - # Choose the first column that's not a key or version + if (dots_n(...) == 0) { + # Choose the first column that's not a key: arg <- setdiff(names(epi_arch$DT), key_colnames(epi_arch))[[1]] - } else if (length(arg) > 1) { - cli_abort("Not currently implementing more than one column at a time. Run each separately") + } else { + arg <- names(eval_select(rlang::expr(c(...)), allow_rename = FALSE, data = epi_arch$DT)) + if (length(arg) == 0) { + cli_abort("Could not find any columns matching the selection in `...`.", + class = "epiprocess__revision_summary__selected_zero_columns" + ) + } + if (length(arg) > 1) { + cli_abort("Not currently implementing more than one column at a time. Run each separately.") + } } if (is.null(abs_spread_threshold)) { abs_spread_threshold <- .05 * epi_arch$DT %>% @@ -102,10 +109,12 @@ revision_summary <- function(epi_arch, # the max lag # # revision_tibble - keys <- key_colnames(epi_arch, exclude = "version") + epikey_names <- key_colnames(epi_arch, exclude = c("time_value", "version")) + epikeytime_names <- c(epikey_names, "time_value") + keys <- c(epikeytime_names, "version") revision_behavior <- epi_arch$DT %>% - select(all_of(unique(c("geo_value", "time_value", keys, "version", arg)))) + select(all_of(unique(c(keys, arg)))) if (!is.null(min_waiting_period)) { revision_behavior <- revision_behavior %>% filter(abs(time_value - as.Date(epi_arch$versions_end)) >= min_waiting_period) @@ -115,27 +124,26 @@ revision_summary <- function(epi_arch, # if we're dropping NA's, we should recompactify revision_behavior <- revision_behavior %>% - filter(!is.na(c_across(!!arg))) + filter(!is.na(.data[[arg]])) } else { revision_behavior <- epi_arch$DT } if (should_compactify) { revision_behavior <- revision_behavior %>% - arrange(across(c(geo_value, time_value, all_of(keys), version))) %>% # need to sort before compactifying - apply_compactify(c(keys, version), compactify_tol) + apply_compactify(keys, compactify_tol) } revision_behavior <- revision_behavior %>% mutate(lag = as.integer(version) - as.integer(time_value)) %>% # nolint: object_usage_linter - group_by(across(all_of(keys))) %>% # group by all the keys + group_by(across(all_of(epikeytime_names))) %>% # group = versions of one measurement summarize( n_revisions = dplyr::n() - 1, min_lag = min(lag), # nolint: object_usage_linter max_lag = max(lag), # nolint: object_usage_linter - min_value = f_no_na(min, pick(!!arg)), - max_value = f_no_na(max, pick(!!arg)), - median_value = f_no_na(median, pick(!!arg)), - time_to = time_within_x_latest(lag, pick(!!arg), prop = within_latest), # nolint: object_usage_linter + min_value = f_no_na(min, .data[[arg]]), + max_value = f_no_na(max, .data[[arg]]), + median_value = f_no_na(median, .data[[arg]]), + time_to = time_within_x_latest(lag, .data[[arg]], prop = within_latest), .groups = "drop" ) %>% mutate( @@ -148,7 +156,7 @@ revision_summary <- function(epi_arch, ) %>% select(-time_to) %>% relocate( - time_value, geo_value, all_of(keys), n_revisions, min_lag, max_lag, # nolint: object_usage_linter + time_value, geo_value, all_of(epikey_names), n_revisions, min_lag, max_lag, # nolint: object_usage_linter time_near_latest, spread, rel_spread, min_value, max_value, median_value # nolint: object_usage_linter ) if (print_inform) { @@ -206,10 +214,9 @@ revision_summary <- function(epi_arch, } #' pull the value from lags when values starts indefinitely being within prop of it's last value. -#' @param values this should be a 1 column tibble. errors may occur otherwise +#' @param values this should be a vector (e.g., a column). errors may occur otherwise #' @keywords internal time_within_x_latest <- function(lags, values, prop = .2) { - values <- values[[1]] latest_value <- values[[length(values)]] close_enough <- abs(values - latest_value) < prop * latest_value # we want to ignore any stretches where it's close, but goes farther away later @@ -225,11 +232,10 @@ time_within_x_latest <- function(lags, values, prop = .2) { #' @keywords internal get_last_run <- function(bool_vec, values_from) { runs <- rle(bool_vec) - length(bool_vec) - tail(runs$lengths, n = 1) values_from[[length(bool_vec) - tail(runs$lengths, n = 1) + 1]] } -#' use when the default behavior returns a warning on empty lists, which we do +#' use when the default behavior returns a warning on empty vectors, which we do #' not want, and there is no super clean way of preventing this #' @keywords internal f_no_na <- function(f, x) { diff --git a/man/f_no_na.Rd b/man/f_no_na.Rd index 9a832d729..1e3acb6f7 100644 --- a/man/f_no_na.Rd +++ b/man/f_no_na.Rd @@ -2,13 +2,13 @@ % Please edit documentation in R/revision_analysis.R \name{f_no_na} \alias{f_no_na} -\title{use when the default behavior returns a warning on empty lists, which we do +\title{use when the default behavior returns a warning on empty vectors, which we do not want, and there is no super clean way of preventing this} \usage{ f_no_na(f, x) } \description{ -use when the default behavior returns a warning on empty lists, which we do +use when the default behavior returns a warning on empty vectors, which we do not want, and there is no super clean way of preventing this } \keyword{internal} diff --git a/man/time_within_x_latest.Rd b/man/time_within_x_latest.Rd index 1dd7e8010..9faa31609 100644 --- a/man/time_within_x_latest.Rd +++ b/man/time_within_x_latest.Rd @@ -7,7 +7,7 @@ time_within_x_latest(lags, values, prop = 0.2) } \arguments{ -\item{values}{this should be a 1 column tibble. errors may occur otherwise} +\item{values}{this should be a vector (e.g., a column). errors may occur otherwise} } \description{ pull the value from lags when values starts indefinitely being within prop of it's last value. diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index df10937a8..129deba58 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -1,17 +1,5 @@ dummy_ex <- tibble::tribble( ~geo_value, ~time_value, ~version, ~value, - # al 1 has 1 real revision, a lag of 0, and changes by 99 - "al", as.Date("2020-01-01"), as.Date("2020-01-01"), 1, - "al", as.Date("2020-01-01"), as.Date("2020-01-10"), 1, - "al", as.Date("2020-01-01"), as.Date("2020-01-20"), 100, - # al 2 has no revision, a min lag of 0, and a rel_spread of 0 - "al", as.Date("2020-01-02"), as.Date("2020-01-02"), 1, - # al 3 has 1 revision and a min lag of 1, and a change of 3 - "al", as.Date("2020-01-03"), as.Date("2020-01-04"), 1, - "al", as.Date("2020-01-03"), as.Date("2020-01-05"), 4, - # al 4 has 1 revision including NA's none if not, a lag of 0/1 and changes of 0 - "al", as.Date("2020-01-04"), as.Date("2020-01-04"), NA, - "al", as.Date("2020-01-04"), as.Date("2020-01-05"), 9, # ak 1 has 4 revisions w/out NAs, but 6 with NAs # a min lag of 2, and a change of 101 "ak", as.Date("2020-01-01"), as.Date("2020-01-03"), 1, @@ -27,6 +15,18 @@ dummy_ex <- tibble::tribble( # ak 3 has 0 revisions, and a value of zero, and thus a rel_spread of NaN "ak", as.Date("2020-01-03"), as.Date("2020-01-06"), 0, "ak", as.Date("2020-01-03"), as.Date("2020-01-07"), 0, + # al 1 has 1 real revision, a lag of 0, and changes by 99 + "al", as.Date("2020-01-01"), as.Date("2020-01-01"), 1, + "al", as.Date("2020-01-01"), as.Date("2020-01-10"), 1, + "al", as.Date("2020-01-01"), as.Date("2020-01-20"), 100, + # al 2 has no revision, a min lag of 0, and a rel_spread of 0 + "al", as.Date("2020-01-02"), as.Date("2020-01-02"), 1, + # al 3 has 1 revision and a min lag of 1, and a change of 3 + "al", as.Date("2020-01-03"), as.Date("2020-01-04"), 1, + "al", as.Date("2020-01-03"), as.Date("2020-01-05"), 4, + # al 4 has 1 revision including NA's none if not, a lag of 0/1 and changes of 0 + "al", as.Date("2020-01-04"), as.Date("2020-01-04"), NA, + "al", as.Date("2020-01-04"), as.Date("2020-01-05"), 9, ) %>% as_epi_archive(versions_end = as.Date("2022-01-01"), compactify = FALSE) @@ -40,12 +40,19 @@ test_that("tidyselect is functional", { with_later_key_col <- dummy_ex$DT %>% select(geo_value, time_value, value, version) %>% as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) - expect_equal(quiet(revision_summary(with_later_key_col)), - quiet(revision_summary(dummy_ex))) + expect_equal( + quiet(revision_summary(with_later_key_col)), + quiet(revision_summary(dummy_ex)) + ) with_later_val_col <- dummy_ex$DT %>% mutate(value2 = 0) %>% as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) - expect_equal(quiet(revision_summary(with_later_val_col, value)), - quiet(revision_summary(dummy_ex, value))) + expect_equal( + quiet(revision_summary(with_later_val_col, value)), + quiet(revision_summary(dummy_ex, value)) + ) + expect_error(revision_summary(with_later_val_col, !everything()), + class = "epiprocess__revision_summary__selected_zero_columns" + ) }) test_that("revision_summary works for various timetypes", {}) From 8c13f311e5c5dad9cf4d4206ba657c058a697d3d Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 9 Oct 2024 17:54:03 -0700 Subject: [PATCH 04/48] Clarify time_near_latest -> lag_near_latest So it is not misinterpreted as "the amount of time that it has been near the latest". --- R/epiprocess-package.R | 2 +- R/revision_analysis.R | 24 +++++++------ man/lag_within_x_latest.Rd | 19 ++++++++++ man/revision_summary.Rd | 6 ++-- man/time_within_x_latest.Rd | 15 -------- .../_snaps/revision-latency-functions.md | 36 +++++++++---------- vignettes/epi_archive.Rmd | 2 +- 7 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 man/lag_within_x_latest.Rd delete mode 100644 man/time_within_x_latest.Rd diff --git a/R/epiprocess-package.R b/R/epiprocess-package.R index 675d000db..ba2ceacf9 100644 --- a/R/epiprocess-package.R +++ b/R/epiprocess-package.R @@ -33,5 +33,5 @@ utils::globalVariables(c( "fitted", ".response", "geo_value", "time_value", "value", ".real", "lag", "max_value", "min_value", "median_value", "spread", "rel_spread", "time_to", - "time_near_latest", "n_revisions", "min_lag", "max_lag" + "lag_near_latest", "n_revisions", "min_lag", "max_lag" )) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 488689ff1..55e5e1d7d 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -19,10 +19,10 @@ #' 8. `rel_spread`: `spread` divided by the largest value (so it will #' always be less than 1). Note that this need not be the final value. It will #' be `NA` whenever `spread` is 0. -#' 9. `time_near_latest`: the time taken for the revisions to settle to within +#' 9. `lag_near_latest`: the time taken for the revisions to settle to within #' `within_latest` (default 20%) of the final value and stay there. For #' example, consider the series (0, 20, 99, 150, 102, 100); then -#' `time_near_latest` is 5, since even though 99 is within 20%, it is outside +#' `lag_near_latest` is 5, since even though 99 is within 20%, it is outside #' the window afterwards at 150. #' #' @param epi_arch an epi_archive to be analyzed @@ -42,7 +42,7 @@ #' final value for case counts as reported in the context of insurance. To #' avoid this filtering, either set to `NULL` or 0. #' @param within_latest double between 0 and 1. Determines the threshold -#' used for the `time_to` +#' used for the `lag_to` #' @param quick_revision difftime or integer (integer is treated as days), for #' the printed summary, the amount of time between the final revision and the #' actual time_value to consider the revision quickly resolved. Default of 3 @@ -143,7 +143,7 @@ revision_summary <- function(epi_arch, min_value = f_no_na(min, .data[[arg]]), max_value = f_no_na(max, .data[[arg]]), median_value = f_no_na(median, .data[[arg]]), - time_to = time_within_x_latest(lag, .data[[arg]], prop = within_latest), + lag_to = lag_within_x_latest(lag, .data[[arg]], prop = within_latest), .groups = "drop" ) %>% mutate( @@ -152,12 +152,12 @@ revision_summary <- function(epi_arch, # TODO the units here may be a problem min_lag = as.difftime(min_lag, units = "days"), # nolint: object_usage_linter max_lag = as.difftime(max_lag, units = "days"), # nolint: object_usage_linter - time_near_latest = as.difftime(time_to, units = "days") # nolint: object_usage_linter + lag_near_latest = as.difftime(lag_to, units = "days") # nolint: object_usage_linter ) %>% - select(-time_to) %>% + select(-lag_to) %>% relocate( time_value, geo_value, all_of(epikey_names), n_revisions, min_lag, max_lag, # nolint: object_usage_linter - time_near_latest, spread, rel_spread, min_value, max_value, median_value # nolint: object_usage_linter + lag_near_latest, spread, rel_spread, min_value, max_value, median_value # nolint: object_usage_linter ) if (print_inform) { cli_inform("Min lag (time to first version):") @@ -208,15 +208,17 @@ revision_summary <- function(epi_arch, cli_li(num_percent(abs_spread, n_real_revised, "")) cli_inform("{units(quick_revision)} until within {within_latest*100}% of the latest value:") - difftime_summary(revision_behavior[["time_near_latest"]]) %>% print() + difftime_summary(revision_behavior[["lag_near_latest"]]) %>% print() } return(revision_behavior) } -#' pull the value from lags when values starts indefinitely being within prop of it's last value. -#' @param values this should be a vector (e.g., a column). errors may occur otherwise +#' pull the value from lags when values starts indefinitely being within prop of its latest value. +#' @param lags vector of lags; should be sorted +#' @param values this should be a vector (e.g., a column) with length matching that of `lags` +#' @param prop optional length-1 double; proportion #' @keywords internal -time_within_x_latest <- function(lags, values, prop = .2) { +lag_within_x_latest <- function(lags, values, prop = .2) { latest_value <- values[[length(values)]] close_enough <- abs(values - latest_value) < prop * latest_value # we want to ignore any stretches where it's close, but goes farther away later diff --git a/man/lag_within_x_latest.Rd b/man/lag_within_x_latest.Rd new file mode 100644 index 000000000..9c90fd8c3 --- /dev/null +++ b/man/lag_within_x_latest.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/revision_analysis.R +\name{lag_within_x_latest} +\alias{lag_within_x_latest} +\title{pull the value from lags when values starts indefinitely being within prop of its latest value.} +\usage{ +lag_within_x_latest(lags, values, prop = 0.2) +} +\arguments{ +\item{lags}{vector of lags; should be sorted} + +\item{values}{this should be a vector (e.g., a column) with length matching that of \code{lags}} + +\item{prop}{optional length-1 double; proportion} +} +\description{ +pull the value from lags when values starts indefinitely being within prop of its latest value. +} +\keyword{internal} diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index 39a72b9a3..c1e5a61a3 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -42,7 +42,7 @@ final value for case counts as reported in the context of insurance. To avoid this filtering, either set to \code{NULL} or 0.} \item{within_latest}{double between 0 and 1. Determines the threshold -used for the \code{time_to}} +used for the \code{lag_to}} \item{quick_revision}{difftime or integer (integer is treated as days), for the printed summary, the amount of time between the final revision and the @@ -87,10 +87,10 @@ always excludes \code{NA} values) \item \code{rel_spread}: \code{spread} divided by the largest value (so it will always be less than 1). Note that this need not be the final value. It will be \code{NA} whenever \code{spread} is 0. -\item \code{time_near_latest}: the time taken for the revisions to settle to within +\item \code{lag_near_latest}: the time taken for the revisions to settle to within \code{within_latest} (default 20\%) of the final value and stay there. For example, consider the series (0, 20, 99, 150, 102, 100); then -\code{time_near_latest} is 5, since even though 99 is within 20\%, it is outside +\code{lag_near_latest} is 5, since even though 99 is within 20\%, it is outside the window afterwards at 150. } } diff --git a/man/time_within_x_latest.Rd b/man/time_within_x_latest.Rd deleted file mode 100644 index 9faa31609..000000000 --- a/man/time_within_x_latest.Rd +++ /dev/null @@ -1,15 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/revision_analysis.R -\name{time_within_x_latest} -\alias{time_within_x_latest} -\title{pull the value from lags when values starts indefinitely being within prop of it's last value.} -\usage{ -time_within_x_latest(lags, values, prop = 0.2) -} -\arguments{ -\item{values}{this should be a vector (e.g., a column). errors may occur otherwise} -} -\description{ -pull the value from lags when values starts indefinitely being within prop of it's last value. -} -\keyword{internal} diff --git a/tests/testthat/_snaps/revision-latency-functions.md b/tests/testthat/_snaps/revision-latency-functions.md index 1ac214691..27cc85957 100644 --- a/tests/testthat/_snaps/revision-latency-functions.md +++ b/tests/testthat/_snaps/revision-latency-functions.md @@ -25,15 +25,15 @@ min median mean max 0 days 3 days 6.9 days 19 days # A tibble: 7 x 11 - time_value geo_value n_revisions min_lag max_lag time_near_latest spread - - 1 2020-01-01 ak 4 2 days 19 days 19 days 101 - 2 2020-01-02 ak 1 4 days 5 days 4 days 9 - 3 2020-01-03 ak 0 3 days 3 days 3 days 0 - 4 2020-01-01 al 1 0 days 19 days 19 days 99 - 5 2020-01-02 al 0 0 days 0 days 0 days 0 - 6 2020-01-03 al 1 1 days 2 days 2 days 3 - 7 2020-01-04 al 0 1 days 1 days 1 days 0 + time_value geo_value n_revisions min_lag max_lag lag_near_latest spread + + 1 2020-01-01 ak 4 2 days 19 days 19 days 101 + 2 2020-01-02 ak 1 4 days 5 days 4 days 9 + 3 2020-01-03 ak 0 3 days 3 days 3 days 0 + 4 2020-01-01 al 1 0 days 19 days 19 days 99 + 5 2020-01-02 al 0 0 days 0 days 0 days 0 + 6 2020-01-03 al 1 1 days 2 days 2 days 3 + 7 2020-01-04 al 0 1 days 1 days 1 days 0 rel_spread min_value max_value median_value 1 0.990 1 102 6 @@ -73,15 +73,15 @@ min median mean max 0 days 3 days 6.9 days 19 days # A tibble: 7 x 11 - time_value geo_value n_revisions min_lag max_lag time_near_latest spread - - 1 2020-01-01 ak 6 2 days 19 days 19 days 101 - 2 2020-01-02 ak 1 4 days 5 days 4 days 9 - 3 2020-01-03 ak 0 3 days 3 days 3 days 0 - 4 2020-01-01 al 1 0 days 19 days 19 days 99 - 5 2020-01-02 al 0 0 days 0 days 0 days 0 - 6 2020-01-03 al 1 1 days 2 days 2 days 3 - 7 2020-01-04 al 1 0 days 1 days 1 days 0 + time_value geo_value n_revisions min_lag max_lag lag_near_latest spread + + 1 2020-01-01 ak 6 2 days 19 days 19 days 101 + 2 2020-01-02 ak 1 4 days 5 days 4 days 9 + 3 2020-01-03 ak 0 3 days 3 days 3 days 0 + 4 2020-01-01 al 1 0 days 19 days 19 days 99 + 5 2020-01-02 al 0 0 days 0 days 0 days 0 + 6 2020-01-03 al 1 1 days 2 days 2 days 3 + 7 2020-01-04 al 1 0 days 1 days 1 days 0 rel_spread min_value max_value median_value 1 0.990 1 102 5.5 diff --git a/vignettes/epi_archive.Rmd b/vignettes/epi_archive.Rmd index 34f5a74b5..86a2aa95b 100644 --- a/vignettes/epi_archive.Rmd +++ b/vignettes/epi_archive.Rmd @@ -182,7 +182,7 @@ revision_details %>% max_lag = max(max_lag), spread = mean(spread), rel_spread = mean(rel_spread), - time_near_latest = mean(time_near_latest) + lag_near_latest = mean(lag_near_latest) ) ``` From 1a74d7556947414110cce6d92f5fe5b907fbd75f Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 18 Oct 2024 12:52:37 -0700 Subject: [PATCH 05/48] fix(revision_summary): consider units&class in lag filter and avoid unnecessary `abs()` --- NAMESPACE | 1 + R/revision_analysis.R | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 1da07e538..62b9e6da6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -236,5 +236,6 @@ importFrom(tidyselect,starts_with) importFrom(tsibble,as_tsibble) importFrom(utils,capture.output) importFrom(utils,tail) +importFrom(vctrs,vec_cast) importFrom(vctrs,vec_data) importFrom(vctrs,vec_equal) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 55e5e1d7d..ec8bccf76 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -68,6 +68,7 @@ #' @export #' @importFrom cli cli_inform cli_abort cli_li #' @importFrom rlang list2 syms dots_n +#' @importFrom vctrs vec_cast #' @importFrom dplyr mutate group_by arrange filter if_any all_of across pull pick c_across #' everything ungroup summarize if_else %>% revision_summary <- function(epi_arch, @@ -117,7 +118,7 @@ revision_summary <- function(epi_arch, select(all_of(unique(c(keys, arg)))) if (!is.null(min_waiting_period)) { revision_behavior <- revision_behavior %>% - filter(abs(time_value - as.Date(epi_arch$versions_end)) >= min_waiting_period) + filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) >= min_waiting_period) } if (drop_nas) { From 074e0a481bd782d6b3241b245dd972d3df08eb03 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 18 Oct 2024 12:55:06 -0700 Subject: [PATCH 06/48] Fix compactification with dist_quantiles columns --- NAMESPACE | 6 ++++++ R/archive.R | 21 +++++++++++++++++++-- man/vec_position_lag.Rd | 12 ++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 man/vec_position_lag.Rd diff --git a/NAMESPACE b/NAMESPACE index 62b9e6da6..385ad8a86 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -96,6 +96,7 @@ export(time_column_names) export(ungroup) export(unnest) export(validate_epi_archive) +export(vec_position_lag) export(version_column_names) import(epidatasets) importFrom(checkmate,anyInfinite) @@ -103,6 +104,7 @@ importFrom(checkmate,anyMissing) importFrom(checkmate,assert) importFrom(checkmate,assert_character) importFrom(checkmate,assert_class) +importFrom(checkmate,assert_count) importFrom(checkmate,assert_data_frame) importFrom(checkmate,assert_false) importFrom(checkmate,assert_function) @@ -236,6 +238,10 @@ importFrom(tidyselect,starts_with) importFrom(tsibble,as_tsibble) importFrom(utils,capture.output) importFrom(utils,tail) +importFrom(vctrs,obj_check_vector) +importFrom(vctrs,vec_c) importFrom(vctrs,vec_cast) importFrom(vctrs,vec_data) importFrom(vctrs,vec_equal) +importFrom(vctrs,vec_size) +importFrom(vctrs,vec_slice) diff --git a/R/archive.R b/R/archive.R index 3557c9914..64eb7255b 100644 --- a/R/archive.R +++ b/R/archive.R @@ -369,6 +369,23 @@ removed_by_compactify <- function(df, keys, tolerance) { )) # nolint: object_usage_linter } +#' Lag entries in a vctrs-style vector by their position in the vector +#' +#' @importFrom checkmate assert_count +#' @importFrom vctrs obj_check_vector vec_slice vec_size +#' @keywords internal +#' @importFrom vctrs vec_c vec_slice vec_size +#' @export +vec_position_lag <- function(x, n) { + # obj_check_vector(x) + assert_count(n) + if (length(x) == 0L) { + x + } else { + vec_c(rep(NA, n), vec_slice(x, seq_len(vec_size(x) - 1L))) + } +} + #' Checks to see if a value in a vector is LOCF #' @description #' LOCF meaning last observation carried forward. lags the vector by 1, then @@ -378,8 +395,8 @@ removed_by_compactify <- function(df, keys, tolerance) { #' @importFrom dplyr lag if_else near #' @keywords internal is_locf <- function(vec, tolerance) { # nolint: object_usage_linter - lag_vec <- dplyr::lag(vec) - if (typeof(vec) == "double") { + lag_vec <- vec_position_lag(vec, 1L) + if (inherits(vec, "numeric")) { # (no matrix/array/general support) res <- if_else( !is.na(vec) & !is.na(lag_vec), near(vec, lag_vec, tol = tolerance), diff --git a/man/vec_position_lag.Rd b/man/vec_position_lag.Rd new file mode 100644 index 000000000..3e828455b --- /dev/null +++ b/man/vec_position_lag.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/archive.R +\name{vec_position_lag} +\alias{vec_position_lag} +\title{Lag entries in a vctrs-style vector by their position in the vector} +\usage{ +vec_position_lag(x, n) +} +\description{ +Lag entries in a vctrs-style vector by their position in the vector +} +\keyword{internal} From 8bbcf16d7d08fa4244a4d1c43bc0b5952c4a935e Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 16 Dec 2024 11:20:18 -0800 Subject: [PATCH 07/48] Refactor/fix(?): Use time_delta helpers in revision_summary * This may fix some behaviors and emit more sensible error messages on yearmonths given yearmonth-incompatible settings. * This should express time differences for weekly data in terms of weeks, and may emit errors given weekly-"incompatible" settings. * This appears to be computationally faster (vs. `as.integer(version) - as.integer(time_value)`). --- R/revision_analysis.R | 40 ++++++++++++++++++++++----------------- man/difftime_summary.Rd | 12 ------------ man/time_delta_summary.Rd | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 29 deletions(-) delete mode 100644 man/difftime_summary.Rd create mode 100644 man/time_delta_summary.Rd diff --git a/R/revision_analysis.R b/R/revision_analysis.R index ec8bccf76..ae906c17f 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -135,7 +135,7 @@ revision_summary <- function(epi_arch, } revision_behavior <- revision_behavior %>% - mutate(lag = as.integer(version) - as.integer(time_value)) %>% # nolint: object_usage_linter + mutate(lag = time_delta_to_n_steps(version - time_value, epi_arch$time_type)) %>% # nolint: object_usage_linter group_by(across(all_of(epikeytime_names))) %>% # group = versions of one measurement summarize( n_revisions = dplyr::n() - 1, @@ -150,10 +150,9 @@ revision_summary <- function(epi_arch, mutate( spread = max_value - min_value, # nolint: object_usage_linter rel_spread = spread / max_value, # nolint: object_usage_linter - # TODO the units here may be a problem - min_lag = as.difftime(min_lag, units = "days"), # nolint: object_usage_linter - max_lag = as.difftime(max_lag, units = "days"), # nolint: object_usage_linter - lag_near_latest = as.difftime(lag_to, units = "days") # nolint: object_usage_linter + min_lag = min_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter + max_lag = max_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter + lag_near_latest = lag_to * unit_time_delta(epi_arch$time_type) # nolint: object_usage_linter ) %>% select(-lag_to) %>% relocate( @@ -162,7 +161,7 @@ revision_summary <- function(epi_arch, ) if (print_inform) { cli_inform("Min lag (time to first version):") - difftime_summary(revision_behavior$min_lag) %>% print() + time_delta_summary(revision_behavior$min_lag, epi_arch$time_type) %>% print() if (!drop_nas) { total_na <- epi_arch$DT %>% filter(is.na(c_across(!!arg))) %>% # nolint: object_usage_linter @@ -177,8 +176,8 @@ revision_summary <- function(epi_arch, cli_inform("No revisions:") cli_li(num_percent(total_num_unrevised, total_num, "")) total_quickly_revised <- sum( # nolint: object_usage_linter - revision_behavior$max_lag <= - as.difftime(quick_revision, units = "days") + time_delta_to_n_steps(revision_behavior$max_lag, epi_arch$time_type) <= + time_delta_to_n_steps(quick_revision, epi_arch$time_type) ) cli_inform("Quick revisions (last revision within {quick_revision} {units(quick_revision)} of the `time_value`):") @@ -209,7 +208,7 @@ revision_summary <- function(epi_arch, cli_li(num_percent(abs_spread, n_real_revised, "")) cli_inform("{units(quick_revision)} until within {within_latest*100}% of the latest value:") - difftime_summary(revision_behavior[["lag_near_latest"]]) %>% print() + time_delta_summary(revision_behavior[["lag_near_latest"]], epi_arch$time_type) %>% print() } return(revision_behavior) } @@ -258,18 +257,25 @@ num_percent <- function(a, b, b_description) { ({round(a/b*100,digits=2)}%)") } -#' summary doesn't work on difftimes +#' Like `summary` but working across all "time deltas", including difftimes +#' +#' Also standardizes units of difftimes to the natural unit for the given +#' `time_type` (via conversion to and from a corresponding number of time +#' steps). +#' #' @keywords internal -difftime_summary <- function(diff_time_val) { - if (length(diff_time_val) > 0) { +time_delta_summary <- function(time_delta, time_type) { + if (length(time_delta) > 0) { + n_steps <- time_delta_to_n_steps(time_delta, time_type) res <- data.frame( - min = min(diff_time_val), - median = median(diff_time_val), - mean = round(mean(diff_time_val), 1), - max = max(diff_time_val), + min = min(n_steps), + median = median(n_steps), + mean = round(mean(n_steps), 1), + max = max(n_steps), row.names = " ", check.names = FALSE - ) + ) %>% + mutate(across(c(min, median, mean, max), ~ .x * unit_time_delta(time_type))) return(res) } else { return(data.frame()) diff --git a/man/difftime_summary.Rd b/man/difftime_summary.Rd deleted file mode 100644 index ef153f3d1..000000000 --- a/man/difftime_summary.Rd +++ /dev/null @@ -1,12 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/revision_analysis.R -\name{difftime_summary} -\alias{difftime_summary} -\title{summary doesn't work on difftimes} -\usage{ -difftime_summary(diff_time_val) -} -\description{ -summary doesn't work on difftimes -} -\keyword{internal} diff --git a/man/time_delta_summary.Rd b/man/time_delta_summary.Rd new file mode 100644 index 000000000..c6b57c9bb --- /dev/null +++ b/man/time_delta_summary.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/revision_analysis.R +\name{time_delta_summary} +\alias{time_delta_summary} +\title{Like \code{summary} but working across all "time deltas", including difftimes} +\usage{ +time_delta_summary(time_delta, time_type) +} +\description{ +Also standardizes units of difftimes to the natural unit for the given +\code{time_type} (via conversion to and from a corresponding number of time +steps). +} +\keyword{internal} From e405e2fca82272e0436c00044d54d13c4639841f Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 18 Dec 2024 16:02:02 -0800 Subject: [PATCH 08/48] docs(epi_df.Rmd): immediate ungrouping + discuss completion effects It's probably best to immediately ungroup after performing grouped operations in our documentation, as leaving things grouped accidentally is a source of errors. Sometime we should consider an overhaul to use `by =` and `.by =` where appropriate (sorting effects not needed) and available (not all operations support this syntax yet). There were already 0s in the example data, so "highlight" with words the effects of completion + note one potential surprise in other applications. --- vignettes/epi_df.Rmd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/vignettes/epi_df.Rmd b/vignettes/epi_df.Rmd index 129856f3e..7b895b6cd 100644 --- a/vignettes/epi_df.Rmd +++ b/vignettes/epi_df.Rmd @@ -336,7 +336,8 @@ First, let's create a data set with some missing data. We will reuse the dataset edf_missing <- edf %>% filter(geo_value %in% c("ca", "tx")) %>% group_by(geo_value) %>% - slice(1:3, 5:6) + slice(1:3, 5:6) %>% + ungroup() edf_missing %>% print(n = 10) @@ -346,12 +347,17 @@ Now let's fill in the missing data with explicit zeros: ```{r} edf_missing %>% + group_by(geo_value) %>% complete( time_value = seq.Date(min(time_value), max(time_value), by = "day"), fill = list(cases = 0) ) %>% + ungroup() %>% print(n = 12) ``` +We see that rows have been added for the missing `time_value` 2020-03-04 for +both of the states, with `cases` set to `0`. If there were explicit `NA`s in the +`cases` column, those would have been replaced by `0` as well. ### Detecting and filling time gaps with `tsibble` From 09bd354b3076fac7a58332a1b6f6c406b2d9c348 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 13:40:29 -0800 Subject: [PATCH 09/48] docs(epi_df.Rmd): editing pass on flusurv aggregation update --- vignettes/epi_df.Rmd | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/vignettes/epi_df.Rmd b/vignettes/epi_df.Rmd index 7b895b6cd..3ffb5a8d8 100644 --- a/vignettes/epi_df.Rmd +++ b/vignettes/epi_df.Rmd @@ -205,7 +205,7 @@ An `epi_df` object can have more key columns than just `geo_value` and can add this as a key column. We can then aggregate the data by these key columns using `sum_groups_epi_df()`. Let's use influenza hospitalization rate data from the CDC system FluSurv as an example. We can get it from the [Delphi -Epidata API](https://cmu-delphi.github.io/delphi-epidata/api/flusurv.html) +Epidata API](https://cmu-delphi.github.io/delphi-epidata/api/flusurv.html). ```{r} library(epidatr) @@ -238,7 +238,10 @@ flu_data <- flu_data_api %>% "age_group_3" ~ "50--64 yr", "age_group_4" ~ ">= 65 yr", # Make this a factor with appropriate level ordering: - .ptype = factor(levels = c("0--4 yr", "5--17 yr", "18--49 yr", "50--64 yr", ">= 65 yr")) + .ptype = factor(levels = c( + "0--4 yr", "5--17 yr", "18--49 yr", + "50--64 yr", ">= 65 yr" + )) ) ) %>% # The API currently outputs `epiweek` in Date format (the constituent Sunday); @@ -261,13 +264,14 @@ means that there should only be one row for each combination of `geo_value`, time). Now we can aggregate the data by `age_group`, if we want to compute the total. -Since we are working with rates, we need to attach some population data in order -to do this aggregation. It's somewhat ambiguous whether FluSurv-NET reporting -uses either [NCHS](https://www.cdc.gov/nchs/nvss/bridged_race.htm) or +For count data, this would be just a single call to `sum_groups_epi_df()`. Since we +are working with rates, we need to attach some population data in order to do +this aggregation. It's somewhat ambiguous whether FluSurv-NET reporting uses +either [NCHS](https://www.cdc.gov/nchs/nvss/bridged_race.htm) or [Census](https://www.census.gov/programs-surveys/popest/technical-documentation/research/evaluation-estimates/2020-evaluation-estimates/2010s-county-detail.html) -populations for `time_value`s before 2020 included in reports from 2020 onward, -but in this case, the two sources agreed exactly. FluSurv-NET also directly -reports an overall rate, so we can check our work. +populations for `time_value`s before 2020 included in reports published in 2020 +onward, but at least for this example, these two sources agree exactly. +FluSurv-NET also directly reports an overall rate, so we can check our work. ```{r} group_cols <- key_colnames(flu_data, exclude = "age_group") rate_overall_recalc_edf <- @@ -295,15 +299,18 @@ rate_overall_recalc_edf <- # time_values 2017-07-01 through 2018-06-30, and the estimated population on # 2018-07-01 for all subsequent time_values: join_by(geo_value, closest(y$time_value <= x$time_value), age_group), - suffix = c("", "_for_pop"), - relationship = "many-to-one", unmatched = "error" + # Generate errors if the two data sets don't line up as expected: + relationship = "many-to-one", unmatched = "error", + # We'll get a second time column indicating which population estimate + # was carried forward; name it time_value_for_pop: + suffix = c("", "_for_pop") ) %>% select(-time_value_for_pop) %>% group_by(geo_value, time_value) %>% - mutate(count = rate * pop / 100e3) %>% + mutate(approx_count = rate * pop / 100e3) %>% ungroup() %>% - sum_groups_epi_df(c("count", "pop"), group_cols = group_cols) %>% - mutate(rate_overall_recalc = count / pop * 100e3) %>% + sum_groups_epi_df(c("approx_count", "pop"), group_cols = group_cols) %>% + mutate(rate_overall_recalc = approx_count / pop * 100e3) %>% # match rounding of original data: mutate(rate_overall_recalc = round(rate_overall_recalc, 1)) %>% # compare to published overall rates: From edb1b9b250d9fdc4e9dd64198f93af784d80a708 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 13:41:42 -0800 Subject: [PATCH 10/48] docs(epi_df.Rmd): general editing pass - Note `...` optional in args of slide comp fn. - Push toward computations returning tibbles rather than vanilla data.frames. - Highlight `na.rm = TRUE`'s operation (not the only type of 7dsum/7dav), mention we also show sum. - Immediately ungroup output + save a line using new autogroup-ungroup behavior of epi_slide_opt&co. --- vignettes/epi_df.Rmd | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/vignettes/epi_df.Rmd b/vignettes/epi_df.Rmd index 3ffb5a8d8..2d7ccd026 100644 --- a/vignettes/epi_df.Rmd +++ b/vignettes/epi_df.Rmd @@ -135,7 +135,8 @@ where - `g` is a one-row tibble containing the values of the grouping variables for the associated group, for instance `g$geo_value` - `t` is the ref_time_value for the current window -- `...` are additional arguments +- `...` (optional) are any additional arguments you'd like to be able to forward + to your function The same computation as above can be done with a function: @@ -159,8 +160,8 @@ formula or function case. This can be adjusted with `.new_col_name`. ### Rolling computations with multiple column outputs -If your formula (or function) returns a data.frame, then the columns of the -data.frame will be unpacked into the resulting `epi_df` (in the sense of +If your formula (or function) returns a tibble (or other kind of data frame), +then its columns will be unpacked into the resulting `epi_df` (in the sense of `tidyr::unpack()`). For example, the following computes the 7-day trailing average of daily cases as well as the the 7-day trailing standard deviation of daily cases: @@ -168,7 +169,10 @@ daily cases: ```{r} edf %>% epi_slide( - ~ data.frame(cases_mean = mean(.x$cases, na.rm = TRUE), cases_sd = sd(.x$cases, na.rm = TRUE)), + ~ tibble( + cases_mean = mean(.x$cases, na.rm = TRUE), + cases_sd = sd(.x$cases, na.rm = TRUE) + ), .window_size = 7 ) ``` @@ -179,14 +183,13 @@ For the two most common sliding operations, we offer two optimized versions: `epi_slide_mean()` and `epi_slide_sum()`. These are much faster than `epi_slide()`, so we recommend using them when you are only interested in the mean or sum of a column. The following computes the 7-day trailing mean of daily -cases: +cases, allowing means and sums to be taken over fewer than 7 observations if +there is missingness (`na.rm = TRUE`): ```{r} edf %>% - group_by(geo_value) %>% epi_slide_mean("cases", .window_size = 7, na.rm = TRUE) edf %>% - group_by(geo_value) %>% epi_slide_sum("cases", .window_size = 7, na.rm = TRUE) ``` From 4473acb77020f20650dc8c6c70c6aeeb78392e0b Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 14:27:09 -0800 Subject: [PATCH 11/48] feat(revision_summary): don't autoselect first var if != 1 var --- R/revision_analysis.R | 16 +++++++++++++--- man/revision_summary.Rd | 5 +++-- tests/testthat/test-revision-latency-functions.R | 11 +++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index ae906c17f..9781821c6 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -27,8 +27,9 @@ #' #' @param epi_arch an epi_archive to be analyzed #' @param ... <[`tidyselect`][dplyr_tidy_select]>, used to choose the column to -#' summarize. If empty, it chooses the first. Currently only implemented for -#' one column at a time. +#' summarize. If empty and there is only one value/measurement column (i.e., +#' not in [`key_colnames`]) in the archive, it will automatically select it. +#' If supplied, `...` must select exactly one column. #' @param drop_nas bool, drop any `NA` values from the archive? After dropping #' `NA`'s compactify is run again to make sure there are no duplicate values #' from occasions when the signal is revised to `NA`, and then back to its @@ -86,7 +87,16 @@ revision_summary <- function(epi_arch, assert_class(epi_arch, "epi_archive") if (dots_n(...) == 0) { # Choose the first column that's not a key: - arg <- setdiff(names(epi_arch$DT), key_colnames(epi_arch))[[1]] + value_colnames <- setdiff(names(epi_arch$DT), key_colnames(epi_arch)) + if (length(value_colnames) != 1) { + cli_abort(c( + "Cannot determine which column to summarize.", + "i" = "Value/measurement columns appear to be: {format_varnames(value_colnames)}", + ">" = "Please specify which column to summarize in `...` (with tidyselect syntax)." + ), class = "epiprocess__revision_summary_cannot_determine_default_selection") + } else { + arg <- value_colnames + } } else { arg <- names(eval_select(rlang::expr(c(...)), allow_rename = FALSE, data = epi_arch$DT)) if (length(arg) == 0) { diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index c1e5a61a3..1b4f840c9 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -23,8 +23,9 @@ revision_summary( \item{epi_arch}{an epi_archive to be analyzed} \item{...}{<\code{\link[=dplyr_tidy_select]{tidyselect}}>, used to choose the column to -summarize. If empty, it chooses the first. Currently only implemented for -one column at a time.} +summarize. If empty and there is only one value/measurement column (i.e., +not in \code{\link{key_colnames}}) in the archive, it will automatically select it. +If supplied, \code{...} must select exactly one column.} \item{drop_nas}{bool, drop any \code{NA} values from the archive? After dropping \code{NA}'s compactify is run again to make sure there are no duplicate values diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index 129deba58..e826f91c1 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -51,6 +51,17 @@ test_that("tidyselect is functional", { quiet(revision_summary(with_later_val_col, value)), quiet(revision_summary(dummy_ex, value)) ) + expect_error( + dummy_ex$DT %>% + copy() %>% + mutate(value2 = value) %>% + as_epi_archive( + versions_end = dummy_ex$versions_end, + compactify = FALSE + ) %>% + revision_summary(), + class = "epiprocess__revision_summary_cannot_determine_default_selection" + ) expect_error(revision_summary(with_later_val_col, !everything()), class = "epiprocess__revision_summary__selected_zero_columns" ) From 638b1177e4a12d95732fc4a5efc0c3cf62a40d4a Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 15:03:00 -0800 Subject: [PATCH 12/48] Add `time_delta_to_approx_difftime()` utils function --- R/utils.R | 46 ++++++++++++++++++++++++++++++++++++- man/unit_time_delta.Rd | 4 +++- tests/testthat/test-utils.R | 16 +++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/R/utils.R b/R/utils.R index e350ade25..23e06199b 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1164,7 +1164,9 @@ time_delta_to_n_steps <- function(time_delta, time_type) { #' time step / moving to the subsequent time interval for any `time_values` #' object of time type `time_type`, and such that `time_values + k * u` for #' integerish vector `k` advances by `k` steps (with vectorization, -#' recycling). +#' recycling). At time of writing, these objects also all support +#' multiplication by nonintegerish numeric vectors, `mean`, and `median`, +#' which are useful for summarizing vector time_deltas. #' #' @keywords internal unit_time_delta <- function(time_type) { @@ -1187,6 +1189,16 @@ time_type_unit_abbrs <- c( yearmonth = "m" ) +#' Get an abbreviation for the "units" of `unit_time_delta(time_type)` +#' +#' For use in formatting or automatically naming things based on +#' `time_delta_to_n_steps(time_delta)` for a `time_delta` between times of time +#' type `time_type`. +#' +#' @param time_type str +#' @return str +#' +#' @keywords internal time_type_unit_abbr <- function(time_type) { maybe_unit_abbr <- time_type_unit_abbrs[time_type] if (is.na(maybe_unit_abbr)) { @@ -1195,6 +1207,38 @@ time_type_unit_abbr <- function(time_type) { maybe_unit_abbr } +#' Convert `time_delta` to an approximate difftime +#' +#' `r lifecycle::badge("experimental")` +#' +#' To assist in comparing `time_delta`s to default `difftime` thresholds when we +#' want to reduce friction. +#' +#' It may be better to try to do something like make `time_delta` validation +#' more accommodating (e.g., of difftimes with units of "days" when working on +#' weekly scale), and remain rigid on yearmonths. Applying deltas and comparing +#' time_values might also be an approach but seems more fraught as the least +#' common denominator would be start/mid/end datetimes of time intervals, but +#' those are also ambiguous (starting&representation wdays of weeks are unknown, +#' timezone of dates are unknown). +#' +#' @keywords internal +time_delta_to_approx_difftime <- function(time_delta, time_type) { + switch(time_type, + day = , + week = { + if (inherits(time_delta, "difftime")) { + time_delta + } else { + time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type) + } + }, + yearmonth = time_delta * as.difftime((365 + 1 / 4 - 1 / 100 + 1 / 400) / 12, units = "days"), + integer = , + cli_abort("Unsupported time_type for this operation: {time_type}") + ) +} + #' Extract singular element of a length-1 unnamed list (validated) #' #' Inverse of `list(elt)`. diff --git a/man/unit_time_delta.Rd b/man/unit_time_delta.Rd index 46b3c48d6..c859d2db1 100644 --- a/man/unit_time_delta.Rd +++ b/man/unit_time_delta.Rd @@ -14,7 +14,9 @@ an object \code{u} such that \code{time_values + u} represents advancing by one time step / moving to the subsequent time interval for any \code{time_values} object of time type \code{time_type}, and such that \code{time_values + k * u} for integerish vector \code{k} advances by \code{k} steps (with vectorization, -recycling). +recycling). At time of writing, these objects also all support +multiplication by nonintegerish numeric vectors, \code{mean}, and \code{median}, +which are useful for summarizing vector time_deltas. } \description{ Object that, added to time_values of time_type, advances by one time step/interval diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index 37125d533..e9475c51d 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -418,3 +418,19 @@ test_that("unit_time_delta works", { 6L ) }) + +test_that("time_delta_to_approx_difftime works as expected", { + expect_equal(time_delta_to_approx_difftime(as.difftime(3, units = "days"), "day"), + as.difftime(3, units = "days")) + expect_equal(time_delta_to_approx_difftime(3, "day"), + as.difftime(3, units = "days")) + expect_equal(time_delta_to_approx_difftime(3, "week"), + as.difftime(3, units = "weeks")) + expect_true(time_delta_to_approx_difftime(3, "yearmonth") %>% + `units<-`("days") %>% + as.numeric() %>% + `-`(90) %>% + abs() %>% + `<=`(5)) + expect_error(time_delta_to_approx_difftime(3, "integer")) +}) From 2fe9b1a449c9a37e1697aea59009102c8c416f0d Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 16:48:01 -0800 Subject: [PATCH 13/48] fix(revision_summary): make min_waiting_period strict like docs --- R/revision_analysis.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 9781821c6..c4a896b21 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -128,7 +128,7 @@ revision_summary <- function(epi_arch, select(all_of(unique(c(keys, arg)))) if (!is.null(min_waiting_period)) { revision_behavior <- revision_behavior %>% - filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) >= min_waiting_period) + filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) > min_waiting_period) } if (drop_nas) { From be19854d229086cd7e1e63af3bde74c4d2b6f4ef Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 17:11:44 -0800 Subject: [PATCH 14/48] feat(revision_summary)!: make `min_waiting_period` nonstrict So that naming, docs, and implementation all match. --- R/revision_analysis.R | 13 +++++++------ man/revision_summary.Rd | 11 ++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index c4a896b21..2bb1c378a 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -37,11 +37,12 @@ #' @param print_inform bool, determines whether to print summary information, or #' only return the full summary tibble #' @param min_waiting_period `difftime`, integer or `NULL`. Sets a cutoff: any -#' time_values not earlier than `min_waiting_period` before `versions_end` are -#' removed. `min_waiting_period` should characterize the typical time during -#' which revisions occur. The default of 60 days corresponds to a typical -#' final value for case counts as reported in the context of insurance. To -#' avoid this filtering, either set to `NULL` or 0. +#' time_values that have not had at least `min_waiting_period` to stabilize as +#' of the `versions_end` are removed. `min_waiting_period` should characterize +#' the typical time during which most significant revisions occur. The default +#' of 60 days corresponds to a typical near-final value for case counts as +#' reported in the context of insurance. To avoid this filtering, either set +#' to `NULL` or 0. #' @param within_latest double between 0 and 1. Determines the threshold #' used for the `lag_to` #' @param quick_revision difftime or integer (integer is treated as days), for @@ -128,7 +129,7 @@ revision_summary <- function(epi_arch, select(all_of(unique(c(keys, arg)))) if (!is.null(min_waiting_period)) { revision_behavior <- revision_behavior %>% - filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) > min_waiting_period) + filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) >= min_waiting_period) } if (drop_nas) { diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index 1b4f840c9..948cc71e2 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -36,11 +36,12 @@ immediately-preceding value.} only return the full summary tibble} \item{min_waiting_period}{\code{difftime}, integer or \code{NULL}. Sets a cutoff: any -time_values not earlier than \code{min_waiting_period} before \code{versions_end} are -removed. \code{min_waiting_period} should characterize the typical time during -which revisions occur. The default of 60 days corresponds to a typical -final value for case counts as reported in the context of insurance. To -avoid this filtering, either set to \code{NULL} or 0.} +time_values that have not had at least \code{min_waiting_period} to stabilize as +of the \code{versions_end} are removed. \code{min_waiting_period} should characterize +the typical time during which most significant revisions occur. The default +of 60 days corresponds to a typical near-final value for case counts as +reported in the context of insurance. To avoid this filtering, either set +to \code{NULL} or 0.} \item{within_latest}{double between 0 and 1. Determines the threshold used for the \code{lag_to}} From 826b9273ce8c0d5bf1de3c9cede3cd93870a561e Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 19:08:05 -0800 Subject: [PATCH 15/48] Add difftime_approx_ceiling_time_delta helper, adj yearmonth difftime approx --- R/utils.R | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/R/utils.R b/R/utils.R index 23e06199b..6970e80e9 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1166,7 +1166,8 @@ time_delta_to_n_steps <- function(time_delta, time_type) { #' integerish vector `k` advances by `k` steps (with vectorization, #' recycling). At time of writing, these objects also all support #' multiplication by nonintegerish numeric vectors, `mean`, and `median`, -#' which are useful for summarizing vector time_deltas. +#' which are useful for summarizing vector time_deltas, but these fractional +#' time_deltas are not allowed in time_delta-specific operations. #' #' @keywords internal unit_time_delta <- function(time_type) { @@ -1222,6 +1223,13 @@ time_type_unit_abbr <- function(time_type) { #' those are also ambiguous (starting&representation wdays of weeks are unknown, #' timezone of dates are unknown). #' +#' Another alternative approach, below, converts difftimes to time_deltas +#' instead. It requires knowledge of which way to round in order to get +#' time_deltas representing an integer number of time steps, but avoids some +#' potential inconsistencies of the time-delta-to-difftime approach when we +#' think about applying it to, e.g., months / spans of months with varying +#' numbers of days, and also makes it easier to avoid "magical defaults". +#' #' @keywords internal time_delta_to_approx_difftime <- function(time_delta, time_type) { switch(time_type, @@ -1233,7 +1241,34 @@ time_delta_to_approx_difftime <- function(time_delta, time_type) { time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type) } }, - yearmonth = time_delta * as.difftime((365 + 1 / 4 - 1 / 100 + 1 / 400) / 12, units = "days"), + yearmonth = time_delta * as.difftime(30, units = "days"), + integer = , + cli_abort("Unsupported time_type for this operation: {time_type}") + ) +} + +#' Closest time_delta that's approximately greater than given difftime +#' +#' `r lifecycle::badge("experimental")` +#' +#' @param difftime a difftime object +#' @param time_type as in `validate_slide_window_arg` +#' @return An object representing an integerish number (or vector of numbers) of +#' time steps between consecutive time_values of type `time_type`. +#' +#' @keywords internal +difftime_approx_ceiling_time_delta <- function(difftime, time_type) { + assert_class(difftime, "difftime") + switch(time_type, + day = , + week = { + units(difftime) <- paste0(time_type, "s") + ceiling(difftime) + }, + yearmonth = { + units(difftime) <- "days" + ceiling(as.numeric(difftime) / 30) + }, integer = , cli_abort("Unsupported time_type for this operation: {time_type}") ) From 3509ebc49ec46ec3d3d89702658a4535913f5e95 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 19:09:08 -0800 Subject: [PATCH 16/48] Migrate time utils to new file --- R/time-utils.R | 273 ++++++++++++++++++++++++++++++ R/utils.R | 274 ------------------------------- tests/testthat/test-time-utils.R | 152 +++++++++++++++++ tests/testthat/test-utils.R | 154 ----------------- 4 files changed, 425 insertions(+), 428 deletions(-) create mode 100644 R/time-utils.R create mode 100644 tests/testthat/test-time-utils.R diff --git a/R/time-utils.R b/R/time-utils.R new file mode 100644 index 000000000..3ac873e8d --- /dev/null +++ b/R/time-utils.R @@ -0,0 +1,273 @@ +#' Use max valid period as guess for `period` of `time_values` +#' +#' `r lifecycle::badge("experimental")` +#' +#' @param time_values Vector containing time-interval-like or time-point-like +#' data, with at least two distinct values. +#' @param time_values_arg Optional, string; name to give `time_values` in error +#' messages. Defaults to quoting the expression the caller fed into the +#' `time_values` argument. +#' @param ... Should be empty, there to satisfy the S3 generic. +#' @return length-1 vector; `r lifecycle::badge("experimental")` class will +#' either be the same class as [`base::diff()`] on such time values, an +#' integer, or a double, such that all `time_values` can be exactly obtained +#' by adding `k * result` for an integer k, and such that there is no smaller +#' `result` that can achieve this. +#' +#' @keywords internal +#' @export +guess_period <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { + UseMethod("guess_period") +} + +#' @export +guess_period.default <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { + rlang::check_dots_empty() + sorted_distinct_time_values <- sort(unique(time_values)) + if (length(sorted_distinct_time_values) < 2L) { + cli_abort("Not enough distinct values in {.code {time_values_arg}} to guess the period.", + class = "epiprocess__guess_period__not_enough_times", + time_values = time_values + ) + } + skips <- diff(sorted_distinct_time_values) + # Certain diff results have special classes or attributes; use vctrs to try to + # appropriately destructure for gcd_num, then restore to their original class + # & attributes. + skips_data <- vctrs::vec_data(skips) + period_data <- gcd_num(skips_data, rrtol = 0) + vctrs::vec_restore(period_data, skips) +} + +# `full_seq()` doesn't like difftimes, so convert to the natural units of some time types: + +#' @export +guess_period.Date <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { + as.numeric(NextMethod(), units = "days") +} + +#' @export +guess_period.POSIXt <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { + as.numeric(NextMethod(), units = "secs") +} + +validate_slide_window_arg <- function(arg, time_type, lower = 1, allow_inf = TRUE, arg_name = rlang::caller_arg(arg)) { + if (time_type == "custom") { + cli_abort( + "Unsure how to interpret slide units with a custom time type. Consider converting your time + column to a Date, yearmonth, or integer type.", + class = "epiprocess__validate_slide_window_arg" + ) + } + + msg <- "" + inf_if_okay <- if (allow_inf) { + "Inf" + } else { + character(0L) + } + + # nolint start: indentation_linter. + if (time_type == "day") { + if (!(test_sensible_int(arg, lower = lower) || + inherits(arg, "difftime") && length(arg) == 1L && units(arg) == "days" || + allow_inf && identical(arg, Inf) + )) { + msg <- glue::glue_collapse(c("length-1 difftime with units in days", "non-negative integer", inf_if_okay), " or ") + } + } else if (time_type == "week") { + if (!(inherits(arg, "difftime") && length(arg) == 1L && units(arg) == "weeks" || + allow_inf && identical(arg, Inf) + )) { + msg <- glue::glue_collapse(c("length-1 difftime with units in weeks", inf_if_okay), " or ") + } + } else if (time_type == "yearmonth") { + if (!(test_sensible_int(arg, lower = lower) || + allow_inf && identical(arg, Inf) + )) { + msg <- glue::glue_collapse(c("non-negative integer", inf_if_okay), " or ") + } + } else if (time_type == "integer") { + if (!(test_sensible_int(arg, lower = lower) || + allow_inf && identical(arg, Inf) + )) { + msg <- glue::glue_collapse(c("non-negative integer", inf_if_okay), " or ") + } + } else { + cli_abort('`epiprocess` internal error: unrecognized time_type: "{time_type}"', + class = "epiprocess__unrecognized_time_type" + ) + } + # nolint end + + if (msg != "") { + cli_abort( + "Slide function expected `{arg_name}` to be a {msg}.", + class = "epiprocess__validate_slide_window_arg" + ) + } +} + + +#' Convert a time delta to a integerish number of "unit" steps between time values +#' +#' @param time_delta a vector that can be added to time values of time type +#' `time_type` to arrive at other time values of that time type, or +#' `r lifecycle::badge("experimental")` such a vector with Inf/-Inf entries mixed +#' in, if supported by the class of `time_delta`, even if `time_type` doesn't +#' necessarily support Inf/-Inf entries. Basically a slide window arg but +#' without sign and length restrictions. +#' @param time_type as in `validate_slide_window_arg` +#' @return [bare integerish][rlang::is_integerish] vector (with possible +#' infinite values) that produces the same result as `time_delta` when +#' multiplied by the natural [`unit_time_delta`] for +#' that time type and added to time values of time type `time_type`. If the +#' given time type does not support infinite values, then it should produce +#' +Inf or -Inf for analogous entries of `time_delta`, and match the addition +#' result match the addition result for non-infinite entries. +#' +#' @keywords internal +time_delta_to_n_steps <- function(time_delta, time_type) { + # could be S3 if we're willing to export + if (inherits(time_delta, "difftime")) { + output_units <- switch(time_type, + day = "days", + week = "weeks", + cli_abort("difftime objects not supported for time_type {format_chr_with_quotes(time_type)}") + ) + units(time_delta) <- output_units # converts number to represent same duration; not just attr<- + n_steps <- vec_data(time_delta) + if (!is_bare_integerish(n_steps)) { + cli_abort("`time_delta` did not appear to contain only integerish numbers + of steps between time values of time type {format_chr_with_quotes(time_type)}") + } + n_steps + } else if (is_bare_integerish(time_delta)) { # (allows infinite values) + switch(time_type, + day = , + week = , + yearmonth = , + integer = time_delta, + cli_abort("Invalid or unsupported time_type {format_chr_with_quotes(time_type)}") + ) + } else { + cli_abort("Invalid or unsupported kind of `time_delta`") + } +} + +#' Object that, added to time_values of time_type, advances by one time step/interval +#' +#' @param time_type string; `epi_df`'s or `epi_archive`'s `time_type` +#' @return an object `u` such that `time_values + u` represents advancing by one +#' time step / moving to the subsequent time interval for any `time_values` +#' object of time type `time_type`, and such that `time_values + k * u` for +#' integerish vector `k` advances by `k` steps (with vectorization, +#' recycling). At time of writing, these objects also all support +#' multiplication by nonintegerish numeric vectors, `mean`, and `median`, +#' which are useful for summarizing vector time_deltas, but these fractional +#' time_deltas are not allowed in time_delta-specific operations. +#' +#' @keywords internal +unit_time_delta <- function(time_type) { + switch(time_type, + day = as.difftime(1, units = "days"), + week = as.difftime(1, units = "weeks"), + yearmonth = 1, + integer = 1L, + cli_abort("Unsupported time_type: {time_type}") + ) +} + +# Using these unit abbreviations happens to make our automatic slide output +# naming look like taking ISO-8601 duration designations, removing the P, and +# lowercasing any characters. Fortnightly or sub-daily time types would need an +# adjustment to remain consistent. +time_type_unit_abbrs <- c( + day = "d", + week = "w", + yearmonth = "m" +) + +#' Get an abbreviation for the "units" of `unit_time_delta(time_type)` +#' +#' For use in formatting or automatically naming things based on +#' `time_delta_to_n_steps(time_delta)` for a `time_delta` between times of time +#' type `time_type`. +#' +#' @param time_type str +#' @return str +#' +#' @keywords internal +time_type_unit_abbr <- function(time_type) { + maybe_unit_abbr <- time_type_unit_abbrs[time_type] + if (is.na(maybe_unit_abbr)) { + cli_abort("Cannot determine the units of time type {format_chr_with_quotes(time_type)}") + } + maybe_unit_abbr +} + +#' Convert `time_delta` to an approximate difftime +#' +#' `r lifecycle::badge("experimental")` +#' +#' To assist in comparing `time_delta`s to default `difftime` thresholds when we +#' want to reduce friction. +#' +#' It may be better to try to do something like make `time_delta` validation +#' more accommodating (e.g., of difftimes with units of "days" when working on +#' weekly scale), and remain rigid on yearmonths. Applying deltas and comparing +#' time_values might also be an approach but seems more fraught as the least +#' common denominator would be start/mid/end datetimes of time intervals, but +#' those are also ambiguous (starting&representation wdays of weeks are unknown, +#' timezone of dates are unknown). +#' +#' Another alternative approach, below, converts difftimes to time_deltas +#' instead. It requires knowledge of which way to round in order to get +#' time_deltas representing an integer number of time steps, but avoids some +#' potential inconsistencies of the time-delta-to-difftime approach when we +#' think about applying it to, e.g., months / spans of months with varying +#' numbers of days, and also makes it easier to avoid "magical defaults". +#' +#' @keywords internal +time_delta_to_approx_difftime <- function(time_delta, time_type) { + switch(time_type, + day = , + week = { + if (inherits(time_delta, "difftime")) { + time_delta + } else { + time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type) + } + }, + yearmonth = time_delta * as.difftime(30, units = "days"), + integer = , + cli_abort("Unsupported time_type for this operation: {time_type}") + ) +} + +#' Closest time_delta that's approximately greater than given difftime +#' +#' `r lifecycle::badge("experimental")` +#' +#' @param difftime a difftime object +#' @param time_type as in `validate_slide_window_arg` +#' @return An object representing an integerish number (or vector of numbers) of +#' time steps between consecutive time_values of type `time_type`. +#' +#' @keywords internal +difftime_approx_ceiling_time_delta <- function(difftime, time_type) { + assert_class(difftime, "difftime") + switch(time_type, + day = , + week = { + units(difftime) <- paste0(time_type, "s") + ceiling(difftime) + }, + yearmonth = { + units(difftime) <- "days" + ceiling(as.numeric(difftime) / 30) + }, + integer = , + cli_abort("Unsupported time_type for this operation: {time_type}") + ) +} diff --git a/R/utils.R b/R/utils.R index 6970e80e9..f422aa4e6 100644 --- a/R/utils.R +++ b/R/utils.R @@ -979,59 +979,6 @@ gcd_num <- function(dividends, ..., rrtol = 1e-6, pqlim = 1e6, irtol = 1e-6) { vctrs::vec_cast(numeric_gcd, dividends) } -#' Use max valid period as guess for `period` of `time_values` -#' -#' `r lifecycle::badge("experimental")` -#' -#' @param time_values Vector containing time-interval-like or time-point-like -#' data, with at least two distinct values. -#' @param time_values_arg Optional, string; name to give `time_values` in error -#' messages. Defaults to quoting the expression the caller fed into the -#' `time_values` argument. -#' @param ... Should be empty, there to satisfy the S3 generic. -#' @return length-1 vector; `r lifecycle::badge("experimental")` class will -#' either be the same class as [`base::diff()`] on such time values, an -#' integer, or a double, such that all `time_values` can be exactly obtained -#' by adding `k * result` for an integer k, and such that there is no smaller -#' `result` that can achieve this. -#' -#' @keywords internal -#' @export -guess_period <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { - UseMethod("guess_period") -} - -#' @export -guess_period.default <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { - rlang::check_dots_empty() - sorted_distinct_time_values <- sort(unique(time_values)) - if (length(sorted_distinct_time_values) < 2L) { - cli_abort("Not enough distinct values in {.code {time_values_arg}} to guess the period.", - class = "epiprocess__guess_period__not_enough_times", - time_values = time_values - ) - } - skips <- diff(sorted_distinct_time_values) - # Certain diff results have special classes or attributes; use vctrs to try to - # appropriately destructure for gcd_num, then restore to their original class - # & attributes. - skips_data <- vctrs::vec_data(skips) - period_data <- gcd_num(skips_data, rrtol = 0) - vctrs::vec_restore(period_data, skips) -} - -# `full_seq()` doesn't like difftimes, so convert to the natural units of some time types: - -#' @export -guess_period.Date <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { - as.numeric(NextMethod(), units = "days") -} - -#' @export -guess_period.POSIXt <- function(time_values, time_values_arg = rlang::caller_arg(time_values), ...) { - as.numeric(NextMethod(), units = "secs") -} - #' Is `x` an "int" with a sensible class? TRUE/FALSE #' #' Like [`checkmate::test_int`] but disallowing some non-sensible classes that @@ -1053,227 +1000,6 @@ test_sensible_int <- function(x, na.ok = FALSE, lower = -Inf, upper = Inf, # nol } } -validate_slide_window_arg <- function(arg, time_type, lower = 1, allow_inf = TRUE, arg_name = rlang::caller_arg(arg)) { - if (time_type == "custom") { - cli_abort( - "Unsure how to interpret slide units with a custom time type. Consider converting your time - column to a Date, yearmonth, or integer type.", - class = "epiprocess__validate_slide_window_arg" - ) - } - - msg <- "" - inf_if_okay <- if (allow_inf) { - "Inf" - } else { - character(0L) - } - - # nolint start: indentation_linter. - if (time_type == "day") { - if (!(test_sensible_int(arg, lower = lower) || - inherits(arg, "difftime") && length(arg) == 1L && units(arg) == "days" || - allow_inf && identical(arg, Inf) - )) { - msg <- glue::glue_collapse(c("length-1 difftime with units in days", "non-negative integer", inf_if_okay), " or ") - } - } else if (time_type == "week") { - if (!(inherits(arg, "difftime") && length(arg) == 1L && units(arg) == "weeks" || - allow_inf && identical(arg, Inf) - )) { - msg <- glue::glue_collapse(c("length-1 difftime with units in weeks", inf_if_okay), " or ") - } - } else if (time_type == "yearmonth") { - if (!(test_sensible_int(arg, lower = lower) || - allow_inf && identical(arg, Inf) - )) { - msg <- glue::glue_collapse(c("non-negative integer", inf_if_okay), " or ") - } - } else if (time_type == "integer") { - if (!(test_sensible_int(arg, lower = lower) || - allow_inf && identical(arg, Inf) - )) { - msg <- glue::glue_collapse(c("non-negative integer", inf_if_okay), " or ") - } - } else { - cli_abort('`epiprocess` internal error: unrecognized time_type: "{time_type}"', - class = "epiprocess__unrecognized_time_type" - ) - } - # nolint end - - if (msg != "") { - cli_abort( - "Slide function expected `{arg_name}` to be a {msg}.", - class = "epiprocess__validate_slide_window_arg" - ) - } -} - - -#' Convert a time delta to a integerish number of "unit" steps between time values -#' -#' @param time_delta a vector that can be added to time values of time type -#' `time_type` to arrive at other time values of that time type, or -#' `r lifecycle::badge("experimental")` such a vector with Inf/-Inf entries mixed -#' in, if supported by the class of `time_delta`, even if `time_type` doesn't -#' necessarily support Inf/-Inf entries. Basically a slide window arg but -#' without sign and length restrictions. -#' @param time_type as in `validate_slide_window_arg` -#' @return [bare integerish][rlang::is_integerish] vector (with possible -#' infinite values) that produces the same result as `time_delta` when -#' multiplied by the natural [`unit_time_delta`] for -#' that time type and added to time values of time type `time_type`. If the -#' given time type does not support infinite values, then it should produce -#' +Inf or -Inf for analogous entries of `time_delta`, and match the addition -#' result match the addition result for non-infinite entries. -#' -#' @keywords internal -time_delta_to_n_steps <- function(time_delta, time_type) { - # could be S3 if we're willing to export - if (inherits(time_delta, "difftime")) { - output_units <- switch(time_type, - day = "days", - week = "weeks", - cli_abort("difftime objects not supported for time_type {format_chr_with_quotes(time_type)}") - ) - units(time_delta) <- output_units # converts number to represent same duration; not just attr<- - n_steps <- vec_data(time_delta) - if (!is_bare_integerish(n_steps)) { - cli_abort("`time_delta` did not appear to contain only integerish numbers - of steps between time values of time type {format_chr_with_quotes(time_type)}") - } - n_steps - } else if (is_bare_integerish(time_delta)) { # (allows infinite values) - switch(time_type, - day = , - week = , - yearmonth = , - integer = time_delta, - cli_abort("Invalid or unsupported time_type {format_chr_with_quotes(time_type)}") - ) - } else { - cli_abort("Invalid or unsupported kind of `time_delta`") - } -} - -#' Object that, added to time_values of time_type, advances by one time step/interval -#' -#' @param time_type string; `epi_df`'s or `epi_archive`'s `time_type` -#' @return an object `u` such that `time_values + u` represents advancing by one -#' time step / moving to the subsequent time interval for any `time_values` -#' object of time type `time_type`, and such that `time_values + k * u` for -#' integerish vector `k` advances by `k` steps (with vectorization, -#' recycling). At time of writing, these objects also all support -#' multiplication by nonintegerish numeric vectors, `mean`, and `median`, -#' which are useful for summarizing vector time_deltas, but these fractional -#' time_deltas are not allowed in time_delta-specific operations. -#' -#' @keywords internal -unit_time_delta <- function(time_type) { - switch(time_type, - day = as.difftime(1, units = "days"), - week = as.difftime(1, units = "weeks"), - yearmonth = 1, - integer = 1L, - cli_abort("Unsupported time_type: {time_type}") - ) -} - -# Using these unit abbreviations happens to make our automatic slide output -# naming look like taking ISO-8601 duration designations, removing the P, and -# lowercasing any characters. Fortnightly or sub-daily time types would need an -# adjustment to remain consistent. -time_type_unit_abbrs <- c( - day = "d", - week = "w", - yearmonth = "m" -) - -#' Get an abbreviation for the "units" of `unit_time_delta(time_type)` -#' -#' For use in formatting or automatically naming things based on -#' `time_delta_to_n_steps(time_delta)` for a `time_delta` between times of time -#' type `time_type`. -#' -#' @param time_type str -#' @return str -#' -#' @keywords internal -time_type_unit_abbr <- function(time_type) { - maybe_unit_abbr <- time_type_unit_abbrs[time_type] - if (is.na(maybe_unit_abbr)) { - cli_abort("Cannot determine the units of time type {format_chr_with_quotes(time_type)}") - } - maybe_unit_abbr -} - -#' Convert `time_delta` to an approximate difftime -#' -#' `r lifecycle::badge("experimental")` -#' -#' To assist in comparing `time_delta`s to default `difftime` thresholds when we -#' want to reduce friction. -#' -#' It may be better to try to do something like make `time_delta` validation -#' more accommodating (e.g., of difftimes with units of "days" when working on -#' weekly scale), and remain rigid on yearmonths. Applying deltas and comparing -#' time_values might also be an approach but seems more fraught as the least -#' common denominator would be start/mid/end datetimes of time intervals, but -#' those are also ambiguous (starting&representation wdays of weeks are unknown, -#' timezone of dates are unknown). -#' -#' Another alternative approach, below, converts difftimes to time_deltas -#' instead. It requires knowledge of which way to round in order to get -#' time_deltas representing an integer number of time steps, but avoids some -#' potential inconsistencies of the time-delta-to-difftime approach when we -#' think about applying it to, e.g., months / spans of months with varying -#' numbers of days, and also makes it easier to avoid "magical defaults". -#' -#' @keywords internal -time_delta_to_approx_difftime <- function(time_delta, time_type) { - switch(time_type, - day = , - week = { - if (inherits(time_delta, "difftime")) { - time_delta - } else { - time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type) - } - }, - yearmonth = time_delta * as.difftime(30, units = "days"), - integer = , - cli_abort("Unsupported time_type for this operation: {time_type}") - ) -} - -#' Closest time_delta that's approximately greater than given difftime -#' -#' `r lifecycle::badge("experimental")` -#' -#' @param difftime a difftime object -#' @param time_type as in `validate_slide_window_arg` -#' @return An object representing an integerish number (or vector of numbers) of -#' time steps between consecutive time_values of type `time_type`. -#' -#' @keywords internal -difftime_approx_ceiling_time_delta <- function(difftime, time_type) { - assert_class(difftime, "difftime") - switch(time_type, - day = , - week = { - units(difftime) <- paste0(time_type, "s") - ceiling(difftime) - }, - yearmonth = { - units(difftime) <- "days" - ceiling(as.numeric(difftime) / 30) - }, - integer = , - cli_abort("Unsupported time_type for this operation: {time_type}") - ) -} - #' Extract singular element of a length-1 unnamed list (validated) #' #' Inverse of `list(elt)`. diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R new file mode 100644 index 000000000..6977ab176 --- /dev/null +++ b/tests/testthat/test-time-utils.R @@ -0,0 +1,152 @@ +test_that("guess_period works", { + # Error cases: + expect_error(guess_period(numeric(0L)), class = "epiprocess__guess_period__not_enough_times") + expect_error(guess_period(c(1)), class = "epiprocess__guess_period__not_enough_times") + # Different numeric classes and cases: + expect_identical(guess_period(c(1, 8)), 7) + expect_identical(guess_period(c(1, 8, 15)), 7) + expect_identical(guess_period(c(1L, 8L, 15L)), 7L) + expect_identical(guess_period(c(0, 7, 14, 15)), 1) + # We currently allow the guessed frequency to not appear in the diffs, but + # this might not be a good idea as it likely indicates an issue with the data + # (#485). + expect_identical(guess_period(c(0, 2, 5)), 1) + expect_identical(guess_period(c(0, 4, 10)), 2) + # On Dates: + daily_dates <- seq(as.Date("2020-01-01"), as.Date("2020-01-15"), by = "day") + weekly_dates <- seq(as.Date("2020-01-01"), as.Date("2020-01-15"), by = "week") + expect_identical( + daily_dates[[1L]] + guess_period(daily_dates) * (seq_along(daily_dates) - 1L), + daily_dates + ) + expect_identical( + weekly_dates[[1L]] + guess_period(weekly_dates) * (seq_along(weekly_dates) - 1L), + weekly_dates + ) + # On POSIXcts: + daily_posixcts <- as.POSIXct(daily_dates, tz = "US/Aleutian") + 3600 + weekly_posixcts <- as.POSIXct(weekly_dates, tz = "US/Aleutian") + 3600 + expect_identical( + daily_posixcts[[1L]] + guess_period(daily_posixcts) * (seq_along(daily_posixcts) - 1L), + daily_posixcts + ) + expect_identical( + weekly_posixcts[[1L]] + guess_period(weekly_posixcts) * (seq_along(weekly_posixcts) - 1L), + weekly_posixcts + ) + # On POSIXlts: + daily_posixlts <- as.POSIXlt(daily_dates, tz = "UTC") + 3600 + weekly_posixlts <- as.POSIXlt(weekly_dates, tz = "UTC") + 3600 + expect_identical( + daily_posixlts[[1L]] + guess_period(daily_posixlts) * (seq_along(daily_posixlts) - 1L), + daily_posixlts + ) + expect_identical( + weekly_posixlts[[1L]] + guess_period(weekly_posixlts) * (seq_along(weekly_posixlts) - 1L), + weekly_posixlts + ) +}) + +test_that("validate_slide_window_arg works", { + for (time_type in c("day", "week", "integer", "yearmonth")) { + expect_no_error(validate_slide_window_arg(Inf, time_type)) + } + expect_no_error(validate_slide_window_arg(as.difftime(1, units = "days"), "day")) + expect_no_error(validate_slide_window_arg(1, "day")) + expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "day"), + class = "epiprocess__validate_slide_window_arg" + ) + expect_error(validate_slide_window_arg(as.difftime(1, units = "secs"), "day"), + class = "epiprocess__validate_slide_window_arg" + ) + + expect_no_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "week")) + expect_error(validate_slide_window_arg(1, "week"), + class = "epiprocess__validate_slide_window_arg" + ) + + expect_no_error(validate_slide_window_arg(1, "integer")) + expect_error(validate_slide_window_arg(as.difftime(1, units = "days"), "integer"), + class = "epiprocess__validate_slide_window_arg" + ) + expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "integer"), + class = "epiprocess__validate_slide_window_arg" + ) + + expect_no_error(validate_slide_window_arg(1, "yearmonth")) + expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "yearmonth"), + class = "epiprocess__validate_slide_window_arg" + ) +}) + +test_that("unit_time_delta works", { + expect_equal( + as.Date("2020-01-01") + 5 * unit_time_delta("day"), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + 2 * unit_time_delta("week"), + as.Date("2020-01-15") + ) + expect_equal( + tsibble::make_yearmonth(2000, 1) + 5 * unit_time_delta("yearmonth"), + tsibble::make_yearmonth(2000, 6) + ) + expect_equal( + 1L + 5L * unit_time_delta("integer"), + 6L + ) + # + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.Date("2020-01-06") - as.Date("2020-01-01"), "day") * + unit_time_delta("day"), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.integer(as.Date("2020-01-06") - as.Date("2020-01-01")), "day") * + unit_time_delta("day"), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.Date("2020-01-15") - as.Date("2020-01-01"), "week") * + unit_time_delta("week"), + as.Date("2020-01-15") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.difftime(2, units = "weeks"), "week") * + unit_time_delta("week"), + as.Date("2020-01-15") + ) + expect_equal( + tsibble::make_yearmonth(2000, 1) + + time_delta_to_n_steps(5, "yearmonth") * + unit_time_delta("yearmonth"), + tsibble::make_yearmonth(2000, 6) + ) + expect_equal( + 1L + + time_delta_to_n_steps(5, "integer") * + unit_time_delta("integer"), + 6L + ) +}) + +test_that("time_delta_to_approx_difftime works as expected", { + expect_equal(time_delta_to_approx_difftime(as.difftime(3, units = "days"), "day"), + as.difftime(3, units = "days")) + expect_equal(time_delta_to_approx_difftime(3, "day"), + as.difftime(3, units = "days")) + expect_equal(time_delta_to_approx_difftime(3, "week"), + as.difftime(3, units = "weeks")) + expect_true(time_delta_to_approx_difftime(3, "yearmonth") %>% + `units<-`("days") %>% + as.numeric() %>% + `-`(90) %>% + abs() %>% + `<=`(5)) + expect_error(time_delta_to_approx_difftime(3, "integer")) +}) diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index e9475c51d..55e79830a 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -280,157 +280,3 @@ test_that("as_slide_computation works", { h <- as_time_slide_computation(~ .x - .group_key) expect_equal(h(6, 3), 3) }) - -test_that("guess_period works", { - # Error cases: - expect_error(guess_period(numeric(0L)), class = "epiprocess__guess_period__not_enough_times") - expect_error(guess_period(c(1)), class = "epiprocess__guess_period__not_enough_times") - # Different numeric classes and cases: - expect_identical(guess_period(c(1, 8)), 7) - expect_identical(guess_period(c(1, 8, 15)), 7) - expect_identical(guess_period(c(1L, 8L, 15L)), 7L) - expect_identical(guess_period(c(0, 7, 14, 15)), 1) - # We currently allow the guessed frequency to not appear in the diffs, but - # this might not be a good idea as it likely indicates an issue with the data - # (#485). - expect_identical(guess_period(c(0, 2, 5)), 1) - expect_identical(guess_period(c(0, 4, 10)), 2) - # On Dates: - daily_dates <- seq(as.Date("2020-01-01"), as.Date("2020-01-15"), by = "day") - weekly_dates <- seq(as.Date("2020-01-01"), as.Date("2020-01-15"), by = "week") - expect_identical( - daily_dates[[1L]] + guess_period(daily_dates) * (seq_along(daily_dates) - 1L), - daily_dates - ) - expect_identical( - weekly_dates[[1L]] + guess_period(weekly_dates) * (seq_along(weekly_dates) - 1L), - weekly_dates - ) - # On POSIXcts: - daily_posixcts <- as.POSIXct(daily_dates, tz = "US/Aleutian") + 3600 - weekly_posixcts <- as.POSIXct(weekly_dates, tz = "US/Aleutian") + 3600 - expect_identical( - daily_posixcts[[1L]] + guess_period(daily_posixcts) * (seq_along(daily_posixcts) - 1L), - daily_posixcts - ) - expect_identical( - weekly_posixcts[[1L]] + guess_period(weekly_posixcts) * (seq_along(weekly_posixcts) - 1L), - weekly_posixcts - ) - # On POSIXlts: - daily_posixlts <- as.POSIXlt(daily_dates, tz = "UTC") + 3600 - weekly_posixlts <- as.POSIXlt(weekly_dates, tz = "UTC") + 3600 - expect_identical( - daily_posixlts[[1L]] + guess_period(daily_posixlts) * (seq_along(daily_posixlts) - 1L), - daily_posixlts - ) - expect_identical( - weekly_posixlts[[1L]] + guess_period(weekly_posixlts) * (seq_along(weekly_posixlts) - 1L), - weekly_posixlts - ) -}) - - -test_that("validate_slide_window_arg works", { - for (time_type in c("day", "week", "integer", "yearmonth")) { - expect_no_error(validate_slide_window_arg(Inf, time_type)) - } - expect_no_error(validate_slide_window_arg(as.difftime(1, units = "days"), "day")) - expect_no_error(validate_slide_window_arg(1, "day")) - expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "day"), - class = "epiprocess__validate_slide_window_arg" - ) - expect_error(validate_slide_window_arg(as.difftime(1, units = "secs"), "day"), - class = "epiprocess__validate_slide_window_arg" - ) - - expect_no_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "week")) - expect_error(validate_slide_window_arg(1, "week"), - class = "epiprocess__validate_slide_window_arg" - ) - - expect_no_error(validate_slide_window_arg(1, "integer")) - expect_error(validate_slide_window_arg(as.difftime(1, units = "days"), "integer"), - class = "epiprocess__validate_slide_window_arg" - ) - expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "integer"), - class = "epiprocess__validate_slide_window_arg" - ) - - expect_no_error(validate_slide_window_arg(1, "yearmonth")) - expect_error(validate_slide_window_arg(as.difftime(1, units = "weeks"), "yearmonth"), - class = "epiprocess__validate_slide_window_arg" - ) -}) - -test_that("unit_time_delta works", { - expect_equal( - as.Date("2020-01-01") + 5 * unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + 2 * unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - tsibble::make_yearmonth(2000, 1) + 5 * unit_time_delta("yearmonth"), - tsibble::make_yearmonth(2000, 6) - ) - expect_equal( - 1L + 5L * unit_time_delta("integer"), - 6L - ) - # - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.Date("2020-01-06") - as.Date("2020-01-01"), "day") * - unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.integer(as.Date("2020-01-06") - as.Date("2020-01-01")), "day") * - unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.Date("2020-01-15") - as.Date("2020-01-01"), "week") * - unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.difftime(2, units = "weeks"), "week") * - unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - tsibble::make_yearmonth(2000, 1) + - time_delta_to_n_steps(5, "yearmonth") * - unit_time_delta("yearmonth"), - tsibble::make_yearmonth(2000, 6) - ) - expect_equal( - 1L + - time_delta_to_n_steps(5, "integer") * - unit_time_delta("integer"), - 6L - ) -}) - -test_that("time_delta_to_approx_difftime works as expected", { - expect_equal(time_delta_to_approx_difftime(as.difftime(3, units = "days"), "day"), - as.difftime(3, units = "days")) - expect_equal(time_delta_to_approx_difftime(3, "day"), - as.difftime(3, units = "days")) - expect_equal(time_delta_to_approx_difftime(3, "week"), - as.difftime(3, units = "weeks")) - expect_true(time_delta_to_approx_difftime(3, "yearmonth") %>% - `units<-`("days") %>% - as.numeric() %>% - `-`(90) %>% - abs() %>% - `<=`(5)) - expect_error(time_delta_to_approx_difftime(3, "integer")) -}) From ee00d42fafcb793102f3422cc87f804c78d75394 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 19:44:14 -0800 Subject: [PATCH 17/48] Add unit_time_delta_fast and time add/sub helpers --- DESCRIPTION | 1 + R/revision_analysis.R | 10 +++--- R/time-utils.R | 31 ++++++++++++++++++- man/difftime_approx_ceiling_time_delta.Rd | 21 +++++++++++++ man/guess_period.Rd | 2 +- man/time_delta_to_approx_difftime.Rd | 31 +++++++++++++++++++ man/time_delta_to_n_steps.Rd | 2 +- man/time_type_unit_abbr.Rd | 20 ++++++++++++ ...e_delta.Rd => unit_time_delta_friendly.Rd} | 20 ++++++++---- tests/testthat/test-time-utils.R | 30 +++++++++++------- 10 files changed, 143 insertions(+), 25 deletions(-) create mode 100644 man/difftime_approx_ceiling_time_delta.Rd create mode 100644 man/time_delta_to_approx_difftime.Rd create mode 100644 man/time_type_unit_abbr.Rd rename man/{unit_time_delta.Rd => unit_time_delta_friendly.Rd} (52%) diff --git a/DESCRIPTION b/DESCRIPTION index 88a7ab5da..f6a61127d 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -103,5 +103,6 @@ Collate: 'reexports.R' 'revision_analysis.R' 'slide.R' + 'time-utils.R' 'utils.R' 'utils_pipe.R' diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 2bb1c378a..49a7dc3ef 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -146,7 +146,7 @@ revision_summary <- function(epi_arch, } revision_behavior <- revision_behavior %>% - mutate(lag = time_delta_to_n_steps(version - time_value, epi_arch$time_type)) %>% # nolint: object_usage_linter + mutate(lag = time_minus_time_in_n_steps(version, time_value, epi_arch$time_type)) %>% # nolint: object_usage_linter group_by(across(all_of(epikeytime_names))) %>% # group = versions of one measurement summarize( n_revisions = dplyr::n() - 1, @@ -161,9 +161,9 @@ revision_summary <- function(epi_arch, mutate( spread = max_value - min_value, # nolint: object_usage_linter rel_spread = spread / max_value, # nolint: object_usage_linter - min_lag = min_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter - max_lag = max_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter - lag_near_latest = lag_to * unit_time_delta(epi_arch$time_type) # nolint: object_usage_linter + min_lag = min_lag * unit_time_delta_friendly(epi_arch$time_type), # nolint: object_usage_linter + max_lag = max_lag * unit_time_delta_friendly(epi_arch$time_type), # nolint: object_usage_linter + lag_near_latest = lag_to * unit_time_delta_friendly(epi_arch$time_type) # nolint: object_usage_linter ) %>% select(-lag_to) %>% relocate( @@ -286,7 +286,7 @@ time_delta_summary <- function(time_delta, time_type) { row.names = " ", check.names = FALSE ) %>% - mutate(across(c(min, median, mean, max), ~ .x * unit_time_delta(time_type))) + mutate(across(c(min, median, mean, max), ~ .x * unit_time_delta_friendly(time_type))) return(res) } else { return(data.frame()) diff --git a/R/time-utils.R b/R/time-utils.R index 3ac873e8d..2120faa61 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -157,6 +157,12 @@ time_delta_to_n_steps <- function(time_delta, time_type) { #' Object that, added to time_values of time_type, advances by one time step/interval #' +#' For some time_types, there are multiple ways to represent time_deltas. +#' `unit_time_delta_friendly()` tries to output a "friendly" time_delta that +#' will be more informative when printed, and produce errors in more cases when +#' it is used in unexpected ways. `unit_time_delta_fast()` tries to output a +#' time_delta with faster operations. +#' #' @param time_type string; `epi_df`'s or `epi_archive`'s `time_type` #' @return an object `u` such that `time_values + u` represents advancing by one #' time step / moving to the subsequent time interval for any `time_values` @@ -168,7 +174,7 @@ time_delta_to_n_steps <- function(time_delta, time_type) { #' time_deltas are not allowed in time_delta-specific operations. #' #' @keywords internal -unit_time_delta <- function(time_type) { +unit_time_delta_friendly <- function(time_type) { switch(time_type, day = as.difftime(1, units = "days"), week = as.difftime(1, units = "weeks"), @@ -178,6 +184,17 @@ unit_time_delta <- function(time_type) { ) } +#' @rdname unit_time_delta_friendly +unit_time_delta_fast <- function(time_type) { + switch(time_type, + day = 1, + week = 7, + yearmonth = 1, + integer = 1L, + cli_abort("Unsupported time_type: {time_type}") + ) +} + # Using these unit abbreviations happens to make our automatic slide output # naming look like taking ISO-8601 duration designations, removing the P, and # lowercasing any characters. Fortnightly or sub-daily time types would need an @@ -271,3 +288,15 @@ difftime_approx_ceiling_time_delta <- function(difftime, time_type) { cli_abort("Unsupported time_type for this operation: {time_type}") ) } + +time_minus_time_in_n_steps <- function(x, y, time_type) { + time_delta_to_n_steps(x - y, time_type) +} + +time_plus_n_steps <- function(x, y, time_type) { + x + y * unit_time_delta_fast(time_type) +} + +time_minus_n_steps <- function(x, y, time_type) { + x - y * unit_time_delta_fast(time_type) +} diff --git a/man/difftime_approx_ceiling_time_delta.Rd b/man/difftime_approx_ceiling_time_delta.Rd new file mode 100644 index 000000000..f5f6ad426 --- /dev/null +++ b/man/difftime_approx_ceiling_time_delta.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{difftime_approx_ceiling_time_delta} +\alias{difftime_approx_ceiling_time_delta} +\title{Closest time_delta that's approximately greater than given difftime} +\usage{ +difftime_approx_ceiling_time_delta(difftime, time_type) +} +\arguments{ +\item{difftime}{a difftime object} + +\item{time_type}{as in \code{validate_slide_window_arg}} +} +\value{ +An object representing an integerish number (or vector of numbers) of +time steps between consecutive time_values of type \code{time_type}. +} +\description{ +\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#experimental}{\figure{lifecycle-experimental.svg}{options: alt='[Experimental]'}}}{\strong{[Experimental]}} +} +\keyword{internal} diff --git a/man/guess_period.Rd b/man/guess_period.Rd index 5f17cf4ef..9cbfebc6c 100644 --- a/man/guess_period.Rd +++ b/man/guess_period.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R +% Please edit documentation in R/time-utils.R \name{guess_period} \alias{guess_period} \title{Use max valid period as guess for \code{period} of \code{time_values}} diff --git a/man/time_delta_to_approx_difftime.Rd b/man/time_delta_to_approx_difftime.Rd new file mode 100644 index 000000000..a726fd62b --- /dev/null +++ b/man/time_delta_to_approx_difftime.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{time_delta_to_approx_difftime} +\alias{time_delta_to_approx_difftime} +\title{Convert \code{time_delta} to an approximate difftime} +\usage{ +time_delta_to_approx_difftime(time_delta, time_type) +} +\description{ +\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#experimental}{\figure{lifecycle-experimental.svg}{options: alt='[Experimental]'}}}{\strong{[Experimental]}} +} +\details{ +To assist in comparing \code{time_delta}s to default \code{difftime} thresholds when we +want to reduce friction. + +It may be better to try to do something like make \code{time_delta} validation +more accommodating (e.g., of difftimes with units of "days" when working on +weekly scale), and remain rigid on yearmonths. Applying deltas and comparing +time_values might also be an approach but seems more fraught as the least +common denominator would be start/mid/end datetimes of time intervals, but +those are also ambiguous (starting&representation wdays of weeks are unknown, +timezone of dates are unknown). + +Another alternative approach, below, converts difftimes to time_deltas +instead. It requires knowledge of which way to round in order to get +time_deltas representing an integer number of time steps, but avoids some +potential inconsistencies of the time-delta-to-difftime approach when we +think about applying it to, e.g., months / spans of months with varying +numbers of days, and also makes it easier to avoid "magical defaults". +} +\keyword{internal} diff --git a/man/time_delta_to_n_steps.Rd b/man/time_delta_to_n_steps.Rd index 937159195..d7858064b 100644 --- a/man/time_delta_to_n_steps.Rd +++ b/man/time_delta_to_n_steps.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R +% Please edit documentation in R/time-utils.R \name{time_delta_to_n_steps} \alias{time_delta_to_n_steps} \title{Convert a time delta to a integerish number of "unit" steps between time values} diff --git a/man/time_type_unit_abbr.Rd b/man/time_type_unit_abbr.Rd new file mode 100644 index 000000000..4e2971500 --- /dev/null +++ b/man/time_type_unit_abbr.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{time_type_unit_abbr} +\alias{time_type_unit_abbr} +\title{Get an abbreviation for the "units" of \code{unit_time_delta(time_type)}} +\usage{ +time_type_unit_abbr(time_type) +} +\arguments{ +\item{time_type}{str} +} +\value{ +str +} +\description{ +For use in formatting or automatically naming things based on +\code{time_delta_to_n_steps(time_delta)} for a \code{time_delta} between times of time +type \code{time_type}. +} +\keyword{internal} diff --git a/man/unit_time_delta.Rd b/man/unit_time_delta_friendly.Rd similarity index 52% rename from man/unit_time_delta.Rd rename to man/unit_time_delta_friendly.Rd index c859d2db1..fc4e7985e 100644 --- a/man/unit_time_delta.Rd +++ b/man/unit_time_delta_friendly.Rd @@ -1,10 +1,13 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{unit_time_delta} -\alias{unit_time_delta} +% Please edit documentation in R/time-utils.R +\name{unit_time_delta_friendly} +\alias{unit_time_delta_friendly} +\alias{unit_time_delta_fast} \title{Object that, added to time_values of time_type, advances by one time step/interval} \usage{ -unit_time_delta(time_type) +unit_time_delta_friendly(time_type) + +unit_time_delta_fast(time_type) } \arguments{ \item{time_type}{string; \code{epi_df}'s or \code{epi_archive}'s \code{time_type}} @@ -16,9 +19,14 @@ object of time type \code{time_type}, and such that \code{time_values + k * u} f integerish vector \code{k} advances by \code{k} steps (with vectorization, recycling). At time of writing, these objects also all support multiplication by nonintegerish numeric vectors, \code{mean}, and \code{median}, -which are useful for summarizing vector time_deltas. +which are useful for summarizing vector time_deltas, but these fractional +time_deltas are not allowed in time_delta-specific operations. } \description{ -Object that, added to time_values of time_type, advances by one time step/interval +For some time_types, there are multiple ways to represent time_deltas. +\code{unit_time_delta_friendly()} tries to output a "friendly" time_delta that +will be more informative when printed, and produce errors in more cases when +it is used in unexpected ways. \code{unit_time_delta_fast()} tries to output a +time_delta with faster operations. } \keyword{internal} diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index 6977ab176..c124611fb 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -80,6 +80,7 @@ test_that("validate_slide_window_arg works", { }) test_that("unit_time_delta works", { + for (unit_time_delta in list(unit_time_delta_friendly, unit_time_delta_fast)) { expect_equal( as.Date("2020-01-01") + 5 * unit_time_delta("day"), as.Date("2020-01-06") @@ -133,20 +134,27 @@ test_that("unit_time_delta works", { unit_time_delta("integer"), 6L ) + } }) test_that("time_delta_to_approx_difftime works as expected", { - expect_equal(time_delta_to_approx_difftime(as.difftime(3, units = "days"), "day"), - as.difftime(3, units = "days")) - expect_equal(time_delta_to_approx_difftime(3, "day"), - as.difftime(3, units = "days")) - expect_equal(time_delta_to_approx_difftime(3, "week"), - as.difftime(3, units = "weeks")) + expect_equal( + time_delta_to_approx_difftime(as.difftime(3, units = "days"), "day"), + as.difftime(3, units = "days") + ) + expect_equal( + time_delta_to_approx_difftime(3, "day"), + as.difftime(3, units = "days") + ) + expect_equal( + time_delta_to_approx_difftime(3, "week"), + as.difftime(3, units = "weeks") + ) expect_true(time_delta_to_approx_difftime(3, "yearmonth") %>% - `units<-`("days") %>% - as.numeric() %>% - `-`(90) %>% - abs() %>% - `<=`(5)) + `units<-`("days") %>% + as.numeric() %>% + `-`(90) %>% + abs() %>% + `<=`(5)) expect_error(time_delta_to_approx_difftime(3, "integer")) }) From 4405ab9b70010a33243ee30202bf44bc6b921260 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 21:50:30 -0800 Subject: [PATCH 18/48] Add time_delta standardization helpers --- R/time-utils.R | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/R/time-utils.R b/R/time-utils.R index 2120faa61..318f1ccae 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -195,6 +195,23 @@ unit_time_delta_fast <- function(time_type) { ) } +#' Standardize time_deltas to a specific format +#' +#' `time_delta_standardize_friendly` standardizes to a multiple of +#' [`unit_time_delta_friendly()`]. `time_delta_standardize_fast` standardizes to +#' a multiple of [`unit_time_delta_fast()`]. For some time_types, these are the +#' same thing. +#' +#' @keywords internal +time_delta_standardize_friendly <- function(time_delta, time_type) { + time_delta_to_n_steps(time_delta, time_type) * unit_time_delta_friendly(time_type) +} + +#' @rdname time_delta_standardize_friendly +time_delta_standardize_fast <- function(time_delta, time_type) { + time_delta_to_n_steps(time_delta, time_type) * unit_time_delta_fast(time_type) +} + # Using these unit abbreviations happens to make our automatic slide output # naming look like taking ISO-8601 duration designations, removing the P, and # lowercasing any characters. Fortnightly or sub-daily time types would need an @@ -249,13 +266,7 @@ time_type_unit_abbr <- function(time_type) { time_delta_to_approx_difftime <- function(time_delta, time_type) { switch(time_type, day = , - week = { - if (inherits(time_delta, "difftime")) { - time_delta - } else { - time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type) - } - }, + week = time_delta_standardize_friendly(time_delta, time_type), yearmonth = time_delta * as.difftime(30, units = "days"), integer = , cli_abort("Unsupported time_type for this operation: {time_type}") From 5de2eec68df02c244fba6d167bb3cf515f0e1de0 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 19 Dec 2024 22:11:52 -0800 Subject: [PATCH 19/48] Change *_friendly and *_fast functions to an extra argument --- R/revision_analysis.R | 8 +- R/time-utils.R | 99 ++++++++-------- man/n_steps_to_time_delta.Rd | 11 ++ man/time_delta_standardize.Rd | 12 ++ ...e_delta_friendly.Rd => unit_time_delta.Rd} | 21 ++-- tests/testthat/test-time-utils.R | 108 +++++++++--------- 6 files changed, 138 insertions(+), 121 deletions(-) create mode 100644 man/n_steps_to_time_delta.Rd create mode 100644 man/time_delta_standardize.Rd rename man/{unit_time_delta_friendly.Rd => unit_time_delta.Rd} (68%) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 49a7dc3ef..68bfacfcc 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -161,9 +161,9 @@ revision_summary <- function(epi_arch, mutate( spread = max_value - min_value, # nolint: object_usage_linter rel_spread = spread / max_value, # nolint: object_usage_linter - min_lag = min_lag * unit_time_delta_friendly(epi_arch$time_type), # nolint: object_usage_linter - max_lag = max_lag * unit_time_delta_friendly(epi_arch$time_type), # nolint: object_usage_linter - lag_near_latest = lag_to * unit_time_delta_friendly(epi_arch$time_type) # nolint: object_usage_linter + min_lag = min_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter + max_lag = max_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter + lag_near_latest = lag_to * unit_time_delta(epi_arch$time_type) # nolint: object_usage_linter ) %>% select(-lag_to) %>% relocate( @@ -286,7 +286,7 @@ time_delta_summary <- function(time_delta, time_type) { row.names = " ", check.names = FALSE ) %>% - mutate(across(c(min, median, mean, max), ~ .x * unit_time_delta_friendly(time_type))) + mutate(across(c(min, median, mean, max), ~ .x * unit_time_delta(time_type))) return(res) } else { return(data.frame()) diff --git a/R/time-utils.R b/R/time-utils.R index 318f1ccae..47dcd295d 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -108,6 +108,43 @@ validate_slide_window_arg <- function(arg, time_type, lower = 1, allow_inf = TRU } } +#' Object that, added to time_values of time_type, advances by one time step/interval +#' +#' @param time_type string; `epi_df`'s or `epi_archive`'s `time_type` +#' @param format "friendly" or "fast"; for some time_types, there are multiple +#' ways to represent time_deltas. "friendly" tries to output a format that +#' will be more informative when printed, and produce errors in more cases +#' when used in unexpected ways. "fast" tries to output a time_delta that will +#' be faster in downstream operations. +#' @return an object `u` such that `time_values + u` represents advancing by one +#' time step / moving to the subsequent time interval for any `time_values` +#' object of time type `time_type`, and such that `time_values + k * u` for +#' integerish vector `k` advances by `k` steps (with vectorization, +#' recycling). At time of writing, these objects also all support +#' multiplication by nonintegerish numeric vectors, `mean`, and `median`, +#' which are useful for summarizing vector time_deltas, but these fractional +#' time_deltas are not allowed in time_delta-specific operations. +#' +#' @keywords internal +unit_time_delta <- function(time_type, format = c("friendly", "fast")) { + format <- rlang::arg_match(format) + switch(format, + friendly = switch(time_type, + day = as.difftime(1, units = "days"), + week = as.difftime(1, units = "weeks"), + yearmonth = 1, + integer = 1L, + cli_abort("Unsupported time_type: {time_type}") + ), + fast = switch(time_type, + day = 1, + week = 7, + yearmonth = 1, + integer = 1L, + cli_abort("Unsupported time_type: {time_type}") + ) + ) +} #' Convert a time delta to a integerish number of "unit" steps between time values #' @@ -155,61 +192,19 @@ time_delta_to_n_steps <- function(time_delta, time_type) { } } -#' Object that, added to time_values of time_type, advances by one time step/interval -#' -#' For some time_types, there are multiple ways to represent time_deltas. -#' `unit_time_delta_friendly()` tries to output a "friendly" time_delta that -#' will be more informative when printed, and produce errors in more cases when -#' it is used in unexpected ways. `unit_time_delta_fast()` tries to output a -#' time_delta with faster operations. -#' -#' @param time_type string; `epi_df`'s or `epi_archive`'s `time_type` -#' @return an object `u` such that `time_values + u` represents advancing by one -#' time step / moving to the subsequent time interval for any `time_values` -#' object of time type `time_type`, and such that `time_values + k * u` for -#' integerish vector `k` advances by `k` steps (with vectorization, -#' recycling). At time of writing, these objects also all support -#' multiplication by nonintegerish numeric vectors, `mean`, and `median`, -#' which are useful for summarizing vector time_deltas, but these fractional -#' time_deltas are not allowed in time_delta-specific operations. -#' -#' @keywords internal -unit_time_delta_friendly <- function(time_type) { - switch(time_type, - day = as.difftime(1, units = "days"), - week = as.difftime(1, units = "weeks"), - yearmonth = 1, - integer = 1L, - cli_abort("Unsupported time_type: {time_type}") - ) -} - -#' @rdname unit_time_delta_friendly -unit_time_delta_fast <- function(time_type) { - switch(time_type, - day = 1, - week = 7, - yearmonth = 1, - integer = 1L, - cli_abort("Unsupported time_type: {time_type}") - ) +#' Convert from integerish/infinite/mix to time_delta +n_steps_to_time_delta <- function(n_steps, time_type, format = c("friendly", "fast")) { + if (!is_bare_integerish(n_steps)) { + cli_abort("`n_steps` did not appear to be integerish (or infinite, or a mix)") + } + n_steps * unit_time_delta(time_type, format) } -#' Standardize time_deltas to a specific format -#' -#' `time_delta_standardize_friendly` standardizes to a multiple of -#' [`unit_time_delta_friendly()`]. `time_delta_standardize_fast` standardizes to -#' a multiple of [`unit_time_delta_fast()`]. For some time_types, these are the -#' same thing. +#' Standardize time_deltas to a multiple of [`unit_time_delta()`] #' #' @keywords internal -time_delta_standardize_friendly <- function(time_delta, time_type) { - time_delta_to_n_steps(time_delta, time_type) * unit_time_delta_friendly(time_type) -} - -#' @rdname time_delta_standardize_friendly -time_delta_standardize_fast <- function(time_delta, time_type) { - time_delta_to_n_steps(time_delta, time_type) * unit_time_delta_fast(time_type) +time_delta_standardize <- function(time_delta, time_type, format = c("friendly", "fast")) { + time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type, format) } # Using these unit abbreviations happens to make our automatic slide output @@ -266,7 +261,7 @@ time_type_unit_abbr <- function(time_type) { time_delta_to_approx_difftime <- function(time_delta, time_type) { switch(time_type, day = , - week = time_delta_standardize_friendly(time_delta, time_type), + week = time_delta_standardize(time_delta, time_type, "friendly"), yearmonth = time_delta * as.difftime(30, units = "days"), integer = , cli_abort("Unsupported time_type for this operation: {time_type}") diff --git a/man/n_steps_to_time_delta.Rd b/man/n_steps_to_time_delta.Rd new file mode 100644 index 000000000..3f34f45ee --- /dev/null +++ b/man/n_steps_to_time_delta.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{n_steps_to_time_delta} +\alias{n_steps_to_time_delta} +\title{Convert from integerish/infinite/mix to time_delta} +\usage{ +n_steps_to_time_delta(n_steps, time_type, format = c("friendly", "fast")) +} +\description{ +Convert from integerish/infinite/mix to time_delta +} diff --git a/man/time_delta_standardize.Rd b/man/time_delta_standardize.Rd new file mode 100644 index 000000000..4ce0bd53d --- /dev/null +++ b/man/time_delta_standardize.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{time_delta_standardize} +\alias{time_delta_standardize} +\title{Standardize time_deltas to a multiple of \code{\link[=unit_time_delta]{unit_time_delta()}}} +\usage{ +time_delta_standardize(time_delta, time_type, format = c("friendly", "fast")) +} +\description{ +Standardize time_deltas to a multiple of \code{\link[=unit_time_delta]{unit_time_delta()}} +} +\keyword{internal} diff --git a/man/unit_time_delta_friendly.Rd b/man/unit_time_delta.Rd similarity index 68% rename from man/unit_time_delta_friendly.Rd rename to man/unit_time_delta.Rd index fc4e7985e..ec63d2558 100644 --- a/man/unit_time_delta_friendly.Rd +++ b/man/unit_time_delta.Rd @@ -1,16 +1,19 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/time-utils.R -\name{unit_time_delta_friendly} -\alias{unit_time_delta_friendly} -\alias{unit_time_delta_fast} +\name{unit_time_delta} +\alias{unit_time_delta} \title{Object that, added to time_values of time_type, advances by one time step/interval} \usage{ -unit_time_delta_friendly(time_type) - -unit_time_delta_fast(time_type) +unit_time_delta(time_type, format = c("friendly", "fast")) } \arguments{ \item{time_type}{string; \code{epi_df}'s or \code{epi_archive}'s \code{time_type}} + +\item{format}{"friendly" or "fast"; for some time_types, there are multiple +ways to represent time_deltas. "friendly" tries to output a format that +will be more informative when printed, and produce errors in more cases +when used in unexpected ways. "fast" tries to output a time_delta that will +be faster in downstream operations.} } \value{ an object \code{u} such that \code{time_values + u} represents advancing by one @@ -23,10 +26,6 @@ which are useful for summarizing vector time_deltas, but these fractional time_deltas are not allowed in time_delta-specific operations. } \description{ -For some time_types, there are multiple ways to represent time_deltas. -\code{unit_time_delta_friendly()} tries to output a "friendly" time_delta that -will be more informative when printed, and produce errors in more cases when -it is used in unexpected ways. \code{unit_time_delta_fast()} tries to output a -time_delta with faster operations. +Object that, added to time_values of time_type, advances by one time step/interval } \keyword{internal} diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index c124611fb..021d48634 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -80,60 +80,60 @@ test_that("validate_slide_window_arg works", { }) test_that("unit_time_delta works", { - for (unit_time_delta in list(unit_time_delta_friendly, unit_time_delta_fast)) { - expect_equal( - as.Date("2020-01-01") + 5 * unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + 2 * unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - tsibble::make_yearmonth(2000, 1) + 5 * unit_time_delta("yearmonth"), - tsibble::make_yearmonth(2000, 6) - ) - expect_equal( - 1L + 5L * unit_time_delta("integer"), - 6L - ) - # - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.Date("2020-01-06") - as.Date("2020-01-01"), "day") * - unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.integer(as.Date("2020-01-06") - as.Date("2020-01-01")), "day") * - unit_time_delta("day"), - as.Date("2020-01-06") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.Date("2020-01-15") - as.Date("2020-01-01"), "week") * - unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - as.Date("2020-01-01") + - time_delta_to_n_steps(as.difftime(2, units = "weeks"), "week") * - unit_time_delta("week"), - as.Date("2020-01-15") - ) - expect_equal( - tsibble::make_yearmonth(2000, 1) + - time_delta_to_n_steps(5, "yearmonth") * - unit_time_delta("yearmonth"), - tsibble::make_yearmonth(2000, 6) - ) - expect_equal( - 1L + - time_delta_to_n_steps(5, "integer") * - unit_time_delta("integer"), - 6L - ) + for (format in c("friendly", "fast")) { + expect_equal( + as.Date("2020-01-01") + 5 * unit_time_delta("day", format = format), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + 2 * unit_time_delta("week", format = format), + as.Date("2020-01-15") + ) + expect_equal( + tsibble::make_yearmonth(2000, 1) + 5 * unit_time_delta("yearmonth", format = format), + tsibble::make_yearmonth(2000, 6) + ) + expect_equal( + 1L + 5L * unit_time_delta("integer", format = format), + 6L + ) + # + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.Date("2020-01-06") - as.Date("2020-01-01"), "day") * + unit_time_delta("day", format = format), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.integer(as.Date("2020-01-06") - as.Date("2020-01-01")), "day") * + unit_time_delta("day", format = format), + as.Date("2020-01-06") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.Date("2020-01-15") - as.Date("2020-01-01"), "week") * + unit_time_delta("week", format = format), + as.Date("2020-01-15") + ) + expect_equal( + as.Date("2020-01-01") + + time_delta_to_n_steps(as.difftime(2, units = "weeks"), "week") * + unit_time_delta("week", format = format), + as.Date("2020-01-15") + ) + expect_equal( + tsibble::make_yearmonth(2000, 1) + + time_delta_to_n_steps(5, "yearmonth") * + unit_time_delta("yearmonth", format = format), + tsibble::make_yearmonth(2000, 6) + ) + expect_equal( + 1L + + time_delta_to_n_steps(5, "integer") * + unit_time_delta("integer", format = format), + 6L + ) } }) From a1ebd09ca80219150cfdfca88495a11b68e2298f Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 20 Dec 2024 00:38:31 -0800 Subject: [PATCH 20/48] Refactor some time_step <-> n_steps usage for clarity --- R/revision_analysis.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 68bfacfcc..8b27f8316 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -161,9 +161,9 @@ revision_summary <- function(epi_arch, mutate( spread = max_value - min_value, # nolint: object_usage_linter rel_spread = spread / max_value, # nolint: object_usage_linter - min_lag = min_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter - max_lag = max_lag * unit_time_delta(epi_arch$time_type), # nolint: object_usage_linter - lag_near_latest = lag_to * unit_time_delta(epi_arch$time_type) # nolint: object_usage_linter + min_lag = n_steps_to_time_delta(min_lag, epi_arch$time_type), # nolint: object_usage_linter + max_lag = n_steps_to_time_delta(max_lag, epi_arch$time_type), # nolint: object_usage_linter + lag_near_latest = n_steps_to_time_delta(lag_to, epi_arch$time_type) # nolint: object_usage_linter ) %>% select(-lag_to) %>% relocate( From 0707e7183e19191017c3bc9f855b52b5e5c73fa3 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 20 Dec 2024 00:57:41 -0800 Subject: [PATCH 21/48] feat+fix(revision_summary): expand time_type support + fix helpers --- R/revision_analysis.R | 30 +++++++++++++++++++----------- R/time-utils.R | 4 ++-- man/revision_summary.Rd | 6 ++++-- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 8b27f8316..deb7b98d0 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -77,9 +77,11 @@ revision_summary <- function(epi_arch, ..., drop_nas = TRUE, print_inform = TRUE, - min_waiting_period = as.difftime(60, units = "days"), + min_waiting_period = as.difftime(60, units = "days") %>% + difftime_approx_ceiling_time_delta(epi_arch$time_type), within_latest = 0.2, - quick_revision = as.difftime(3, units = "days"), + quick_revision = as.difftime(3, units = "days") %>% + difftime_approx_ceiling_time_delta(epi_arch$time_type), few_revisions = 3, abs_spread_threshold = NULL, rel_spread_threshold = 0.1, @@ -124,12 +126,18 @@ revision_summary <- function(epi_arch, epikey_names <- key_colnames(epi_arch, exclude = c("time_value", "version")) epikeytime_names <- c(epikey_names, "time_value") keys <- c(epikeytime_names, "version") + time_type <- epi_arch$time_type revision_behavior <- epi_arch$DT %>% select(all_of(unique(c(keys, arg)))) if (!is.null(min_waiting_period)) { + last_semistable_time_value <- time_minus_n_steps( + epi_arch$versions_end, + time_delta_to_n_steps(min_waiting_period, time_type), + time_type + ) revision_behavior <- revision_behavior %>% - filter(vec_cast(epi_arch$versions_end - time_value, min_waiting_period) >= min_waiting_period) + filter(time_value <= last_semistable_time_value) } if (drop_nas) { @@ -146,7 +154,7 @@ revision_summary <- function(epi_arch, } revision_behavior <- revision_behavior %>% - mutate(lag = time_minus_time_in_n_steps(version, time_value, epi_arch$time_type)) %>% # nolint: object_usage_linter + mutate(lag = time_minus_time_in_n_steps(version, time_value, time_type)) %>% # nolint: object_usage_linter group_by(across(all_of(epikeytime_names))) %>% # group = versions of one measurement summarize( n_revisions = dplyr::n() - 1, @@ -161,9 +169,9 @@ revision_summary <- function(epi_arch, mutate( spread = max_value - min_value, # nolint: object_usage_linter rel_spread = spread / max_value, # nolint: object_usage_linter - min_lag = n_steps_to_time_delta(min_lag, epi_arch$time_type), # nolint: object_usage_linter - max_lag = n_steps_to_time_delta(max_lag, epi_arch$time_type), # nolint: object_usage_linter - lag_near_latest = n_steps_to_time_delta(lag_to, epi_arch$time_type) # nolint: object_usage_linter + min_lag = n_steps_to_time_delta(min_lag, time_type), # nolint: object_usage_linter + max_lag = n_steps_to_time_delta(max_lag, time_type), # nolint: object_usage_linter + lag_near_latest = n_steps_to_time_delta(lag_to, time_type) # nolint: object_usage_linter ) %>% select(-lag_to) %>% relocate( @@ -172,7 +180,7 @@ revision_summary <- function(epi_arch, ) if (print_inform) { cli_inform("Min lag (time to first version):") - time_delta_summary(revision_behavior$min_lag, epi_arch$time_type) %>% print() + time_delta_summary(revision_behavior$min_lag, time_type) %>% print() if (!drop_nas) { total_na <- epi_arch$DT %>% filter(is.na(c_across(!!arg))) %>% # nolint: object_usage_linter @@ -187,8 +195,8 @@ revision_summary <- function(epi_arch, cli_inform("No revisions:") cli_li(num_percent(total_num_unrevised, total_num, "")) total_quickly_revised <- sum( # nolint: object_usage_linter - time_delta_to_n_steps(revision_behavior$max_lag, epi_arch$time_type) <= - time_delta_to_n_steps(quick_revision, epi_arch$time_type) + time_delta_to_n_steps(revision_behavior$max_lag, time_type) <= + time_delta_to_n_steps(quick_revision, time_type) ) cli_inform("Quick revisions (last revision within {quick_revision} {units(quick_revision)} of the `time_value`):") @@ -219,7 +227,7 @@ revision_summary <- function(epi_arch, cli_li(num_percent(abs_spread, n_real_revised, "")) cli_inform("{units(quick_revision)} until within {within_latest*100}% of the latest value:") - time_delta_summary(revision_behavior[["lag_near_latest"]], epi_arch$time_type) %>% print() + time_delta_summary(revision_behavior[["lag_near_latest"]], time_type) %>% print() } return(revision_behavior) } diff --git a/R/time-utils.R b/R/time-utils.R index 47dcd295d..a51a5689a 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -300,9 +300,9 @@ time_minus_time_in_n_steps <- function(x, y, time_type) { } time_plus_n_steps <- function(x, y, time_type) { - x + y * unit_time_delta_fast(time_type) + x + y * unit_time_delta(time_type, "fast") } time_minus_n_steps <- function(x, y, time_type) { - x - y * unit_time_delta_fast(time_type) + x - y * unit_time_delta(time_type, "fast") } diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index 948cc71e2..91a63f6e8 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -9,9 +9,11 @@ revision_summary( ..., drop_nas = TRUE, print_inform = TRUE, - min_waiting_period = as.difftime(60, units = "days"), + min_waiting_period = as.difftime(60, units = "days") \%>\% + difftime_approx_ceiling_time_delta(epi_arch$time_type), within_latest = 0.2, - quick_revision = as.difftime(3, units = "days"), + quick_revision = as.difftime(3, units = "days") \%>\% + difftime_approx_ceiling_time_delta(epi_arch$time_type), few_revisions = 3, abs_spread_threshold = NULL, rel_spread_threshold = 0.1, From 1558f691fbbcbaec1f6dcb6a4abcda1bb0cc6ee6 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 20 Dec 2024 01:21:01 -0800 Subject: [PATCH 22/48] Add internal docs for additional time helpers --- R/time-utils.R | 20 ++++++++++++++++++++ man/time_minus_time_in_n_steps.Rd | 23 +++++++++++++++++++++++ man/time_plus_n_steps.Rd | 25 +++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 man/time_minus_time_in_n_steps.Rd create mode 100644 man/time_plus_n_steps.Rd diff --git a/R/time-utils.R b/R/time-utils.R index a51a5689a..a110cb704 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -295,14 +295,34 @@ difftime_approx_ceiling_time_delta <- function(difftime, time_type) { ) } +#' Difference between two time value vectors in terms of number of time "steps" +#' +#' @param x a time_value (vector) of time type `time_type` +#' @param y a time_value (vector) of time type `time_type` +#' @param time_type as in [`validate_slide_window_arg()`] +#' @return integerish vector such that `x + n_steps_to_time_delta_fast(result)` +#' should equal `y`. +#' +#' @keywords internal time_minus_time_in_n_steps <- function(x, y, time_type) { time_delta_to_n_steps(x - y, time_type) } +#' Advance/retreat time_values by specified number of time "steps" +#' +#' Here, a "step" is based on the `time_type`, not just the class of `x`. +#' +#' @param x a time_value (vector) of time type `time_type` +#' @param y integerish (vector) +#' @param time_type as in [`validate_slide_window_arg()`] +#' @return a time_value (vector) of time type `time_type` +#' +#' @keywords internal time_plus_n_steps <- function(x, y, time_type) { x + y * unit_time_delta(time_type, "fast") } +#' @rdname time_plus_n_steps time_minus_n_steps <- function(x, y, time_type) { x - y * unit_time_delta(time_type, "fast") } diff --git a/man/time_minus_time_in_n_steps.Rd b/man/time_minus_time_in_n_steps.Rd new file mode 100644 index 000000000..aab030dea --- /dev/null +++ b/man/time_minus_time_in_n_steps.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{time_minus_time_in_n_steps} +\alias{time_minus_time_in_n_steps} +\title{Difference between two time value vectors in terms of number of time "steps"} +\usage{ +time_minus_time_in_n_steps(x, y, time_type) +} +\arguments{ +\item{x}{a time_value (vector) of time type \code{time_type}} + +\item{y}{a time_value (vector) of time type \code{time_type}} + +\item{time_type}{as in \code{\link[=validate_slide_window_arg]{validate_slide_window_arg()}}} +} +\value{ +integerish vector such that \code{x + n_steps_to_time_delta_fast(result)} +should equal \code{y}. +} +\description{ +Difference between two time value vectors in terms of number of time "steps" +} +\keyword{internal} diff --git a/man/time_plus_n_steps.Rd b/man/time_plus_n_steps.Rd new file mode 100644 index 000000000..f7071c132 --- /dev/null +++ b/man/time_plus_n_steps.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{time_plus_n_steps} +\alias{time_plus_n_steps} +\alias{time_minus_n_steps} +\title{Advance/retreat time_values by specified number of time "steps"} +\usage{ +time_plus_n_steps(x, y, time_type) + +time_minus_n_steps(x, y, time_type) +} +\arguments{ +\item{x}{a time_value (vector) of time type \code{time_type}} + +\item{y}{integerish (vector)} + +\item{time_type}{as in \code{\link[=validate_slide_window_arg]{validate_slide_window_arg()}}} +} +\value{ +a time_value (vector) of time type \code{time_type} +} +\description{ +Here, a "step" is based on the \code{time_type}, not just the class of \code{x}. +} +\keyword{internal} From deb2e8b590cfd513de351522c7c16a43be722ec2 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Sat, 21 Dec 2024 15:49:32 -0800 Subject: [PATCH 23/48] Add tests for default min_waiting_period x several time_types --- .../test-revision-latency-functions.R | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index e826f91c1..351e45409 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -66,4 +66,53 @@ test_that("tidyselect is functional", { class = "epiprocess__revision_summary__selected_zero_columns" ) }) -test_that("revision_summary works for various timetypes", {}) + +test_that("revision_summary default min_waiting_period works as expected", { + expect_equal( + tibble( + geo_value = 1, + time_value = as.Date("2020-01-01") + 0:1, + version = time_value + 1, + value = 1:2 + ) %>% + as_epi_archive(versions_end = as.Date("2020-01-01") + 1 + 59) %>% + revision_summary(print_inform = FALSE) %>% + pull(time_value), + as.Date("2020-01-01") + ) + expect_equal( + tibble( + geo_value = 1, + time_value = as.Date("2020-01-01") + 7 * (0:1), + version = time_value + 35, + value = 1:2 + ) %>% + as_epi_archive(versions_end = as.Date("2020-01-01") + 7 + 56) %>% + revision_summary(print_inform = FALSE) %>% + pull(time_value), + as.Date("2020-01-01") + ) + expect_equal( + tibble( + geo_value = 1, + time_value = tsibble::make_yearmonth(2000, 1:2), + version = time_value + 1, + value = 1:2 + ) %>% + as_epi_archive(versions_end = tsibble::make_yearmonth(2000, 3)) %>% + revision_summary(print_inform = FALSE) %>% + pull(time_value), + tsibble::make_yearmonth(2000, 1) + ) + expect_error( + tibble( + geo_value = 1, + time_value = 1:2 + 0, + version = time_value + 1, + value = 1:2 + ) %>% + as_epi_archive(versions_end = 1 + 1 + 59) %>% + revision_summary(print_inform = FALSE), + regexp = "Unsupported time_type" + ) +}) From 257f69c537cedb2d4779a7d8e811f5987f367d3a Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 8 Jan 2025 15:56:20 -0800 Subject: [PATCH 24/48] Add internal roxygen stub of validate_slide_window_arg So we can crossref in other internal roxygen without CHECK warning. --- R/time-utils.R | 2 ++ man/validate_slide_window_arg.Rd | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 man/validate_slide_window_arg.Rd diff --git a/R/time-utils.R b/R/time-utils.R index a110cb704..54338b1a6 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -51,6 +51,8 @@ guess_period.POSIXt <- function(time_values, time_values_arg = rlang::caller_arg as.numeric(NextMethod(), units = "secs") } +#' Validate `.before` or `.window_size` argument +#' @keywords internal validate_slide_window_arg <- function(arg, time_type, lower = 1, allow_inf = TRUE, arg_name = rlang::caller_arg(arg)) { if (time_type == "custom") { cli_abort( diff --git a/man/validate_slide_window_arg.Rd b/man/validate_slide_window_arg.Rd new file mode 100644 index 000000000..13e79fb67 --- /dev/null +++ b/man/validate_slide_window_arg.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{validate_slide_window_arg} +\alias{validate_slide_window_arg} +\title{Validate \code{.before} or \code{.window_size} argument} +\usage{ +validate_slide_window_arg( + arg, + time_type, + lower = 1, + allow_inf = TRUE, + arg_name = rlang::caller_arg(arg) +) +} +\description{ +Validate \code{.before} or \code{.window_size} argument +} +\keyword{internal} From 046fb700bcabcfa2882eb90d96b1b9d0a9b975c1 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 8 Jan 2025 16:33:17 -0800 Subject: [PATCH 25/48] Fill in some missing @param entries, links in time utils --- R/time-utils.R | 11 ++++++++++- man/difftime_approx_ceiling_time_delta.Rd | 2 +- man/n_steps_to_time_delta.Rd | 11 +++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/R/time-utils.R b/R/time-utils.R index 54338b1a6..080ccafc5 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -195,6 +195,15 @@ time_delta_to_n_steps <- function(time_delta, time_type) { } #' Convert from integerish/infinite/mix to time_delta +#' +#' @param n_steps integerish vector that can mix in infinite values +#' @param time_type as in [`validate_slide_window_arg`] +#' @param format optional; `"friendly"` to output a more descriptive/friendly +#' class like `"difftime"` when possible; `"fast"` to output a class that's +#' generally faster to work with when possible, like a vanilla `"numeric"`. +#' Default is `"friendly"`. +#' +#' @keywords internal n_steps_to_time_delta <- function(n_steps, time_type, format = c("friendly", "fast")) { if (!is_bare_integerish(n_steps)) { cli_abort("`n_steps` did not appear to be integerish (or infinite, or a mix)") @@ -275,7 +284,7 @@ time_delta_to_approx_difftime <- function(time_delta, time_type) { #' `r lifecycle::badge("experimental")` #' #' @param difftime a difftime object -#' @param time_type as in `validate_slide_window_arg` +#' @param time_type as in [`validate_slide_window_arg`] #' @return An object representing an integerish number (or vector of numbers) of #' time steps between consecutive time_values of type `time_type`. #' diff --git a/man/difftime_approx_ceiling_time_delta.Rd b/man/difftime_approx_ceiling_time_delta.Rd index f5f6ad426..72c4fc39a 100644 --- a/man/difftime_approx_ceiling_time_delta.Rd +++ b/man/difftime_approx_ceiling_time_delta.Rd @@ -9,7 +9,7 @@ difftime_approx_ceiling_time_delta(difftime, time_type) \arguments{ \item{difftime}{a difftime object} -\item{time_type}{as in \code{validate_slide_window_arg}} +\item{time_type}{as in \code{\link{validate_slide_window_arg}}} } \value{ An object representing an integerish number (or vector of numbers) of diff --git a/man/n_steps_to_time_delta.Rd b/man/n_steps_to_time_delta.Rd index 3f34f45ee..6a4763464 100644 --- a/man/n_steps_to_time_delta.Rd +++ b/man/n_steps_to_time_delta.Rd @@ -6,6 +6,17 @@ \usage{ n_steps_to_time_delta(n_steps, time_type, format = c("friendly", "fast")) } +\arguments{ +\item{n_steps}{integerish vector that can mix in infinite values} + +\item{time_type}{as in \code{\link{validate_slide_window_arg}}} + +\item{format}{optional; \code{"friendly"} to output a more descriptive/friendly +class like \code{"difftime"} when possible; \code{"fast"} to output a class that's +generally faster to work with when possible, like a vanilla \code{"numeric"}. +Default is \code{"friendly"}.} +} \description{ Convert from integerish/infinite/mix to time_delta } +\keyword{internal} From 2e86b84e3eca5c32c904863e6d942fe302f47554 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 8 Jan 2025 16:33:34 -0800 Subject: [PATCH 26/48] fix: complete partial rename (time_to -> lag_to in globalVariables) --- R/epiprocess-package.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/epiprocess-package.R b/R/epiprocess-package.R index ba2ceacf9..ec32cb589 100644 --- a/R/epiprocess-package.R +++ b/R/epiprocess-package.R @@ -32,6 +32,6 @@ utils::globalVariables(c( ".x", ".group_key", ".ref_time_value", "resid", "fitted", ".response", "geo_value", "time_value", "value", ".real", "lag", "max_value", "min_value", - "median_value", "spread", "rel_spread", "time_to", + "median_value", "spread", "rel_spread", "lag_to", "lag_near_latest", "n_revisions", "min_lag", "max_lag" )) From 2692843653b4bbbfd42df3b0a3925c09bbc54f7b Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 8 Jan 2025 16:53:07 -0800 Subject: [PATCH 27/48] Fix potential `_` formatting issues + update (un)grouping in README.Rmd --- README.Rmd | 12 ++--- README.md | 60 +++++++++++------------ man/figures/README-unnamed-chunk-7-1.png | Bin 241683 -> 248770 bytes 3 files changed, 35 insertions(+), 37 deletions(-) diff --git a/README.Rmd b/README.Rmd index 0e8756d3d..e6abc04f8 100644 --- a/README.Rmd +++ b/README.Rmd @@ -95,29 +95,29 @@ df <- pub_covidcast( df ``` -Convert the data to an epi_df object and sort by geo_value and time_value. You +Convert the data to an `epi_df` object and sort by `geo_value` and `time_value`. You can work with an `epi_df` like you can with a `{tibble}` by using `{dplyr}` -verbs +verbs. ```{r} edf <- df %>% as_epi_df(as_of = as.Date("2024-01-01")) %>% arrange_canonical() %>% group_by(geo_value) %>% - mutate(cases_daily = cases_cumulative - lag(cases_cumulative, default = 0)) + mutate(cases_daily = cases_cumulative - lag(cases_cumulative, default = 0)) %>% + ungroup() edf ``` -Compute the 7 day moving average of the confirmed daily cases for each geo_value +Compute the 7 day moving average of the confirmed daily cases for each `geo_value` ```{r} edf <- edf %>% - group_by(geo_value) %>% epi_slide_mean(cases_daily, .window_size = 7, na.rm = TRUE, .prefix = "smoothed_") edf ``` -Autoplot the confirmed daily cases for each geo_value +Autoplot the confirmed daily cases for each `geo_value` ```{r} edf %>% diff --git a/README.md b/README.md index af8c24e90..5f076ed79 100644 --- a/README.md +++ b/README.md @@ -14,24 +14,24 @@ forecasting. `{epiprocess}` contains: - - `epi_df()` and `epi_archive()`, two data frame classes (that work - like a `{tibble}` with `{dplyr}` verbs) for working with - epidemiological time series data - - `epi_df` is for working with a snapshot of data at a single - point in time - - `epi_archive` is for working with histories of data that changes - over time - - one of the most common uses of `epi_archive` is for accurate - backtesting of forecasting models, see `vignette("backtesting", - package="epipredict")` - - signal processing tools building on these data structures such as - - `epi_slide()` for sliding window operations (aids with feature - creation) - - `epix_slide()` for sliding window operations on archives (aids - with backtesting) - - `growth_rate()` for computing growth rates - - `detect_outlr()` for outlier detection - - `epi_cor()` for computing correlations +- `epi_df()` and `epi_archive()`, two data frame classes (that work like + a `{tibble}` with `{dplyr}` verbs) for working with epidemiological + time series data + - `epi_df` is for working with a snapshot of data at a single point in + time + - `epi_archive` is for working with histories of data that changes + over time + - one of the most common uses of `epi_archive` is for accurate + backtesting of forecasting models, see + `vignette("backtesting", package="epipredict")` +- signal processing tools building on these data structures such as + - `epi_slide()` for sliding window operations (aids with feature + creation) + - `epix_slide()` for sliding window operations on archives (aids with + backtesting) + - `growth_rate()` for computing growth rates + - `detect_outlr()` for outlier detection + - `epi_cor()` for computing correlations If you are new to this set of tools, you may be interested learning through a book format: [Introduction to Epidemiological @@ -39,10 +39,10 @@ Forecasting](https://cmu-delphi.github.io/delphi-tooling-book/). You may also be interested in: - - `{epidatr}`, for accessing wide range of epidemiological data sets, - including COVID-19 data, flu data, and more. - - [rtestim](https://github.com/dajmcdon/rtestim), a package for - estimating the time-varying reproduction number of an epidemic. +- `{epidatr}`, for accessing wide range of epidemiological data sets, + including COVID-19 data, flu data, and more. +- [rtestim](https://github.com/dajmcdon/rtestim), a package for + estimating the time-varying reproduction number of an epidemic. This package is provided by the [Delphi group](https://delphi.cmu.edu/) at Carnegie Mellon University. @@ -101,16 +101,17 @@ df #> # ℹ 2,802 more rows ``` -Convert the data to an epi\_df object and sort by geo\_value and -time\_value. You can work with an `epi_df` like you can with a -`{tibble}` by using `{dplyr}` verbs +Convert the data to an `epi_df` object and sort by `geo_value` and +`time_value`. You can work with an `epi_df` like you can with a +`{tibble}` by using `{dplyr}` verbs. ``` r edf <- df %>% as_epi_df(as_of = as.Date("2024-01-01")) %>% arrange_canonical() %>% group_by(geo_value) %>% - mutate(cases_daily = cases_cumulative - lag(cases_cumulative, default = 0)) + mutate(cases_daily = cases_cumulative - lag(cases_cumulative, default = 0)) %>% + ungroup() edf #> An `epi_df` object, 2,808 x 4 with metadata: #> * geo_type = state @@ -118,7 +119,6 @@ edf #> * as_of = 2024-01-01 #> #> # A tibble: 2,808 × 4 -#> # Groups: geo_value [4] #> geo_value time_value cases_cumulative cases_daily #> * #> 1 ca 2020-03-01 19 19 @@ -131,11 +131,10 @@ edf ``` Compute the 7 day moving average of the confirmed daily cases for each -geo\_value +`geo_value` ``` r edf <- edf %>% - group_by(geo_value) %>% epi_slide_mean(cases_daily, .window_size = 7, na.rm = TRUE, .prefix = "smoothed_") edf #> An `epi_df` object, 2,808 x 5 with metadata: @@ -144,7 +143,6 @@ edf #> * as_of = 2024-01-01 #> #> # A tibble: 2,808 × 5 -#> # Groups: geo_value [4] #> geo_value time_value cases_cumulative cases_daily smoothed_cases_daily #> * #> 1 ca 2020-03-01 19 19 19 @@ -156,7 +154,7 @@ edf #> # ℹ 2,802 more rows ``` -Autoplot the confirmed daily cases for each geo\_value +Autoplot the confirmed daily cases for each `geo_value` ``` r edf %>% diff --git a/man/figures/README-unnamed-chunk-7-1.png b/man/figures/README-unnamed-chunk-7-1.png index 3c40f30a4e2c77d1361aedbbc07d8d9986677fe6..511cf3b0e90837faf14b3c9c73c55af7df7a935d 100644 GIT binary patch literal 248770 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%0DcdAH}y&~t9e>YAh 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

t_z?ZiO?@8}Ba}Sv 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ξ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

(bw+s^oiKc3Kmztx2#I>R^pKJj*>CHJYZ$i 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 From a0fe1d80bbd63ec99251d9b31a5b506d55c9e1b3 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 9 Jan 2025 11:33:43 -0800 Subject: [PATCH 28/48] docs(slide.R): datatable:: -> data.table:: --- R/slide.R | 4 ++-- man/epi_slide_opt.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/slide.R b/R/slide.R index 761639d44..600f5d605 100644 --- a/R/slide.R +++ b/R/slide.R @@ -979,7 +979,7 @@ epi_slide_opt <- function( #' @rdname epi_slide_opt #' @description `epi_slide_mean` is a wrapper around `epi_slide_opt` with `.f = -#' datatable::frollmean`. +#' data.table::frollmean`. #' #' @export epi_slide_mean <- function( @@ -1039,7 +1039,7 @@ epi_slide_mean <- function( #' @rdname epi_slide_opt #' @description `epi_slide_sum` is a wrapper around `epi_slide_opt` with `.f = -#' datatable::frollsum`. +#' data.table::frollsum`. #' #' @export epi_slide_sum <- function( diff --git a/man/epi_slide_opt.Rd b/man/epi_slide_opt.Rd index 68244410b..4b75e9ffb 100644 --- a/man/epi_slide_opt.Rd +++ b/man/epi_slide_opt.Rd @@ -139,9 +139,9 @@ or \link[slider:summary-slide]{slider::summary-slide} function over variables in These functions tend to be much faster than \code{epi_slide()}. See \code{vignette("epi_df")} for more examples. -\code{epi_slide_mean} is a wrapper around \code{epi_slide_opt} with \code{.f = datatable::frollmean}. +\code{epi_slide_mean} is a wrapper around \code{epi_slide_opt} with \code{.f = data.table::frollmean}. -\code{epi_slide_sum} is a wrapper around \code{epi_slide_opt} with \code{.f = datatable::frollsum}. +\code{epi_slide_sum} is a wrapper around \code{epi_slide_opt} with \code{.f = data.table::frollsum}. } \section{Prefix and suffix shorthand}{ From 7a7ce488b6bde70658c068d6dd99a19d0c252024 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 9 Jan 2025 12:13:04 -0800 Subject: [PATCH 29/48] lint: uncomment redundant check for nicer organization `vec_size(x)` appears to do the same check and emit the same message (since we also use the name `x`), but adding back the check doesn't seem to have a noticeable impact on `as_epi_archive()` or `revision_summary()` performance, and if an error is raised, it's probably nicer for the trace to point to dedicated validation code. --- R/archive.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/archive.R b/R/archive.R index 64eb7255b..b3e82be4e 100644 --- a/R/archive.R +++ b/R/archive.R @@ -377,7 +377,7 @@ removed_by_compactify <- function(df, keys, tolerance) { #' @importFrom vctrs vec_c vec_slice vec_size #' @export vec_position_lag <- function(x, n) { - # obj_check_vector(x) + obj_check_vector(x) assert_count(n) if (length(x) == 0L) { x From 386f51d29071a83868495ddde278ec9cca5e16db Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 9 Jan 2025 12:20:15 -0800 Subject: [PATCH 30/48] docs(revision_summary): update `drop_nas`, compactification, & param types docs --- R/revision_analysis.R | 33 +++++++++++++++++++-------------- man/revision_summary.Rd | 33 +++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index deb7b98d0..9598825c3 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -31,9 +31,9 @@ #' not in [`key_colnames`]) in the archive, it will automatically select it. #' If supplied, `...` must select exactly one column. #' @param drop_nas bool, drop any `NA` values from the archive? After dropping -#' `NA`'s compactify is run again to make sure there are no duplicate values -#' from occasions when the signal is revised to `NA`, and then back to its -#' immediately-preceding value. +#' `NA`'s compactify is run again if `should_compactify` is `TRUE` to make +#' sure there are no duplicate values from occasions when the signal is +#' revised to `NA`, and then back to its immediately-preceding value. #' @param print_inform bool, determines whether to print summary information, or #' only return the full summary tibble #' @param min_waiting_period `difftime`, integer or `NULL`. Sets a cutoff: any @@ -51,17 +51,22 @@ #' days #' @param few_revisions integer, for the printed summary, the upper bound on the #' number of revisions to consider "few". Default is 3. -#' @param abs_spread_threshold numeric, for the printed summary, the maximum -#' spread used to characterize revisions which don't actually change very -#' much. Default is 5% of the maximum value in the dataset, but this is the -#' most unit dependent of values, and likely needs to be chosen appropriate -#' for the scale of the dataset. -#' @param rel_spread_threshold float between 0 and 1, for the printed summary, -#' the relative spread fraction used to characterize revisions which don't -#' actually change very much. Default is .1, or 10% of the final value -#' @param compactify_tol float, used if `drop_nas=TRUE`, it determines the -#' threshold for when two floats are considered identical. -#' @param should_compactify bool. Compactify if `TRUE`. +#' @param abs_spread_threshold length-1 numeric, for the printed summary, the +#' maximum spread used to characterize revisions which don't actually change +#' very much. Default is 5% of the maximum value in the dataset, but this is +#' the most unit dependent of values, and likely needs to be chosen +#' appropriate for the scale of the dataset. +#' @param rel_spread_threshold length-1 double between 0 and 1, for the printed +#' summary, the relative spread fraction used to characterize revisions which +#' don't actually change very much. Default is .1, or 10% of the final value +#' @param compactify_tol length-1 double, used if `should_compactify` is `TRUE`, it +#' determines the threshold for when two doubles are considered identical. +#' @param should_compactify bool. If `TRUE`, we will compactify after the signal +#' requested in `...` has been selected on its own and the `drop_nas` step. +#' This helps, for example, to give similar results when called on +#' [merged][epix_merge] and single-signal archives, since merged archives +#' record an update when any of the other signals change, not just the +#' requested signal. The default is `TRUE`. #' #' @examples #' revision_example <- revision_summary(archive_cases_dv_subset, percent_cli) diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index 91a63f6e8..10ce507b0 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -30,9 +30,9 @@ not in \code{\link{key_colnames}}) in the archive, it will automatically select If supplied, \code{...} must select exactly one column.} \item{drop_nas}{bool, drop any \code{NA} values from the archive? After dropping -\code{NA}'s compactify is run again to make sure there are no duplicate values -from occasions when the signal is revised to \code{NA}, and then back to its -immediately-preceding value.} +\code{NA}'s compactify is run again if \code{should_compactify} is \code{TRUE} to make +sure there are no duplicate values from occasions when the signal is +revised to \code{NA}, and then back to its immediately-preceding value.} \item{print_inform}{bool, determines whether to print summary information, or only return the full summary tibble} @@ -56,20 +56,25 @@ days} \item{few_revisions}{integer, for the printed summary, the upper bound on the number of revisions to consider "few". Default is 3.} -\item{abs_spread_threshold}{numeric, for the printed summary, the maximum -spread used to characterize revisions which don't actually change very -much. Default is 5\% of the maximum value in the dataset, but this is the -most unit dependent of values, and likely needs to be chosen appropriate -for the scale of the dataset.} +\item{abs_spread_threshold}{length-1 numeric, for the printed summary, the +maximum spread used to characterize revisions which don't actually change +very much. Default is 5\% of the maximum value in the dataset, but this is +the most unit dependent of values, and likely needs to be chosen +appropriate for the scale of the dataset.} -\item{rel_spread_threshold}{float between 0 and 1, for the printed summary, -the relative spread fraction used to characterize revisions which don't -actually change very much. Default is .1, or 10\% of the final value} +\item{rel_spread_threshold}{length-1 double between 0 and 1, for the printed +summary, the relative spread fraction used to characterize revisions which +don't actually change very much. Default is .1, or 10\% of the final value} -\item{compactify_tol}{float, used if \code{drop_nas=TRUE}, it determines the -threshold for when two floats are considered identical.} +\item{compactify_tol}{length-1 double, used if \code{should_compactify} is \code{TRUE}, it +determines the threshold for when two doubles are considered identical.} -\item{should_compactify}{bool. Compactify if \code{TRUE}.} +\item{should_compactify}{bool. If \code{TRUE}, we will compactify after the signal +requested in \code{...} has been selected on its own and the \code{drop_nas} step. +This helps, for example, to give similar results when called on +\link[=epix_merge]{merged} and single-signal archives, since merged archives +record an update when any of the other signals change, not just the +requested signal. The default is \code{TRUE}.} } \description{ \code{revision_summary} removes all missing values (if requested), and then From 8f223c252c9184e105facd057eba7fe456f710ee Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 9 Jan 2025 12:23:49 -0800 Subject: [PATCH 31/48] lint: nolint indentation on one disagreement with styler --- tests/testthat/test-time-utils.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index 021d48634..335559baf 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -151,7 +151,7 @@ test_that("time_delta_to_approx_difftime works as expected", { as.difftime(3, units = "weeks") ) expect_true(time_delta_to_approx_difftime(3, "yearmonth") %>% - `units<-`("days") %>% + `units<-`("days") %>% # nolint: indentation_linter as.numeric() %>% `-`(90) %>% abs() %>% From d8500834fffbb85c6e5367eecea6c6451842501b Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Fri, 10 Jan 2025 17:21:00 -0600 Subject: [PATCH 32/48] minor code annotations, some logic ordering --- R/revision_analysis.R | 8 +++++--- tests/testthat/test-revision-latency-functions.R | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 9598825c3..36615579a 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -93,19 +93,21 @@ revision_summary <- function(epi_arch, compactify_tol = .Machine$double.eps^0.5, should_compactify = TRUE) { assert_class(epi_arch, "epi_archive") + # if the column to summarize isn't specified, use the only one if there is only one if (dots_n(...) == 0) { # Choose the first column that's not a key: value_colnames <- setdiff(names(epi_arch$DT), key_colnames(epi_arch)) - if (length(value_colnames) != 1) { + if (length(value_colnames) == 1) { + arg <- value_colnames + } else { cli_abort(c( "Cannot determine which column to summarize.", "i" = "Value/measurement columns appear to be: {format_varnames(value_colnames)}", ">" = "Please specify which column to summarize in `...` (with tidyselect syntax)." ), class = "epiprocess__revision_summary_cannot_determine_default_selection") - } else { - arg <- value_colnames } } else { + # get the names of columns matching any tidyselect used in `...` arg <- names(eval_select(rlang::expr(c(...)), allow_rename = FALSE, data = epi_arch$DT)) if (length(arg) == 0) { cli_abort("Could not find any columns matching the selection in `...`.", diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index 351e45409..3e668f671 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -37,6 +37,7 @@ test_that("revision_summary works for a dummy dataset", { test_that("tidyselect is functional", { expect_no_error(quiet(revision_summary(dummy_ex, value))) expect_no_error(quiet(revision_summary(dummy_ex, starts_with("val")))) + # column order shouldn't matter with_later_key_col <- dummy_ex$DT %>% select(geo_value, time_value, value, version) %>% as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) @@ -44,6 +45,7 @@ test_that("tidyselect is functional", { quiet(revision_summary(with_later_key_col)), quiet(revision_summary(dummy_ex)) ) + # extra column shouldn't interfere with_later_val_col <- dummy_ex$DT %>% mutate(value2 = 0) %>% as_epi_archive(versions_end = dummy_ex$versions_end, compactify = FALSE) @@ -51,6 +53,7 @@ test_that("tidyselect is functional", { quiet(revision_summary(with_later_val_col, value)), quiet(revision_summary(dummy_ex, value)) ) + # error when which column we're summarizing is ambiguous expect_error( dummy_ex$DT %>% copy() %>% @@ -68,6 +71,7 @@ test_that("tidyselect is functional", { }) test_that("revision_summary default min_waiting_period works as expected", { + # just outside the window expect_equal( tibble( geo_value = 1, @@ -92,6 +96,7 @@ test_that("revision_summary default min_waiting_period works as expected", { pull(time_value), as.Date("2020-01-01") ) + # just outside the window for monthly data expect_equal( tibble( geo_value = 1, From c99125d59fe6bb65b10d603df5fcd70d8ade97fc Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 13 Jan 2025 15:37:33 -0800 Subject: [PATCH 33/48] fix(vec_position_lag): finish incorporating `n` parameter --- DESCRIPTION | 2 ++ R/archive.R | 23 ++++++++++++++++++++--- man/vec_position_lag.Rd | 15 ++++++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f6a61127d..8b96c9a99 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -63,6 +63,7 @@ Imports: Suggests: devtools, epidatr, + epipredict, here, knitr, outbreaks, @@ -76,6 +77,7 @@ Remotes: cmu-delphi/delphidocs, cmu-delphi/epidatasets, cmu-delphi/epidatr, + cmu-delphi/epipredict, glmgen/genlasso, reconverse/outbreaks Config/Needs/website: cmu-delphi/delphidocs diff --git a/R/archive.R b/R/archive.R index b3e82be4e..cd2ecc6ee 100644 --- a/R/archive.R +++ b/R/archive.R @@ -371,6 +371,23 @@ removed_by_compactify <- function(df, keys, tolerance) { #' Lag entries in a vctrs-style vector by their position in the vector #' +#' This is meant to be more general than [`dplyr::lag()`] in terms of the kinds +#' of `x` that it accepts, allowing any `{vctrs}`-sense vector. +#' +#' @examples +#' +#' vec_position_lag(1:5, 3) +#' dplyr::lag(1:5, 3) +#' +#' +#' vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) +#' \dontrun{ +#' # XXX We were having trouble with something like this. dplyr 1.1.0 seems like it +#' # fixes this, but our troubles were too recent for dplyr 1.1.0 to have fixed, +#' # I would have thought. Need to check for what the failing example actually was. +#' dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) +#' } +#' #' @importFrom checkmate assert_count #' @importFrom vctrs obj_check_vector vec_slice vec_size #' @keywords internal @@ -379,10 +396,10 @@ removed_by_compactify <- function(df, keys, tolerance) { vec_position_lag <- function(x, n) { obj_check_vector(x) assert_count(n) - if (length(x) == 0L) { - x + if (length(x) <= n) { + vec_c(rep(NA, length(x)), vec_slice(x, integer())) } else { - vec_c(rep(NA, n), vec_slice(x, seq_len(vec_size(x) - 1L))) + vec_c(rep(NA, n), vec_slice(x, seq_len(vec_size(x) - n))) } } diff --git a/man/vec_position_lag.Rd b/man/vec_position_lag.Rd index 3e828455b..6b1bc96c3 100644 --- a/man/vec_position_lag.Rd +++ b/man/vec_position_lag.Rd @@ -7,6 +7,19 @@ vec_position_lag(x, n) } \description{ -Lag entries in a vctrs-style vector by their position in the vector +This is meant to be more general than \code{\link[dplyr:lead-lag]{dplyr::lag()}} in terms of the kinds +of \code{x} that it accepts, allowing any \code{{vctrs}}-sense vector. +} +\examples{ + +vec_position_lag(1:5, 3) +dplyr::lag(1:5, 3) + + +vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) +\dontrun{ +dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) +} + } \keyword{internal} From 0208a96d26603ce6c9e534865c32bf065bb8a833 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 13 Jan 2025 16:03:02 -0800 Subject: [PATCH 34/48] fix(vec_position_lag): length->vec_size + better Date perf + fix docs Fix length -> vec_size. Combining (logical/generic) NA with Dates is apparently slow. Slice with NA_integer_ index instead. Fix docs: dplyr 1.1.0 should also have a generalized dplyr::lag. Removing some dplyr::lag features for speed might be another motivation, but we seem to be faster for some ptypes x sizes and slower for others. Also, don't export this function; we don't need to. --- NAMESPACE | 1 - R/archive.R | 19 ++++++------------- man/vec_position_lag.Rd | 8 +++----- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 385ad8a86..4ec9c010d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -96,7 +96,6 @@ export(time_column_names) export(ungroup) export(unnest) export(validate_epi_archive) -export(vec_position_lag) export(version_column_names) import(epidatasets) importFrom(checkmate,anyInfinite) diff --git a/R/archive.R b/R/archive.R index cd2ecc6ee..13b1fa793 100644 --- a/R/archive.R +++ b/R/archive.R @@ -371,35 +371,28 @@ removed_by_compactify <- function(df, keys, tolerance) { #' Lag entries in a vctrs-style vector by their position in the vector #' -#' This is meant to be more general than [`dplyr::lag()`] in terms of the kinds -#' of `x` that it accepts, allowing any `{vctrs}`-sense vector. +#' This is like [`dplyr::lag`], though it has different performance +#' characteristics. It's unclear whether we want to use this. #' #' @examples #' #' vec_position_lag(1:5, 3) #' dplyr::lag(1:5, 3) #' -#' +#' # Try on a more exotic class: #' vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -#' \dontrun{ -#' # XXX We were having trouble with something like this. dplyr 1.1.0 seems like it -#' # fixes this, but our troubles were too recent for dplyr 1.1.0 to have fixed, -#' # I would have thought. Need to check for what the failing example actually was. #' dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -#' } #' #' @importFrom checkmate assert_count -#' @importFrom vctrs obj_check_vector vec_slice vec_size +#' @importFrom vctrs obj_check_vector vec_c vec_slice vec_size #' @keywords internal -#' @importFrom vctrs vec_c vec_slice vec_size -#' @export vec_position_lag <- function(x, n) { obj_check_vector(x) assert_count(n) if (length(x) <= n) { - vec_c(rep(NA, length(x)), vec_slice(x, integer())) + vec_slice(x, rep(NA_integer_, vec_size(x))) } else { - vec_c(rep(NA, n), vec_slice(x, seq_len(vec_size(x) - n))) + vec_slice(x, c(rep(NA_integer_, n), seq_len(vec_size(x) - n))) } } diff --git a/man/vec_position_lag.Rd b/man/vec_position_lag.Rd index 6b1bc96c3..86da48015 100644 --- a/man/vec_position_lag.Rd +++ b/man/vec_position_lag.Rd @@ -7,19 +7,17 @@ vec_position_lag(x, n) } \description{ -This is meant to be more general than \code{\link[dplyr:lead-lag]{dplyr::lag()}} in terms of the kinds -of \code{x} that it accepts, allowing any \code{{vctrs}}-sense vector. +This is like \code{\link[dplyr:lead-lag]{dplyr::lag}}, though it has different performance +characteristics. It's unclear whether we want to use this. } \examples{ vec_position_lag(1:5, 3) dplyr::lag(1:5, 3) - +# Try on a more exotic class: vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -\dontrun{ dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -} } \keyword{internal} From c89afae49e9e586e6b6fe7a6270dd149f6b1f974 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 13 Jan 2025 16:47:36 -0800 Subject: [PATCH 35/48] Experiment with vec_rep vctr NA instead of slicing rep NA_integer_ indices --- NAMESPACE | 1 + R/archive.R | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 4ec9c010d..62ddafd48 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -242,5 +242,6 @@ importFrom(vctrs,vec_c) importFrom(vctrs,vec_cast) importFrom(vctrs,vec_data) importFrom(vctrs,vec_equal) +importFrom(vctrs,vec_rep) importFrom(vctrs,vec_size) importFrom(vctrs,vec_slice) diff --git a/R/archive.R b/R/archive.R index 13b1fa793..2132fa540 100644 --- a/R/archive.R +++ b/R/archive.R @@ -384,15 +384,18 @@ removed_by_compactify <- function(df, keys, tolerance) { #' dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) #' #' @importFrom checkmate assert_count -#' @importFrom vctrs obj_check_vector vec_c vec_slice vec_size +#' @importFrom vctrs obj_check_vector vec_c vec_rep vec_slice vec_size #' @keywords internal vec_position_lag <- function(x, n) { obj_check_vector(x) assert_count(n) if (length(x) <= n) { - vec_slice(x, rep(NA_integer_, vec_size(x))) + vec_rep(vec_slice(x, NA_integer_), vec_size(x)) } else { - vec_slice(x, c(rep(NA_integer_, n), seq_len(vec_size(x) - n))) + vec_c( + vec_rep(vec_slice(x, NA_integer_), n), + vec_slice(x, seq_len(vec_size(x) - n)) + ) } } From 734e35b55955f58cc2202154127382f0e95398f2 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 13 Jan 2025 16:50:35 -0800 Subject: [PATCH 36/48] refactor/perf(?)(is_locf): vec_position_lag -> dplyr::lag Various iterations of vec_position_lag seem to be trading off performance and whether they beat dplyr::lag for different classes. dplyr::lag appears to be better-performing than many/all variants tested so far for lagging very long Date and character vectors, like we would do during compactification. We might try speeding up compactification by iterating on some of these variants, something inspired by `check_ukey_unique()`, etc., but that's not the present goal, so just use `dplyr::lag()` for now. --- NAMESPACE | 6 ------ R/archive.R | 32 +------------------------------- man/vec_position_lag.Rd | 23 ----------------------- 3 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 man/vec_position_lag.Rd diff --git a/NAMESPACE b/NAMESPACE index 62ddafd48..62b9e6da6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -103,7 +103,6 @@ importFrom(checkmate,anyMissing) importFrom(checkmate,assert) importFrom(checkmate,assert_character) importFrom(checkmate,assert_class) -importFrom(checkmate,assert_count) importFrom(checkmate,assert_data_frame) importFrom(checkmate,assert_false) importFrom(checkmate,assert_function) @@ -237,11 +236,6 @@ importFrom(tidyselect,starts_with) importFrom(tsibble,as_tsibble) importFrom(utils,capture.output) importFrom(utils,tail) -importFrom(vctrs,obj_check_vector) -importFrom(vctrs,vec_c) importFrom(vctrs,vec_cast) importFrom(vctrs,vec_data) importFrom(vctrs,vec_equal) -importFrom(vctrs,vec_rep) -importFrom(vctrs,vec_size) -importFrom(vctrs,vec_slice) diff --git a/R/archive.R b/R/archive.R index 2132fa540..9de882dce 100644 --- a/R/archive.R +++ b/R/archive.R @@ -369,36 +369,6 @@ removed_by_compactify <- function(df, keys, tolerance) { )) # nolint: object_usage_linter } -#' Lag entries in a vctrs-style vector by their position in the vector -#' -#' This is like [`dplyr::lag`], though it has different performance -#' characteristics. It's unclear whether we want to use this. -#' -#' @examples -#' -#' vec_position_lag(1:5, 3) -#' dplyr::lag(1:5, 3) -#' -#' # Try on a more exotic class: -#' vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -#' dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -#' -#' @importFrom checkmate assert_count -#' @importFrom vctrs obj_check_vector vec_c vec_rep vec_slice vec_size -#' @keywords internal -vec_position_lag <- function(x, n) { - obj_check_vector(x) - assert_count(n) - if (length(x) <= n) { - vec_rep(vec_slice(x, NA_integer_), vec_size(x)) - } else { - vec_c( - vec_rep(vec_slice(x, NA_integer_), n), - vec_slice(x, seq_len(vec_size(x) - n)) - ) - } -} - #' Checks to see if a value in a vector is LOCF #' @description #' LOCF meaning last observation carried forward. lags the vector by 1, then @@ -408,7 +378,7 @@ vec_position_lag <- function(x, n) { #' @importFrom dplyr lag if_else near #' @keywords internal is_locf <- function(vec, tolerance) { # nolint: object_usage_linter - lag_vec <- vec_position_lag(vec, 1L) + lag_vec <- lag(vec, 1L) if (inherits(vec, "numeric")) { # (no matrix/array/general support) res <- if_else( !is.na(vec) & !is.na(lag_vec), diff --git a/man/vec_position_lag.Rd b/man/vec_position_lag.Rd deleted file mode 100644 index 86da48015..000000000 --- a/man/vec_position_lag.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/archive.R -\name{vec_position_lag} -\alias{vec_position_lag} -\title{Lag entries in a vctrs-style vector by their position in the vector} -\usage{ -vec_position_lag(x, n) -} -\description{ -This is like \code{\link[dplyr:lead-lag]{dplyr::lag}}, though it has different performance -characteristics. It's unclear whether we want to use this. -} -\examples{ - -vec_position_lag(1:5, 3) -dplyr::lag(1:5, 3) - -# Try on a more exotic class: -vec_position_lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) -dplyr::lag(epipredict::dist_quantiles(list(1:6, 11:16), 0:5 / 5), 1) - -} -\keyword{internal} From b03fe323f24c8d5540d27e7299af4d56117e1b02 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Mon, 13 Jan 2025 17:25:50 -0800 Subject: [PATCH 37/48] fix(as_epi_archive): make compactification support more general vctrs e.g., `distribution`s --- NAMESPACE | 1 + R/archive.R | 7 ++----- tests/testthat/test-compactify.R | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 62b9e6da6..bbd9d7ecb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -238,4 +238,5 @@ importFrom(utils,capture.output) importFrom(utils,tail) importFrom(vctrs,vec_cast) importFrom(vctrs,vec_data) +importFrom(vctrs,vec_detect_missing) importFrom(vctrs,vec_equal) diff --git a/R/archive.R b/R/archive.R index 9de882dce..de6bc1199 100644 --- a/R/archive.R +++ b/R/archive.R @@ -376,6 +376,7 @@ removed_by_compactify <- function(df, keys, tolerance) { #' [`dplyr::near`], otherwise it uses equality. `NA`'s and `NaN`'s are #' considered equal to themselves and each other. #' @importFrom dplyr lag if_else near +#' @importFrom vctrs vec_detect_missing vec_equal #' @keywords internal is_locf <- function(vec, tolerance) { # nolint: object_usage_linter lag_vec <- lag(vec, 1L) @@ -387,11 +388,7 @@ is_locf <- function(vec, tolerance) { # nolint: object_usage_linter ) return(res) } else { - res <- if_else( - !is.na(vec) & !is.na(lag_vec), - vec == lag_vec, - is.na(vec) & is.na(lag_vec) - ) + res <- vec_equal(vec, lag_vec, na_equal = TRUE) return(res) } } diff --git a/tests/testthat/test-compactify.R b/tests/testthat/test-compactify.R index d05fe0b33..e930cdc4d 100644 --- a/tests/testthat/test-compactify.R +++ b/tests/testthat/test-compactify.R @@ -105,3 +105,35 @@ test_that("compactify does not alter the default clobberable and observed versio expect_identical(ea_true$clobberable_versions_start, ea_false$clobberable_versions_start) expect_identical(ea_true$versions_end, ea_false$versions_end) }) + +test_that("compactify works on distributions", { + forecasts <- tibble( + ahead = 2L, + geo_value = "ak", + target_end_date = as.Date("2020-01-19"), + forecast_date = as.Date("2020-01-17") + 1:8, + actual = 25, + .pred_distn = c( + epipredict::dist_quantiles(c(1, 5, 9), c(0.1, 0.5, 0.9)), + epipredict::dist_quantiles(c(1, NA, 9), c(0.1, 0.5, 0.9)), # single NA in quantiles + epipredict::dist_quantiles(c(NA, NA, NA), c(0.1, 0.5, 0.9)), # all NAs in quantiles + distributional::dist_missing(1), # the actual `NA` for distributions + epipredict::dist_quantiles(c(1, 5, 9), c(0.1, 0.5, 0.9)), # and back + epipredict::dist_quantiles(c(3, 5, 9), c(0.1, 0.5, 0.9)), # change quantile + epipredict::dist_quantiles(c(3, 5, 9), c(0.2, 0.5, 0.8)), # change level + epipredict::dist_quantiles(c(3, 5, 9), c(0.2, 0.5, 0.8)) # LOCF + ) + ) + expect_equal( + forecasts %>% + as_epi_archive( + other_keys = "ahead", time_value = target_end_date, version = forecast_date, + compactify = TRUE + ) %>% + .$DT %>% + as.data.frame() %>% + as_tibble(), + forecasts[-8, ] %>% + rename(time_value = target_end_date, version = forecast_date) + ) +}) From 5257ece0e50ed3ade6bba332f9c8ab5669f0ce3b Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Tue, 14 Jan 2025 17:08:26 -0800 Subject: [PATCH 38/48] refactor(key_colnames.epi_df): NULL -> "actual" default for other_keys --- R/key_colnames.R | 26 +++++++++++--------------- man/key_colnames.Rd | 2 +- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index 3d7009753..2eba41ab0 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -70,7 +70,7 @@ key_colnames.data.frame <- function(x, ..., #' @export key_colnames.epi_df <- function(x, ..., geo_keys = "geo_value", - other_keys = NULL, + other_keys = attr(x, "metadata")$other_keys, time_keys = "time_value", exclude = character()) { check_dots_empty0(...) @@ -85,20 +85,16 @@ key_colnames.epi_df <- function(x, ..., ) } expected_other_keys <- attr(x, "metadata")$other_keys - if (is.null(other_keys)) { - other_keys <- expected_other_keys - } else { - if (!identical(other_keys, expected_other_keys)) { - cli_abort(c( - "The provided `other_keys` argument didn't match the `other_keys` of `x`", - "*" = "`other_keys` was {format_chr_with_quotes(other_keys)}", - "*" = "`expected_other_keys` was {format_chr_with_quotes(expected_other_keys)}", - "i" = "If you know that `x` will always be an `epi_df` and - resolve this discrepancy by adjusting the metadata of `x`, you - shouldn't have to pass `other_keys =` here anymore, - unless you want to continue to perform this check." - ), class = "epiprocess__key_colnames__mismatched_other_keys") - } + if (!identical(other_keys, expected_other_keys)) { + cli_abort(c( + "The provided `other_keys` argument didn't match the `other_keys` of `x`", + "*" = "`other_keys` was {format_chr_with_quotes(other_keys)}", + "*" = "`expected_other_keys` was {format_chr_with_quotes(expected_other_keys)}", + "i" = "If you know that `x` will always be an `epi_df` and + resolve this discrepancy by adjusting the metadata of `x`, you + shouldn't have to pass `other_keys =` here anymore, + unless you want to continue to perform this check." + ), class = "epiprocess__key_colnames__mismatched_other_keys") } assert_character(exclude) setdiff(c("geo_value", other_keys, "time_value"), exclude) diff --git a/man/key_colnames.Rd b/man/key_colnames.Rd index 925601a6d..ad9df7625 100644 --- a/man/key_colnames.Rd +++ b/man/key_colnames.Rd @@ -23,7 +23,7 @@ key_colnames(x, ..., exclude = character()) x, ..., geo_keys = "geo_value", - other_keys = NULL, + other_keys = attr(x, "metadata")$other_keys, time_keys = "time_value", exclude = character() ) From 5f737bea30a88f37be2d904b69a044d927b67e36 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Tue, 14 Jan 2025 17:09:38 -0800 Subject: [PATCH 39/48] feat(key_colnames.data.frame)!: make geo_keys & time_keys mandatory --- R/key_colnames.R | 32 +++++++++++++++----------------- man/key_colnames.Rd | 39 ++++++++++++++------------------------- 2 files changed, 29 insertions(+), 42 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index 2eba41ab0..1cd9f12a0 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -6,21 +6,19 @@ #' #' @param x an object, such as an [`epi_df`] #' @param ... additional arguments passed on to methods -#' @param geo_keys optional character vector; which columns (if any) to consider -#' keys specifying the geographical region? Defaults to `"geo_value"` if -#' present; must be `"geo_value"` if `x` is an `epi_df`. -#' @param other_keys character vector; which columns (if any) to consider keys -#' specifying demographical or identifying/grouping information besides the -#' geographical region and time interval? Mandatory if `x` is a vanilla -#' `data.frame` or `tibble`. Optional if `x` is an `epi_df`; default is the -#' `epi_df`'s `other_keys`; if you provide `other_keys`, they must match the -#' default. (This behavior is to enable consistent and sane results when you -#' can't guarantee whether `x` is an `epi_df` or just a -#' `tibble`/`data.frame`.) -#' @param time_keys optional character vector; which columns (if any) to -#' consider keys specifying the time interval during which associated events -#' occurred? Defaults to `"time_value"` if present; must be `"time_value"` if -#' `x` is an `epi_df`. +#' @param geo_keys,other_keys,time_keys character vectors, sometimes optional; +#' which variables (if any) should be considered as part of a unique +#' key/identifier for data in `x`, dealing respectively with the associated +#' geographical region, demographic/strain/other information needed in +#' addition to the geographical region to identify individual time series in +#' `x`, and time interval during which associated events occurred. Mandatory +#' if `x` is a regular `data.frame` or `tibble`. Optional if `x` is an +#' `epi_df`; the defaults are `"geo_value"`, the `epi_df`'s `other_keys` +#' metadata, and `"time_value"`, respectively; if you provide these manually, +#' they must match the defaults. (This behavior is to enable consistent and +#' sane results when you can't guarantee whether `x` is an `epi_df` or just a +#' `tibble`/`data.frame`. You don't need to use it if you know that `x` is +#' definitely an `epi_df`.) #' @param exclude an optional character vector of key column names to exclude #' from the result #' @return character vector @@ -44,9 +42,9 @@ key_colnames <- function(x, ..., exclude = character()) { #' @method key_colnames data.frame #' @export key_colnames.data.frame <- function(x, ..., - geo_keys = intersect("geo_value", names(x)), + geo_keys, other_keys, - time_keys = intersect("time_value", names(x)), + time_keys, exclude = character()) { check_dots_empty0(...) assert_character(geo_keys) diff --git a/man/key_colnames.Rd b/man/key_colnames.Rd index ad9df7625..17eea9edc 100644 --- a/man/key_colnames.Rd +++ b/man/key_colnames.Rd @@ -10,14 +10,7 @@ \usage{ key_colnames(x, ..., exclude = character()) -\method{key_colnames}{data.frame}( - x, - ..., - geo_keys = intersect("geo_value", names(x)), - other_keys, - time_keys = intersect("time_value", names(x)), - exclude = character() -) +\method{key_colnames}{data.frame}(x, ..., geo_keys, other_keys, time_keys, exclude = character()) \method{key_colnames}{epi_df}( x, @@ -40,23 +33,19 @@ key_colnames(x, ..., exclude = character()) \item{exclude}{an optional character vector of key column names to exclude from the result} -\item{geo_keys}{optional character vector; which columns (if any) to consider -keys specifying the geographical region? Defaults to \code{"geo_value"} if -present; must be \code{"geo_value"} if \code{x} is an \code{epi_df}.} - -\item{other_keys}{character vector; which columns (if any) to consider keys -specifying demographical or identifying/grouping information besides the -geographical region and time interval? Mandatory if \code{x} is a vanilla -\code{data.frame} or \code{tibble}. Optional if \code{x} is an \code{epi_df}; default is the -\code{epi_df}'s \code{other_keys}; if you provide \code{other_keys}, they must match the -default. (This behavior is to enable consistent and sane results when you -can't guarantee whether \code{x} is an \code{epi_df} or just a -\code{tibble}/\code{data.frame}.)} - -\item{time_keys}{optional character vector; which columns (if any) to -consider keys specifying the time interval during which associated events -occurred? Defaults to \code{"time_value"} if present; must be \code{"time_value"} if -\code{x} is an \code{epi_df}.} +\item{geo_keys, other_keys, time_keys}{character vectors, sometimes optional; +which variables (if any) should be considered as part of a unique +key/identifier for data in \code{x}, dealing respectively with the associated +geographical region, demographic/strain/other information needed in +addition to the geographical region to identify individual time series in +\code{x}, and time interval during which associated events occurred. Mandatory +if \code{x} is a regular \code{data.frame} or \code{tibble}. Optional if \code{x} is an +\code{epi_df}; the defaults are \code{"geo_value"}, the \code{epi_df}'s \code{other_keys} +metadata, and \code{"time_value"}, respectively; if you provide these manually, +they must match the defaults. (This behavior is to enable consistent and +sane results when you can't guarantee whether \code{x} is an \code{epi_df} or just a +\code{tibble}/\code{data.frame}. You don't need to use it if you know that \code{x} is +definitely an \code{epi_df}.)} } \value{ character vector From 89f27e53a2725c8898d87fcd60df68e7620f26c7 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 15 Jan 2025 10:01:59 -0800 Subject: [PATCH 40/48] docs(difftime_approx_ceiling_time_delta): correct inequality in title --- man/difftime_approx_ceiling_time_delta.Rd | 2 +- tests/testthat/test-time-utils.R | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/man/difftime_approx_ceiling_time_delta.Rd b/man/difftime_approx_ceiling_time_delta.Rd index 72c4fc39a..060cadadd 100644 --- a/man/difftime_approx_ceiling_time_delta.Rd +++ b/man/difftime_approx_ceiling_time_delta.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/time-utils.R \name{difftime_approx_ceiling_time_delta} \alias{difftime_approx_ceiling_time_delta} -\title{Closest time_delta that's approximately greater than given difftime} +\title{Closest time_delta that's approximately greater than or equal to given difftime} \usage{ difftime_approx_ceiling_time_delta(difftime, time_type) } diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index 335559baf..f9dd928d0 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -158,3 +158,8 @@ test_that("time_delta_to_approx_difftime works as expected", { `<=`(5)) expect_error(time_delta_to_approx_difftime(3, "integer")) }) + +test_that("difftime_approx_ceiling_time_delta works as expected", { + expect_equal( + ) +}) From 0b77ddeb7a39208f922d9362bfd1e400f4468ac8 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 15 Jan 2025 10:31:58 -0800 Subject: [PATCH 41/48] test(difftime_approx_ceiling_time_delta): add tests --- R/time-utils.R | 2 +- tests/testthat/test-time-utils.R | 36 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/R/time-utils.R b/R/time-utils.R index 080ccafc5..079284e6e 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -279,7 +279,7 @@ time_delta_to_approx_difftime <- function(time_delta, time_type) { ) } -#' Closest time_delta that's approximately greater than given difftime +#' Closest time_delta that's approximately greater than or equal to given difftime #' #' `r lifecycle::badge("experimental")` #' diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index f9dd928d0..fb5ec5977 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -160,6 +160,42 @@ test_that("time_delta_to_approx_difftime works as expected", { }) test_that("difftime_approx_ceiling_time_delta works as expected", { + # At time of writing, docs don't guarantee difftime_approx_ceiling_time_delta + # will output friendly time_deltas, so we'll include a standardization step in + # these tests. Prevent eye-glazing repetitition by testing a bunch of cases + # simultaneously with dplyr: + comparisons <- tibble::tribble( + ~x_amount, ~x_units, ~time_type, ~expected_wrapped_friendly_result, + # days x day: + 0, "days", "day", list(as.difftime(0.0, units = "days")), + 1.5, "days", "day", list(as.difftime(2.0, units = "days")), + 2.0, "days", "day", list(as.difftime(2.0, units = "days")), + # days x week: + 2.0, "days", "week", list(as.difftime(1.0, units = "weeks")), + 7.0, "days", "week", list(as.difftime(1.0, units = "weeks")), + 8.0, "days", "week", list(as.difftime(2.0, units = "weeks")), + # weeks x week: + 1.0, "weeks", "week", list(as.difftime(1.0, units = "weeks")), + 1.1, "weeks", "week", list(as.difftime(2.0, units = "weeks")), + # days x yearmonth: + 2.0, "days", "yearmonth", list(1.0), + 32.0, "days", "yearmonth", list(2.0), + ) %>% + mutate(across(expected_wrapped_friendly_result, purrr::list_flatten)) %>% + rowwise() %>% + mutate(wrapped_friendly_result = as.difftime(x_amount, units = x_units) %>% + difftime_approx_ceiling_time_delta(time_type) %>% + time_delta_standardize(time_type, format = "friendly") %>% + list()) %>% + ungroup() + expect_equal( + comparisons$wrapped_friendly_result, + comparisons$expected_wrapped_friendly_result + ) + + # days x integer: + expect_error(difftime_approx_ceiling_time_delta(as.difftime(1, units = "days"), "integer"), + regexp = "Unsupported time_type" ) }) From a4f498bbd7b85687b9670a9f19a24275564d7ab6 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 15 Jan 2025 12:03:11 -0800 Subject: [PATCH 42/48] fix(revision_summary): generalize units() usage Plus add some pluralization and capitalization features. --- DESCRIPTION | 1 + NAMESPACE | 3 + R/epiprocess-package.R | 3 + R/revision_analysis.R | 17 +- R/time-utils.R | 39 ++++- man/format_time_delta.Rd | 17 ++ man/revision_summary.Rd | 9 ++ man/time_type_unit_abbrs.Rd | 16 ++ man/time_type_unit_pluralizer.Rd | 17 ++ .../_snaps/revision-latency-functions.md | 152 +++++++++++++++++- .../test-revision-latency-functions.R | 55 ++++++- tests/testthat/test-time-utils.R | 58 +++++++ 12 files changed, 376 insertions(+), 11 deletions(-) create mode 100644 man/format_time_delta.Rd create mode 100644 man/time_type_unit_abbrs.Rd create mode 100644 man/time_type_unit_pluralizer.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 8b96c9a99..c83bf98a4 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -56,6 +56,7 @@ Imports: tibble, tidyr, tidyselect (>= 1.2.0), + tools, tsibble, utils, vctrs, diff --git a/NAMESPACE b/NAMESPACE index bbd9d7ecb..a5aefadd4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -130,6 +130,8 @@ importFrom(cli,cli_li) importFrom(cli,cli_vec) importFrom(cli,cli_warn) importFrom(cli,format_message) +importFrom(cli,pluralize) +importFrom(cli,qty) importFrom(data.table,":=") importFrom(data.table,address) importFrom(data.table,as.data.table) @@ -233,6 +235,7 @@ importFrom(tidyr,unnest) importFrom(tidyselect,any_of) importFrom(tidyselect,eval_select) importFrom(tidyselect,starts_with) +importFrom(tools,toTitleCase) importFrom(tsibble,as_tsibble) importFrom(utils,capture.output) importFrom(utils,tail) diff --git a/R/epiprocess-package.R b/R/epiprocess-package.R index ec32cb589..724fd9675 100644 --- a/R/epiprocess-package.R +++ b/R/epiprocess-package.R @@ -14,6 +14,8 @@ #' @importFrom checkmate check_names #' @importFrom checkmate test_subset test_set_equal vname #' @importFrom cli cli_abort cli_warn +#' @importFrom cli pluralize +#' @importFrom cli qty #' @importFrom data.table as.data.table #' @importFrom data.table key #' @importFrom data.table setkeyv @@ -23,6 +25,7 @@ #' @importFrom lifecycle deprecated #' @importFrom rlang %||% #' @importFrom rlang is_bare_integerish +#' @importFrom tools toTitleCase #' @importFrom vctrs vec_data #' @importFrom vctrs vec_equal ## usethis namespace: end diff --git a/R/revision_analysis.R b/R/revision_analysis.R index 36615579a..1fca61d5e 100644 --- a/R/revision_analysis.R +++ b/R/revision_analysis.R @@ -68,6 +68,14 @@ #' record an update when any of the other signals change, not just the #' requested signal. The default is `TRUE`. #' +#' @details Applies to `epi_archive`s with `time_type`s of `"day"`, `"week"`, +#' and `"yearmonth"`. It can also work with a `time_type` of `"integer"` if +#' the possible `time_values` are all consecutive integers; you will need to +#' manually specify the `min_waiting_period` and `quick_revision`, though. +#' Using a `time_type` of `"integer"` with week numbers like 202501 will +#' produce incorrect results for some calculations, since week numbering +#' contains jumps at year boundaries. +#' #' @examples #' revision_example <- revision_summary(archive_cases_dv_subset, percent_cli) #' revision_example %>% arrange(desc(spread)) @@ -205,8 +213,8 @@ revision_summary <- function(epi_arch, time_delta_to_n_steps(revision_behavior$max_lag, time_type) <= time_delta_to_n_steps(quick_revision, time_type) ) - cli_inform("Quick revisions (last revision within {quick_revision} -{units(quick_revision)} of the `time_value`):") + cli_inform("Quick revisions (last revision within {format_time_delta(quick_revision, time_type)} + of the `time_value`):") cli_li(num_percent(total_quickly_revised, total_num, "")) total_barely_revised <- sum( # nolint: object_usage_linter revision_behavior$n_revisions <= @@ -233,7 +241,10 @@ revision_summary <- function(epi_arch, cli_inform("Spread of more than {abs_spread_threshold} in actual value (when revised):") cli_li(num_percent(abs_spread, n_real_revised, "")) - cli_inform("{units(quick_revision)} until within {within_latest*100}% of the latest value:") + # time_type_unit_pluralizer[[time_type]] is a format string controlled by us + # and/or downstream devs, so we can paste it onto our format string safely: + units_plural <- pluralize(paste0("{qty(2)}", time_type_unit_pluralizer[[time_type]])) + cli_inform("{toTitleCase(units_plural)} until within {within_latest*100}% of the latest value:") time_delta_summary(revision_behavior[["lag_near_latest"]], time_type) %>% print() } return(revision_behavior) diff --git a/R/time-utils.R b/R/time-utils.R index 079284e6e..843baaf82 100644 --- a/R/time-utils.R +++ b/R/time-utils.R @@ -218,15 +218,18 @@ time_delta_standardize <- function(time_delta, time_type, format = c("friendly", time_delta_to_n_steps(time_delta, time_type) * unit_time_delta(time_type, format) } -# Using these unit abbreviations happens to make our automatic slide output -# naming look like taking ISO-8601 duration designations, removing the P, and -# lowercasing any characters. Fortnightly or sub-daily time types would need an -# adjustment to remain consistent. +#' Helper data for [`time_type_unit_abbr`] +#' +#' @keywords internal time_type_unit_abbrs <- c( day = "d", week = "w", yearmonth = "m" ) +# ^ Using these unit abbreviations happens to make our automatic slide output +# naming look like taking ISO-8601 duration designations, removing the P, and +# lowercasing any characters. Fortnightly or sub-daily time types would need an +# adjustment to remain consistent. #' Get an abbreviation for the "units" of `unit_time_delta(time_type)` #' @@ -246,6 +249,34 @@ time_type_unit_abbr <- function(time_type) { maybe_unit_abbr } +#' Helper data for [`format_time_delta`] +#' +#' Should not be altered on the basis of untrusted user input, as it is used as +#' a cli format string and may run code. +#' +#' @keywords internal +time_type_unit_pluralizer <- c( + day = "day{?s}", + week = "week{?s}", + yearmonth = "month{?s}", + integer = "time step{?s}" +) + +#' Format a length-1 time delta to a character to assist messaging +#' +#' This is meant to address the following: +#' - glue::glue("{as.difftime(1, units = 'days')}") is "1" +#' - glue::glue("{format(as.difftime(1, units = 'days'))}") is "1 days" +#' - time deltas for yearmonths and integers don't have units attached at all +#' +#' @keywords internal +format_time_delta <- function(x, time_type) { + n_steps <- time_delta_to_n_steps(x, time_type) + # time_type_unit_pluralizer[[time_type]] is a format string controlled by us + # and/or downstream devs, so we can paste it onto our format string safely: + pluralize(paste0("{n_steps} ", time_type_unit_pluralizer[[time_type]])) +} + #' Convert `time_delta` to an approximate difftime #' #' `r lifecycle::badge("experimental")` diff --git a/man/format_time_delta.Rd b/man/format_time_delta.Rd new file mode 100644 index 000000000..88ba581a2 --- /dev/null +++ b/man/format_time_delta.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\name{format_time_delta} +\alias{format_time_delta} +\title{Format a length-1 time delta to a character to assist messaging} +\usage{ +format_time_delta(x, time_type) +} +\description{ +This is meant to address the following: +\itemize{ +\item glue::glue("{as.difftime(1, units = 'days')}") is "1" +\item glue::glue("{format(as.difftime(1, units = 'days'))}") is "1 days" +\item time deltas for yearmonths and integers don't have units attached at all +} +} +\keyword{internal} diff --git a/man/revision_summary.Rd b/man/revision_summary.Rd index 10ce507b0..315161ade 100644 --- a/man/revision_summary.Rd +++ b/man/revision_summary.Rd @@ -103,6 +103,15 @@ example, consider the series (0, 20, 99, 150, 102, 100); then the window afterwards at 150. } } +\details{ +Applies to \code{epi_archive}s with \code{time_type}s of \code{"day"}, \code{"week"}, +and \code{"yearmonth"}. It can also work with a \code{time_type} of \code{"integer"} if +the possible \code{time_values} are all consecutive integers; you will need to +manually specify the \code{min_waiting_period} and \code{quick_revision}, though. +Using a \code{time_type} of \code{"integer"} with week numbers like 202501 will +produce incorrect results for some calculations, since week numbering +contains jumps at year boundaries. +} \examples{ revision_example <- revision_summary(archive_cases_dv_subset, percent_cli) revision_example \%>\% arrange(desc(spread)) diff --git a/man/time_type_unit_abbrs.Rd b/man/time_type_unit_abbrs.Rd new file mode 100644 index 000000000..d6b93ec1b --- /dev/null +++ b/man/time_type_unit_abbrs.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\docType{data} +\name{time_type_unit_abbrs} +\alias{time_type_unit_abbrs} +\title{Helper data for \code{\link{time_type_unit_abbr}}} +\format{ +An object of class \code{character} of length 3. +} +\usage{ +time_type_unit_abbrs +} +\description{ +Helper data for \code{\link{time_type_unit_abbr}} +} +\keyword{internal} diff --git a/man/time_type_unit_pluralizer.Rd b/man/time_type_unit_pluralizer.Rd new file mode 100644 index 000000000..a815e483f --- /dev/null +++ b/man/time_type_unit_pluralizer.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/time-utils.R +\docType{data} +\name{time_type_unit_pluralizer} +\alias{time_type_unit_pluralizer} +\title{Helper data for \code{\link{format_time_delta}}} +\format{ +An object of class \code{character} of length 4. +} +\usage{ +time_type_unit_pluralizer +} +\description{ +Should not be altered on the basis of untrusted user input, as it is used as +a cli format string and may run code. +} +\keyword{internal} diff --git a/tests/testthat/_snaps/revision-latency-functions.md b/tests/testthat/_snaps/revision-latency-functions.md index 27cc85957..4f2bfe269 100644 --- a/tests/testthat/_snaps/revision-latency-functions.md +++ b/tests/testthat/_snaps/revision-latency-functions.md @@ -1,4 +1,4 @@ -# revision_summary works for a dummy dataset +# revision_summary works for dummy datasets Code dummy_ex %>% revision_summary() %>% print(n = 10, width = 300) @@ -20,7 +20,7 @@ * 1 out of 4 (25%) Spread of more than 5.1 in actual value (when revised): * 3 out of 4 (75%) - days until within 20% of the latest value: + Days until within 20% of the latest value: Output min median mean max 0 days 3 days 6.9 days 19 days @@ -68,7 +68,7 @@ * 2 out of 5 (40%) Spread of more than 5.1 in actual value (when revised): * 3 out of 5 (60%) - days until within 20% of the latest value: + Days until within 20% of the latest value: Output min median mean max 0 days 3 days 6.9 days 19 days @@ -92,3 +92,149 @@ 6 0.75 1 4 2.5 7 0 9 9 9 +--- + + Code + dummy_ex_weekly %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, width = 300) + Message + Min lag (time to first version): + Output + min median mean max + 0 weeks 1 weeks 1.4 weeks 4 weeks + Message + Fraction of all versions that are `NA`: + * 2 out of 19 (10.53%) + Fraction of epi_key+time_values with + No revisions: + * 2 out of 7 (28.57%) + Quick revisions (last revision within 1 week of the `time_value`): + * 2 out of 7 (28.57%) + Few revisions (At most 3 revisions for that `time_value`): + * 6 out of 7 (85.71%) + Fraction of revised epi_key+time_values which have: + Less than 0.1 spread in relative value: + * 2 out of 5 (40%) + Spread of more than 5.1 in actual value (when revised): + * 3 out of 5 (60%) + Weeks until within 20% of the latest value: + Output + min median mean max + 0 weeks 3 weeks 6.9 weeks 19 weeks + # A tibble: 7 x 11 + time_value geo_value n_revisions min_lag max_lag lag_near_latest spread + + 1 2020-01-01 ak 6 2 weeks 19 weeks 19 weeks 101 + 2 2020-01-08 ak 1 4 weeks 5 weeks 4 weeks 9 + 3 2020-01-15 ak 0 3 weeks 3 weeks 3 weeks 0 + 4 2020-01-01 al 1 0 weeks 19 weeks 19 weeks 99 + 5 2020-01-08 al 0 0 weeks 0 weeks 0 weeks 0 + 6 2020-01-15 al 1 1 weeks 2 weeks 2 weeks 3 + 7 2020-01-22 al 1 0 weeks 1 weeks 1 weeks 0 + rel_spread min_value max_value median_value + + 1 0.990 1 102 5.5 + 2 0.09 91 100 95.5 + 3 NaN 0 0 0 + 4 0.99 1 100 50.5 + 5 0 1 1 1 + 6 0.75 1 4 2.5 + 7 0 9 9 9 + +--- + + Code + dummy_ex_yearmonthly %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, + width = 300) + Message + Min lag (time to first version): + Output + min median mean max + 0 1 1.4 4 + Message + Fraction of all versions that are `NA`: + * 2 out of 19 (10.53%) + Fraction of epi_key+time_values with + No revisions: + * 2 out of 7 (28.57%) + Quick revisions (last revision within 1 month of the `time_value`): + * 2 out of 7 (28.57%) + Few revisions (At most 3 revisions for that `time_value`): + * 6 out of 7 (85.71%) + Fraction of revised epi_key+time_values which have: + Less than 0.1 spread in relative value: + * 2 out of 5 (40%) + Spread of more than 5.1 in actual value (when revised): + * 3 out of 5 (60%) + Months until within 20% of the latest value: + Output + min median mean max + 0 3 6.9 19 + # A tibble: 7 x 11 + time_value geo_value n_revisions min_lag max_lag lag_near_latest spread + + 1 2020 Jan ak 6 2 19 19 101 + 2 2020 Feb ak 1 4 5 4 9 + 3 2020 Mar ak 0 3 3 3 0 + 4 2020 Jan al 1 0 19 19 99 + 5 2020 Feb al 0 0 0 0 0 + 6 2020 Mar al 1 1 2 2 3 + 7 2020 Apr al 1 0 1 1 0 + rel_spread min_value max_value median_value + + 1 0.990 1 102 5.5 + 2 0.09 91 100 95.5 + 3 NaN 0 0 0 + 4 0.99 1 100 50.5 + 5 0 1 1 1 + 6 0.75 1 4 2.5 + 7 0 9 9 9 + +--- + + Code + dummy_ex_integerly %>% revision_summary(min_waiting_period = 60, + quick_revision = 3, drop_nas = FALSE) %>% print(n = 10, width = 300) + Message + Min lag (time to first version): + Output + min median mean max + 0 1 1.4 4 + Message + Fraction of all versions that are `NA`: + * 2 out of 19 (10.53%) + Fraction of epi_key+time_values with + No revisions: + * 2 out of 7 (28.57%) + Quick revisions (last revision within 3 time steps of the `time_value`): + * 4 out of 7 (57.14%) + Few revisions (At most 3 revisions for that `time_value`): + * 6 out of 7 (85.71%) + Fraction of revised epi_key+time_values which have: + Less than 0.1 spread in relative value: + * 2 out of 5 (40%) + Spread of more than 5.1 in actual value (when revised): + * 3 out of 5 (60%) + Time Steps until within 20% of the latest value: + Output + min median mean max + 0 3 6.9 19 + # A tibble: 7 x 11 + time_value geo_value n_revisions min_lag max_lag lag_near_latest spread + + 1 1 ak 6 2 19 19 101 + 2 2 ak 1 4 5 4 9 + 3 3 ak 0 3 3 3 0 + 4 1 al 1 0 19 19 99 + 5 2 al 0 0 0 0 0 + 6 3 al 1 1 2 2 3 + 7 4 al 1 0 1 1 0 + rel_spread min_value max_value median_value + + 1 0.990 1 102 5.5 + 2 0.09 91 100 95.5 + 3 NaN 0 0 0 + 4 0.99 1 100 50.5 + 5 0 1 1 1 + 6 0.75 1 4 2.5 + 7 0 9 9 9 + diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index 3e668f671..4c7a3df32 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -30,10 +30,63 @@ dummy_ex <- tibble::tribble( ) %>% as_epi_archive(versions_end = as.Date("2022-01-01"), compactify = FALSE) -test_that("revision_summary works for a dummy dataset", { +dummy_ex_weekly <- dummy_ex$DT %>% + mutate(across( + c(time_value, version), + ~ as.Date("2020-01-01") + 7 * as.numeric(.x - as.Date("2020-01-01")) + )) %>% + as_epi_archive( + versions_end = as.Date("2022-01-01") + as.numeric(as.Date("2022-01-01") - as.Date("2020-01-01")) %% 7, + compactify = FALSE + ) +stopifnot(dummy_ex_weekly$time_type == "week") + +dummy_ex_yearmonthly <- dummy_ex$DT %>% + mutate(across( + c(time_value, version), + ~ tsibble::make_yearmonth(2020, 1) + as.numeric(.x - as.Date("2020-01-01")) + )) %>% + as_epi_archive( + versions_end = tsibble::make_yearmonth(2020, 1) + as.numeric(as.Date("2022-01-01") - as.Date("2020-01-01")), + compactify = FALSE + ) +stopifnot(dummy_ex_yearmonthly$time_type == "yearmonth") + +dummy_ex_integerly <- dummy_ex$DT %>% + mutate(across( + c(time_value, version), + ~ 1 + as.numeric(.x - as.Date("2020-01-01")) + )) %>% + as_epi_archive( + versions_end = 1 + as.numeric(as.Date("2022-01-01") - as.Date("2020-01-01")), + compactify = FALSE + ) +stopifnot(dummy_ex_integerly$time_type == "integer") + +test_that("revision_summary works for dummy datasets", { expect_snapshot(dummy_ex %>% revision_summary() %>% print(n = 10, width = 300)) expect_snapshot(dummy_ex %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, width = 300)) + + # Weekly dummy is mostly just "day" -> "week", but quick-revision summary changes: + expect_snapshot(dummy_ex_weekly %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, width = 300)) + # Yearmonthly has the same story. It would have been close to encountering + # min_waiting_period-based filtering but we actually set its versions_end to + # sometime in 2080 rather than 2022: + expect_snapshot(dummy_ex_yearmonthly %>% revision_summary(drop_nas = FALSE) %>% print(n = 10, width = 300)) + # Integer is very much like daily. We have to provide some of the + # configuration arguments since we have no idea about what the integers + # represent. If the possible integers being used have large jumps like + # YYYYww-as-integer epiweek labels (e.g., 200053 jumps to 200101) or are + # regularly spaced apart but by more than 1, we'll still be producing + # something nonsensical, but we tried. + expect_snapshot(dummy_ex_integerly %>% + revision_summary( + min_waiting_period = 60, quick_revision = 3, + drop_nas = FALSE + ) %>% + print(n = 10, width = 300)) }) + test_that("tidyselect is functional", { expect_no_error(quiet(revision_summary(dummy_ex, value))) expect_no_error(quiet(revision_summary(dummy_ex, starts_with("val")))) diff --git a/tests/testthat/test-time-utils.R b/tests/testthat/test-time-utils.R index fb5ec5977..7a8aab506 100644 --- a/tests/testthat/test-time-utils.R +++ b/tests/testthat/test-time-utils.R @@ -159,6 +159,64 @@ test_that("time_delta_to_approx_difftime works as expected", { expect_error(time_delta_to_approx_difftime(3, "integer")) }) +test_that("format_time_delta works as expected", { + # time_type "day": + expect_equal( + format_time_delta(as.difftime(1, units = "days"), "day"), + "1 day" + ) + expect_equal( + format_time_delta(as.difftime(2, units = "days"), "day"), + "2 days" + ) + expect_equal( + format_time_delta(1, "day"), + "1 day" + ) + expect_equal( + format_time_delta(2, "day"), + "2 days" + ) + # time_type "week": + expect_equal( + format_time_delta(as.difftime(1, units = "weeks"), "week"), + "1 week" + ) + expect_equal( + format_time_delta(as.difftime(7, units = "days"), "week"), + "1 week" + ) + expect_equal( + format_time_delta(1, "week"), + "1 week" + ) + expect_equal( + format_time_delta(as.difftime(2, units = "weeks"), "week"), + "2 weeks" + ) + # time_type "yearmonth": + expect_equal( + format_time_delta(1, "yearmonth"), + "1 month" + ) + expect_equal( + format_time_delta(2, "yearmonth"), + "2 months" + ) + # time_type "integer": + expect_equal( + format_time_delta(1, "integer"), + "1 time step" + ) + expect_equal( + format_time_delta(2, "integer"), + "2 time steps" + ) + # we don't handle length != 1; pluralize will raise error for us: + expect_error(format_time_delta(numeric(0), "day")) # we don't handle length != 0 + expect_error(format_time_delta(1:5, "day")) # we don't handle length != 0 +}) + test_that("difftime_approx_ceiling_time_delta works as expected", { # At time of writing, docs don't guarantee difftime_approx_ceiling_time_delta # will output friendly time_deltas, so we'll include a standardization step in From c4acd184729a43796194a42a124e3ea868384880 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Wed, 15 Jan 2025 16:09:32 -0800 Subject: [PATCH 43/48] test(revision_summary): more comments on min_waiting_period default --- tests/testthat/test-revision-latency-functions.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-revision-latency-functions.R b/tests/testthat/test-revision-latency-functions.R index 4c7a3df32..b636bf32e 100644 --- a/tests/testthat/test-revision-latency-functions.R +++ b/tests/testthat/test-revision-latency-functions.R @@ -124,7 +124,7 @@ test_that("tidyselect is functional", { }) test_that("revision_summary default min_waiting_period works as expected", { - # just outside the window + # just outside the window for daily data expect_equal( tibble( geo_value = 1, @@ -137,6 +137,7 @@ test_that("revision_summary default min_waiting_period works as expected", { pull(time_value), as.Date("2020-01-01") ) + # just outside the window for weekly data expect_equal( tibble( geo_value = 1, @@ -162,6 +163,7 @@ test_that("revision_summary default min_waiting_period works as expected", { pull(time_value), tsibble::make_yearmonth(2000, 1) ) + # we don't know how to interpret the default in terms of "integer" time_type expect_error( tibble( geo_value = 1, From b73bbed6cc16e4b7d05938cb1913b5fa8002401d Mon Sep 17 00:00:00 2001 From: brookslogan Date: Fri, 24 Jan 2025 00:02:56 -0800 Subject: [PATCH 44/48] docs(key_colnames.R): insert paragraph break Co-authored-by: David Weber --- R/key_colnames.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index 1cd9f12a0..8cdb1ac39 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -11,8 +11,9 @@ #' key/identifier for data in `x`, dealing respectively with the associated #' geographical region, demographic/strain/other information needed in #' addition to the geographical region to identify individual time series in -#' `x`, and time interval during which associated events occurred. Mandatory -#' if `x` is a regular `data.frame` or `tibble`. Optional if `x` is an +#' `x`, and time interval during which associated events occurred. +#' +#' Mandatory if `x` is a regular `data.frame` or `tibble`. Optional if `x` is an #' `epi_df`; the defaults are `"geo_value"`, the `epi_df`'s `other_keys` #' metadata, and `"time_value"`, respectively; if you provide these manually, #' they must match the defaults. (This behavior is to enable consistent and From 04fac6587af5d3812528d84885abfdd80dd8da03 Mon Sep 17 00:00:00 2001 From: brookslogan Date: Fri, 24 Jan 2025 08:08:20 +0000 Subject: [PATCH 45/48] docs: document (GHA) --- man/key_colnames.Rd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/man/key_colnames.Rd b/man/key_colnames.Rd index 17eea9edc..4af8c3586 100644 --- a/man/key_colnames.Rd +++ b/man/key_colnames.Rd @@ -38,8 +38,9 @@ which variables (if any) should be considered as part of a unique key/identifier for data in \code{x}, dealing respectively with the associated geographical region, demographic/strain/other information needed in addition to the geographical region to identify individual time series in -\code{x}, and time interval during which associated events occurred. Mandatory -if \code{x} is a regular \code{data.frame} or \code{tibble}. Optional if \code{x} is an +\code{x}, and time interval during which associated events occurred. + +Mandatory if \code{x} is a regular \code{data.frame} or \code{tibble}. Optional if \code{x} is an \code{epi_df}; the defaults are \code{"geo_value"}, the \code{epi_df}'s \code{other_keys} metadata, and \code{"time_value"}, respectively; if you provide these manually, they must match the defaults. (This behavior is to enable consistent and From 0010bf35bf2b22ab0379df5c173fa245150b92ad Mon Sep 17 00:00:00 2001 From: brookslogan Date: Fri, 24 Jan 2025 08:08:59 +0000 Subject: [PATCH 46/48] style: styler (GHA) --- R/key_colnames.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index 8cdb1ac39..b364f06c8 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -11,8 +11,8 @@ #' key/identifier for data in `x`, dealing respectively with the associated #' geographical region, demographic/strain/other information needed in #' addition to the geographical region to identify individual time series in -#' `x`, and time interval during which associated events occurred. -#' +#' `x`, and time interval during which associated events occurred. +#' #' Mandatory if `x` is a regular `data.frame` or `tibble`. Optional if `x` is an #' `epi_df`; the defaults are `"geo_value"`, the `epi_df`'s `other_keys` #' metadata, and `"time_value"`, respectively; if you provide these manually, From d35394d1446fca995f1f9c5a59c1efc05f6d7a3f Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 24 Jan 2025 00:21:37 -0800 Subject: [PATCH 47/48] docs(key_colnames): give better idea of possible `x`s --- R/key_colnames.R | 5 ++++- man/key_colnames.Rd | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index b364f06c8..46eea7abe 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -4,7 +4,10 @@ #' explicit checks that the key actually is unique in any associated data #' structures. #' -#' @param x an object, such as an [`epi_df`] +#' @param x an object, often a data frame or something similar. `{epiprocess}` +#' includes implementations for [`epi_df`]s, [`epi_archive`]s, +#' [`tsibble::tsibble`]s, and other data frames (including +#' [`tibble::tibble`]s); other packages, like `{epipredict}`, can add more. #' @param ... additional arguments passed on to methods #' @param geo_keys,other_keys,time_keys character vectors, sometimes optional; #' which variables (if any) should be considered as part of a unique diff --git a/man/key_colnames.Rd b/man/key_colnames.Rd index 4af8c3586..d18966eaa 100644 --- a/man/key_colnames.Rd +++ b/man/key_colnames.Rd @@ -26,7 +26,10 @@ key_colnames(x, ..., exclude = character()) \method{key_colnames}{epi_archive}(x, ..., exclude = character()) } \arguments{ -\item{x}{an object, such as an \code{\link{epi_df}}} +\item{x}{an object, often a data frame or something similar. \code{{epiprocess}} +includes implementations for \code{\link{epi_df}}s, \code{\link{epi_archive}}s, +\code{\link[tsibble:tsibble]{tsibble::tsibble}}s, and other data frames (including +\code{\link[tibble:tibble]{tibble::tibble}}s); other packages, like \code{{epipredict}}, can add more.} \item{...}{additional arguments passed on to methods} From 0bb9d5776ec86fe9106693c4767289c231439b0c Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 24 Jan 2025 00:30:25 -0800 Subject: [PATCH 48/48] docs(key_colnames): mention classes not supporting *_keys args --- R/key_colnames.R | 7 ++++--- man/key_colnames.Rd | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/R/key_colnames.R b/R/key_colnames.R index 46eea7abe..eeecce05b 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -16,13 +16,14 @@ #' addition to the geographical region to identify individual time series in #' `x`, and time interval during which associated events occurred. #' -#' Mandatory if `x` is a regular `data.frame` or `tibble`. Optional if `x` is an -#' `epi_df`; the defaults are `"geo_value"`, the `epi_df`'s `other_keys` +#' Mandatory if `x` is a regular `data.frame` or `tibble`. Optional if `x` is +#' an `epi_df`; the defaults are `"geo_value"`, the `epi_df`'s `other_keys` #' metadata, and `"time_value"`, respectively; if you provide these manually, #' they must match the defaults. (This behavior is to enable consistent and #' sane results when you can't guarantee whether `x` is an `epi_df` or just a #' `tibble`/`data.frame`. You don't need to use it if you know that `x` is -#' definitely an `epi_df`.) +#' definitely an `epi_df`.) Not accepted when `x` is a `tsibble` or an +#' `epi_archive`. #' @param exclude an optional character vector of key column names to exclude #' from the result #' @return character vector diff --git a/man/key_colnames.Rd b/man/key_colnames.Rd index d18966eaa..3a1865bde 100644 --- a/man/key_colnames.Rd +++ b/man/key_colnames.Rd @@ -43,13 +43,14 @@ geographical region, demographic/strain/other information needed in addition to the geographical region to identify individual time series in \code{x}, and time interval during which associated events occurred. -Mandatory if \code{x} is a regular \code{data.frame} or \code{tibble}. Optional if \code{x} is an -\code{epi_df}; the defaults are \code{"geo_value"}, the \code{epi_df}'s \code{other_keys} +Mandatory if \code{x} is a regular \code{data.frame} or \code{tibble}. Optional if \code{x} is +an \code{epi_df}; the defaults are \code{"geo_value"}, the \code{epi_df}'s \code{other_keys} metadata, and \code{"time_value"}, respectively; if you provide these manually, they must match the defaults. (This behavior is to enable consistent and sane results when you can't guarantee whether \code{x} is an \code{epi_df} or just a \code{tibble}/\code{data.frame}. You don't need to use it if you know that \code{x} is -definitely an \code{epi_df}.)} +definitely an \code{epi_df}.) Not accepted when \code{x} is a \code{tsibble} or an +\code{epi_archive}.} } \value{ character vector