From 027296ed15e02b273d03a5d6aeb18f11b49ac0e7 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 2 Aug 2022 00:18:12 -0700 Subject: [PATCH 001/382] wip panel data --- R/data.R | 24 ++++ data-raw/statcan_employ_subset.R | 192 +++++++++++++++++++++++++++++++ data/statcan_employ_subset.rda | Bin 0 -> 254398 bytes man/create_layer.Rd | 4 +- man/statcan_employ_subset.Rd | 39 +++++++ vignettes/panel-data.Rmd | 143 +++++++++++++++++++++++ 6 files changed, 400 insertions(+), 2 deletions(-) create mode 100644 data-raw/statcan_employ_subset.R create mode 100644 data/statcan_employ_subset.rda create mode 100644 man/statcan_employ_subset.Rd create mode 100644 vignettes/panel-data.Rmd diff --git a/R/data.R b/R/data.R index 9c93506a3..8092faad2 100644 --- a/R/data.R +++ b/R/data.R @@ -33,3 +33,27 @@ #' June 7 is the average of the underlying data for June 1 through 7, #' inclusive. "case_death_rate_subset" + +#' Subset of Statistics Canada employment numbers by industry and province +#' +#' @format A tibble with 109,388 rows and 6 variables: +#' \describe{ +#' \item{geo_value}{The province in Canada associated with each +#' row of measurements.} +#' \item{time_value}{The time value, in YYYY-MM-01 format, +#' associated with each row of measurements.} +#' \item{ppl_count}{The number of people employed, seasonally +#' adjusted.} +#' \item{employee_type}{The type of employee} +#' \item{naics_industry}{The industry name and associated code +#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} +#' } +#' @source This object contains modified data from the following Statistics Canada +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} +#' +#' Modifications: +#' * From the given Statistics Canada table, the employee counts +#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are +#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} +#' according to Statistics Canada are removed. +"statcan_employ_subset" \ No newline at end of file diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R new file mode 100644 index 000000000..f61120065 --- /dev/null +++ b/data-raw/statcan_employ_subset.R @@ -0,0 +1,192 @@ +library(epipredict) +library(epiprocess) +library(cansim) +library(dplyr) +library(stringr) + +# Run this once +# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data +statcan_employ <- get_cansim("14-10-0201-01") + +# ================== Subset & Filtering ================== +employ <- statcan_employ %>% + select(c( + "REF_DATE", + "GEO", + # "DGUID", + # "UOM", + # "UOM_ID", + # "SCALAR_FACTOR", + # "SCALAR_ID", + # "VECTOR", + # "COORDINATE", + "VALUE", + "STATUS", + # "SYMBOL", + # "TERMINATED", + # "DECIMALS", + # "GeoUID", + # "Hierarchy for GEO", + # "Classification Code for Type of employee", + # "Hierarchy for Type of employee", + "Classification Code for North American Industry Classification System (NAICS)", + # "Hierarchy for North American Industry Classification System (NAICS)", + # "val_norm", + # "Date", + "Type of employee", + "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = "Classification Code for North American Industry Classification System (NAICS)" + ) %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + # https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # .. not available for a specific reference period + # x: suppressed to meet the confidentiality requirements of the Statistics Act + # A data quality: excellent + # B data quality: very good + # C data quality: good + # [blank] or A-D: acceptable or better <- only keep these ones + # E use with caution + # F too unreliable to be published + filter( + status %in% c("A", "B", "C", "D", NA) & # only keep "good" data + !is.na(ppl_count) & + geo_value != "Canada" & # only keep provinces + # N corresponds to aggregates + !str_detect(naics_code, "N") & + # only keep top-level sectors + # https://www.census.gov/programs-surveys/economic-census/guidance/understanding-naics.html + # corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) + +# head(employ) +# statcan_employ_subset <- employ %>% +# tsibble::as_tsibble( +# index=time_value, +# key=c(geo_value, employee_type, naics_industry)) %>% +# as_epi_df(time_type = "yearmonth", as_of="2022-07-28") + +statcan_employ_subset <- employ %>% + tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df( + additional_metadata=c(other_keys=c("employee_type", "naics_industry"))) + +usethis::use_data(statcan_employ_subset, overwrite = TRUE) + +# ================== EDA ================== +length(statcan_employ$REF_DATE) +names(statcan_employ) + +uniq_ref_date <- unique(select(statcan_employ, "REF_DATE")) +uniq_ref_date +min(statcan_employ$REF_DATE) # 2001-01 +max(statcan_employ$REF_DATE) # 2022-05 +# There should be (22-1)*12 + 5 +exp_total_dates <- (22-1)*12+5 +length(uniq_ref_date %>% unlist()) == exp_total_dates # TRUE +# There is a ref date for each month in the date range + +unique(select(statcan_employ, "GEO")) # List of length 14, names of provinces & territories + Canada +statcan_employ %>% group_by(GEO) %>% top_n(n=-1) +# Dissemination Geography Unique Identifier - DGUID. +# https://www12.statcan.gc.ca/census-recensement/2021/ref/dict/az/Definition-eng.cfm?ID=geo055 +# 2016 (year) +# A (administrative) +unique(select(statcan_employ, "DGUID")) +unique(select(statcan_employ, "UOM")) # Persons +unique(select(statcan_employ, "UOM_ID")) # 249 + +# These scalar columns tell us by what factor of 10 to multiply the values +# We get "units" and 0 so we can ignore these columns and +# take the values in VALUE as-is +unique(select(statcan_employ, "SCALAR_FACTOR")) # All "units" +unique(select(statcan_employ, "SCALAR_ID")) # All 0 + +# Time series identifier - ignore +unique(select(statcan_employ, "VECTOR")) + +# Related to dimension, which is not present in this table - ignore +unique(select(statcan_employ, "COORDINATE")) + +# Data value column. Values in units +unique(select(statcan_employ, "VALUE")) +# How many rows have empty values? +# Approx 3/4 of the rows have NA values +statcan_employ %>% + summarise( + VALUE_NA = sum(is.na(VALUE)) / length(VALUE), + VALUE_NOT_NA = sum(!is.na(VALUE)) / length(VALUE), + TOTAL = length(VALUE) + ) + +unique(select(statcan_employ, "STATUS")) +statcan_employ %>% + select(STATUS, VALUE) %>% + group_by(STATUS) %>% + count() + +unique(select(statcan_employ, "SYMBOL")) # All NA +unique(select(statcan_employ, "TERMINATED")) # All NA +unique(select(statcan_employ, "DECIMALS")) # All 0 + +unique(select(statcan_employ, "GeoUID")) +unique(select(statcan_employ, "Hierarchy for GEO")) +statcan_employ %>% + group_by_at(c("GEO", "DGUID", "GeoUID", "Hierarchy for GEO")) %>% + count() +# These 4 columns are redundant. Just keep GEO. + +# The next 4 columns are metadata about the last 2 columns +# ignore these in favour of the descriptive ones +unique(select(statcan_employ, "Classification Code for Type of employee")) # All NA +unique(select(statcan_employ, "Hierarchy for Type of employee")) +unique(select(statcan_employ, "Classification Code for North American Industry Classification System (NAICS)")) +unique(select(statcan_employ, "Hierarchy for North American Industry Classification System (NAICS)")) + +# val_norm and VALUE are the same +unique(select(statcan_employ, "val_norm")) +statcan_employ %>% filter(VALUE != val_norm) %>% count() + +unique(select(statcan_employ, "Date")) +# Each date has a minimum of 7522 data points +statcan_employ %>% group_by(Date) %>% count() %>% ungroup() %>% select(n) %>% min() +# Are there any dates that aren't on the 1st of the month? +statcan_employ %>% filter(format(as.Date(Date), "%d") != "01") %>% nrow() # 0 + +unique(select(statcan_employ, "Type of employee")) # 3 types +unique(select(statcan_employ, "North American Industry Classification System (NAICS)")) # lots + +# REF_DATE looks like YYYY-mm +# Date looks like YYYY-mm-dd +# Check that the truncated Date to REF_DATE format always matches the REF_DATE +statcan_employ %>% + select(REF_DATE, Date) %>% + mutate(Date_trunc = format(as.Date(Date), "%Y-%m")) %>% + filter(REF_DATE != Date_trunc) # all empty! good + +# This is an example plot +# library(ggplot2) +# theme_set(theme_bw()) +# +# employ <- statcan_employ_subset %>% +# dplyr::filter( +# geo_value %in% c("British Columbia", "Ontario") & +# naics_industry == "Real estate and rental and leasing [53]") %>% +# dplyr::arrange(geo_value, time_value) +# +# employ %>% ggplot(aes(x = time_value, y = ppl_count, color=employee_type)) + +# geom_line() + +# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + +# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + +# labs(x = "Date", y = "Number employed") diff --git a/data/statcan_employ_subset.rda b/data/statcan_employ_subset.rda new file mode 100644 index 0000000000000000000000000000000000000000..46c0ea6c97bcab8855bc3a0b622c361c002e4eea GIT binary patch literal 254398 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

PpWp4;ndq@yrC0n-A2k&b|WNai^ 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

  • q#!|5lLmT( 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 + %\VignetteIndexEntry{Using epipredict on panel data from other contexts} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include = F} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + warning = FALSE, + message = FALSE +) +``` + +```{r load-data, include = F} +# TODO: temp - remove me when I figure out how to run this rmd without loading +# perhaps need to commit statcan_employ_subset.rda first? +devtools::load_all() +``` + +```{r libraries} +library(epiprocess) +library(epipredict) +library(dplyr) +library(stringr) +library(parsnip) +``` + +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological data. However, other datasets with similar structures are also valid candidates for `epipredict` functionality. + +```{r employ-stats, include = F} +date_format <- "%B %Y" +date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) +date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) +uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +``` + +## Example panel data overview + +In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). The full dataset contains monthly employment counts from `r date_start` to `r date_end`, and presents employment data stratified by geographic region, [NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), and employee type. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the [NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. +* Only keep province-level geographic region (the full data also has "Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we just described: +```{r employ-query, eval=F} +library(cansim) + +statcan_employ <- get_cansim("14-10-0201-01") + +statcan_employ_subset_input <- statcan_employ %>% + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", + "Classification Code for North American Industry Classification System (NAICS)", + "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = "Classification Code for North American Industry Classification System (NAICS)") %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + filter( + # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # A, B, C, D, NA indicate "good" or better data quality + status %in% c("A", "B", "C", "D", NA) & + # Drop aggregated rows; only keep provinces + geo_value != "Canada" & + # Drop aggregated industry rows + !str_detect(naics_code, "N") & + # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified; drop these rows + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) +``` + +To use this data with `epipredict`, we need to convert it into `epi_df` format using `as_epi_df` with additional keys. In our case, the additional keys are `employee_type` and `naics_industry`. Note that in the above modifications, we encoded `time_value` as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, and to ensure lag and ahead modifications later on are using the correct time units. + +```{r convert-to-epidf, eval=F} +statcan_employ_subset <- statcan_employ_subset_input %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df(time_type = "yearmonth", as_of="2022-07-22") +``` + +```{r data-dim, include=F} +employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") +employ_colcount <- length(names(statcan_employ_subset)) +``` + +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are ready to use `statcan_employ_subset` with `epipredict`. + +```{r preview-data, include=T} +head(statcan_employ_subset) +``` + +In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, fitting 3 types of models from the `parsnip` package, and making future predictions. + +## Preprocessing + +We will create a recipe that adds one `ahead` column and 3 `lag` columns. + +```{r make-recipe, include = T} +r <- epi_recipe(statcan_employ_subset) %>% + step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months + step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_naomit() +r +``` + +There is one `raw` role which includes our value column `ppl_count`, and two `key` roles which include our additional keys `employee_type` and `naics_industry`. Let's take a look at what these additional columns look like. + +```{r view-preprocessed, include = T} +latest <- statcan_employ_subset %>% filter(time_value >= max(time_value) - 12) +# Display a sample of the preprocessed data +r %>% prep() %>% bake(new_data = latest) %>% sample_n(5) +``` + +## Model fitting and prediction + +First we will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the above `epi_recipe` to fit a linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. +```{r linearreg-wf, include = T} +wf_linreg <- epi_workflow(r, linear_reg()) %>% fit(statcan_employ_subset) +wf_linreg + +preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) +# Display a sample of the prediction values +preds %>% sample_n(5) +``` + + + \ No newline at end of file From 6673d6ce6b2f246742ca4fc51e5f3a1ec1bafd9a Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Wed, 3 Aug 2022 11:46:16 -0700 Subject: [PATCH 002/382] update epi_keys_mold and tests to handle additional keys --- R/epi_keys.R | 3 ++- tests/testthat/test-epi_keys.R | 22 +++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/R/epi_keys.R b/R/epi_keys.R index b82f625dd..8dc1311d8 100644 --- a/R/epi_keys.R +++ b/R/epi_keys.R @@ -29,7 +29,8 @@ epi_keys.recipe <- function(x) { epi_keys_mold <- function(mold) { keys <- c("time_value", "geo_value", "key") molded_names <- names(mold$extras$roles) + mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unname(unlist(mold_keys)) + unlist(unname(mold_keys)) } diff --git a/tests/testthat/test-epi_keys.R b/tests/testthat/test-epi_keys.R index f15ee197f..74351ff3c 100644 --- a/tests/testthat/test-epi_keys.R +++ b/tests/testthat/test-epi_keys.R @@ -32,23 +32,19 @@ test_that("epi_keys_mold extracts time_value and geo_value, but not raw",{ }) test_that("epi_keys_mold extracts additional keys when they are present", { - my_data <- tibble::tibble( - geo_value = rep(c("ca", "fl", "pa"), each = 3), - time_value = rep(seq(as.Date("2020-06-01"), as.Date("2020-06-03"), - by = "day"), length.out = length(geo_value)), - pol = rep(c("blue", "swing", "swing"), each = 3), # extra key - state = rep(c("ca", "fl", "pa"), each = 3), # extra key - value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) - ) %>% - epiprocess::as_epi_df(additional_metadata = list(other_keys = c("state", "pol"))) - + my_data <- case_death_rate_subset %>% + sample_n(6) %>% + tsibble::as_tsibble() %>% # add 2 extra keys + mutate(state = rep("MA", 6), pol = rep("blue", 6)) %>% + as_epi_df(additional_metadata = list(other_keys=c("state", "pol"))) + my_recipe <- epi_recipe(my_data) %>% - step_epi_ahead(value , ahead = 7) %>% + step_epi_ahead(death_rate , ahead = 7) %>% step_epi_naomit() my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) - expect_setequal( - epi_keys_mold(my_workflow$pre$mold), + expect_equal( + epi_keys_mold(my_workflow$pre$mold), c("time_value", "geo_value", "state", "pol")) }) From a4b0dd75ed6d12c33b0ec4b92527a6af85f3713a Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 17:13:23 -0700 Subject: [PATCH 003/382] put back files from rebase --- R/epi_keys.R | 3 +-- tests/testthat/test-epi_keys.R | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/R/epi_keys.R b/R/epi_keys.R index 8dc1311d8..b82f625dd 100644 --- a/R/epi_keys.R +++ b/R/epi_keys.R @@ -29,8 +29,7 @@ epi_keys.recipe <- function(x) { epi_keys_mold <- function(mold) { keys <- c("time_value", "geo_value", "key") molded_names <- names(mold$extras$roles) - mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unlist(unname(mold_keys)) + unname(unlist(mold_keys)) } diff --git a/tests/testthat/test-epi_keys.R b/tests/testthat/test-epi_keys.R index 74351ff3c..f15ee197f 100644 --- a/tests/testthat/test-epi_keys.R +++ b/tests/testthat/test-epi_keys.R @@ -32,19 +32,23 @@ test_that("epi_keys_mold extracts time_value and geo_value, but not raw",{ }) test_that("epi_keys_mold extracts additional keys when they are present", { - my_data <- case_death_rate_subset %>% - sample_n(6) %>% - tsibble::as_tsibble() %>% # add 2 extra keys - mutate(state = rep("MA", 6), pol = rep("blue", 6)) %>% - as_epi_df(additional_metadata = list(other_keys=c("state", "pol"))) - + my_data <- tibble::tibble( + geo_value = rep(c("ca", "fl", "pa"), each = 3), + time_value = rep(seq(as.Date("2020-06-01"), as.Date("2020-06-03"), + by = "day"), length.out = length(geo_value)), + pol = rep(c("blue", "swing", "swing"), each = 3), # extra key + state = rep(c("ca", "fl", "pa"), each = 3), # extra key + value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) + ) %>% + epiprocess::as_epi_df(additional_metadata = list(other_keys = c("state", "pol"))) + my_recipe <- epi_recipe(my_data) %>% - step_epi_ahead(death_rate , ahead = 7) %>% + step_epi_ahead(value , ahead = 7) %>% step_epi_naomit() my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) - expect_equal( - epi_keys_mold(my_workflow$pre$mold), + expect_setequal( + epi_keys_mold(my_workflow$pre$mold), c("time_value", "geo_value", "state", "pol")) }) From bd47fa8bb149421aa8f6716a5e325e99ca0e6943 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 17:14:38 -0700 Subject: [PATCH 004/382] fix data format --- R/data.R | 24 ------------------------ data-raw/statcan_employ_subset.R | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/R/data.R b/R/data.R index 8092faad2..9c93506a3 100644 --- a/R/data.R +++ b/R/data.R @@ -33,27 +33,3 @@ #' June 7 is the average of the underlying data for June 1 through 7, #' inclusive. "case_death_rate_subset" - -#' Subset of Statistics Canada employment numbers by industry and province -#' -#' @format A tibble with 109,388 rows and 6 variables: -#' \describe{ -#' \item{geo_value}{The province in Canada associated with each -#' row of measurements.} -#' \item{time_value}{The time value, in YYYY-MM-01 format, -#' associated with each row of measurements.} -#' \item{ppl_count}{The number of people employed, seasonally -#' adjusted.} -#' \item{employee_type}{The type of employee} -#' \item{naics_industry}{The industry name and associated code -#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} -#' } -#' @source This object contains modified data from the following Statistics Canada -#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} -#' -#' Modifications: -#' * From the given Statistics Canada table, the employee counts -#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are -#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} -#' according to Statistics Canada are removed. -"statcan_employ_subset" \ No newline at end of file diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R index f61120065..055d2fe36 100644 --- a/data-raw/statcan_employ_subset.R +++ b/data-raw/statcan_employ_subset.R @@ -80,7 +80,7 @@ employ <- statcan_employ %>% statcan_employ_subset <- employ %>% tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% as_epi_df( - additional_metadata=c(other_keys=c("employee_type", "naics_industry"))) + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) usethis::use_data(statcan_employ_subset, overwrite = TRUE) From 0b797b0a5787a84916b996bc6dc294c532972c54 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 20:02:41 -0700 Subject: [PATCH 005/382] wip vignette --- vignettes/panel-data.Rmd | 138 ++++++++++++++++++++++++++++++--------- 1 file changed, 108 insertions(+), 30 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index d6a9c255a..ca836de16 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -1,13 +1,13 @@ --- -title: "Using epipredict on panel data from other contexts" +title: "Using epipredict on non-epidemic panel data" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{Using epipredict on panel data from other contexts} + %\VignetteIndexEntry{Using epipredict on non-epidemic panel data} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- -```{r setup, include = F} +```{r setup, include=F} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", @@ -16,23 +16,22 @@ knitr::opts_chunk$set( ) ``` -```{r load-data, include = F} -# TODO: temp - remove me when I figure out how to run this rmd without loading -# perhaps need to commit statcan_employ_subset.rda first? -devtools::load_all() -``` - ```{r libraries} library(epiprocess) library(epipredict) library(dplyr) library(stringr) library(parsnip) +library(recipes) ``` -[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological data. However, other datasets with similar structures are also valid candidates for `epipredict` functionality. +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, +contains cross-sectional measurements of subjects over time. The `epipredict` +package is most suitable for running forecasters on epidemiological data. +However, other datasets with similar structures are also valid candidates for +`epipredict` functionality. -```{r employ-stats, include = F} +```{r employ-stats, include=F} date_format <- "%B %Y" date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) @@ -41,9 +40,19 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps ## Example panel data overview -In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). The full dataset contains monthly employment counts from `r date_start` to `r date_end`, and presents employment data stratified by geographic region, [NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), and employee type. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: - -* Only keep level 1 industries (2-digit codes) in the [NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. +In this vignette, we will demonstrate using `epipredict` with employment data from +Statistics Canada. We will be using +[Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to `r date_end`, +and presents employment data stratified by geographic region, +[NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the quality +of data collected. For demonstration purposes, we make the following modifications to +get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the +[NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +and remove aggregated industry codes. * Only keep province-level geographic region (the full data also has "Canada" as a region) * Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column @@ -84,14 +93,19 @@ statcan_employ_subset_input <- statcan_employ %>% mutate(naics_industry = factor(naics_industry)) ``` -To use this data with `epipredict`, we need to convert it into `epi_df` format using `as_epi_df` with additional keys. In our case, the additional keys are `employee_type` and `naics_industry`. Note that in the above modifications, we encoded `time_value` as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, and to ensure lag and ahead modifications later on are using the correct time units. +To use this data with `epipredict`, we need to convert it into `epi_df` format using +`as_epi_df` with additional keys. In our case, the additional keys are `employee_type` +and `naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, +and to ensure lag and ahead modifications later on are using the correct time units. ```{r convert-to-epidf, eval=F} statcan_employ_subset <- statcan_employ_subset_input %>% tsibble::as_tsibble( index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df(time_type = "yearmonth", as_of="2022-07-22") + as_epi_df( + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) ``` ```{r data-dim, include=F} @@ -99,45 +113,109 @@ employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") employ_colcount <- length(names(statcan_employ_subset)) ``` -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are ready to use `statcan_employ_subset` with `epipredict`. +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are +ready to use `statcan_employ_subset` with `epipredict`. ```{r preview-data, include=T} -head(statcan_employ_subset) +# Rename for simplicity +employ <- statcan_employ_subset +head(employ) ``` -In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, fitting 3 types of models from the `parsnip` package, and making future predictions. +In the following sections, we will go over preprocessing the data in the `epi_recipe` +framework, fitting 3 types of models from the `parsnip` package, and making future +predictions. ## Preprocessing We will create a recipe that adds one `ahead` column and 3 `lag` columns. -```{r make-recipe, include = T} -r <- epi_recipe(statcan_employ_subset) %>% +```{r make-recipe, include=T} +r <- epi_recipe(employ) %>% step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% step_epi_naomit() r ``` -There is one `raw` role which includes our value column `ppl_count`, and two `key` roles which include our additional keys `employee_type` and `naics_industry`. Let's take a look at what these additional columns look like. +There is one `raw` role which includes our value column `ppl_count`, and two `key` +roles which include our additional keys `employee_type` and `naics_industry`. Let's +take a look at what these additional columns look like. -```{r view-preprocessed, include = T} -latest <- statcan_employ_subset %>% filter(time_value >= max(time_value) - 12) +```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -r %>% prep() %>% bake(new_data = latest) %>% sample_n(5) +baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) +baked_sample ``` ## Model fitting and prediction -First we will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the above `epi_recipe` to fit a linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. -```{r linearreg-wf, include = T} -wf_linreg <- epi_workflow(r, linear_reg()) %>% fit(statcan_employ_subset) +### With direct forecasters + +Even though we aren't working with epidemiological data, the `arx_epi_forecaster` +still works out of the box. And specifying `args_list` still works in the same way. + +```{r arx-epi, include=T, warning=F} +demo_args_list = arx_args_list(lags = c(0L, 6L, 12L), ahead = 6L) + +out_lr <- arx_epi_forecaster( + employ, + outcome = "ppl_count", + predictors = c("ppl_count"), + args_list = demo_args_list) + +out_lr$predictions +``` + +Other changes to the forecaster, like changing the engine, also work as expected. + +```{r arx-epi-rf, include=T, warning=F} +out_rf <- arx_epi_forecaster( + employ, + outcome = "ppl_count", + predictors = c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = demo_args_list) + +out_rf$predictions +``` + +### Within recipes framework + +First we will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the above `epi_recipe` to fit an autoregressive +linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. + +```{r linearreg-wf, include=T} +wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg +``` +Now that we have our workflow, we can generate predictions from a subset of our data. +For this demo, we will predict the employment counts from the last 12 months of our dataset. + +```{r linearreg-predict, include=T} +latest <- employ %>% filter(time_value >= max(time_value) - 15) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values preds %>% sample_n(5) ``` - - \ No newline at end of file +Notice that `predict` returns an `epi_df` with all of the keys that were present in the original dataset. + +```{r plot-pred, include=F} +# library(ggplot2) +# joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) + +# joined %>% filter(!is.na(.pred)) %>% select(time_value) %>% unique() +# joined %>% dplyr::filter( +# geo_value %in% c("British Columbia", "Ontario") & +# naics_industry == "Real estate and rental and leasing [53]" & +# employee_type == "All employees") %>% +# ggplot() + +# geom_line(aes(x = time_value, y = ppl_count)) + +# geom_line(aes(x = time_value, y = preds)) + +# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + +# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + +# labs(x = "Date", y = "Number employed") +``` From 1683240eb23382f83cf1a30e182ce8ec3b6558e9 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Mon, 15 Aug 2022 21:12:12 -0700 Subject: [PATCH 006/382] updates to vignette --- vignettes/panel-data.Rmd | 178 ++++++++++++++++++++++++--------------- 1 file changed, 109 insertions(+), 69 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index ca836de16..104f0dcce 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -27,9 +27,22 @@ library(recipes) [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` -package is most suitable for running forecasters on epidemiological data. -However, other datasets with similar structures are also valid candidates for -`epipredict` functionality. +package is most suitable for running forecasters on epidemiological panel data. +A built-in example of this is the [`case_death_rate_subset`]( + https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) +dataset, which contains daily state-wise measures of `case_rate` and +`death_rate` for COVID-19 in 2021: + +```{r epi-panel-ex, include=T} +head(case_death_rate_subset) +``` + +`epipredict` functions work with data in [`epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +format. Despite the stated goal and name of the package, other panel datasets +are also valid candidates for `epipredict` functionality. Specifically, the +`epipredict` framework and direct forecasters are able to work with any panel +data, as long as it's in `epi_df` format, ```{r employ-stats, include=F} date_format <- "%B %Y" @@ -40,33 +53,47 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps ## Example panel data overview -In this vignette, we will demonstrate using `epipredict` with employment data from -Statistics Canada. We will be using -[Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to `r date_end`, -and presents employment data stratified by geographic region, -[NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the quality -of data collected. For demonstration purposes, we make the following modifications to -get a subset of the full dataset: +In this vignette, we will demonstrate using `epipredict` with employment data +from Statistics Canada. We will be using +[ + Table 14-10-0220-01: Employment and average weekly earnings + (including \overtime) for all employees by industry, monthly, + seasonally adjusted, Canada +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to +`r date_end`, and presents employment data stratified by geographic region +on the Canadian province level, +[NAICS industries]( + https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the +quality of data collected. For demonstration purposes, we make the following +modifications to get a subset of the full dataset: * Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +[NAICS hierarchy]( + https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. -* Only keep province-level geographic region (the full data also has "Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Only keep provincial-level geographic region (the full data also has +"Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] +(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we +just described: -Below is the query for obtaining the full data and code for subsetting it as we just described: ```{r employ-query, eval=F} library(cansim) statcan_employ <- get_cansim("14-10-0201-01") +# for readability; this string is very long +naics_code <- + "Classification Code for North American Industry Classification System (NAICS)" + statcan_employ_subset_input <- statcan_employ %>% select(c( "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - "Classification Code for North American Industry Classification System (NAICS)", - "North American Industry Classification System (NAICS)")) %>% + naics_code, "North American Industry Classification System (NAICS)")) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -74,7 +101,7 @@ statcan_employ_subset_input <- statcan_employ %>% "status" = "STATUS", "employee_type" = "Type of employee", "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = "Classification Code for North American Industry Classification System (NAICS)") %>% + "naics_code" = naics_code) %>% mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% filter( # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol @@ -93,11 +120,14 @@ statcan_employ_subset_input <- statcan_employ %>% mutate(naics_industry = factor(naics_industry)) ``` -To use this data with `epipredict`, we need to convert it into `epi_df` format using -`as_epi_df` with additional keys. In our case, the additional keys are `employee_type` -and `naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, -and to ensure lag and ahead modifications later on are using the correct time units. +To use this data with `epipredict`, we need to convert it into `epi_df` format +using [`as_epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +with additional keys. In our case, the additional keys are `employee_type` and +`naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` +below, and to ensure lag and ahead modifications later on are using the correct +time units. ```{r convert-to-epidf, eval=F} statcan_employ_subset <- statcan_employ_subset_input %>% @@ -113,8 +143,8 @@ employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") employ_colcount <- length(names(statcan_employ_subset)) ``` -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are -ready to use `statcan_employ_subset` with `epipredict`. +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, +we are ready to use `statcan_employ_subset` with `epipredict`. ```{r preview-data, include=T} # Rename for simplicity @@ -122,9 +152,9 @@ employ <- statcan_employ_subset head(employ) ``` -In the following sections, we will go over preprocessing the data in the `epi_recipe` -framework, fitting 3 types of models from the `parsnip` package, and making future -predictions. +In the following sections, we will go over preprocessing the data in the +`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, +and making future predictions. ## Preprocessing @@ -138,9 +168,9 @@ r <- epi_recipe(employ) %>% r ``` -There is one `raw` role which includes our value column `ppl_count`, and two `key` -roles which include our additional keys `employee_type` and `naics_industry`. Let's -take a look at what these additional columns look like. +There is one `raw` role which includes our value column `ppl_count`, and two +`key` roles which include our additional keys `employee_type` and +`naics_industry`. Let's take a look at what these additional columns look like. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data @@ -150,60 +180,34 @@ baked_sample ## Model fitting and prediction -### With direct forecasters - -Even though we aren't working with epidemiological data, the `arx_epi_forecaster` -still works out of the box. And specifying `args_list` still works in the same way. - -```{r arx-epi, include=T, warning=F} -demo_args_list = arx_args_list(lags = c(0L, 6L, 12L), ahead = 6L) - -out_lr <- arx_epi_forecaster( - employ, - outcome = "ppl_count", - predictors = c("ppl_count"), - args_list = demo_args_list) - -out_lr$predictions -``` - -Other changes to the forecaster, like changing the engine, also work as expected. - -```{r arx-epi-rf, include=T, warning=F} -out_rf <- arx_epi_forecaster( - employ, - outcome = "ppl_count", - predictors = c("ppl_count"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = demo_args_list) - -out_rf$predictions -``` - ### Within recipes framework -First we will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the above `epi_recipe` to fit an autoregressive -linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. +We will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section to fit an autoregressive linear model using lags at +time $t$ (current), $t-6$ months, and $t-12$ months. ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg ``` -Now that we have our workflow, we can generate predictions from a subset of our data. -For this demo, we will predict the employment counts from the last 12 months of our dataset. +Now that we have our workflow, we can generate predictions from a subset of our +data. For this demo, we will predict the employment counts from the last 12 +months of our dataset. ```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 15) +latest <- employ %>% filter(time_value >= max(time_value) - 12) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values preds %>% sample_n(5) ``` -Notice that `predict` returns an `epi_df` with all of the keys that were present in the original dataset. +Notice that `predict` still returns an `epi_df` with all of the keys that were +present in the original dataset. ```{r plot-pred, include=F} +# this doesn't work. don't include # library(ggplot2) # joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) @@ -219,3 +223,39 @@ Notice that `predict` returns an `epi_df` with all of the keys that were present # scale_x_date(minor_breaks = "month", date_labels = "%b %y") + # labs(x = "Date", y = "Number employed") ``` + +### With canned forecasters + +Even though we aren't working with epidemiological data, canned forecasters +still work as expected, out of the box. We will demonstrate this with the simple +[`flatline_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) +and the direct autoregressive (AR) forecaster +[`arx_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). + +```{r flatline, include=T} +out_fl <- flatline_forecaster( + employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) + +augment(out_fl$epi_workflow, employ) +``` + +```{r arx, include=T} +args = arx_args_list( + lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) + +out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) +out_arx$predictions +``` + +Other changes to the direct AR forecaster, like changing the engine, also work +as expected. + +```{r arx-epi-rf, include=F, warning=F} +out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = args) + +out_rf$predictions +``` From 3864d7df106409f9154d1ea6b8f0d6baaaff63b4 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:17:42 -0700 Subject: [PATCH 007/382] use a better dataset --- R/data.R | 49 ++++++ data-raw/statcan_grademploy_subset.R | 203 ++++++++++++++++++++++ data/grad_employ_subset.rda | Bin 0 -> 39430 bytes man/epi_workflow.Rd | 2 +- man/flatline.Rd | 4 +- man/grad_employ_subset.Rd | 40 +++++ vignettes/panel-data-old.Rmd | 243 +++++++++++++++++++++++++++ vignettes/panel-data.Rmd | 181 ++++++++++---------- 8 files changed, 626 insertions(+), 96 deletions(-) create mode 100644 data-raw/statcan_grademploy_subset.R create mode 100644 data/grad_employ_subset.rda create mode 100644 man/grad_employ_subset.Rd create mode 100644 vignettes/panel-data-old.Rmd diff --git a/R/data.R b/R/data.R index 9c93506a3..805d2ddf5 100644 --- a/R/data.R +++ b/R/data.R @@ -33,3 +33,52 @@ #' June 7 is the average of the underlying data for June 1 through 7, #' inclusive. "case_death_rate_subset" + +#' Subset of Statistics Canada employment numbers by industry and province +#' +#' @format A tibble with 109,388 rows and 6 variables: +#' \describe{ +#' \item{geo_value}{The province in Canada associated with each +#' row of measurements.} +#' \item{time_value}{The time value, in YYYY-MM-01 format, +#' associated with each row of measurements.} +#' \item{ppl_count}{The number of people employed, seasonally +#' adjusted.} +#' \item{employee_type}{The type of employee} +#' \item{naics_industry}{The industry name and associated code +#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} +#' } +#' @source This object contains modified data from the following Statistics Canada +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} +#' +#' Modifications: +#' * From the given Statistics Canada table, the employee counts +#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are +#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} +#' according to Statistics Canada are removed. +"statcan_employ_subset" + +#' Subset of Statistics Canada median employment income for postsecondary graduates +#' +#' @format A tibble with 10193 rows and 8 variables: +#' \describe{ +#' \item{geo_value}{The province in Canada associated with each +#' row of measurements.} +#' \item{time_value}{The time value, a year integer in YYYY format} +#' \item{edu_qual}{The education qualification} +#' \item{fos}{The field of study} +#' \item{age_group}{The age group; either 15 to 34 or 35 to 64} +#' \item{num_graduates}{The number of graduates for the given row of characteristics} +#' \item{med_income_2y}{The median employment income two years after graduation} +#' \item{med_income_5y}{The median employment income five years after graduation} +#' } +#' @source This object contains modified data from the following Statistics Canada +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +#' +#' Modifications: +#' * Only provincial-level geo_values are kept +#' * Only age group, field of study, and educational qualification are kept as +#' covariates. For the remaining covariates, we keep aggregated values and +#' drop the level-specific rows. +#' * No modifications were made to the time range of the data +"grad_employ_subset" \ No newline at end of file diff --git a/data-raw/statcan_grademploy_subset.R b/data-raw/statcan_grademploy_subset.R new file mode 100644 index 000000000..70cb6d678 --- /dev/null +++ b/data-raw/statcan_grademploy_subset.R @@ -0,0 +1,203 @@ +library(epipredict) +library(epiprocess) +library(cansim) +library(dplyr) +library(stringr) +library(tidyr) + +# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501 +statcan_grad_employ <- get_cansim("37-10-0115-01") + +gemploy <- statcan_grad_employ %>% + select(c( + "REF_DATE", + "GEO", + # "DGUID", + # "UOM", + # "UOM_ID", + # "SCALAR_FACTOR", + # "SCALAR_ID", + # "VECTOR", + # "COORDINATE", + "VALUE", + "STATUS", + # "SYMBOL", + # "TERMINATED", + # "DECIMALS", + # "GeoUID", + # "Hierarchy for GEO", + # "Classification Code for Educational qualification", + # "Hierarchy for Educational qualification", + # "Classification Code for Field of study", + # "Hierarchy for Field of study", + # "Classification Code for Gender", + # "Hierarchy for Gender", + # "Classification Code for Age group", + # "Hierarchy for Age group", + # "Classification Code for Status of student in Canada", + # "Hierarchy for Status of student in Canada", + # "Classification Code for Characteristics after graduation", + # "Hierarchy for Characteristics after graduation", + # "Classification Code for Graduate statistics", + # "Hierarchy for Graduate statistics", + # "val_norm", + # "Date", + "Educational qualification", + "Field of study", + "Gender", + "Age group", + "Status of student in Canada", + "Characteristics after graduation", + "Graduate statistics")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "value" = "VALUE", + "status" = "STATUS", + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics") %>% + mutate( + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y"), + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% + filter( + # Drop aggregates for some columns + geo_value != "Canada" & + age_group != "15 to 64 years" & + fos != "Total, field of study" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + select(-c(status, gender, student_status, grad_charac)) + +# gemploy$time_value %>% unique() +# class(gemploy$fos) +# class(gemploy$edu_qual) +# class(gemploy$age_group) +# head(gemploy) +nrow(gemploy) +ncol(gemploy) + +gemploy$grad_charac %>% unique() +gemploy %>% group_by(grad_charac) %>% slice(1) + +grad_employ_subset <- gemploy %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, age_group, fos, edu_qual)) %>% + as_epi_df( + geo_type = "custom", time_type = "year", as_of = "2022-07-19", + additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) +usethis::use_data(grad_employ_subset, overwrite = TRUE) + +# ================== EDA ================== + +statcan_grad_employ %>% + group_by(`Characteristics after graduation`) %>% + # filter(`Graduate statistics` == "Median employment income two years after graduation") %>% + filter(`Graduate statistics` == "Number of graduates") %>% + slice(1) %>% + select(`Characteristics after graduation`) + +names(statcan_grad_employ) +unique(statcan_grad_employ$REF_DATE) +# [1] "2010" "2011" "2012" "2013" "2014" "2015" + +unique(statcan_grad_employ$GEO) +# [1] "Canada" "Newfoundland and Labrador" +# [3] "Prince Edward Island" "Nova Scotia" +# [5] "New Brunswick" "Quebec" +# [7] "Ontario" "Manitoba" +# [9] "Saskatchewan" "Alberta" +# [11] "British Columbia" "Territories" +unique(statcan_grad_employ$DGUID) + +unique(statcan_grad_employ$UOM) +# [1] "Number" "2020 constant dollars" +statcan_grad_employ %>% + group_by(UOM, `Graduate statistics`) %>% + select(UOM, `Graduate statistics`, VALUE) %>% + slice(1) +unique(statcan_grad_employ$UOM_ID) + +unique(statcan_grad_employ$SCALAR_FACTOR) # "units" +unique(statcan_grad_employ$SCALAR_ID) # "0" + +length(unique(statcan_grad_employ$VECTOR)) +length(unique(statcan_grad_employ$COORDINATE)) + +length(unique(statcan_grad_employ$VALUE)) +unique(statcan_grad_employ$STATUS) +# [1] NA ".." "x" + +unique(statcan_grad_employ$SYMBOL) +# [1] NA + +unique(statcan_grad_employ$TERMINATED) +# [1] NA + +unique(statcan_grad_employ$DECIMALS) +# [1] "0" + +unique(statcan_grad_employ$GeoUID) +# redundant with geo + +unique(statcan_grad_employ$`Hierarchy for GEO`) +# redundant with geo + +unique(statcan_grad_employ$`Classification Code for Educational qualification`) # NA +unique(statcan_grad_employ$`Hierarchy for Educational qualification`) + +unique(statcan_grad_employ$`Classification Code for Field of study`) +unique(statcan_grad_employ$`Hierarchy for Field of study`) + +unique(statcan_grad_employ$`Classification Code for Gender`) # NA +unique(statcan_grad_employ$`Hierarchy for Gender`) + +unique(statcan_grad_employ$`Classification Code for Age group`) # NA +unique(statcan_grad_employ$`Hierarchy for Age group`) + +unique(statcan_grad_employ$`Classification Code for Status of student in Canada`) # NA +unique(statcan_grad_employ$`Hierarchy for Status of student in Canada`) + +unique(statcan_grad_employ$`Classification Code for Characteristics after graduation`) # NA +unique(statcan_grad_employ$`Hierarchy for Characteristics after graduation`) + +unique(statcan_grad_employ$`Classification Code for Graduate statistics`) # NA +unique(statcan_grad_employ$`Hierarchy for Graduate statistics`) + +length(unique(statcan_grad_employ$`val_norm`)) +statcan_grad_employ %>% filter(val_norm != VALUE) %>% nrow() #0 + +unique(statcan_grad_employ$`Date`) +# [1] "2010-07-01" "2011-07-01" "2012-07-01" "2013-07-01" "2014-07-01" +# [6] "2015-07-01" + +unique(statcan_grad_employ$`Educational qualification`) # 32 levels +unique(statcan_grad_employ$`Field of study`) # 60 levels +unique(statcan_grad_employ$`Gender`) +unique(statcan_grad_employ$`Age group`) +unique(statcan_grad_employ$`Status of student in Canada`) +unique(statcan_grad_employ$`Characteristics after graduation`) +unique(statcan_grad_employ$`Graduate statistics`) diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda new file mode 100644 index 0000000000000000000000000000000000000000..f2e52ce21eab825b6c2e379a5ed15f84b52d45ef GIT binary patch literal 39430 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 literal 0 HcmV?d00001 diff --git a/man/epi_workflow.Rd b/man/epi_workflow.Rd index f9d753d84..bcf0e78aa 100644 --- a/man/epi_workflow.Rd +++ b/man/epi_workflow.Rd @@ -11,7 +11,7 @@ epi_workflow(preprocessor = NULL, spec = NULL, postprocessor = NULL) \itemize{ \item A formula, passed on to \code{\link[workflows:add_formula]{add_formula()}}. \item A recipe, passed on to \code{\link[workflows:add_recipe]{add_recipe()}}. -\item A \code{\link[workflows:workflow_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. +\item A \code{\link[workflows:add_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. }} \item{spec}{An optional parsnip model specification to add to the workflow. diff --git a/man/flatline.Rd b/man/flatline.Rd index a396cfeb9..a30272456 100644 --- a/man/flatline.Rd +++ b/man/flatline.Rd @@ -11,9 +11,7 @@ flatline(formula, data) would actually be the observed time series shifted forward by the forecast horizon. The right hand side must contain any keys (locations) for the panel data separated by plus. The observed time series must come last. -For example - -\if{html}{\out{

    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) +For example\if{html}{\out{
    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) }\if{html}{\out{
    }} Note that this function doesn't DO the shifting, that has to be done diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd new file mode 100644 index 000000000..abac4dae9 --- /dev/null +++ b/man/grad_employ_subset.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{grad_employ_subset} +\alias{grad_employ_subset} +\title{Subset of Statistics Canada median employment income for postsecondary graduates} +\format{ +A tibble with 10193 rows and 8 variables: +\describe{ +\item{geo_value}{The province in Canada associated with each +row of measurements.} +\item{time_value}{The time value, a year integer in YYYY format} +\item{edu_qual}{The education qualification} +\item{fos}{The field of study} +\item{age_group}{The age group; either 15 to 34 or 35 to 64} +\item{num_graduates}{The number of graduates for the given row of characteristics} +\item{med_income_2y}{The median employment income two years after graduation} +\item{med_income_5y}{The median employment income five years after graduation} +} +} +\source{ +This object contains modified data from the following Statistics Canada +data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} + +Modifications: +\itemize{ +\item Only provincial-level geo_values are kept +\item Only age group, field of study, and educational qualification are kept as +covariates. For the remaining covariates, we keep aggregated values and +drop the level-specific rows. +\item No modifications were made to the time range of the data +} +} +\usage{ +grad_employ_subset +} +\description{ +Subset of Statistics Canada median employment income for postsecondary graduates +} +\keyword{datasets} diff --git a/vignettes/panel-data-old.Rmd b/vignettes/panel-data-old.Rmd new file mode 100644 index 000000000..24c48ed6a --- /dev/null +++ b/vignettes/panel-data-old.Rmd @@ -0,0 +1,243 @@ +--- +title: "Using epipredict on non-epidemic panel data (old)" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Using epipredict on non-epidemic panel data (old)} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=F} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + warning = FALSE, + message = FALSE +) +``` + +```{r libraries} +library(epiprocess) +library(epipredict) +library(dplyr) +library(stringr) +library(parsnip) +library(recipes) +``` + +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, +contains cross-sectional measurements of subjects over time. The `epipredict` +package is most suitable for running forecasters on epidemiological panel data. +A built-in example of this is the [`case_death_rate_subset`]( + https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) +dataset, which contains daily state-wise measures of `case_rate` and +`death_rate` for COVID-19 in 2021: + +```{r epi-panel-ex, include=T} +head(case_death_rate_subset) +``` + +`epipredict` functions work with data in [`epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +format. Despite the stated goal and name of the package, other panel datasets +are also valid candidates for `epipredict` functionality. Specifically, the +`epipredict` framework and direct forecasters are able to work with any panel +data, as long as it's in `epi_df` format, + +```{r employ-stats, include=F} +date_format <- "%B %Y" +date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) +date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) +uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +``` + +## Example panel data overview + +In this vignette, we will demonstrate using `epipredict` with employment data +from Statistics Canada. We will be using +[ + Table 14-10-0220-01: Employment and average weekly earnings + (including \overtime) for all employees by industry, monthly, + seasonally adjusted, Canada +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to +`r date_end`, and presents employment data stratified by geographic region +on the Canadian province level, +[NAICS industries]( + https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the +quality of data collected. For demonstration purposes, we make the following +modifications to get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the +[NAICS hierarchy]( + https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +and remove aggregated industry codes. +* Only keep provincial-level geographic region (the full data also has +"Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] +(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we +just described: + +```{r employ-query, eval=F} +library(cansim) + +statcan_employ <- get_cansim("14-10-0201-01") + +# for readability; this string is very long +naics_code <- + "Classification Code for North American Industry Classification System (NAICS)" + +statcan_employ_subset_input <- statcan_employ %>% + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", + naics_code, "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = naics_code) %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + filter( + # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # A, B, C, D, NA indicate "good" or better data quality + status %in% c("A", "B", "C", "D", NA) & + # Drop aggregated rows; only keep provinces + geo_value != "Canada" & + # Drop aggregated industry rows + !str_detect(naics_code, "N") & + # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified; drop these rows + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) +``` + +To use this data with `epipredict`, we need to convert it into `epi_df` format +using [`as_epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +with additional keys. In our case, the additional keys are `employee_type` and +`naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` +below, and to ensure lag and ahead modifications later on are using the correct +time units. + +```{r convert-to-epidf, eval=F} +statcan_employ_subset <- statcan_employ_subset_input %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df( + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) +``` + +```{r data-dim, include=F} +employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") +employ_colcount <- length(names(statcan_employ_subset)) +``` + +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, +we are ready to use `statcan_employ_subset` with `epipredict`. + +```{r preview-data, include=T} +# Rename for simplicity +employ <- statcan_employ_subset +head(employ) +``` + +In the following sections, we will go over preprocessing the data in the +`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, +and making future predictions. + +## Preprocessing + +We will create a recipe that adds one `ahead` column and 3 `lag` columns. + +```{r make-recipe, include=T} +r <- epi_recipe(employ) %>% + step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months + step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_naomit() +r +``` + +There is one `raw` role which includes our value column `ppl_count`, and two +`key` roles which include our additional keys `employee_type` and +`naics_industry`. Let's take a look at what these additional columns look like. + +```{r view-preprocessed, include=T} +# Display a sample of the preprocessed data +baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) +baked_sample +``` + +## Model fitting and prediction + +### Within recipes framework + +We will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section to fit an autoregressive linear model using lags at +time $t$ (current), $t-6$ months, and $t-12$ months. + +```{r linearreg-wf, include=T} +wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) +wf_linreg +``` + +Now that we have our workflow, we can generate predictions from a subset of our +data. For this demo, we will predict the employment counts from the last 12 +months of our dataset. + +```{r linearreg-predict, include=T} +latest <- employ %>% filter(time_value >= max(time_value) - 12) +preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) +# Display a sample of the prediction values +preds %>% sample_n(5) +``` + +Notice that `predict` still returns an `epi_df` with all of the keys that were +present in the original dataset. + +### With canned forecasters + +Even though we aren't working with epidemiological data, canned forecasters +still work as expected, out of the box. We will demonstrate this with the simple +[`flatline_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) +and the direct autoregressive (AR) forecaster +[`arx_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). + +```{r flatline, include=T} +out_fl <- flatline_forecaster( + employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) + +augment(out_fl$epi_workflow, employ) +``` + +```{r arx, include=T} +args = arx_args_list( + lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) + +out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) +out_arx$predictions +``` + +Other changes to the direct AR forecaster, like changing the engine, also work +as expected. + +```{r arx-epi-rf, include=F, warning=F} +out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = args) + +out_rf$predictions +``` diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 104f0dcce..71a9c1327 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -45,10 +45,8 @@ are also valid candidates for `epipredict` functionality. Specifically, the data, as long as it's in `epi_df` format, ```{r employ-stats, include=F} -date_format <- "%B %Y" -date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) -date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) -uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +year_start <- min(grad_employ_subset$time_value) +year_end <- max(grad_employ_subset$time_value) ``` ## Example panel data overview @@ -56,27 +54,25 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [ - Table 14-10-0220-01: Employment and average weekly earnings - (including \overtime) for all employees by industry, monthly, - seasonally adjusted, Canada -](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to -`r date_end`, and presents employment data stratified by geographic region -on the Canadian province level, -[NAICS industries]( - https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the + Table 37-10-0115-01: Characteristics and median employment income of + longitudinal cohorts of postsecondary graduates two and five years after + graduation, by educational qualification and field of study (primary + groupings) +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). +The full dataset contains yearly median employment income two and five years +after graduation, and number of graduates. The data is further stratified by +variables such as geographic region (Canadian province), field of study, and +age group. The year range of the dataset is `r year_start` to `r year_end`, +inclusive. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: -* Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy]( - https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) -and remove aggregated industry codes. * Only keep provincial-level geographic region (the full data also has "Canada" as a region) * Only keep "good" or better quality data rows, as indicated by the [`STATUS`] (https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Choose a subset of covariates and aggregate across the remaining ones. The +chosen covariates are age group, field of study, and educational qualification. Below is the query for obtaining the full data and code for subsetting it as we just described: @@ -84,77 +80,92 @@ just described: ```{r employ-query, eval=F} library(cansim) -statcan_employ <- get_cansim("14-10-0201-01") - -# for readability; this string is very long -naics_code <- - "Classification Code for North American Industry Classification System (NAICS)" - -statcan_employ_subset_input <- statcan_employ %>% - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - naics_code, "North American Industry Classification System (NAICS)")) %>% +statcan_grad_employ <- get_cansim("37-10-0115-01") +gemploy <- statcan_grad_employ %>% + select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", + "Field of study", "Gender", "Age group", "Status of student in Canada", + "Characteristics after graduation", "Graduate statistics")) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", - "ppl_count" = "VALUE", + "value" = "VALUE", "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = naics_code) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics") %>% + # The original `VALUE` column contain the statistic indicated by + # `Graduate statistics` in the original data. Below we pivot the data + # wider so that each unique statistic can have its own column. + mutate( + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y"), + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% filter( - # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # A, B, C, D, NA indicate "good" or better data quality - status %in% c("A", "B", "C", "D", NA) & - # Drop aggregated rows; only keep provinces + # Drop aggregates for some columns geo_value != "Canada" & - # Drop aggregated industry rows - !str_detect(naics_code, "N") & - # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified; drop these rows - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) + age_group != "15 to 64 years" & + fos != "Total, field of study" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + select(-c(status, gender, student_status, grad_charac)) ``` To use this data with `epipredict`, we need to convert it into `epi_df` format using [`as_epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `employee_type` and -`naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` -below, and to ensure lag and ahead modifications later on are using the correct -time units. +with additional keys. In our case, the additional keys are `age_group`, `fos` +and `edu_qual`. Note that in the above modifications, we encoded `time_value` +as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure +lag and ahead modifications later on are using the correct time units. ```{r convert-to-epidf, eval=F} -statcan_employ_subset <- statcan_employ_subset_input %>% +grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index=time_value, - key=c(geo_value, employee_type, naics_industry)) %>% + key=c(geo_value, age_group, fos, edu_qual)) %>% as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) + geo_type = "custom", time_type = "year", + additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) ``` ```{r data-dim, include=F} -employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") -employ_colcount <- length(names(statcan_employ_subset)) +employ_rowcount <- format(nrow(grad_employ_subset), big.mark=",") +employ_colcount <- length(names(grad_employ_subset)) ``` The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `statcan_employ_subset` with `epipredict`. +we are ready to use `grad_employ_subset` with `epipredict`. ```{r preview-data, include=T} # Rename for simplicity -employ <- statcan_employ_subset -head(employ) +employ <- grad_employ_subset +sample_n(employ, 6) ``` In the following sections, we will go over preprocessing the data in the -`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, -and making future predictions. +`epi_recipe` framework, and fitting a model and making predictions within the +`epipredict` framework and using the package's canned forecasters. ## Preprocessing @@ -162,15 +173,15 @@ We will create a recipe that adds one `ahead` column and 3 `lag` columns. ```{r make-recipe, include=T} r <- epi_recipe(employ) %>% - step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months - step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years + step_epi_lag(num_graduates, lag = c(0, 1, 1)) %>% step_epi_naomit() r ``` -There is one `raw` role which includes our value column `ppl_count`, and two -`key` roles which include our additional keys `employee_type` and -`naics_industry`. Let's take a look at what these additional columns look like. +There is one `raw` role which includes our value column `num_graduates`, and two +`key` roles which include our additional keys `age_group`, `fos` and +`edu_qual`. Let's take a look at what these additional columns look like. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data @@ -185,7 +196,7 @@ baked_sample We will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-6$ months, and $t-12$ months. +time $t$ (current), $t-1$ (last year), and $t-2$ (2 years ago). ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) @@ -200,30 +211,12 @@ months of our dataset. latest <- employ %>% filter(time_value >= max(time_value) - 12) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values -preds %>% sample_n(5) +head(preds) ``` Notice that `predict` still returns an `epi_df` with all of the keys that were present in the original dataset. -```{r plot-pred, include=F} -# this doesn't work. don't include -# library(ggplot2) -# joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) - -# joined %>% filter(!is.na(.pred)) %>% select(time_value) %>% unique() -# joined %>% dplyr::filter( -# geo_value %in% c("British Columbia", "Ontario") & -# naics_industry == "Real estate and rental and leasing [53]" & -# employee_type == "All employees") %>% -# ggplot() + -# geom_line(aes(x = time_value, y = ppl_count)) + -# geom_line(aes(x = time_value, y = preds)) + -# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + -# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + -# labs(x = "Date", y = "Number employed") -``` - ### With canned forecasters Even though we aren't working with epidemiological data, canned forecasters @@ -235,17 +228,20 @@ and the direct autoregressive (AR) forecaster https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). ```{r flatline, include=T} -out_fl <- flatline_forecaster( - employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) +out_fl <- flatline_forecaster(employ, "med_income_2y", + args_list = flatline_args_list( + ahead=1L, forecast_date = as.Date("2022-08-16"))) augment(out_fl$epi_workflow, employ) ``` ```{r arx, include=T} -args = arx_args_list( - lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) +arx_args <- arx_args_list( + lags = c(0L, 1L, 2L), ahead = 1L, forecast_date = as.Date("2022-08-01")) +out_arx <- arx_forecaster(employ, "med_income_2y", + c("med_income_2y", "med_income_5y", "num_graduates"), + args_list = arx_args) -out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) out_arx$predictions ``` @@ -253,7 +249,8 @@ Other changes to the direct AR forecaster, like changing the engine, also work as expected. ```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), +out_rf <- arx_forecaster( + employ, "med_income_2y", c("med_income_2y", "med_income_5y"), trainer = parsnip::rand_forest(mode="regression", trees=100), args_list = args) From c781d3396067beba0eede5ac995bd2a6cb12d577 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:18:52 -0700 Subject: [PATCH 008/382] use better data pt 2 --- R/data.R | 24 -- ...ademploy_subset.R => grad_employ_subset.R} | 0 data-raw/statcan_employ_subset.R | 192 -------------- data/statcan_employ_subset.rda | Bin 254398 -> 0 bytes man/statcan_employ_subset.Rd | 39 --- vignettes/panel-data-old.Rmd | 243 ------------------ 6 files changed, 498 deletions(-) rename data-raw/{statcan_grademploy_subset.R => grad_employ_subset.R} (100%) delete mode 100644 data-raw/statcan_employ_subset.R delete mode 100644 data/statcan_employ_subset.rda delete mode 100644 man/statcan_employ_subset.Rd delete mode 100644 vignettes/panel-data-old.Rmd diff --git a/R/data.R b/R/data.R index 805d2ddf5..3702afc11 100644 --- a/R/data.R +++ b/R/data.R @@ -34,30 +34,6 @@ #' inclusive. "case_death_rate_subset" -#' Subset of Statistics Canada employment numbers by industry and province -#' -#' @format A tibble with 109,388 rows and 6 variables: -#' \describe{ -#' \item{geo_value}{The province in Canada associated with each -#' row of measurements.} -#' \item{time_value}{The time value, in YYYY-MM-01 format, -#' associated with each row of measurements.} -#' \item{ppl_count}{The number of people employed, seasonally -#' adjusted.} -#' \item{employee_type}{The type of employee} -#' \item{naics_industry}{The industry name and associated code -#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} -#' } -#' @source This object contains modified data from the following Statistics Canada -#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} -#' -#' Modifications: -#' * From the given Statistics Canada table, the employee counts -#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are -#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} -#' according to Statistics Canada are removed. -"statcan_employ_subset" - #' Subset of Statistics Canada median employment income for postsecondary graduates #' #' @format A tibble with 10193 rows and 8 variables: diff --git a/data-raw/statcan_grademploy_subset.R b/data-raw/grad_employ_subset.R similarity index 100% rename from data-raw/statcan_grademploy_subset.R rename to data-raw/grad_employ_subset.R diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R deleted file mode 100644 index 055d2fe36..000000000 --- a/data-raw/statcan_employ_subset.R +++ /dev/null @@ -1,192 +0,0 @@ -library(epipredict) -library(epiprocess) -library(cansim) -library(dplyr) -library(stringr) - -# Run this once -# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data -statcan_employ <- get_cansim("14-10-0201-01") - -# ================== Subset & Filtering ================== -employ <- statcan_employ %>% - select(c( - "REF_DATE", - "GEO", - # "DGUID", - # "UOM", - # "UOM_ID", - # "SCALAR_FACTOR", - # "SCALAR_ID", - # "VECTOR", - # "COORDINATE", - "VALUE", - "STATUS", - # "SYMBOL", - # "TERMINATED", - # "DECIMALS", - # "GeoUID", - # "Hierarchy for GEO", - # "Classification Code for Type of employee", - # "Hierarchy for Type of employee", - "Classification Code for North American Industry Classification System (NAICS)", - # "Hierarchy for North American Industry Classification System (NAICS)", - # "val_norm", - # "Date", - "Type of employee", - "North American Industry Classification System (NAICS)")) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "ppl_count" = "VALUE", - "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = "Classification Code for North American Industry Classification System (NAICS)" - ) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% - # https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # .. not available for a specific reference period - # x: suppressed to meet the confidentiality requirements of the Statistics Act - # A data quality: excellent - # B data quality: very good - # C data quality: good - # [blank] or A-D: acceptable or better <- only keep these ones - # E use with caution - # F too unreliable to be published - filter( - status %in% c("A", "B", "C", "D", NA) & # only keep "good" data - !is.na(ppl_count) & - geo_value != "Canada" & # only keep provinces - # N corresponds to aggregates - !str_detect(naics_code, "N") & - # only keep top-level sectors - # https://www.census.gov/programs-surveys/economic-census/guidance/understanding-naics.html - # corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) - -# head(employ) -# statcan_employ_subset <- employ %>% -# tsibble::as_tsibble( -# index=time_value, -# key=c(geo_value, employee_type, naics_industry)) %>% -# as_epi_df(time_type = "yearmonth", as_of="2022-07-28") - -statcan_employ_subset <- employ %>% - tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) - -usethis::use_data(statcan_employ_subset, overwrite = TRUE) - -# ================== EDA ================== -length(statcan_employ$REF_DATE) -names(statcan_employ) - -uniq_ref_date <- unique(select(statcan_employ, "REF_DATE")) -uniq_ref_date -min(statcan_employ$REF_DATE) # 2001-01 -max(statcan_employ$REF_DATE) # 2022-05 -# There should be (22-1)*12 + 5 -exp_total_dates <- (22-1)*12+5 -length(uniq_ref_date %>% unlist()) == exp_total_dates # TRUE -# There is a ref date for each month in the date range - -unique(select(statcan_employ, "GEO")) # List of length 14, names of provinces & territories + Canada -statcan_employ %>% group_by(GEO) %>% top_n(n=-1) -# Dissemination Geography Unique Identifier - DGUID. -# https://www12.statcan.gc.ca/census-recensement/2021/ref/dict/az/Definition-eng.cfm?ID=geo055 -# 2016 (year) -# A (administrative) -unique(select(statcan_employ, "DGUID")) -unique(select(statcan_employ, "UOM")) # Persons -unique(select(statcan_employ, "UOM_ID")) # 249 - -# These scalar columns tell us by what factor of 10 to multiply the values -# We get "units" and 0 so we can ignore these columns and -# take the values in VALUE as-is -unique(select(statcan_employ, "SCALAR_FACTOR")) # All "units" -unique(select(statcan_employ, "SCALAR_ID")) # All 0 - -# Time series identifier - ignore -unique(select(statcan_employ, "VECTOR")) - -# Related to dimension, which is not present in this table - ignore -unique(select(statcan_employ, "COORDINATE")) - -# Data value column. Values in units -unique(select(statcan_employ, "VALUE")) -# How many rows have empty values? -# Approx 3/4 of the rows have NA values -statcan_employ %>% - summarise( - VALUE_NA = sum(is.na(VALUE)) / length(VALUE), - VALUE_NOT_NA = sum(!is.na(VALUE)) / length(VALUE), - TOTAL = length(VALUE) - ) - -unique(select(statcan_employ, "STATUS")) -statcan_employ %>% - select(STATUS, VALUE) %>% - group_by(STATUS) %>% - count() - -unique(select(statcan_employ, "SYMBOL")) # All NA -unique(select(statcan_employ, "TERMINATED")) # All NA -unique(select(statcan_employ, "DECIMALS")) # All 0 - -unique(select(statcan_employ, "GeoUID")) -unique(select(statcan_employ, "Hierarchy for GEO")) -statcan_employ %>% - group_by_at(c("GEO", "DGUID", "GeoUID", "Hierarchy for GEO")) %>% - count() -# These 4 columns are redundant. Just keep GEO. - -# The next 4 columns are metadata about the last 2 columns -# ignore these in favour of the descriptive ones -unique(select(statcan_employ, "Classification Code for Type of employee")) # All NA -unique(select(statcan_employ, "Hierarchy for Type of employee")) -unique(select(statcan_employ, "Classification Code for North American Industry Classification System (NAICS)")) -unique(select(statcan_employ, "Hierarchy for North American Industry Classification System (NAICS)")) - -# val_norm and VALUE are the same -unique(select(statcan_employ, "val_norm")) -statcan_employ %>% filter(VALUE != val_norm) %>% count() - -unique(select(statcan_employ, "Date")) -# Each date has a minimum of 7522 data points -statcan_employ %>% group_by(Date) %>% count() %>% ungroup() %>% select(n) %>% min() -# Are there any dates that aren't on the 1st of the month? -statcan_employ %>% filter(format(as.Date(Date), "%d") != "01") %>% nrow() # 0 - -unique(select(statcan_employ, "Type of employee")) # 3 types -unique(select(statcan_employ, "North American Industry Classification System (NAICS)")) # lots - -# REF_DATE looks like YYYY-mm -# Date looks like YYYY-mm-dd -# Check that the truncated Date to REF_DATE format always matches the REF_DATE -statcan_employ %>% - select(REF_DATE, Date) %>% - mutate(Date_trunc = format(as.Date(Date), "%Y-%m")) %>% - filter(REF_DATE != Date_trunc) # all empty! good - -# This is an example plot -# library(ggplot2) -# theme_set(theme_bw()) -# -# employ <- statcan_employ_subset %>% -# dplyr::filter( -# geo_value %in% c("British Columbia", "Ontario") & -# naics_industry == "Real estate and rental and leasing [53]") %>% -# dplyr::arrange(geo_value, time_value) -# -# employ %>% ggplot(aes(x = time_value, y = ppl_count, color=employee_type)) + -# geom_line() + -# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + -# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + -# labs(x = "Date", y = "Number employed") diff --git a/data/statcan_employ_subset.rda b/data/statcan_employ_subset.rda deleted file mode 100644 index 46c0ea6c97bcab8855bc3a0b622c361c002e4eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254398 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

    PpWp4;ndq@yrC0n-A2k&b|WNai^ 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

  • q#!|5lLmT( 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 - %\VignetteIndexEntry{Using epipredict on non-epidemic panel data (old)} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=F} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - warning = FALSE, - message = FALSE -) -``` - -```{r libraries} -library(epiprocess) -library(epipredict) -library(dplyr) -library(stringr) -library(parsnip) -library(recipes) -``` - -[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, -contains cross-sectional measurements of subjects over time. The `epipredict` -package is most suitable for running forecasters on epidemiological panel data. -A built-in example of this is the [`case_death_rate_subset`]( - https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) -dataset, which contains daily state-wise measures of `case_rate` and -`death_rate` for COVID-19 in 2021: - -```{r epi-panel-ex, include=T} -head(case_death_rate_subset) -``` - -`epipredict` functions work with data in [`epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) -format. Despite the stated goal and name of the package, other panel datasets -are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters are able to work with any panel -data, as long as it's in `epi_df` format, - -```{r employ-stats, include=F} -date_format <- "%B %Y" -date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) -date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) -uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") -``` - -## Example panel data overview - -In this vignette, we will demonstrate using `epipredict` with employment data -from Statistics Canada. We will be using -[ - Table 14-10-0220-01: Employment and average weekly earnings - (including \overtime) for all employees by industry, monthly, - seasonally adjusted, Canada -](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to -`r date_end`, and presents employment data stratified by geographic region -on the Canadian province level, -[NAICS industries]( - https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the -quality of data collected. For demonstration purposes, we make the following -modifications to get a subset of the full dataset: - -* Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy]( - https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) -and remove aggregated industry codes. -* Only keep provincial-level geographic region (the full data also has -"Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] -(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column - -Below is the query for obtaining the full data and code for subsetting it as we -just described: - -```{r employ-query, eval=F} -library(cansim) - -statcan_employ <- get_cansim("14-10-0201-01") - -# for readability; this string is very long -naics_code <- - "Classification Code for North American Industry Classification System (NAICS)" - -statcan_employ_subset_input <- statcan_employ %>% - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - naics_code, "North American Industry Classification System (NAICS)")) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "ppl_count" = "VALUE", - "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = naics_code) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% - filter( - # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # A, B, C, D, NA indicate "good" or better data quality - status %in% c("A", "B", "C", "D", NA) & - # Drop aggregated rows; only keep provinces - geo_value != "Canada" & - # Drop aggregated industry rows - !str_detect(naics_code, "N") & - # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified; drop these rows - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) -``` - -To use this data with `epipredict`, we need to convert it into `epi_df` format -using [`as_epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `employee_type` and -`naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` -below, and to ensure lag and ahead modifications later on are using the correct -time units. - -```{r convert-to-epidf, eval=F} -statcan_employ_subset <- statcan_employ_subset_input %>% - tsibble::as_tsibble( - index=time_value, - key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) -``` - -```{r data-dim, include=F} -employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") -employ_colcount <- length(names(statcan_employ_subset)) -``` - -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `statcan_employ_subset` with `epipredict`. - -```{r preview-data, include=T} -# Rename for simplicity -employ <- statcan_employ_subset -head(employ) -``` - -In the following sections, we will go over preprocessing the data in the -`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, -and making future predictions. - -## Preprocessing - -We will create a recipe that adds one `ahead` column and 3 `lag` columns. - -```{r make-recipe, include=T} -r <- epi_recipe(employ) %>% - step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months - step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% - step_epi_naomit() -r -``` - -There is one `raw` role which includes our value column `ppl_count`, and two -`key` roles which include our additional keys `employee_type` and -`naics_industry`. Let's take a look at what these additional columns look like. - -```{r view-preprocessed, include=T} -# Display a sample of the preprocessed data -baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) -baked_sample -``` - -## Model fitting and prediction - -### Within recipes framework - -We will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-6$ months, and $t-12$ months. - -```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) -wf_linreg -``` - -Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the employment counts from the last 12 -months of our dataset. - -```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 12) -preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) -# Display a sample of the prediction values -preds %>% sample_n(5) -``` - -Notice that `predict` still returns an `epi_df` with all of the keys that were -present in the original dataset. - -### With canned forecasters - -Even though we aren't working with epidemiological data, canned forecasters -still work as expected, out of the box. We will demonstrate this with the simple -[`flatline_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) -and the direct autoregressive (AR) forecaster -[`arx_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). - -```{r flatline, include=T} -out_fl <- flatline_forecaster( - employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) - -augment(out_fl$epi_workflow, employ) -``` - -```{r arx, include=T} -args = arx_args_list( - lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) - -out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) -out_arx$predictions -``` - -Other changes to the direct AR forecaster, like changing the engine, also work -as expected. - -```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = args) - -out_rf$predictions -``` From 34ecc9635512d8e954dab2a9ffe762b25990fc39 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:30:37 -0700 Subject: [PATCH 009/382] fix doc formatting --- R/data.R | 6 +++++- man/grad_employ_subset.Rd | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/R/data.R b/R/data.R index 3702afc11..c6c0177fb 100644 --- a/R/data.R +++ b/R/data.R @@ -49,7 +49,11 @@ #' \item{med_income_5y}{The median employment income five years after graduation} #' } #' @source This object contains modified data from the following Statistics Canada -#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501}{ +#' Characteristics and median employment income of longitudinal cohorts of postsecondary +#' graduates two and five years after graduation, by educational qualification and +#' field of study (primary groupings) +#' } #' #' Modifications: #' * Only provincial-level geo_values are kept diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index abac4dae9..463ab178c 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -20,7 +20,11 @@ row of measurements.} } \source{ This object contains modified data from the following Statistics Canada -data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501}{ +Characteristics and median employment income of longitudinal cohorts of postsecondary +graduates two and five years after graduation, by educational qualification and +field of study (primary groupings) +} Modifications: \itemize{ From 2f1631d70f6c21d2845f1c33e9fe6823a0f1a8ac Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:52:30 -0700 Subject: [PATCH 010/382] wording changes --- vignettes/panel-data.Rmd | 42 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 71a9c1327..2eed15761 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -20,13 +20,12 @@ knitr::opts_chunk$set( library(epiprocess) library(epipredict) library(dplyr) -library(stringr) library(parsnip) library(recipes) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, -contains cross-sectional measurements of subjects over time. The `epipredict` +contain cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological panel data. A built-in example of this is the [`case_death_rate_subset`]( https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) @@ -41,8 +40,8 @@ head(case_death_rate_subset) https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) format. Despite the stated goal and name of the package, other panel datasets are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters are able to work with any panel -data, as long as it's in `epi_df` format, +`epipredict` framework and direct forecasters can work with any panel data, as +long as it's in `epi_df` format. ```{r employ-stats, include=F} year_start <- min(grad_employ_subset$time_value) @@ -59,8 +58,9 @@ from Statistics Canada. We will be using graduation, by educational qualification and field of study (primary groupings) ](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). + The full dataset contains yearly median employment income two and five years -after graduation, and number of graduates. The data is further stratified by +after graduation, and number of graduates. The data is stratified by variables such as geographic region (Canadian province), field of study, and age group. The year range of the dataset is `r year_start` to `r year_end`, inclusive. The full dataset also contains metadata that describes the @@ -80,8 +80,11 @@ just described: ```{r employ-query, eval=F} library(cansim) +# Get original dataset statcan_grad_employ <- get_cansim("37-10-0115-01") + gemploy <- statcan_grad_employ %>% + # Drop some columns and rename the ones we keep select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", "Field of study", "Gender", "Age group", "Status of student in Canada", "Characteristics after graduation", "Graduate statistics")) %>% @@ -101,11 +104,13 @@ gemploy <- statcan_grad_employ %>% # `Graduate statistics` in the original data. Below we pivot the data # wider so that each unique statistic can have its own column. mutate( + # Recode for easier pivoting grad_stat = recode_factor( grad_stat, `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", `Median employment income five years after graduation` = "med_income_5y"), + # They are originally strings but want ints for conversion to epi_df later time_value = as.integer(time_value) ) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% @@ -137,7 +142,11 @@ using [`as_epi_df`]( with additional keys. In our case, the additional keys are `age_group`, `fos` and `edu_qual`. Note that in the above modifications, we encoded `time_value` as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure -lag and ahead modifications later on are using the correct time units. +lag and ahead modifications later on are using the correct time units. See the +[`epi_df` documentation]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for +a list of all the `type_type`s available. + ```{r convert-to-epidf, eval=F} grad_employ_subset <- gemploy %>% @@ -235,24 +244,25 @@ out_fl <- flatline_forecaster(employ, "med_income_2y", augment(out_fl$epi_workflow, employ) ``` -```{r arx, include=T} +```{r arx-lr, include=T} arx_args <- arx_args_list( - lags = c(0L, 1L, 2L), ahead = 1L, forecast_date = as.Date("2022-08-01")) -out_arx <- arx_forecaster(employ, "med_income_2y", + lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2022-08-01")) + +out_arx_lr <- arx_forecaster(employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), args_list = arx_args) -out_arx$predictions +out_arx_lr$predictions ``` Other changes to the direct AR forecaster, like changing the engine, also work as expected. -```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster( - employ, "med_income_2y", c("med_income_2y", "med_income_5y"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = args) +```{r arx-rf, include=F, warning=F} +out_arx_rf <- arx_forecaster( + employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), + trainer = parsnip::boost_tree(mode = "regression", trees = 20), + args_list = arx_args) -out_rf$predictions +out_arx_rf$predictions ``` From 325f8a2e347bda255d4ebc758498afa61901d2f8 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 2 Aug 2022 00:18:12 -0700 Subject: [PATCH 011/382] wip panel data --- R/data.R | 24 ++++ data-raw/statcan_employ_subset.R | 192 +++++++++++++++++++++++++++++++ data/statcan_employ_subset.rda | Bin 0 -> 254398 bytes man/statcan_employ_subset.Rd | 39 +++++++ vignettes/panel-data.Rmd | 143 +++++++++++++++++++++++ 5 files changed, 398 insertions(+) create mode 100644 data-raw/statcan_employ_subset.R create mode 100644 data/statcan_employ_subset.rda create mode 100644 man/statcan_employ_subset.Rd create mode 100644 vignettes/panel-data.Rmd diff --git a/R/data.R b/R/data.R index 622d1c7d7..5f4bc7528 100644 --- a/R/data.R +++ b/R/data.R @@ -56,3 +56,27 @@ #' \url{https://www.census.gov/data/tables/time-series/demo/popest/2010s-total-puerto-rico-municipios.html}, #' and \url{https://www.census.gov/data/tables/2010/dec/2010-island-areas.html} "state_census" + +#' Subset of Statistics Canada employment numbers by industry and province +#' +#' @format A tibble with 109,388 rows and 6 variables: +#' \describe{ +#' \item{geo_value}{The province in Canada associated with each +#' row of measurements.} +#' \item{time_value}{The time value, in YYYY-MM-01 format, +#' associated with each row of measurements.} +#' \item{ppl_count}{The number of people employed, seasonally +#' adjusted.} +#' \item{employee_type}{The type of employee} +#' \item{naics_industry}{The industry name and associated code +#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} +#' } +#' @source This object contains modified data from the following Statistics Canada +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} +#' +#' Modifications: +#' * From the given Statistics Canada table, the employee counts +#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are +#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} +#' according to Statistics Canada are removed. +"statcan_employ_subset" diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R new file mode 100644 index 000000000..f61120065 --- /dev/null +++ b/data-raw/statcan_employ_subset.R @@ -0,0 +1,192 @@ +library(epipredict) +library(epiprocess) +library(cansim) +library(dplyr) +library(stringr) + +# Run this once +# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data +statcan_employ <- get_cansim("14-10-0201-01") + +# ================== Subset & Filtering ================== +employ <- statcan_employ %>% + select(c( + "REF_DATE", + "GEO", + # "DGUID", + # "UOM", + # "UOM_ID", + # "SCALAR_FACTOR", + # "SCALAR_ID", + # "VECTOR", + # "COORDINATE", + "VALUE", + "STATUS", + # "SYMBOL", + # "TERMINATED", + # "DECIMALS", + # "GeoUID", + # "Hierarchy for GEO", + # "Classification Code for Type of employee", + # "Hierarchy for Type of employee", + "Classification Code for North American Industry Classification System (NAICS)", + # "Hierarchy for North American Industry Classification System (NAICS)", + # "val_norm", + # "Date", + "Type of employee", + "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = "Classification Code for North American Industry Classification System (NAICS)" + ) %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + # https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # .. not available for a specific reference period + # x: suppressed to meet the confidentiality requirements of the Statistics Act + # A data quality: excellent + # B data quality: very good + # C data quality: good + # [blank] or A-D: acceptable or better <- only keep these ones + # E use with caution + # F too unreliable to be published + filter( + status %in% c("A", "B", "C", "D", NA) & # only keep "good" data + !is.na(ppl_count) & + geo_value != "Canada" & # only keep provinces + # N corresponds to aggregates + !str_detect(naics_code, "N") & + # only keep top-level sectors + # https://www.census.gov/programs-surveys/economic-census/guidance/understanding-naics.html + # corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) + +# head(employ) +# statcan_employ_subset <- employ %>% +# tsibble::as_tsibble( +# index=time_value, +# key=c(geo_value, employee_type, naics_industry)) %>% +# as_epi_df(time_type = "yearmonth", as_of="2022-07-28") + +statcan_employ_subset <- employ %>% + tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df( + additional_metadata=c(other_keys=c("employee_type", "naics_industry"))) + +usethis::use_data(statcan_employ_subset, overwrite = TRUE) + +# ================== EDA ================== +length(statcan_employ$REF_DATE) +names(statcan_employ) + +uniq_ref_date <- unique(select(statcan_employ, "REF_DATE")) +uniq_ref_date +min(statcan_employ$REF_DATE) # 2001-01 +max(statcan_employ$REF_DATE) # 2022-05 +# There should be (22-1)*12 + 5 +exp_total_dates <- (22-1)*12+5 +length(uniq_ref_date %>% unlist()) == exp_total_dates # TRUE +# There is a ref date for each month in the date range + +unique(select(statcan_employ, "GEO")) # List of length 14, names of provinces & territories + Canada +statcan_employ %>% group_by(GEO) %>% top_n(n=-1) +# Dissemination Geography Unique Identifier - DGUID. +# https://www12.statcan.gc.ca/census-recensement/2021/ref/dict/az/Definition-eng.cfm?ID=geo055 +# 2016 (year) +# A (administrative) +unique(select(statcan_employ, "DGUID")) +unique(select(statcan_employ, "UOM")) # Persons +unique(select(statcan_employ, "UOM_ID")) # 249 + +# These scalar columns tell us by what factor of 10 to multiply the values +# We get "units" and 0 so we can ignore these columns and +# take the values in VALUE as-is +unique(select(statcan_employ, "SCALAR_FACTOR")) # All "units" +unique(select(statcan_employ, "SCALAR_ID")) # All 0 + +# Time series identifier - ignore +unique(select(statcan_employ, "VECTOR")) + +# Related to dimension, which is not present in this table - ignore +unique(select(statcan_employ, "COORDINATE")) + +# Data value column. Values in units +unique(select(statcan_employ, "VALUE")) +# How many rows have empty values? +# Approx 3/4 of the rows have NA values +statcan_employ %>% + summarise( + VALUE_NA = sum(is.na(VALUE)) / length(VALUE), + VALUE_NOT_NA = sum(!is.na(VALUE)) / length(VALUE), + TOTAL = length(VALUE) + ) + +unique(select(statcan_employ, "STATUS")) +statcan_employ %>% + select(STATUS, VALUE) %>% + group_by(STATUS) %>% + count() + +unique(select(statcan_employ, "SYMBOL")) # All NA +unique(select(statcan_employ, "TERMINATED")) # All NA +unique(select(statcan_employ, "DECIMALS")) # All 0 + +unique(select(statcan_employ, "GeoUID")) +unique(select(statcan_employ, "Hierarchy for GEO")) +statcan_employ %>% + group_by_at(c("GEO", "DGUID", "GeoUID", "Hierarchy for GEO")) %>% + count() +# These 4 columns are redundant. Just keep GEO. + +# The next 4 columns are metadata about the last 2 columns +# ignore these in favour of the descriptive ones +unique(select(statcan_employ, "Classification Code for Type of employee")) # All NA +unique(select(statcan_employ, "Hierarchy for Type of employee")) +unique(select(statcan_employ, "Classification Code for North American Industry Classification System (NAICS)")) +unique(select(statcan_employ, "Hierarchy for North American Industry Classification System (NAICS)")) + +# val_norm and VALUE are the same +unique(select(statcan_employ, "val_norm")) +statcan_employ %>% filter(VALUE != val_norm) %>% count() + +unique(select(statcan_employ, "Date")) +# Each date has a minimum of 7522 data points +statcan_employ %>% group_by(Date) %>% count() %>% ungroup() %>% select(n) %>% min() +# Are there any dates that aren't on the 1st of the month? +statcan_employ %>% filter(format(as.Date(Date), "%d") != "01") %>% nrow() # 0 + +unique(select(statcan_employ, "Type of employee")) # 3 types +unique(select(statcan_employ, "North American Industry Classification System (NAICS)")) # lots + +# REF_DATE looks like YYYY-mm +# Date looks like YYYY-mm-dd +# Check that the truncated Date to REF_DATE format always matches the REF_DATE +statcan_employ %>% + select(REF_DATE, Date) %>% + mutate(Date_trunc = format(as.Date(Date), "%Y-%m")) %>% + filter(REF_DATE != Date_trunc) # all empty! good + +# This is an example plot +# library(ggplot2) +# theme_set(theme_bw()) +# +# employ <- statcan_employ_subset %>% +# dplyr::filter( +# geo_value %in% c("British Columbia", "Ontario") & +# naics_industry == "Real estate and rental and leasing [53]") %>% +# dplyr::arrange(geo_value, time_value) +# +# employ %>% ggplot(aes(x = time_value, y = ppl_count, color=employee_type)) + +# geom_line() + +# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + +# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + +# labs(x = "Date", y = "Number employed") diff --git a/data/statcan_employ_subset.rda b/data/statcan_employ_subset.rda new file mode 100644 index 0000000000000000000000000000000000000000..46c0ea6c97bcab8855bc3a0b622c361c002e4eea GIT binary patch literal 254398 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

    PpWp4;ndq@yrC0n-A2k&b|WNai^ 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

  • q#!|5lLmT( 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 + %\VignetteIndexEntry{Using epipredict on panel data from other contexts} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include = F} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + warning = FALSE, + message = FALSE +) +``` + +```{r load-data, include = F} +# TODO: temp - remove me when I figure out how to run this rmd without loading +# perhaps need to commit statcan_employ_subset.rda first? +devtools::load_all() +``` + +```{r libraries} +library(epiprocess) +library(epipredict) +library(dplyr) +library(stringr) +library(parsnip) +``` + +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological data. However, other datasets with similar structures are also valid candidates for `epipredict` functionality. + +```{r employ-stats, include = F} +date_format <- "%B %Y" +date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) +date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) +uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +``` + +## Example panel data overview + +In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). The full dataset contains monthly employment counts from `r date_start` to `r date_end`, and presents employment data stratified by geographic region, [NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), and employee type. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the [NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. +* Only keep province-level geographic region (the full data also has "Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we just described: +```{r employ-query, eval=F} +library(cansim) + +statcan_employ <- get_cansim("14-10-0201-01") + +statcan_employ_subset_input <- statcan_employ %>% + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", + "Classification Code for North American Industry Classification System (NAICS)", + "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = "Classification Code for North American Industry Classification System (NAICS)") %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + filter( + # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # A, B, C, D, NA indicate "good" or better data quality + status %in% c("A", "B", "C", "D", NA) & + # Drop aggregated rows; only keep provinces + geo_value != "Canada" & + # Drop aggregated industry rows + !str_detect(naics_code, "N") & + # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified; drop these rows + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) +``` + +To use this data with `epipredict`, we need to convert it into `epi_df` format using `as_epi_df` with additional keys. In our case, the additional keys are `employee_type` and `naics_industry`. Note that in the above modifications, we encoded `time_value` as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, and to ensure lag and ahead modifications later on are using the correct time units. + +```{r convert-to-epidf, eval=F} +statcan_employ_subset <- statcan_employ_subset_input %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df(time_type = "yearmonth", as_of="2022-07-22") +``` + +```{r data-dim, include=F} +employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") +employ_colcount <- length(names(statcan_employ_subset)) +``` + +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are ready to use `statcan_employ_subset` with `epipredict`. + +```{r preview-data, include=T} +head(statcan_employ_subset) +``` + +In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, fitting 3 types of models from the `parsnip` package, and making future predictions. + +## Preprocessing + +We will create a recipe that adds one `ahead` column and 3 `lag` columns. + +```{r make-recipe, include = T} +r <- epi_recipe(statcan_employ_subset) %>% + step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months + step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_naomit() +r +``` + +There is one `raw` role which includes our value column `ppl_count`, and two `key` roles which include our additional keys `employee_type` and `naics_industry`. Let's take a look at what these additional columns look like. + +```{r view-preprocessed, include = T} +latest <- statcan_employ_subset %>% filter(time_value >= max(time_value) - 12) +# Display a sample of the preprocessed data +r %>% prep() %>% bake(new_data = latest) %>% sample_n(5) +``` + +## Model fitting and prediction + +First we will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the above `epi_recipe` to fit a linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. +```{r linearreg-wf, include = T} +wf_linreg <- epi_workflow(r, linear_reg()) %>% fit(statcan_employ_subset) +wf_linreg + +preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) +# Display a sample of the prediction values +preds %>% sample_n(5) +``` + + + \ No newline at end of file From 29d567c5ead18c5c50397b6067afe42e71c87fc1 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Wed, 3 Aug 2022 11:46:16 -0700 Subject: [PATCH 012/382] update epi_keys_mold and tests to handle additional keys --- R/epi_keys.R | 3 ++- tests/testthat/test-epi_keys.R | 22 +++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/R/epi_keys.R b/R/epi_keys.R index b82f625dd..8dc1311d8 100644 --- a/R/epi_keys.R +++ b/R/epi_keys.R @@ -29,7 +29,8 @@ epi_keys.recipe <- function(x) { epi_keys_mold <- function(mold) { keys <- c("time_value", "geo_value", "key") molded_names <- names(mold$extras$roles) + mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unname(unlist(mold_keys)) + unlist(unname(mold_keys)) } diff --git a/tests/testthat/test-epi_keys.R b/tests/testthat/test-epi_keys.R index f15ee197f..74351ff3c 100644 --- a/tests/testthat/test-epi_keys.R +++ b/tests/testthat/test-epi_keys.R @@ -32,23 +32,19 @@ test_that("epi_keys_mold extracts time_value and geo_value, but not raw",{ }) test_that("epi_keys_mold extracts additional keys when they are present", { - my_data <- tibble::tibble( - geo_value = rep(c("ca", "fl", "pa"), each = 3), - time_value = rep(seq(as.Date("2020-06-01"), as.Date("2020-06-03"), - by = "day"), length.out = length(geo_value)), - pol = rep(c("blue", "swing", "swing"), each = 3), # extra key - state = rep(c("ca", "fl", "pa"), each = 3), # extra key - value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) - ) %>% - epiprocess::as_epi_df(additional_metadata = list(other_keys = c("state", "pol"))) - + my_data <- case_death_rate_subset %>% + sample_n(6) %>% + tsibble::as_tsibble() %>% # add 2 extra keys + mutate(state = rep("MA", 6), pol = rep("blue", 6)) %>% + as_epi_df(additional_metadata = list(other_keys=c("state", "pol"))) + my_recipe <- epi_recipe(my_data) %>% - step_epi_ahead(value , ahead = 7) %>% + step_epi_ahead(death_rate , ahead = 7) %>% step_epi_naomit() my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) - expect_setequal( - epi_keys_mold(my_workflow$pre$mold), + expect_equal( + epi_keys_mold(my_workflow$pre$mold), c("time_value", "geo_value", "state", "pol")) }) From b30b8387def35aec6fab5db2c34055b098b74a22 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 17:13:23 -0700 Subject: [PATCH 013/382] put back files from rebase --- R/epi_keys.R | 3 +-- tests/testthat/test-epi_keys.R | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/R/epi_keys.R b/R/epi_keys.R index 8dc1311d8..b82f625dd 100644 --- a/R/epi_keys.R +++ b/R/epi_keys.R @@ -29,8 +29,7 @@ epi_keys.recipe <- function(x) { epi_keys_mold <- function(mold) { keys <- c("time_value", "geo_value", "key") molded_names <- names(mold$extras$roles) - mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unlist(unname(mold_keys)) + unname(unlist(mold_keys)) } diff --git a/tests/testthat/test-epi_keys.R b/tests/testthat/test-epi_keys.R index 74351ff3c..f15ee197f 100644 --- a/tests/testthat/test-epi_keys.R +++ b/tests/testthat/test-epi_keys.R @@ -32,19 +32,23 @@ test_that("epi_keys_mold extracts time_value and geo_value, but not raw",{ }) test_that("epi_keys_mold extracts additional keys when they are present", { - my_data <- case_death_rate_subset %>% - sample_n(6) %>% - tsibble::as_tsibble() %>% # add 2 extra keys - mutate(state = rep("MA", 6), pol = rep("blue", 6)) %>% - as_epi_df(additional_metadata = list(other_keys=c("state", "pol"))) - + my_data <- tibble::tibble( + geo_value = rep(c("ca", "fl", "pa"), each = 3), + time_value = rep(seq(as.Date("2020-06-01"), as.Date("2020-06-03"), + by = "day"), length.out = length(geo_value)), + pol = rep(c("blue", "swing", "swing"), each = 3), # extra key + state = rep(c("ca", "fl", "pa"), each = 3), # extra key + value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) + ) %>% + epiprocess::as_epi_df(additional_metadata = list(other_keys = c("state", "pol"))) + my_recipe <- epi_recipe(my_data) %>% - step_epi_ahead(death_rate , ahead = 7) %>% + step_epi_ahead(value , ahead = 7) %>% step_epi_naomit() my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) - expect_equal( - epi_keys_mold(my_workflow$pre$mold), + expect_setequal( + epi_keys_mold(my_workflow$pre$mold), c("time_value", "geo_value", "state", "pol")) }) From 340fe124441b82bdcf7cbdb5c0ae86d399c56f0d Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 17:14:38 -0700 Subject: [PATCH 014/382] fix data format --- data-raw/statcan_employ_subset.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R index f61120065..055d2fe36 100644 --- a/data-raw/statcan_employ_subset.R +++ b/data-raw/statcan_employ_subset.R @@ -80,7 +80,7 @@ employ <- statcan_employ %>% statcan_employ_subset <- employ %>% tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% as_epi_df( - additional_metadata=c(other_keys=c("employee_type", "naics_industry"))) + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) usethis::use_data(statcan_employ_subset, overwrite = TRUE) From 25674a58ecc10eed89cb8addda4935a672443ab3 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 11 Aug 2022 20:02:41 -0700 Subject: [PATCH 015/382] wip vignette --- vignettes/panel-data.Rmd | 138 ++++++++++++++++++++++++++++++--------- 1 file changed, 108 insertions(+), 30 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index d6a9c255a..ca836de16 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -1,13 +1,13 @@ --- -title: "Using epipredict on panel data from other contexts" +title: "Using epipredict on non-epidemic panel data" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{Using epipredict on panel data from other contexts} + %\VignetteIndexEntry{Using epipredict on non-epidemic panel data} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- -```{r setup, include = F} +```{r setup, include=F} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", @@ -16,23 +16,22 @@ knitr::opts_chunk$set( ) ``` -```{r load-data, include = F} -# TODO: temp - remove me when I figure out how to run this rmd without loading -# perhaps need to commit statcan_employ_subset.rda first? -devtools::load_all() -``` - ```{r libraries} library(epiprocess) library(epipredict) library(dplyr) library(stringr) library(parsnip) +library(recipes) ``` -[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological data. However, other datasets with similar structures are also valid candidates for `epipredict` functionality. +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, +contains cross-sectional measurements of subjects over time. The `epipredict` +package is most suitable for running forecasters on epidemiological data. +However, other datasets with similar structures are also valid candidates for +`epipredict` functionality. -```{r employ-stats, include = F} +```{r employ-stats, include=F} date_format <- "%B %Y" date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) @@ -41,9 +40,19 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps ## Example panel data overview -In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). The full dataset contains monthly employment counts from `r date_start` to `r date_end`, and presents employment data stratified by geographic region, [NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), and employee type. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: - -* Only keep level 1 industries (2-digit codes) in the [NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. +In this vignette, we will demonstrate using `epipredict` with employment data from +Statistics Canada. We will be using +[Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to `r date_end`, +and presents employment data stratified by geographic region, +[NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the quality +of data collected. For demonstration purposes, we make the following modifications to +get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the +[NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +and remove aggregated industry codes. * Only keep province-level geographic region (the full data also has "Canada" as a region) * Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column @@ -84,14 +93,19 @@ statcan_employ_subset_input <- statcan_employ %>% mutate(naics_industry = factor(naics_industry)) ``` -To use this data with `epipredict`, we need to convert it into `epi_df` format using `as_epi_df` with additional keys. In our case, the additional keys are `employee_type` and `naics_industry`. Note that in the above modifications, we encoded `time_value` as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, and to ensure lag and ahead modifications later on are using the correct time units. +To use this data with `epipredict`, we need to convert it into `epi_df` format using +`as_epi_df` with additional keys. In our case, the additional keys are `employee_type` +and `naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, +and to ensure lag and ahead modifications later on are using the correct time units. ```{r convert-to-epidf, eval=F} statcan_employ_subset <- statcan_employ_subset_input %>% tsibble::as_tsibble( index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df(time_type = "yearmonth", as_of="2022-07-22") + as_epi_df( + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) ``` ```{r data-dim, include=F} @@ -99,45 +113,109 @@ employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") employ_colcount <- length(names(statcan_employ_subset)) ``` -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are ready to use `statcan_employ_subset` with `epipredict`. +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are +ready to use `statcan_employ_subset` with `epipredict`. ```{r preview-data, include=T} -head(statcan_employ_subset) +# Rename for simplicity +employ <- statcan_employ_subset +head(employ) ``` -In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, fitting 3 types of models from the `parsnip` package, and making future predictions. +In the following sections, we will go over preprocessing the data in the `epi_recipe` +framework, fitting 3 types of models from the `parsnip` package, and making future +predictions. ## Preprocessing We will create a recipe that adds one `ahead` column and 3 `lag` columns. -```{r make-recipe, include = T} -r <- epi_recipe(statcan_employ_subset) %>% +```{r make-recipe, include=T} +r <- epi_recipe(employ) %>% step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% step_epi_naomit() r ``` -There is one `raw` role which includes our value column `ppl_count`, and two `key` roles which include our additional keys `employee_type` and `naics_industry`. Let's take a look at what these additional columns look like. +There is one `raw` role which includes our value column `ppl_count`, and two `key` +roles which include our additional keys `employee_type` and `naics_industry`. Let's +take a look at what these additional columns look like. -```{r view-preprocessed, include = T} -latest <- statcan_employ_subset %>% filter(time_value >= max(time_value) - 12) +```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -r %>% prep() %>% bake(new_data = latest) %>% sample_n(5) +baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) +baked_sample ``` ## Model fitting and prediction -First we will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the above `epi_recipe` to fit a linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. -```{r linearreg-wf, include = T} -wf_linreg <- epi_workflow(r, linear_reg()) %>% fit(statcan_employ_subset) +### With direct forecasters + +Even though we aren't working with epidemiological data, the `arx_epi_forecaster` +still works out of the box. And specifying `args_list` still works in the same way. + +```{r arx-epi, include=T, warning=F} +demo_args_list = arx_args_list(lags = c(0L, 6L, 12L), ahead = 6L) + +out_lr <- arx_epi_forecaster( + employ, + outcome = "ppl_count", + predictors = c("ppl_count"), + args_list = demo_args_list) + +out_lr$predictions +``` + +Other changes to the forecaster, like changing the engine, also work as expected. + +```{r arx-epi-rf, include=T, warning=F} +out_rf <- arx_epi_forecaster( + employ, + outcome = "ppl_count", + predictors = c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = demo_args_list) + +out_rf$predictions +``` + +### Within recipes framework + +First we will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the above `epi_recipe` to fit an autoregressive +linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. + +```{r linearreg-wf, include=T} +wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg +``` +Now that we have our workflow, we can generate predictions from a subset of our data. +For this demo, we will predict the employment counts from the last 12 months of our dataset. + +```{r linearreg-predict, include=T} +latest <- employ %>% filter(time_value >= max(time_value) - 15) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values preds %>% sample_n(5) ``` - - \ No newline at end of file +Notice that `predict` returns an `epi_df` with all of the keys that were present in the original dataset. + +```{r plot-pred, include=F} +# library(ggplot2) +# joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) + +# joined %>% filter(!is.na(.pred)) %>% select(time_value) %>% unique() +# joined %>% dplyr::filter( +# geo_value %in% c("British Columbia", "Ontario") & +# naics_industry == "Real estate and rental and leasing [53]" & +# employee_type == "All employees") %>% +# ggplot() + +# geom_line(aes(x = time_value, y = ppl_count)) + +# geom_line(aes(x = time_value, y = preds)) + +# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + +# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + +# labs(x = "Date", y = "Number employed") +``` From 27f13875a3dff1e466c467154c9a167b68bcb252 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Mon, 15 Aug 2022 21:12:12 -0700 Subject: [PATCH 016/382] updates to vignette --- vignettes/panel-data.Rmd | 178 ++++++++++++++++++++++++--------------- 1 file changed, 109 insertions(+), 69 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index ca836de16..104f0dcce 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -27,9 +27,22 @@ library(recipes) [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, contains cross-sectional measurements of subjects over time. The `epipredict` -package is most suitable for running forecasters on epidemiological data. -However, other datasets with similar structures are also valid candidates for -`epipredict` functionality. +package is most suitable for running forecasters on epidemiological panel data. +A built-in example of this is the [`case_death_rate_subset`]( + https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) +dataset, which contains daily state-wise measures of `case_rate` and +`death_rate` for COVID-19 in 2021: + +```{r epi-panel-ex, include=T} +head(case_death_rate_subset) +``` + +`epipredict` functions work with data in [`epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +format. Despite the stated goal and name of the package, other panel datasets +are also valid candidates for `epipredict` functionality. Specifically, the +`epipredict` framework and direct forecasters are able to work with any panel +data, as long as it's in `epi_df` format, ```{r employ-stats, include=F} date_format <- "%B %Y" @@ -40,33 +53,47 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps ## Example panel data overview -In this vignette, we will demonstrate using `epipredict` with employment data from -Statistics Canada. We will be using -[Table 14-10-0220-01: Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to `r date_end`, -and presents employment data stratified by geographic region, -[NAICS industries](https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the quality -of data collected. For demonstration purposes, we make the following modifications to -get a subset of the full dataset: +In this vignette, we will demonstrate using `epipredict` with employment data +from Statistics Canada. We will be using +[ + Table 14-10-0220-01: Employment and average weekly earnings + (including \overtime) for all employees by industry, monthly, + seasonally adjusted, Canada +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to +`r date_end`, and presents employment data stratified by geographic region +on the Canadian province level, +[NAICS industries]( + https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the +quality of data collected. For demonstration purposes, we make the following +modifications to get a subset of the full dataset: * Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy](https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +[NAICS hierarchy]( + https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) and remove aggregated industry codes. -* Only keep province-level geographic region (the full data also has "Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`](https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Only keep provincial-level geographic region (the full data also has +"Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] +(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we +just described: -Below is the query for obtaining the full data and code for subsetting it as we just described: ```{r employ-query, eval=F} library(cansim) statcan_employ <- get_cansim("14-10-0201-01") +# for readability; this string is very long +naics_code <- + "Classification Code for North American Industry Classification System (NAICS)" + statcan_employ_subset_input <- statcan_employ %>% select(c( "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - "Classification Code for North American Industry Classification System (NAICS)", - "North American Industry Classification System (NAICS)")) %>% + naics_code, "North American Industry Classification System (NAICS)")) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -74,7 +101,7 @@ statcan_employ_subset_input <- statcan_employ %>% "status" = "STATUS", "employee_type" = "Type of employee", "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = "Classification Code for North American Industry Classification System (NAICS)") %>% + "naics_code" = naics_code) %>% mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% filter( # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol @@ -93,11 +120,14 @@ statcan_employ_subset_input <- statcan_employ %>% mutate(naics_industry = factor(naics_industry)) ``` -To use this data with `epipredict`, we need to convert it into `epi_df` format using -`as_epi_df` with additional keys. In our case, the additional keys are `employee_type` -and `naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` below, -and to ensure lag and ahead modifications later on are using the correct time units. +To use this data with `epipredict`, we need to convert it into `epi_df` format +using [`as_epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +with additional keys. In our case, the additional keys are `employee_type` and +`naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` +below, and to ensure lag and ahead modifications later on are using the correct +time units. ```{r convert-to-epidf, eval=F} statcan_employ_subset <- statcan_employ_subset_input %>% @@ -113,8 +143,8 @@ employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") employ_colcount <- length(names(statcan_employ_subset)) ``` -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, we are -ready to use `statcan_employ_subset` with `epipredict`. +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, +we are ready to use `statcan_employ_subset` with `epipredict`. ```{r preview-data, include=T} # Rename for simplicity @@ -122,9 +152,9 @@ employ <- statcan_employ_subset head(employ) ``` -In the following sections, we will go over preprocessing the data in the `epi_recipe` -framework, fitting 3 types of models from the `parsnip` package, and making future -predictions. +In the following sections, we will go over preprocessing the data in the +`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, +and making future predictions. ## Preprocessing @@ -138,9 +168,9 @@ r <- epi_recipe(employ) %>% r ``` -There is one `raw` role which includes our value column `ppl_count`, and two `key` -roles which include our additional keys `employee_type` and `naics_industry`. Let's -take a look at what these additional columns look like. +There is one `raw` role which includes our value column `ppl_count`, and two +`key` roles which include our additional keys `employee_type` and +`naics_industry`. Let's take a look at what these additional columns look like. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data @@ -150,60 +180,34 @@ baked_sample ## Model fitting and prediction -### With direct forecasters - -Even though we aren't working with epidemiological data, the `arx_epi_forecaster` -still works out of the box. And specifying `args_list` still works in the same way. - -```{r arx-epi, include=T, warning=F} -demo_args_list = arx_args_list(lags = c(0L, 6L, 12L), ahead = 6L) - -out_lr <- arx_epi_forecaster( - employ, - outcome = "ppl_count", - predictors = c("ppl_count"), - args_list = demo_args_list) - -out_lr$predictions -``` - -Other changes to the forecaster, like changing the engine, also work as expected. - -```{r arx-epi-rf, include=T, warning=F} -out_rf <- arx_epi_forecaster( - employ, - outcome = "ppl_count", - predictors = c("ppl_count"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = demo_args_list) - -out_rf$predictions -``` - ### Within recipes framework -First we will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the above `epi_recipe` to fit an autoregressive -linear model using lags at time $t$ (current), $t-6$ months, and $t-12$ months. +We will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section to fit an autoregressive linear model using lags at +time $t$ (current), $t-6$ months, and $t-12$ months. ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg ``` -Now that we have our workflow, we can generate predictions from a subset of our data. -For this demo, we will predict the employment counts from the last 12 months of our dataset. +Now that we have our workflow, we can generate predictions from a subset of our +data. For this demo, we will predict the employment counts from the last 12 +months of our dataset. ```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 15) +latest <- employ %>% filter(time_value >= max(time_value) - 12) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values preds %>% sample_n(5) ``` -Notice that `predict` returns an `epi_df` with all of the keys that were present in the original dataset. +Notice that `predict` still returns an `epi_df` with all of the keys that were +present in the original dataset. ```{r plot-pred, include=F} +# this doesn't work. don't include # library(ggplot2) # joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) @@ -219,3 +223,39 @@ Notice that `predict` returns an `epi_df` with all of the keys that were present # scale_x_date(minor_breaks = "month", date_labels = "%b %y") + # labs(x = "Date", y = "Number employed") ``` + +### With canned forecasters + +Even though we aren't working with epidemiological data, canned forecasters +still work as expected, out of the box. We will demonstrate this with the simple +[`flatline_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) +and the direct autoregressive (AR) forecaster +[`arx_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). + +```{r flatline, include=T} +out_fl <- flatline_forecaster( + employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) + +augment(out_fl$epi_workflow, employ) +``` + +```{r arx, include=T} +args = arx_args_list( + lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) + +out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) +out_arx$predictions +``` + +Other changes to the direct AR forecaster, like changing the engine, also work +as expected. + +```{r arx-epi-rf, include=F, warning=F} +out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = args) + +out_rf$predictions +``` From 2a2c90302906743e20a4d757ede676ff1f463196 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:17:42 -0700 Subject: [PATCH 017/382] use a better dataset --- R/data.R | 25 +++ data-raw/statcan_grademploy_subset.R | 203 ++++++++++++++++++++++ data/grad_employ_subset.rda | Bin 0 -> 39430 bytes man/flatline.Rd | 4 +- man/grad_employ_subset.Rd | 40 +++++ vignettes/panel-data-old.Rmd | 243 +++++++++++++++++++++++++++ vignettes/panel-data.Rmd | 181 ++++++++++---------- 7 files changed, 601 insertions(+), 95 deletions(-) create mode 100644 data-raw/statcan_grademploy_subset.R create mode 100644 data/grad_employ_subset.rda create mode 100644 man/grad_employ_subset.Rd create mode 100644 vignettes/panel-data-old.Rmd diff --git a/R/data.R b/R/data.R index 5f4bc7528..aac4e378a 100644 --- a/R/data.R +++ b/R/data.R @@ -80,3 +80,28 @@ #' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} #' according to Statistics Canada are removed. "statcan_employ_subset" + +#' Subset of Statistics Canada median employment income for postsecondary graduates +#' +#' @format A tibble with 10193 rows and 8 variables: +#' \describe{ +#' \item{geo_value}{The province in Canada associated with each +#' row of measurements.} +#' \item{time_value}{The time value, a year integer in YYYY format} +#' \item{edu_qual}{The education qualification} +#' \item{fos}{The field of study} +#' \item{age_group}{The age group; either 15 to 34 or 35 to 64} +#' \item{num_graduates}{The number of graduates for the given row of characteristics} +#' \item{med_income_2y}{The median employment income two years after graduation} +#' \item{med_income_5y}{The median employment income five years after graduation} +#' } +#' @source This object contains modified data from the following Statistics Canada +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +#' +#' Modifications: +#' * Only provincial-level geo_values are kept +#' * Only age group, field of study, and educational qualification are kept as +#' covariates. For the remaining covariates, we keep aggregated values and +#' drop the level-specific rows. +#' * No modifications were made to the time range of the data +"grad_employ_subset" diff --git a/data-raw/statcan_grademploy_subset.R b/data-raw/statcan_grademploy_subset.R new file mode 100644 index 000000000..70cb6d678 --- /dev/null +++ b/data-raw/statcan_grademploy_subset.R @@ -0,0 +1,203 @@ +library(epipredict) +library(epiprocess) +library(cansim) +library(dplyr) +library(stringr) +library(tidyr) + +# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501 +statcan_grad_employ <- get_cansim("37-10-0115-01") + +gemploy <- statcan_grad_employ %>% + select(c( + "REF_DATE", + "GEO", + # "DGUID", + # "UOM", + # "UOM_ID", + # "SCALAR_FACTOR", + # "SCALAR_ID", + # "VECTOR", + # "COORDINATE", + "VALUE", + "STATUS", + # "SYMBOL", + # "TERMINATED", + # "DECIMALS", + # "GeoUID", + # "Hierarchy for GEO", + # "Classification Code for Educational qualification", + # "Hierarchy for Educational qualification", + # "Classification Code for Field of study", + # "Hierarchy for Field of study", + # "Classification Code for Gender", + # "Hierarchy for Gender", + # "Classification Code for Age group", + # "Hierarchy for Age group", + # "Classification Code for Status of student in Canada", + # "Hierarchy for Status of student in Canada", + # "Classification Code for Characteristics after graduation", + # "Hierarchy for Characteristics after graduation", + # "Classification Code for Graduate statistics", + # "Hierarchy for Graduate statistics", + # "val_norm", + # "Date", + "Educational qualification", + "Field of study", + "Gender", + "Age group", + "Status of student in Canada", + "Characteristics after graduation", + "Graduate statistics")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "value" = "VALUE", + "status" = "STATUS", + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics") %>% + mutate( + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y"), + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% + filter( + # Drop aggregates for some columns + geo_value != "Canada" & + age_group != "15 to 64 years" & + fos != "Total, field of study" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + select(-c(status, gender, student_status, grad_charac)) + +# gemploy$time_value %>% unique() +# class(gemploy$fos) +# class(gemploy$edu_qual) +# class(gemploy$age_group) +# head(gemploy) +nrow(gemploy) +ncol(gemploy) + +gemploy$grad_charac %>% unique() +gemploy %>% group_by(grad_charac) %>% slice(1) + +grad_employ_subset <- gemploy %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, age_group, fos, edu_qual)) %>% + as_epi_df( + geo_type = "custom", time_type = "year", as_of = "2022-07-19", + additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) +usethis::use_data(grad_employ_subset, overwrite = TRUE) + +# ================== EDA ================== + +statcan_grad_employ %>% + group_by(`Characteristics after graduation`) %>% + # filter(`Graduate statistics` == "Median employment income two years after graduation") %>% + filter(`Graduate statistics` == "Number of graduates") %>% + slice(1) %>% + select(`Characteristics after graduation`) + +names(statcan_grad_employ) +unique(statcan_grad_employ$REF_DATE) +# [1] "2010" "2011" "2012" "2013" "2014" "2015" + +unique(statcan_grad_employ$GEO) +# [1] "Canada" "Newfoundland and Labrador" +# [3] "Prince Edward Island" "Nova Scotia" +# [5] "New Brunswick" "Quebec" +# [7] "Ontario" "Manitoba" +# [9] "Saskatchewan" "Alberta" +# [11] "British Columbia" "Territories" +unique(statcan_grad_employ$DGUID) + +unique(statcan_grad_employ$UOM) +# [1] "Number" "2020 constant dollars" +statcan_grad_employ %>% + group_by(UOM, `Graduate statistics`) %>% + select(UOM, `Graduate statistics`, VALUE) %>% + slice(1) +unique(statcan_grad_employ$UOM_ID) + +unique(statcan_grad_employ$SCALAR_FACTOR) # "units" +unique(statcan_grad_employ$SCALAR_ID) # "0" + +length(unique(statcan_grad_employ$VECTOR)) +length(unique(statcan_grad_employ$COORDINATE)) + +length(unique(statcan_grad_employ$VALUE)) +unique(statcan_grad_employ$STATUS) +# [1] NA ".." "x" + +unique(statcan_grad_employ$SYMBOL) +# [1] NA + +unique(statcan_grad_employ$TERMINATED) +# [1] NA + +unique(statcan_grad_employ$DECIMALS) +# [1] "0" + +unique(statcan_grad_employ$GeoUID) +# redundant with geo + +unique(statcan_grad_employ$`Hierarchy for GEO`) +# redundant with geo + +unique(statcan_grad_employ$`Classification Code for Educational qualification`) # NA +unique(statcan_grad_employ$`Hierarchy for Educational qualification`) + +unique(statcan_grad_employ$`Classification Code for Field of study`) +unique(statcan_grad_employ$`Hierarchy for Field of study`) + +unique(statcan_grad_employ$`Classification Code for Gender`) # NA +unique(statcan_grad_employ$`Hierarchy for Gender`) + +unique(statcan_grad_employ$`Classification Code for Age group`) # NA +unique(statcan_grad_employ$`Hierarchy for Age group`) + +unique(statcan_grad_employ$`Classification Code for Status of student in Canada`) # NA +unique(statcan_grad_employ$`Hierarchy for Status of student in Canada`) + +unique(statcan_grad_employ$`Classification Code for Characteristics after graduation`) # NA +unique(statcan_grad_employ$`Hierarchy for Characteristics after graduation`) + +unique(statcan_grad_employ$`Classification Code for Graduate statistics`) # NA +unique(statcan_grad_employ$`Hierarchy for Graduate statistics`) + +length(unique(statcan_grad_employ$`val_norm`)) +statcan_grad_employ %>% filter(val_norm != VALUE) %>% nrow() #0 + +unique(statcan_grad_employ$`Date`) +# [1] "2010-07-01" "2011-07-01" "2012-07-01" "2013-07-01" "2014-07-01" +# [6] "2015-07-01" + +unique(statcan_grad_employ$`Educational qualification`) # 32 levels +unique(statcan_grad_employ$`Field of study`) # 60 levels +unique(statcan_grad_employ$`Gender`) +unique(statcan_grad_employ$`Age group`) +unique(statcan_grad_employ$`Status of student in Canada`) +unique(statcan_grad_employ$`Characteristics after graduation`) +unique(statcan_grad_employ$`Graduate statistics`) diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda new file mode 100644 index 0000000000000000000000000000000000000000..f2e52ce21eab825b6c2e379a5ed15f84b52d45ef GIT binary patch literal 39430 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 literal 0 HcmV?d00001 diff --git a/man/flatline.Rd b/man/flatline.Rd index a396cfeb9..a30272456 100644 --- a/man/flatline.Rd +++ b/man/flatline.Rd @@ -11,9 +11,7 @@ flatline(formula, data) would actually be the observed time series shifted forward by the forecast horizon. The right hand side must contain any keys (locations) for the panel data separated by plus. The observed time series must come last. -For example - -\if{html}{\out{

    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) +For example\if{html}{\out{
    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) }\if{html}{\out{
    }} Note that this function doesn't DO the shifting, that has to be done diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd new file mode 100644 index 000000000..abac4dae9 --- /dev/null +++ b/man/grad_employ_subset.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{grad_employ_subset} +\alias{grad_employ_subset} +\title{Subset of Statistics Canada median employment income for postsecondary graduates} +\format{ +A tibble with 10193 rows and 8 variables: +\describe{ +\item{geo_value}{The province in Canada associated with each +row of measurements.} +\item{time_value}{The time value, a year integer in YYYY format} +\item{edu_qual}{The education qualification} +\item{fos}{The field of study} +\item{age_group}{The age group; either 15 to 34 or 35 to 64} +\item{num_graduates}{The number of graduates for the given row of characteristics} +\item{med_income_2y}{The median employment income two years after graduation} +\item{med_income_5y}{The median employment income five years after graduation} +} +} +\source{ +This object contains modified data from the following Statistics Canada +data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} + +Modifications: +\itemize{ +\item Only provincial-level geo_values are kept +\item Only age group, field of study, and educational qualification are kept as +covariates. For the remaining covariates, we keep aggregated values and +drop the level-specific rows. +\item No modifications were made to the time range of the data +} +} +\usage{ +grad_employ_subset +} +\description{ +Subset of Statistics Canada median employment income for postsecondary graduates +} +\keyword{datasets} diff --git a/vignettes/panel-data-old.Rmd b/vignettes/panel-data-old.Rmd new file mode 100644 index 000000000..24c48ed6a --- /dev/null +++ b/vignettes/panel-data-old.Rmd @@ -0,0 +1,243 @@ +--- +title: "Using epipredict on non-epidemic panel data (old)" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Using epipredict on non-epidemic panel data (old)} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=F} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + warning = FALSE, + message = FALSE +) +``` + +```{r libraries} +library(epiprocess) +library(epipredict) +library(dplyr) +library(stringr) +library(parsnip) +library(recipes) +``` + +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, +contains cross-sectional measurements of subjects over time. The `epipredict` +package is most suitable for running forecasters on epidemiological panel data. +A built-in example of this is the [`case_death_rate_subset`]( + https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) +dataset, which contains daily state-wise measures of `case_rate` and +`death_rate` for COVID-19 in 2021: + +```{r epi-panel-ex, include=T} +head(case_death_rate_subset) +``` + +`epipredict` functions work with data in [`epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +format. Despite the stated goal and name of the package, other panel datasets +are also valid candidates for `epipredict` functionality. Specifically, the +`epipredict` framework and direct forecasters are able to work with any panel +data, as long as it's in `epi_df` format, + +```{r employ-stats, include=F} +date_format <- "%B %Y" +date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) +date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) +uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +``` + +## Example panel data overview + +In this vignette, we will demonstrate using `epipredict` with employment data +from Statistics Canada. We will be using +[ + Table 14-10-0220-01: Employment and average weekly earnings + (including \overtime) for all employees by industry, monthly, + seasonally adjusted, Canada +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). +The full dataset contains monthly employment counts from `r date_start` to +`r date_end`, and presents employment data stratified by geographic region +on the Canadian province level, +[NAICS industries]( + https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), +and employee type. The full dataset also contains metadata that describes the +quality of data collected. For demonstration purposes, we make the following +modifications to get a subset of the full dataset: + +* Only keep level 1 industries (2-digit codes) in the +[NAICS hierarchy]( + https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) +and remove aggregated industry codes. +* Only keep provincial-level geographic region (the full data also has +"Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] +(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column + +Below is the query for obtaining the full data and code for subsetting it as we +just described: + +```{r employ-query, eval=F} +library(cansim) + +statcan_employ <- get_cansim("14-10-0201-01") + +# for readability; this string is very long +naics_code <- + "Classification Code for North American Industry Classification System (NAICS)" + +statcan_employ_subset_input <- statcan_employ %>% + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", + naics_code, "North American Industry Classification System (NAICS)")) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "ppl_count" = "VALUE", + "status" = "STATUS", + "employee_type" = "Type of employee", + "naics_industry" = "North American Industry Classification System (NAICS)", + "naics_code" = naics_code) %>% + mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + filter( + # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol + # A, B, C, D, NA indicate "good" or better data quality + status %in% c("A", "B", "C", "D", NA) & + # Drop aggregated rows; only keep provinces + geo_value != "Canada" & + # Drop aggregated industry rows + !str_detect(naics_code, "N") & + # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] + str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & + # [00] corresponds to unclassified; drop these rows + naics_code != "[00]") %>% + select(-c(status, naics_code)) %>% + # re-level the industry column because we dropped factors + mutate(naics_industry = factor(naics_industry)) +``` + +To use this data with `epipredict`, we need to convert it into `epi_df` format +using [`as_epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +with additional keys. In our case, the additional keys are `employee_type` and +`naics_industry`. Note that in the above modifications, we encoded `time_value` +as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` +below, and to ensure lag and ahead modifications later on are using the correct +time units. + +```{r convert-to-epidf, eval=F} +statcan_employ_subset <- statcan_employ_subset_input %>% + tsibble::as_tsibble( + index=time_value, + key=c(geo_value, employee_type, naics_industry)) %>% + as_epi_df( + additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) +``` + +```{r data-dim, include=F} +employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") +employ_colcount <- length(names(statcan_employ_subset)) +``` + +The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, +we are ready to use `statcan_employ_subset` with `epipredict`. + +```{r preview-data, include=T} +# Rename for simplicity +employ <- statcan_employ_subset +head(employ) +``` + +In the following sections, we will go over preprocessing the data in the +`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, +and making future predictions. + +## Preprocessing + +We will create a recipe that adds one `ahead` column and 3 `lag` columns. + +```{r make-recipe, include=T} +r <- epi_recipe(employ) %>% + step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months + step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_naomit() +r +``` + +There is one `raw` role which includes our value column `ppl_count`, and two +`key` roles which include our additional keys `employee_type` and +`naics_industry`. Let's take a look at what these additional columns look like. + +```{r view-preprocessed, include=T} +# Display a sample of the preprocessed data +baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) +baked_sample +``` + +## Model fitting and prediction + +### Within recipes framework + +We will look at a simple model: `parsnip::linear_reg()` with default engine +`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section to fit an autoregressive linear model using lags at +time $t$ (current), $t-6$ months, and $t-12$ months. + +```{r linearreg-wf, include=T} +wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) +wf_linreg +``` + +Now that we have our workflow, we can generate predictions from a subset of our +data. For this demo, we will predict the employment counts from the last 12 +months of our dataset. + +```{r linearreg-predict, include=T} +latest <- employ %>% filter(time_value >= max(time_value) - 12) +preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) +# Display a sample of the prediction values +preds %>% sample_n(5) +``` + +Notice that `predict` still returns an `epi_df` with all of the keys that were +present in the original dataset. + +### With canned forecasters + +Even though we aren't working with epidemiological data, canned forecasters +still work as expected, out of the box. We will demonstrate this with the simple +[`flatline_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) +and the direct autoregressive (AR) forecaster +[`arx_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). + +```{r flatline, include=T} +out_fl <- flatline_forecaster( + employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) + +augment(out_fl$epi_workflow, employ) +``` + +```{r arx, include=T} +args = arx_args_list( + lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) + +out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) +out_arx$predictions +``` + +Other changes to the direct AR forecaster, like changing the engine, also work +as expected. + +```{r arx-epi-rf, include=F, warning=F} +out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), + trainer = parsnip::rand_forest(mode="regression", trees=100), + args_list = args) + +out_rf$predictions +``` diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 104f0dcce..71a9c1327 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -45,10 +45,8 @@ are also valid candidates for `epipredict` functionality. Specifically, the data, as long as it's in `epi_df` format, ```{r employ-stats, include=F} -date_format <- "%B %Y" -date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) -date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) -uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") +year_start <- min(grad_employ_subset$time_value) +year_end <- max(grad_employ_subset$time_value) ``` ## Example panel data overview @@ -56,27 +54,25 @@ uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collaps In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using [ - Table 14-10-0220-01: Employment and average weekly earnings - (including \overtime) for all employees by industry, monthly, - seasonally adjusted, Canada -](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to -`r date_end`, and presents employment data stratified by geographic region -on the Canadian province level, -[NAICS industries]( - https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the + Table 37-10-0115-01: Characteristics and median employment income of + longitudinal cohorts of postsecondary graduates two and five years after + graduation, by educational qualification and field of study (primary + groupings) +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). +The full dataset contains yearly median employment income two and five years +after graduation, and number of graduates. The data is further stratified by +variables such as geographic region (Canadian province), field of study, and +age group. The year range of the dataset is `r year_start` to `r year_end`, +inclusive. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following modifications to get a subset of the full dataset: -* Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy]( - https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) -and remove aggregated industry codes. * Only keep provincial-level geographic region (the full data also has "Canada" as a region) * Only keep "good" or better quality data rows, as indicated by the [`STATUS`] (https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Choose a subset of covariates and aggregate across the remaining ones. The +chosen covariates are age group, field of study, and educational qualification. Below is the query for obtaining the full data and code for subsetting it as we just described: @@ -84,77 +80,92 @@ just described: ```{r employ-query, eval=F} library(cansim) -statcan_employ <- get_cansim("14-10-0201-01") - -# for readability; this string is very long -naics_code <- - "Classification Code for North American Industry Classification System (NAICS)" - -statcan_employ_subset_input <- statcan_employ %>% - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - naics_code, "North American Industry Classification System (NAICS)")) %>% +statcan_grad_employ <- get_cansim("37-10-0115-01") +gemploy <- statcan_grad_employ %>% + select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", + "Field of study", "Gender", "Age group", "Status of student in Canada", + "Characteristics after graduation", "Graduate statistics")) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", - "ppl_count" = "VALUE", + "value" = "VALUE", "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = naics_code) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics") %>% + # The original `VALUE` column contain the statistic indicated by + # `Graduate statistics` in the original data. Below we pivot the data + # wider so that each unique statistic can have its own column. + mutate( + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y"), + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% filter( - # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # A, B, C, D, NA indicate "good" or better data quality - status %in% c("A", "B", "C", "D", NA) & - # Drop aggregated rows; only keep provinces + # Drop aggregates for some columns geo_value != "Canada" & - # Drop aggregated industry rows - !str_detect(naics_code, "N") & - # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified; drop these rows - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) + age_group != "15 to 64 years" & + fos != "Total, field of study" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + select(-c(status, gender, student_status, grad_charac)) ``` To use this data with `epipredict`, we need to convert it into `epi_df` format using [`as_epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `employee_type` and -`naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` -below, and to ensure lag and ahead modifications later on are using the correct -time units. +with additional keys. In our case, the additional keys are `age_group`, `fos` +and `edu_qual`. Note that in the above modifications, we encoded `time_value` +as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure +lag and ahead modifications later on are using the correct time units. ```{r convert-to-epidf, eval=F} -statcan_employ_subset <- statcan_employ_subset_input %>% +grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index=time_value, - key=c(geo_value, employee_type, naics_industry)) %>% + key=c(geo_value, age_group, fos, edu_qual)) %>% as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) + geo_type = "custom", time_type = "year", + additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) ``` ```{r data-dim, include=F} -employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") -employ_colcount <- length(names(statcan_employ_subset)) +employ_rowcount <- format(nrow(grad_employ_subset), big.mark=",") +employ_colcount <- length(names(grad_employ_subset)) ``` The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `statcan_employ_subset` with `epipredict`. +we are ready to use `grad_employ_subset` with `epipredict`. ```{r preview-data, include=T} # Rename for simplicity -employ <- statcan_employ_subset -head(employ) +employ <- grad_employ_subset +sample_n(employ, 6) ``` In the following sections, we will go over preprocessing the data in the -`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, -and making future predictions. +`epi_recipe` framework, and fitting a model and making predictions within the +`epipredict` framework and using the package's canned forecasters. ## Preprocessing @@ -162,15 +173,15 @@ We will create a recipe that adds one `ahead` column and 3 `lag` columns. ```{r make-recipe, include=T} r <- epi_recipe(employ) %>% - step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months - step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% + step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years + step_epi_lag(num_graduates, lag = c(0, 1, 1)) %>% step_epi_naomit() r ``` -There is one `raw` role which includes our value column `ppl_count`, and two -`key` roles which include our additional keys `employee_type` and -`naics_industry`. Let's take a look at what these additional columns look like. +There is one `raw` role which includes our value column `num_graduates`, and two +`key` roles which include our additional keys `age_group`, `fos` and +`edu_qual`. Let's take a look at what these additional columns look like. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data @@ -185,7 +196,7 @@ baked_sample We will look at a simple model: `parsnip::linear_reg()` with default engine `lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-6$ months, and $t-12$ months. +time $t$ (current), $t-1$ (last year), and $t-2$ (2 years ago). ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) @@ -200,30 +211,12 @@ months of our dataset. latest <- employ %>% filter(time_value >= max(time_value) - 12) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values -preds %>% sample_n(5) +head(preds) ``` Notice that `predict` still returns an `epi_df` with all of the keys that were present in the original dataset. -```{r plot-pred, include=F} -# this doesn't work. don't include -# library(ggplot2) -# joined <- full_join(statcan_employ_subset, preds, by=c("geo_value", "time_value", "employee_type", "naics_industry")) - -# joined %>% filter(!is.na(.pred)) %>% select(time_value) %>% unique() -# joined %>% dplyr::filter( -# geo_value %in% c("British Columbia", "Ontario") & -# naics_industry == "Real estate and rental and leasing [53]" & -# employee_type == "All employees") %>% -# ggplot() + -# geom_line(aes(x = time_value, y = ppl_count)) + -# geom_line(aes(x = time_value, y = preds)) + -# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + -# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + -# labs(x = "Date", y = "Number employed") -``` - ### With canned forecasters Even though we aren't working with epidemiological data, canned forecasters @@ -235,17 +228,20 @@ and the direct autoregressive (AR) forecaster https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). ```{r flatline, include=T} -out_fl <- flatline_forecaster( - employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) +out_fl <- flatline_forecaster(employ, "med_income_2y", + args_list = flatline_args_list( + ahead=1L, forecast_date = as.Date("2022-08-16"))) augment(out_fl$epi_workflow, employ) ``` ```{r arx, include=T} -args = arx_args_list( - lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) +arx_args <- arx_args_list( + lags = c(0L, 1L, 2L), ahead = 1L, forecast_date = as.Date("2022-08-01")) +out_arx <- arx_forecaster(employ, "med_income_2y", + c("med_income_2y", "med_income_5y", "num_graduates"), + args_list = arx_args) -out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) out_arx$predictions ``` @@ -253,7 +249,8 @@ Other changes to the direct AR forecaster, like changing the engine, also work as expected. ```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), +out_rf <- arx_forecaster( + employ, "med_income_2y", c("med_income_2y", "med_income_5y"), trainer = parsnip::rand_forest(mode="regression", trees=100), args_list = args) From 408e7c63e1c36ff0d3b73c7b3ba599ed1f89c0f4 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:18:52 -0700 Subject: [PATCH 018/382] use better data pt 2 --- ...ademploy_subset.R => grad_employ_subset.R} | 0 data-raw/statcan_employ_subset.R | 192 -------------- data/statcan_employ_subset.rda | Bin 254398 -> 0 bytes man/statcan_employ_subset.Rd | 39 --- vignettes/panel-data-old.Rmd | 243 ------------------ 5 files changed, 474 deletions(-) rename data-raw/{statcan_grademploy_subset.R => grad_employ_subset.R} (100%) delete mode 100644 data-raw/statcan_employ_subset.R delete mode 100644 data/statcan_employ_subset.rda delete mode 100644 man/statcan_employ_subset.Rd delete mode 100644 vignettes/panel-data-old.Rmd diff --git a/data-raw/statcan_grademploy_subset.R b/data-raw/grad_employ_subset.R similarity index 100% rename from data-raw/statcan_grademploy_subset.R rename to data-raw/grad_employ_subset.R diff --git a/data-raw/statcan_employ_subset.R b/data-raw/statcan_employ_subset.R deleted file mode 100644 index 055d2fe36..000000000 --- a/data-raw/statcan_employ_subset.R +++ /dev/null @@ -1,192 +0,0 @@ -library(epipredict) -library(epiprocess) -library(cansim) -library(dplyr) -library(stringr) - -# Run this once -# https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data -statcan_employ <- get_cansim("14-10-0201-01") - -# ================== Subset & Filtering ================== -employ <- statcan_employ %>% - select(c( - "REF_DATE", - "GEO", - # "DGUID", - # "UOM", - # "UOM_ID", - # "SCALAR_FACTOR", - # "SCALAR_ID", - # "VECTOR", - # "COORDINATE", - "VALUE", - "STATUS", - # "SYMBOL", - # "TERMINATED", - # "DECIMALS", - # "GeoUID", - # "Hierarchy for GEO", - # "Classification Code for Type of employee", - # "Hierarchy for Type of employee", - "Classification Code for North American Industry Classification System (NAICS)", - # "Hierarchy for North American Industry Classification System (NAICS)", - # "val_norm", - # "Date", - "Type of employee", - "North American Industry Classification System (NAICS)")) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "ppl_count" = "VALUE", - "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = "Classification Code for North American Industry Classification System (NAICS)" - ) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% - # https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # .. not available for a specific reference period - # x: suppressed to meet the confidentiality requirements of the Statistics Act - # A data quality: excellent - # B data quality: very good - # C data quality: good - # [blank] or A-D: acceptable or better <- only keep these ones - # E use with caution - # F too unreliable to be published - filter( - status %in% c("A", "B", "C", "D", NA) & # only keep "good" data - !is.na(ppl_count) & - geo_value != "Canada" & # only keep provinces - # N corresponds to aggregates - !str_detect(naics_code, "N") & - # only keep top-level sectors - # https://www.census.gov/programs-surveys/economic-census/guidance/understanding-naics.html - # corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) - -# head(employ) -# statcan_employ_subset <- employ %>% -# tsibble::as_tsibble( -# index=time_value, -# key=c(geo_value, employee_type, naics_industry)) %>% -# as_epi_df(time_type = "yearmonth", as_of="2022-07-28") - -statcan_employ_subset <- employ %>% - tsibble::as_tsibble(index=time_value, key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) - -usethis::use_data(statcan_employ_subset, overwrite = TRUE) - -# ================== EDA ================== -length(statcan_employ$REF_DATE) -names(statcan_employ) - -uniq_ref_date <- unique(select(statcan_employ, "REF_DATE")) -uniq_ref_date -min(statcan_employ$REF_DATE) # 2001-01 -max(statcan_employ$REF_DATE) # 2022-05 -# There should be (22-1)*12 + 5 -exp_total_dates <- (22-1)*12+5 -length(uniq_ref_date %>% unlist()) == exp_total_dates # TRUE -# There is a ref date for each month in the date range - -unique(select(statcan_employ, "GEO")) # List of length 14, names of provinces & territories + Canada -statcan_employ %>% group_by(GEO) %>% top_n(n=-1) -# Dissemination Geography Unique Identifier - DGUID. -# https://www12.statcan.gc.ca/census-recensement/2021/ref/dict/az/Definition-eng.cfm?ID=geo055 -# 2016 (year) -# A (administrative) -unique(select(statcan_employ, "DGUID")) -unique(select(statcan_employ, "UOM")) # Persons -unique(select(statcan_employ, "UOM_ID")) # 249 - -# These scalar columns tell us by what factor of 10 to multiply the values -# We get "units" and 0 so we can ignore these columns and -# take the values in VALUE as-is -unique(select(statcan_employ, "SCALAR_FACTOR")) # All "units" -unique(select(statcan_employ, "SCALAR_ID")) # All 0 - -# Time series identifier - ignore -unique(select(statcan_employ, "VECTOR")) - -# Related to dimension, which is not present in this table - ignore -unique(select(statcan_employ, "COORDINATE")) - -# Data value column. Values in units -unique(select(statcan_employ, "VALUE")) -# How many rows have empty values? -# Approx 3/4 of the rows have NA values -statcan_employ %>% - summarise( - VALUE_NA = sum(is.na(VALUE)) / length(VALUE), - VALUE_NOT_NA = sum(!is.na(VALUE)) / length(VALUE), - TOTAL = length(VALUE) - ) - -unique(select(statcan_employ, "STATUS")) -statcan_employ %>% - select(STATUS, VALUE) %>% - group_by(STATUS) %>% - count() - -unique(select(statcan_employ, "SYMBOL")) # All NA -unique(select(statcan_employ, "TERMINATED")) # All NA -unique(select(statcan_employ, "DECIMALS")) # All 0 - -unique(select(statcan_employ, "GeoUID")) -unique(select(statcan_employ, "Hierarchy for GEO")) -statcan_employ %>% - group_by_at(c("GEO", "DGUID", "GeoUID", "Hierarchy for GEO")) %>% - count() -# These 4 columns are redundant. Just keep GEO. - -# The next 4 columns are metadata about the last 2 columns -# ignore these in favour of the descriptive ones -unique(select(statcan_employ, "Classification Code for Type of employee")) # All NA -unique(select(statcan_employ, "Hierarchy for Type of employee")) -unique(select(statcan_employ, "Classification Code for North American Industry Classification System (NAICS)")) -unique(select(statcan_employ, "Hierarchy for North American Industry Classification System (NAICS)")) - -# val_norm and VALUE are the same -unique(select(statcan_employ, "val_norm")) -statcan_employ %>% filter(VALUE != val_norm) %>% count() - -unique(select(statcan_employ, "Date")) -# Each date has a minimum of 7522 data points -statcan_employ %>% group_by(Date) %>% count() %>% ungroup() %>% select(n) %>% min() -# Are there any dates that aren't on the 1st of the month? -statcan_employ %>% filter(format(as.Date(Date), "%d") != "01") %>% nrow() # 0 - -unique(select(statcan_employ, "Type of employee")) # 3 types -unique(select(statcan_employ, "North American Industry Classification System (NAICS)")) # lots - -# REF_DATE looks like YYYY-mm -# Date looks like YYYY-mm-dd -# Check that the truncated Date to REF_DATE format always matches the REF_DATE -statcan_employ %>% - select(REF_DATE, Date) %>% - mutate(Date_trunc = format(as.Date(Date), "%Y-%m")) %>% - filter(REF_DATE != Date_trunc) # all empty! good - -# This is an example plot -# library(ggplot2) -# theme_set(theme_bw()) -# -# employ <- statcan_employ_subset %>% -# dplyr::filter( -# geo_value %in% c("British Columbia", "Ontario") & -# naics_industry == "Real estate and rental and leasing [53]") %>% -# dplyr::arrange(geo_value, time_value) -# -# employ %>% ggplot(aes(x = time_value, y = ppl_count, color=employee_type)) + -# geom_line() + -# facet_wrap(vars(geo_value), scales = "free_y", ncol = 1) + -# scale_x_date(minor_breaks = "month", date_labels = "%b %y") + -# labs(x = "Date", y = "Number employed") diff --git a/data/statcan_employ_subset.rda b/data/statcan_employ_subset.rda deleted file mode 100644 index 46c0ea6c97bcab8855bc3a0b622c361c002e4eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254398 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

    PpWp4;ndq@yrC0n-A2k&b|WNai^ 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

  • q#!|5lLmT( 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 - %\VignetteIndexEntry{Using epipredict on non-epidemic panel data (old)} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=F} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>", - warning = FALSE, - message = FALSE -) -``` - -```{r libraries} -library(epiprocess) -library(epipredict) -library(dplyr) -library(stringr) -library(parsnip) -library(recipes) -``` - -[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, -contains cross-sectional measurements of subjects over time. The `epipredict` -package is most suitable for running forecasters on epidemiological panel data. -A built-in example of this is the [`case_death_rate_subset`]( - https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) -dataset, which contains daily state-wise measures of `case_rate` and -`death_rate` for COVID-19 in 2021: - -```{r epi-panel-ex, include=T} -head(case_death_rate_subset) -``` - -`epipredict` functions work with data in [`epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) -format. Despite the stated goal and name of the package, other panel datasets -are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters are able to work with any panel -data, as long as it's in `epi_df` format, - -```{r employ-stats, include=F} -date_format <- "%B %Y" -date_start <- format(as.Date(min(statcan_employ_subset$time_value)), date_format) -date_end <- format(as.Date(max(statcan_employ_subset$time_value)), date_format) -uniq_employee_type <- paste(unique(statcan_employ_subset$employee_type), collapse=", ") -``` - -## Example panel data overview - -In this vignette, we will demonstrate using `epipredict` with employment data -from Statistics Canada. We will be using -[ - Table 14-10-0220-01: Employment and average weekly earnings - (including \overtime) for all employees by industry, monthly, - seasonally adjusted, Canada -](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data). -The full dataset contains monthly employment counts from `r date_start` to -`r date_end`, and presents employment data stratified by geographic region -on the Canadian province level, -[NAICS industries]( - https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553), -and employee type. The full dataset also contains metadata that describes the -quality of data collected. For demonstration purposes, we make the following -modifications to get a subset of the full dataset: - -* Only keep level 1 industries (2-digit codes) in the -[NAICS hierarchy]( - https://www23.statcan.gc.ca/imdb/pUtil.pl?Function=getNote&Id=1181553&NT=45) -and remove aggregated industry codes. -* Only keep provincial-level geographic region (the full data also has -"Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] -(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column - -Below is the query for obtaining the full data and code for subsetting it as we -just described: - -```{r employ-query, eval=F} -library(cansim) - -statcan_employ <- get_cansim("14-10-0201-01") - -# for readability; this string is very long -naics_code <- - "Classification Code for North American Industry Classification System (NAICS)" - -statcan_employ_subset_input <- statcan_employ %>% - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Type of employee", - naics_code, "North American Industry Classification System (NAICS)")) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "ppl_count" = "VALUE", - "status" = "STATUS", - "employee_type" = "Type of employee", - "naics_industry" = "North American Industry Classification System (NAICS)", - "naics_code" = naics_code) %>% - mutate(time_value = tsibble::yearmonth(time_value, "%Y-%m")) %>% - filter( - # Reference: https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol - # A, B, C, D, NA indicate "good" or better data quality - status %in% c("A", "B", "C", "D", NA) & - # Drop aggregated rows; only keep provinces - geo_value != "Canada" & - # Drop aggregated industry rows - !str_detect(naics_code, "N") & - # Only keep level 1 NAICS codes; corresponds to either [##] or [##-##] - str_detect(naics_code, "(\\[[0-9]{2}\\])|(\\[[0-9]{2}-[0-9]{2}\\])") & - # [00] corresponds to unclassified; drop these rows - naics_code != "[00]") %>% - select(-c(status, naics_code)) %>% - # re-level the industry column because we dropped factors - mutate(naics_industry = factor(naics_industry)) -``` - -To use this data with `epipredict`, we need to convert it into `epi_df` format -using [`as_epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `employee_type` and -`naics_industry`. Note that in the above modifications, we encoded `time_value` -as type `tsibble::yearmonth`. This allows us to set `time_type` to `"yearmonth"` -below, and to ensure lag and ahead modifications later on are using the correct -time units. - -```{r convert-to-epidf, eval=F} -statcan_employ_subset <- statcan_employ_subset_input %>% - tsibble::as_tsibble( - index=time_value, - key=c(geo_value, employee_type, naics_industry)) %>% - as_epi_df( - additional_metadata=c(other_keys=list("employee_type", "naics_industry"))) -``` - -```{r data-dim, include=F} -employ_rowcount <- format(nrow(statcan_employ_subset), big.mark=",") -employ_colcount <- length(names(statcan_employ_subset)) -``` - -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `statcan_employ_subset` with `epipredict`. - -```{r preview-data, include=T} -# Rename for simplicity -employ <- statcan_employ_subset -head(employ) -``` - -In the following sections, we will go over preprocessing the data in the -`epi_recipe` framework, fitting 3 types of models from the `parsnip` package, -and making future predictions. - -## Preprocessing - -We will create a recipe that adds one `ahead` column and 3 `lag` columns. - -```{r make-recipe, include=T} -r <- epi_recipe(employ) %>% - step_epi_ahead(ppl_count, ahead = 6) %>% # lag & ahead units in months - step_epi_lag(ppl_count, lag = c(0, 6, 12)) %>% - step_epi_naomit() -r -``` - -There is one `raw` role which includes our value column `ppl_count`, and two -`key` roles which include our additional keys `employee_type` and -`naics_industry`. Let's take a look at what these additional columns look like. - -```{r view-preprocessed, include=T} -# Display a sample of the preprocessed data -baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) -baked_sample -``` - -## Model fitting and prediction - -### Within recipes framework - -We will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-6$ months, and $t-12$ months. - -```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) -wf_linreg -``` - -Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the employment counts from the last 12 -months of our dataset. - -```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 12) -preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) -# Display a sample of the prediction values -preds %>% sample_n(5) -``` - -Notice that `predict` still returns an `epi_df` with all of the keys that were -present in the original dataset. - -### With canned forecasters - -Even though we aren't working with epidemiological data, canned forecasters -still work as expected, out of the box. We will demonstrate this with the simple -[`flatline_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) -and the direct autoregressive (AR) forecaster -[`arx_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). - -```{r flatline, include=T} -out_fl <- flatline_forecaster( - employ, "ppl_count", args_list = flatline_args_list(ahead=6L)) - -augment(out_fl$epi_workflow, employ) -``` - -```{r arx, include=T} -args = arx_args_list( - lags = c(0L, 6L, 12L), ahead = 6L, forecast_date = as.Date("2022-08-01")) - -out_arx <- arx_forecaster(employ, "ppl_count", c("ppl_count"), args_list = args) -out_arx$predictions -``` - -Other changes to the direct AR forecaster, like changing the engine, also work -as expected. - -```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster(employ, "ppl_count", c("ppl_count"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = args) - -out_rf$predictions -``` From 0098adc558535cdbc3fe0b65c820dfc2ddeb1b94 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:30:37 -0700 Subject: [PATCH 019/382] fix doc formatting --- R/data.R | 6 +++++- man/grad_employ_subset.Rd | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/R/data.R b/R/data.R index aac4e378a..7a171a705 100644 --- a/R/data.R +++ b/R/data.R @@ -96,7 +96,11 @@ #' \item{med_income_5y}{The median employment income five years after graduation} #' } #' @source This object contains modified data from the following Statistics Canada -#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501}{ +#' Characteristics and median employment income of longitudinal cohorts of postsecondary +#' graduates two and five years after graduation, by educational qualification and +#' field of study (primary groupings) +#' } #' #' Modifications: #' * Only provincial-level geo_values are kept diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index abac4dae9..463ab178c 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -20,7 +20,11 @@ row of measurements.} } \source{ This object contains modified data from the following Statistics Canada -data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501} +data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501}{ +Characteristics and median employment income of longitudinal cohorts of postsecondary +graduates two and five years after graduation, by educational qualification and +field of study (primary groupings) +} Modifications: \itemize{ From e498edb0f41c53c8f36a2e26399401fb8c6d545d Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 16 Aug 2022 22:52:30 -0700 Subject: [PATCH 020/382] wording changes --- vignettes/panel-data.Rmd | 42 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 71a9c1327..2eed15761 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -20,13 +20,12 @@ knitr::opts_chunk$set( library(epiprocess) library(epipredict) library(dplyr) -library(stringr) library(parsnip) library(recipes) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, -contains cross-sectional measurements of subjects over time. The `epipredict` +contain cross-sectional measurements of subjects over time. The `epipredict` package is most suitable for running forecasters on epidemiological panel data. A built-in example of this is the [`case_death_rate_subset`]( https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) @@ -41,8 +40,8 @@ head(case_death_rate_subset) https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) format. Despite the stated goal and name of the package, other panel datasets are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters are able to work with any panel -data, as long as it's in `epi_df` format, +`epipredict` framework and direct forecasters can work with any panel data, as +long as it's in `epi_df` format. ```{r employ-stats, include=F} year_start <- min(grad_employ_subset$time_value) @@ -59,8 +58,9 @@ from Statistics Canada. We will be using graduation, by educational qualification and field of study (primary groupings) ](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). + The full dataset contains yearly median employment income two and five years -after graduation, and number of graduates. The data is further stratified by +after graduation, and number of graduates. The data is stratified by variables such as geographic region (Canadian province), field of study, and age group. The year range of the dataset is `r year_start` to `r year_end`, inclusive. The full dataset also contains metadata that describes the @@ -80,8 +80,11 @@ just described: ```{r employ-query, eval=F} library(cansim) +# Get original dataset statcan_grad_employ <- get_cansim("37-10-0115-01") + gemploy <- statcan_grad_employ %>% + # Drop some columns and rename the ones we keep select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", "Field of study", "Gender", "Age group", "Status of student in Canada", "Characteristics after graduation", "Graduate statistics")) %>% @@ -101,11 +104,13 @@ gemploy <- statcan_grad_employ %>% # `Graduate statistics` in the original data. Below we pivot the data # wider so that each unique statistic can have its own column. mutate( + # Recode for easier pivoting grad_stat = recode_factor( grad_stat, `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", `Median employment income five years after graduation` = "med_income_5y"), + # They are originally strings but want ints for conversion to epi_df later time_value = as.integer(time_value) ) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% @@ -137,7 +142,11 @@ using [`as_epi_df`]( with additional keys. In our case, the additional keys are `age_group`, `fos` and `edu_qual`. Note that in the above modifications, we encoded `time_value` as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure -lag and ahead modifications later on are using the correct time units. +lag and ahead modifications later on are using the correct time units. See the +[`epi_df` documentation]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for +a list of all the `type_type`s available. + ```{r convert-to-epidf, eval=F} grad_employ_subset <- gemploy %>% @@ -235,24 +244,25 @@ out_fl <- flatline_forecaster(employ, "med_income_2y", augment(out_fl$epi_workflow, employ) ``` -```{r arx, include=T} +```{r arx-lr, include=T} arx_args <- arx_args_list( - lags = c(0L, 1L, 2L), ahead = 1L, forecast_date = as.Date("2022-08-01")) -out_arx <- arx_forecaster(employ, "med_income_2y", + lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2022-08-01")) + +out_arx_lr <- arx_forecaster(employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), args_list = arx_args) -out_arx$predictions +out_arx_lr$predictions ``` Other changes to the direct AR forecaster, like changing the engine, also work as expected. -```{r arx-epi-rf, include=F, warning=F} -out_rf <- arx_forecaster( - employ, "med_income_2y", c("med_income_2y", "med_income_5y"), - trainer = parsnip::rand_forest(mode="regression", trees=100), - args_list = args) +```{r arx-rf, include=F, warning=F} +out_arx_rf <- arx_forecaster( + employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), + trainer = parsnip::boost_tree(mode = "regression", trees = 20), + args_list = arx_args) -out_rf$predictions +out_arx_rf$predictions ``` From 44afa40f68903c22cd4c91001c1cc926c69a9470 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 23 Aug 2022 17:03:29 -0400 Subject: [PATCH 021/382] add some math --- vignettes/panel-data.Rmd | 105 ++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 2eed15761..dc6c3234b 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -17,11 +17,11 @@ knitr::opts_chunk$set( ``` ```{r libraries} -library(epiprocess) -library(epipredict) library(dplyr) library(parsnip) library(recipes) +library(epiprocess) +library(epipredict) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -33,22 +33,21 @@ dataset, which contains daily state-wise measures of `case_rate` and `death_rate` for COVID-19 in 2021: ```{r epi-panel-ex, include=T} -head(case_death_rate_subset) +head(case_death_rate_subset, 3) ``` `epipredict` functions work with data in [`epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) format. Despite the stated goal and name of the package, other panel datasets -are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters can work with any panel data, as -long as it's in `epi_df` format. +are also valid candidates for `epipredict` functionality, as long as they are +in `epi_df` format. ```{r employ-stats, include=F} year_start <- min(grad_employ_subset$time_value) year_end <- max(grad_employ_subset$time_value) ``` -## Example panel data overview +# Example panel data overview In this vignette, we will demonstrate using `epipredict` with employment data from Statistics Canada. We will be using @@ -80,7 +79,7 @@ just described: ```{r employ-query, eval=F} library(cansim) -# Get original dataset +# Get statcan data using get_cansim, which returns a tibble statcan_grad_employ <- get_cansim("37-10-0115-01") gemploy <- statcan_grad_employ %>% @@ -141,13 +140,12 @@ using [`as_epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) with additional keys. In our case, the additional keys are `age_group`, `fos` and `edu_qual`. Note that in the above modifications, we encoded `time_value` -as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure +as type `integer`. This lets us set `time_type = "year"`, and ensures that lag and ahead modifications later on are using the correct time units. See the [`epi_df` documentation]( https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for a list of all the `type_type`s available. - ```{r convert-to-epidf, eval=F} grad_employ_subset <- gemploy %>% tsibble::as_tsibble( @@ -163,8 +161,22 @@ employ_rowcount <- format(nrow(grad_employ_subset), big.mark=",") employ_colcount <- length(names(grad_employ_subset)) ``` -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `grad_employ_subset` with `epipredict`. +Now, we are ready to use `grad_employ_subset` with `epipredict`. +Our `epi_df` contains `r employ_rowcount` rows and `r employ_colcount` columns. +Here is a quick summary of the columns in our `epi_df`: + +* `time_value` (time value): year in YYYY format +* `geo_value` (geo value): province in Canada +* `num_graduates` (raw, time series value): number of graduates +* `med_income_2y` (raw, time series value): median employment income 2 years +after graduation +* `med_income_5y` (raw, time series value): median employment income 5 years +after graduation +* `age_group` (key): one of two age groups, either 15 to 34 years, or 35 to 64 +years +* `fos` (key): one of 60 unique fields of study +* `edu_qual` (key): one of 32 unique educational qualifications, e.g., +"Master's disploma" ```{r preview-data, include=T} # Rename for simplicity @@ -176,21 +188,30 @@ In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -## Preprocessing +# Preprocessing + +We will create an `epi_recipe` that adds one `ahead` column and 3 `lag` columns. +The `ahead` column tells us how many time units ahead to predict, and the `lag` +columns tell us how many previous time points to include as covariates. We will +just work with one of the time series in our data for now: `num_graduates`. -We will create a recipe that adds one `ahead` column and 3 `lag` columns. +In this preprocessing step, no computation really happens. It just provides +a series of steps that will be applied when using `epi_workflow` later. And note +that since we specified our `time_type` to be `year`, our `lag` and `lead` +values are both in years. ```{r make-recipe, include=T} r <- epi_recipe(employ) %>% step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years - step_epi_lag(num_graduates, lag = c(0, 1, 1)) %>% + step_epi_lag(num_graduates, lag = 0:2) %>% step_epi_naomit() r ``` -There is one `raw` role which includes our value column `num_graduates`, and two -`key` roles which include our additional keys `age_group`, `fos` and -`edu_qual`. Let's take a look at what these additional columns look like. +There are 3 `raw` roles which are our three lagged `num_graduates` columns, and +three `key` roles which are our additional keys `age_group`, `fos` and +`edu_qual`. Let's apply this recipe using `prep` and `bake` to see all of the +additional `lag` and `ahead` columns created. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data @@ -198,26 +219,52 @@ baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) baked_sample ``` -## Model fitting and prediction +# Model fitting and prediction + +## Within recipes framework + +We will look at a simple model: [`parsnip::linear_reg()`]( + https://parsnip.tidymodels.org/reference/linear_reg.html) with the default +engine `lm`, which fits a linear regression using ordinary least squares. +Specifically, our model will be an autoregressive linear model with: -### Within recipes framework +* Outcome $y_{t}$, the number of graduates at time $t$. Corresponds to +setting `ahead = 1` in our recipe. + +* Predictors $x_{t-1}$, $x_{t-2}$, and $x_{t-3}$, the number of graduates in the +three consecutive years prior to time $t$. Corresponds to setting `lag = 0:2` in +our recipe. -We will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-1$ (last year), and $t-2$ (2 years ago). +The model is represented algebraically as follows: + +\[ + y_{t+1} = \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t +\] + +We will use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section to fit this model. ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg ``` +Let's take a look at the model object + +```{r linearreg-fit, include=T} +# extract the parsnip model object +wf_lr_fit <- wf_linreg$fit$fit +wf_lr_fit +``` + + + Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the employment counts from the last 12 -months of our dataset. +data. For this demo, we will predict the number of graduates from the last 2 +years of our dataset. ```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 12) +latest <- employ %>% filter(time_value >= max(time_value) - 2) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values head(preds) @@ -226,7 +273,9 @@ head(preds) Notice that `predict` still returns an `epi_df` with all of the keys that were present in the original dataset. -### With canned forecasters + + +## With canned forecasters Even though we aren't working with epidemiological data, canned forecasters still work as expected, out of the box. We will demonstrate this with the simple From 75a846e247e3032619d02e6dd4de776ec67a186e Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 23 Aug 2022 17:04:47 -0400 Subject: [PATCH 022/382] change notation --- vignettes/panel-data.Rmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index dc6c3234b..e0cc0b664 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -238,7 +238,8 @@ our recipe. The model is represented algebraically as follows: \[ - y_{t+1} = \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t + y_{t+1} = + \beta_0 + \beta_1 x_{t} + \beta_2 x_{t-1} + \beta_3 x_{t-2} + \epsilon_t \] We will use `epi_workflow` with the `epi_recipe` we defined in the From 0747d14b362735ce3250a147c777246caab937c2 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 23 Aug 2022 17:13:39 -0400 Subject: [PATCH 023/382] add some todos --- vignettes/panel-data.Rmd | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index e0cc0b664..5028020ca 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -250,15 +250,7 @@ wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) wf_linreg ``` -Let's take a look at the model object - -```{r linearreg-fit, include=T} -# extract the parsnip model object -wf_lr_fit <- wf_linreg$fit$fit -wf_lr_fit -``` - - + Now that we have our workflow, we can generate predictions from a subset of our data. For this demo, we will predict the number of graduates from the last 2 @@ -274,7 +266,7 @@ head(preds) Notice that `predict` still returns an `epi_df` with all of the keys that were present in the original dataset. - + ## With canned forecasters From acd5a5adc4b91a4d2a722a00a2ceb62a99fd65e0 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 13 Sep 2022 20:08:58 -0700 Subject: [PATCH 024/382] WIP --- vignettes/panel-data.Rmd | 280 +++++++++++++++++++++++++++------------ 1 file changed, 192 insertions(+), 88 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 5028020ca..3a2a3dc38 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -22,6 +22,7 @@ library(parsnip) library(recipes) library(epiprocess) library(epipredict) +library(ggplot2) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -68,8 +69,8 @@ modifications to get a subset of the full dataset: * Only keep provincial-level geographic region (the full data also has "Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] -(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`]( + https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column * Choose a subset of covariates and aggregate across the remaining ones. The chosen covariates are age group, field of study, and educational qualification. @@ -82,11 +83,13 @@ library(cansim) # Get statcan data using get_cansim, which returns a tibble statcan_grad_employ <- get_cansim("37-10-0115-01") -gemploy <- statcan_grad_employ %>% +gemploy <- statcan_grad_employ %>% # Drop some columns and rename the ones we keep - select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", - "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics")) %>% + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", + "Field of study", "Gender", "Age group", "Status of student in Canada", + "Characteristics after graduation", "Graduate statistics" + )) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -98,40 +101,43 @@ gemploy <- statcan_grad_employ %>% "age_group" = "Age group", "student_status" = "Status of student in Canada", "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics") %>% - # The original `VALUE` column contain the statistic indicated by - # `Graduate statistics` in the original data. Below we pivot the data + "grad_stat" = "Graduate statistics" + ) %>% + # The original `VALUE` column contain the statistic indicated by + # `Graduate statistics` in the original data. Below we pivot the data # wider so that each unique statistic can have its own column. mutate( # Recode for easier pivoting grad_stat = recode_factor( - grad_stat, - `Number of graduates` = "num_graduates", + grad_stat, + `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y"), + `Median employment income five years after graduation` = "med_income_5y" + ), # They are originally strings but want ints for conversion to epi_df later time_value = as.integer(time_value) ) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% filter( # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & - fos != "Total, field of study" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + geo_value != "Canada" & + age_group != "15 to 64 years" & + fos != "Total, field of study" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) + ) %>% select(-c(status, gender, student_status, grad_charac)) ``` @@ -149,15 +155,17 @@ a list of all the `type_type`s available. ```{r convert-to-epidf, eval=F} grad_employ_subset <- gemploy %>% tsibble::as_tsibble( - index=time_value, - key=c(geo_value, age_group, fos, edu_qual)) %>% + index = time_value, + key = c(geo_value, age_group, fos, edu_qual) + ) %>% as_epi_df( geo_type = "custom", time_type = "year", - additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) + additional_metadata = c(other_keys = list("age_group", "fos", "edu_qual")) + ) ``` ```{r data-dim, include=F} -employ_rowcount <- format(nrow(grad_employ_subset), big.mark=",") +employ_rowcount <- format(nrow(grad_employ_subset), big.mark = ",") employ_colcount <- length(names(grad_employ_subset)) ``` @@ -190,83 +198,160 @@ In the following sections, we will go over preprocessing the data in the # Preprocessing -We will create an `epi_recipe` that adds one `ahead` column and 3 `lag` columns. -The `ahead` column tells us how many time units ahead to predict, and the `lag` -columns tell us how many previous time points to include as covariates. We will -just work with one of the time series in our data for now: `num_graduates`. +As a simple example, let's work with the `num_graduates` column for now. + +```{r employ-small, include=T} +employ_small <- employ %>% + group_by(geo_value, time_value, age_group, edu_qual) %>% + summarise_if(is.numeric, sum) %>% + ungroup() %>% + # Incomplete data - exclude + filter(geo_value != "Territories") %>% + # Select groups where there are complete timeseries values + group_by(geo_value, age_group, edu_qual) %>% + filter(n() >= 6) %>% + mutate( + num_graduates_prop = num_graduates / sum(num_graduates) + ) %>% + # med_income_2y_prop = med_income_2y / sum(med_income_2y), + # med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% + ungroup() %>% + # select(-c(med_income_2y, med_income_5y, num_graduates)) %>% + # Bug: shouldn't have to cast back to epi_df + as_epi_df( + geo_type = "custom", + time_type = "year", + additional_metadata = c(other_keys = list("age_group", "edu_qual"))) +head(employ_small) +``` + +Below is a visualization for a sample of the small data. Note that some groups +do not have any time series information since we filtered out all timeseries +with incomplete dates. + +```{r employ-small-graph, include=F, eval=F} +employ_small %>% + filter(geo_value %in% c("British Columbia", "Ontario")) %>% + filter(grepl("degree", edu_qual, fixed = T)) %>% + ggplot(aes(x = time_value, y = num_graduates_prop, color = geo_value)) + + geom_line() + + facet_grid(rows = vars(edu_qual), cols = vars(age_group)) + + xlab("Year") + + ylab("# of graduates as proportion of sum within group") + + ggtitle("Trend in # of Graduates by Age Group and Education in BC and ON") +``` + +We will predict the number of graduates in the next year (time $t+1$) using an +autoregressive model with three lags (i.e., an AR(3) model). Such a model is +represented algebraically like this: + +\[ + x_{t+1} = + \phi_0 + \phi_1 x_{t} + \phi_2 x_{t-1} + \phi_3 x_{t-2} + \epsilon_t +\] + +where $x_i$ is the number of graduates at time $i$, and the current time is $t$. -In this preprocessing step, no computation really happens. It just provides -a series of steps that will be applied when using `epi_workflow` later. And note -that since we specified our `time_type` to be `year`, our `lag` and `lead` +In the preprocessing step, we need to create additional columns in `employ` for +each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an +`epi_recipe`. Note that creating an `epi_recipe` alone doesn't add these +outcome and predictor columns; the recipe just stores the instructions for +adding them. + +Our `epi_recipe` should add one `ahead` column representing $x_{t+1}$ and +3 `lag` columns representing $x_{t}$, $x_{t-1}$, and $x_{t-2}$. Also note that +since we specified our `time_type` to be `year`, our `lag` and `lead` values are both in years. -```{r make-recipe, include=T} -r <- epi_recipe(employ) %>% - step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years - step_epi_lag(num_graduates, lag = 0:2) %>% - step_epi_naomit() +```{r make-recipe, include=T, eval=F} +# r <- epi_recipe(employ) %>% +# step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years +# step_epi_lag(num_graduates, lag = 0:2) %>% +# step_epi_naomit() +# r + +r <- epi_recipe(employ_small) %>% + step_epi_ahead(num_graduates_prop, ahead = 1) %>% # lag & ahead units in years + step_epi_lag(num_graduates_prop, lag = 0:2) %>% + step_epi_naomit() r ``` There are 3 `raw` roles which are our three lagged `num_graduates` columns, and three `key` roles which are our additional keys `age_group`, `fos` and -`edu_qual`. Let's apply this recipe using `prep` and `bake` to see all of the -additional `lag` and `ahead` columns created. +`edu_qual`. + +Let's apply this recipe using `prep` and `bake` to generate and view the `lag` +and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) -baked_sample +baked_sample <- r %>% + prep() %>% + bake(new_data = employ_small) %>% + sample_n(5) +# baked_sample ``` +We can see that the `prep` and `bake` steps created new columns according to +our `epi_recipe`: + +- `ahead_1_num_graduates` corresponds to $x_{t+1}$ +- `lag_0_num_graduates`, `lag_1_num_graduates`, and `lag_2_num_graduates` +correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ respectively. + # Model fitting and prediction ## Within recipes framework -We will look at a simple model: [`parsnip::linear_reg()`]( +Since our goal for now is to fit a simple autoregressive model, we can use +[`parsnip::linear_reg()`]( https://parsnip.tidymodels.org/reference/linear_reg.html) with the default engine `lm`, which fits a linear regression using ordinary least squares. -Specifically, our model will be an autoregressive linear model with: - -* Outcome $y_{t}$, the number of graduates at time $t$. Corresponds to -setting `ahead = 1` in our recipe. - -* Predictors $x_{t-1}$, $x_{t-2}$, and $x_{t-3}$, the number of graduates in the -three consecutive years prior to time $t$. Corresponds to setting `lag = 0:2` in -our recipe. - -The model is represented algebraically as follows: - -\[ - y_{t+1} = - \beta_0 + \beta_1 x_{t} + \beta_2 x_{t-1} + \beta_3 x_{t-2} + \epsilon_t -\] We will use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section to fit this model. +preprocessing section along with the `parsnip::linear_reg()` model. Note again +that `epi_workflow` is a container and doesn't actually do the fitting. We have +to pass the workflow into `fit()` to get our model coefficients +$\phi_i, i=0,...,3$. ```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) +wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% + parsnip::fit(employ_small) wf_linreg ``` - +This output tells us the coefficients of the fitted model; for instance, +the intercept is $\phi_0 = -2.2426$ and the coefficient for $x_{t}$ is +$\phi_1 = 1.14401$. Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the number of graduates from the last 2 +data. For this demo, we will predict the number of graduates using the last 2 years of our dataset. ```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 2) +latest <- employ_small %>% filter(time_value >= max(time_value) - 2) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) -# Display a sample of the prediction values -head(preds) +# Display a sample of the prediction values, excluding NAs +preds %>% head() ``` -Notice that `predict` still returns an `epi_df` with all of the keys that were -present in the original dataset. +We can do this using the `augment` function too: +```{r linearreg-augment, include=T} +employ_small_with_preds <- augment(wf_linreg, latest) +employ_small_with_preds %>% head() + +employ_small_with_preds %>% + mutate(resid = med_income_2y - .pred) %>% + ggplot(aes(x = .pred, y = resid, color = geo_value)) + + geom_point() + + xlab("Fitted values") + + ylab("Residuals") + + ggtitle("Plot of fitted values vs. residuals") +``` - +Notice that `predict` and `augment` both still returns an `epi_df` with all of +the keys that were present in the original dataset. ## With canned forecasters @@ -278,33 +363,52 @@ and the direct autoregressive (AR) forecaster [`arx_forecaster`]( https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). -```{r flatline, include=T} -out_fl <- flatline_forecaster(employ, "med_income_2y", +With canned forecasters, we don't need to manually create a recipe and workflow; +we just need to specify the lags, aheads, and some additional arguments that +are passed in a forecast-specific way that we'll see below. + +In this first example, we'll use `flatline_forecaster` to make a simple +prediction of the 2-year median income for the next year, based on one previous +time point. This model is representated algebraically as: +\[y_{t+1} = \phi_0 + \phi_1 y_{t}\] +where $y_i$ is the 2-year median income at time $i$. + +```{r flatline, include=T, warning=F} +out_fl <- flatline_forecaster(employ_small, "med_income_2y", args_list = flatline_args_list( - ahead=1L, forecast_date = as.Date("2022-08-16"))) + ahead = 1L, forecast_date = as.Date("2015-01-01"))) -augment(out_fl$epi_workflow, employ) +augment(out_fl$epi_workflow, employ_small) %>% head() ``` -```{r arx-lr, include=T} +In this second example, we'll use `arx_forecaster` to make a prediction of the +2-year median income based on the previous two time points' 2-year median +income _and_ 5-year median income. This model is represented algebraically as: +\[ + y_{t+1} = + \phi_0 + \phi_1 y_{t} + \phi_2 y_{t-1} + \phi_3 z_{t} + \phi_4 z_{t-1} +\] +where $y_i$ is as before, and $z_i$ is the 5-year median income at time $i$. + +```{r arx-lr, include=T, warning=F} arx_args <- arx_args_list( - lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2022-08-01")) + lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01")) -out_arx_lr <- arx_forecaster(employ, "med_income_2y", - c("med_income_2y", "med_income_5y", "num_graduates"), +out_arx_lr <- arx_forecaster(employ_small, "med_income_2y", + c("med_income_2y", "med_income_5y"), args_list = arx_args) -out_arx_lr$predictions +out_arx_lr$predictions %>% head() ``` Other changes to the direct AR forecaster, like changing the engine, also work -as expected. +as expected. Below we use a boosted tree model instead of a linear regression. -```{r arx-rf, include=F, warning=F} +```{r arx-rf, include=T, warning=F} out_arx_rf <- arx_forecaster( - employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), + employ_small, "med_income_2y", c("med_income_2y", "med_income_5y"), trainer = parsnip::boost_tree(mode = "regression", trees = 20), args_list = arx_args) -out_arx_rf$predictions +out_arx_rf$predictions %>% head() ``` From bbc44d3097aeec059da61b94c80737858a85c016 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 13 Sep 2022 20:42:08 -0700 Subject: [PATCH 025/382] make the vignette render finally --- R/data.R | 3 +-- data-raw/grad_employ_subset.R | 11 ++++------ data/grad_employ_subset.rda | Bin 39430 -> 7256 bytes man/grad_employ_subset.Rd | 3 +-- vignettes/panel-data.Rmd | 38 ++++++++++------------------------ 5 files changed, 17 insertions(+), 38 deletions(-) diff --git a/R/data.R b/R/data.R index 7a171a705..90bfc4073 100644 --- a/R/data.R +++ b/R/data.R @@ -83,13 +83,12 @@ #' Subset of Statistics Canada median employment income for postsecondary graduates #' -#' @format A tibble with 10193 rows and 8 variables: +#' @format A tibble with 1607 rows and 7 variables: #' \describe{ #' \item{geo_value}{The province in Canada associated with each #' row of measurements.} #' \item{time_value}{The time value, a year integer in YYYY format} #' \item{edu_qual}{The education qualification} -#' \item{fos}{The field of study} #' \item{age_group}{The age group; either 15 to 34 or 35 to 64} #' \item{num_graduates}{The number of graduates for the given row of characteristics} #' \item{med_income_2y}{The median employment income two years after graduation} diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index 70cb6d678..36aa561bd 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -74,9 +74,9 @@ gemploy <- statcan_grad_employ %>% # Drop aggregates for some columns geo_value != "Canada" & age_group != "15 to 64 years" & - fos != "Total, field of study" & edu_qual != "Total, educational qualification" & # Keep aggregates for keys we don't want to keep + fos == "Total, field of study" & gender == "Total, gender" & student_status == "Canadian and international students" & # Since we're looking at 2y and 5y employment income, the only @@ -89,7 +89,7 @@ gemploy <- statcan_grad_employ %>% is.na(status) & # Drop NA value rows !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% - select(-c(status, gender, student_status, grad_charac)) + select(-c(status, gender, student_status, grad_charac, fos)) # gemploy$time_value %>% unique() # class(gemploy$fos) @@ -99,16 +99,13 @@ gemploy <- statcan_grad_employ %>% nrow(gemploy) ncol(gemploy) -gemploy$grad_charac %>% unique() -gemploy %>% group_by(grad_charac) %>% slice(1) - grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index=time_value, - key=c(geo_value, age_group, fos, edu_qual)) %>% + key=c(geo_value, age_group, edu_qual)) %>% as_epi_df( geo_type = "custom", time_type = "year", as_of = "2022-07-19", - additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) + additional_metadata = list(other_keys = c("age_group", "edu_qual"))) usethis::use_data(grad_employ_subset, overwrite = TRUE) # ================== EDA ================== diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda index f2e52ce21eab825b6c2e379a5ed15f84b52d45ef..ef33b7df937e4100c6608aa338a005c5fe2a8955 100644 GIT binary patch literal 7256 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 diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index 463ab178c..072f77961 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -5,13 +5,12 @@ \alias{grad_employ_subset} \title{Subset of Statistics Canada median employment income for postsecondary graduates} \format{ -A tibble with 10193 rows and 8 variables: +A tibble with 1607 rows and 7 variables: \describe{ \item{geo_value}{The province in Canada associated with each row of measurements.} \item{time_value}{The time value, a year integer in YYYY format} \item{edu_qual}{The education qualification} -\item{fos}{The field of study} \item{age_group}{The age group; either 15 to 34 or 35 to 64} \item{num_graduates}{The number of graduates for the given row of characteristics} \item{med_income_2y}{The median employment income two years after graduation} diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 3a2a3dc38..777cc15f7 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -122,9 +122,9 @@ gemploy <- statcan_grad_employ %>% # Drop aggregates for some columns geo_value != "Canada" & age_group != "15 to 64 years" & - fos != "Total, field of study" & edu_qual != "Total, educational qualification" & # Keep aggregates for keys we don't want to keep + fos == "Total, field of study" & gender == "Total, gender" & student_status == "Canadian and international students" & # Since we're looking at 2y and 5y employment income, the only @@ -138,7 +138,7 @@ gemploy <- statcan_grad_employ %>% # Drop NA value rows !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) ) %>% - select(-c(status, gender, student_status, grad_charac)) + select(-c(status, gender, student_status, grad_charac, fos)) ``` To use this data with `epipredict`, we need to convert it into `epi_df` format @@ -156,11 +156,11 @@ a list of all the `type_type`s available. grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index = time_value, - key = c(geo_value, age_group, fos, edu_qual) + key = c(geo_value, age_group, edu_qual) ) %>% as_epi_df( geo_type = "custom", time_type = "year", - additional_metadata = c(other_keys = list("age_group", "fos", "edu_qual")) + additional_metadata = c(other_keys = list("age_group", "edu_qual")) ) ``` @@ -202,26 +202,16 @@ As a simple example, let's work with the `num_graduates` column for now. ```{r employ-small, include=T} employ_small <- employ %>% - group_by(geo_value, time_value, age_group, edu_qual) %>% - summarise_if(is.numeric, sum) %>% - ungroup() %>% # Incomplete data - exclude filter(geo_value != "Territories") %>% # Select groups where there are complete timeseries values group_by(geo_value, age_group, edu_qual) %>% filter(n() >= 6) %>% mutate( - num_graduates_prop = num_graduates / sum(num_graduates) - ) %>% - # med_income_2y_prop = med_income_2y / sum(med_income_2y), - # med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% - ungroup() %>% - # select(-c(med_income_2y, med_income_5y, num_graduates)) %>% - # Bug: shouldn't have to cast back to epi_df - as_epi_df( - geo_type = "custom", - time_type = "year", - additional_metadata = c(other_keys = list("age_group", "edu_qual"))) + num_graduates_prop = num_graduates / sum(num_graduates), + med_income_2y_prop = med_income_2y / sum(med_income_2y), + med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% + ungroup() head(employ_small) ``` @@ -229,7 +219,7 @@ Below is a visualization for a sample of the small data. Note that some groups do not have any time series information since we filtered out all timeseries with incomplete dates. -```{r employ-small-graph, include=F, eval=F} +```{r employ-small-graph, include=T, eval=T} employ_small %>% filter(geo_value %in% c("British Columbia", "Ontario")) %>% filter(grepl("degree", edu_qual, fixed = T)) %>% @@ -263,13 +253,7 @@ Our `epi_recipe` should add one `ahead` column representing $x_{t+1}$ and since we specified our `time_type` to be `year`, our `lag` and `lead` values are both in years. -```{r make-recipe, include=T, eval=F} -# r <- epi_recipe(employ) %>% -# step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years -# step_epi_lag(num_graduates, lag = 0:2) %>% -# step_epi_naomit() -# r - +```{r make-recipe, include=T, eval=T} r <- epi_recipe(employ_small) %>% step_epi_ahead(num_graduates_prop, ahead = 1) %>% # lag & ahead units in years step_epi_lag(num_graduates_prop, lag = 0:2) %>% @@ -290,7 +274,7 @@ baked_sample <- r %>% prep() %>% bake(new_data = employ_small) %>% sample_n(5) -# baked_sample +baked_sample ``` We can see that the `prep` and `bake` steps created new columns according to From c48548ce8f7350613230609ab9f506e91397572a Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 13 Sep 2022 21:38:55 -0700 Subject: [PATCH 026/382] edits, plots --- vignettes/panel-data.Rmd | 96 ++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 777cc15f7..1a2cb2df0 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -23,6 +23,7 @@ library(recipes) library(epiprocess) library(epipredict) library(ggplot2) +library(gridExtra) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -50,8 +51,8 @@ year_end <- max(grad_employ_subset$time_value) # Example panel data overview -In this vignette, we will demonstrate using `epipredict` with employment data -from Statistics Canada. We will be using +In this vignette, we will demonstrate using `epipredict` with employment panel +data from Statistics Canada. We will be using [ Table 37-10-0115-01: Characteristics and median employment income of longitudinal cohorts of postsecondary graduates two and five years after @@ -61,7 +62,7 @@ from Statistics Canada. We will be using The full dataset contains yearly median employment income two and five years after graduation, and number of graduates. The data is stratified by -variables such as geographic region (Canadian province), field of study, and +variables such as geographic region (Canadian province), education, and age group. The year range of the dataset is `r year_start` to `r year_end`, inclusive. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following @@ -72,7 +73,7 @@ modifications to get a subset of the full dataset: * Only keep "good" or better quality data rows, as indicated by the [`STATUS`]( https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column * Choose a subset of covariates and aggregate across the remaining ones. The -chosen covariates are age group, field of study, and educational qualification. +chosen covariates are age group, and educational qualification. Below is the query for obtaining the full data and code for subsetting it as we just described: @@ -144,7 +145,7 @@ gemploy <- statcan_grad_employ %>% To use this data with `epipredict`, we need to convert it into `epi_df` format using [`as_epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `age_group`, `fos` +with additional keys. In our case, the additional keys are `age_group`, and `edu_qual`. Note that in the above modifications, we encoded `time_value` as type `integer`. This lets us set `time_type = "year"`, and ensures that lag and ahead modifications later on are using the correct time units. See the @@ -182,7 +183,6 @@ after graduation after graduation * `age_group` (key): one of two age groups, either 15 to 34 years, or 35 to 64 years -* `fos` (key): one of 60 unique fields of study * `edu_qual` (key): one of 32 unique educational qualifications, e.g., "Master's disploma" @@ -196,16 +196,18 @@ In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -# Preprocessing +# A simple example +## Preprocessing -As a simple example, let's work with the `num_graduates` column for now. +As a simple example, let's work with the `num_graduates` column for now. We will +first pre-process by "standardizing" each numeric column by the total within +each group of keys. We do this since those raw numeric values will vary greatly +from province to province since there are large differences in population. ```{r employ-small, include=T} employ_small <- employ %>% - # Incomplete data - exclude - filter(geo_value != "Territories") %>% - # Select groups where there are complete timeseries values group_by(geo_value, age_group, edu_qual) %>% + # Select groups where there are complete timeseries values filter(n() >= 6) %>% mutate( num_graduates_prop = num_graduates / sum(num_graduates), @@ -231,16 +233,17 @@ employ_small %>% ggtitle("Trend in # of Graduates by Age Group and Education in BC and ON") ``` -We will predict the number of graduates in the next year (time $t+1$) using an -autoregressive model with three lags (i.e., an AR(3) model). Such a model is -represented algebraically like this: +We will predict the "standardized" number of graduates (a proportion) in the +next year (time $t+1$) using an autoregressive model with three lags (i.e., an +AR(3) model). Such a model is represented algebraically like this: \[ x_{t+1} = \phi_0 + \phi_1 x_{t} + \phi_2 x_{t-1} + \phi_3 x_{t-2} + \epsilon_t \] -where $x_i$ is the number of graduates at time $i$, and the current time is $t$. +where $x_i$ is the proportion of graduates at time $i$, and the current time is +$t$. In the preprocessing step, we need to create additional columns in `employ` for each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an @@ -261,18 +264,12 @@ r <- epi_recipe(employ_small) %>% r ``` -There are 3 `raw` roles which are our three lagged `num_graduates` columns, and -three `key` roles which are our additional keys `age_group`, `fos` and -`edu_qual`. - Let's apply this recipe using `prep` and `bake` to generate and view the `lag` and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -baked_sample <- r %>% - prep() %>% - bake(new_data = employ_small) %>% +baked_sample <- r %>% prep() %>% bake(new_data = employ_small) %>% sample_n(5) baked_sample ``` @@ -280,13 +277,12 @@ baked_sample We can see that the `prep` and `bake` steps created new columns according to our `epi_recipe`: -- `ahead_1_num_graduates` corresponds to $x_{t+1}$ -- `lag_0_num_graduates`, `lag_1_num_graduates`, and `lag_2_num_graduates` -correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ respectively. +- `ahead_1_num_graduates_prop` corresponds to $x_{t+1}$ +- `lag_0_num_graduates_prop`, `lag_1_num_graduates_prop`, and +`lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ +respectively. -# Model fitting and prediction - -## Within recipes framework +## Model fitting and prediction Since our goal for now is to fit a simple autoregressive model, we can use [`parsnip::linear_reg()`]( @@ -306,8 +302,8 @@ wf_linreg ``` This output tells us the coefficients of the fitted model; for instance, -the intercept is $\phi_0 = -2.2426$ and the coefficient for $x_{t}$ is -$\phi_1 = 1.14401$. +the intercept is $\phi_0 = 0.24804$ and the coefficient for $x_{t}$ is +$\phi_1 = 0.06648$. Now that we have our workflow, we can generate predictions from a subset of our data. For this demo, we will predict the number of graduates using the last 2 @@ -320,24 +316,46 @@ preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) preds %>% head() ``` -We can do this using the `augment` function too: +We can do this using the `augment` function too. Note that `predict` and +`augment` both still return an `epi_df` with all of the keys that were present +in the original dataset. + ```{r linearreg-augment, include=T} employ_small_with_preds <- augment(wf_linreg, latest) employ_small_with_preds %>% head() +``` + +## AR(3) Model Diagnostics + +First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the +fitted values ($\hat{y}_{t}$). -employ_small_with_preds %>% - mutate(resid = med_income_2y - .pred) %>% - ggplot(aes(x = .pred, y = resid, color = geo_value)) + - geom_point() + +```{r lienarreg-resid-plot, include=T, warning=F} +employ_small_with_preds <- employ_small_with_preds %>% + mutate(resid = num_graduates_prop - .pred) + +p1 <- employ_small_with_preds %>% + ggplot(aes(x = .pred, y = resid)) + + geom_point(size = 1.5, alpha = .8) + + geom_smooth(method = "loess", color = "red", linetype = "dashed", size = .7) + xlab("Fitted values") + ylab("Residuals") + - ggtitle("Plot of fitted values vs. residuals") + ggtitle("Plot of Fitted Values vs. Residuals in AR(3) Model") + +p2 <- employ_small_with_preds %>% + ggplot(aes(sample = resid)) + stat_qq(alpha = .6) + stat_qq_line() + + ggtitle("Q-Q Plot of Residuals") + +grid.arrange(p1, p2, ncol = 2) ``` -Notice that `predict` and `augment` both still returns an `epi_df` with all of -the keys that were present in the original dataset. +The left plot shows us that the residuals are mostly clustered around zero, +but do not form an even band around the zero line, indicating that the variance +of the residuals is not constant. The right Q-Q plot shows us that the residuals +have heavier tails than a Normal distribution. So both the constant variance and +normality assumptions of the linear model have been violated. -## With canned forecasters +# Using canned forecasters Even though we aren't working with epidemiological data, canned forecasters still work as expected, out of the box. We will demonstrate this with the simple From 82b01cc8ff926ecf86a9bb3e7c2b53949b4a655b Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Tue, 13 Sep 2022 21:39:50 -0700 Subject: [PATCH 027/382] title change --- vignettes/panel-data.Rmd | 41 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 1a2cb2df0..073ada7e2 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -196,7 +196,8 @@ In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -# A simple example +# A Simple AR(3) Model Example + ## Preprocessing As a simple example, let's work with the `num_graduates` column for now. We will @@ -212,7 +213,8 @@ employ_small <- employ %>% mutate( num_graduates_prop = num_graduates / sum(num_graduates), med_income_2y_prop = med_income_2y / sum(med_income_2y), - med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% + med_income_5y_prop = med_income_5y / sum(med_income_5y) + ) %>% ungroup() head(employ_small) ``` @@ -269,7 +271,9 @@ and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -baked_sample <- r %>% prep() %>% bake(new_data = employ_small) %>% +baked_sample <- r %>% + prep() %>% + bake(new_data = employ_small) %>% sample_n(5) baked_sample ``` @@ -325,25 +329,27 @@ employ_small_with_preds <- augment(wf_linreg, latest) employ_small_with_preds %>% head() ``` -## AR(3) Model Diagnostics +## Model Diagnostics First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the fitted values ($\hat{y}_{t}$). ```{r lienarreg-resid-plot, include=T, warning=F} -employ_small_with_preds <- employ_small_with_preds %>% - mutate(resid = num_graduates_prop - .pred) - +employ_small_with_preds <- employ_small_with_preds %>% + mutate(resid = num_graduates_prop - .pred) + p1 <- employ_small_with_preds %>% - ggplot(aes(x = .pred, y = resid)) + + ggplot(aes(x = .pred, y = resid)) + geom_point(size = 1.5, alpha = .8) + - geom_smooth(method = "loess", color = "red", linetype = "dashed", size = .7) + + geom_smooth(method = "loess", color = "red", linetype = "dashed", size = .7) + xlab("Fitted values") + ylab("Residuals") + ggtitle("Plot of Fitted Values vs. Residuals in AR(3) Model") -p2 <- employ_small_with_preds %>% - ggplot(aes(sample = resid)) + stat_qq(alpha = .6) + stat_qq_line() + +p2 <- employ_small_with_preds %>% + ggplot(aes(sample = resid)) + + stat_qq(alpha = .6) + + stat_qq_line() + ggtitle("Q-Q Plot of Residuals") grid.arrange(p1, p2, ncol = 2) @@ -378,7 +384,9 @@ where $y_i$ is the 2-year median income at time $i$. ```{r flatline, include=T, warning=F} out_fl <- flatline_forecaster(employ_small, "med_income_2y", args_list = flatline_args_list( - ahead = 1L, forecast_date = as.Date("2015-01-01"))) + ahead = 1L, forecast_date = as.Date("2015-01-01") + ) +) augment(out_fl$epi_workflow, employ_small) %>% head() ``` @@ -394,11 +402,13 @@ where $y_i$ is as before, and $z_i$ is the 5-year median income at time $i$. ```{r arx-lr, include=T, warning=F} arx_args <- arx_args_list( - lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01")) + lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01") +) out_arx_lr <- arx_forecaster(employ_small, "med_income_2y", c("med_income_2y", "med_income_5y"), - args_list = arx_args) + args_list = arx_args +) out_arx_lr$predictions %>% head() ``` @@ -410,7 +420,8 @@ as expected. Below we use a boosted tree model instead of a linear regression. out_arx_rf <- arx_forecaster( employ_small, "med_income_2y", c("med_income_2y", "med_income_5y"), trainer = parsnip::boost_tree(mode = "regression", trees = 20), - args_list = arx_args) + args_list = arx_args +) out_arx_rf$predictions %>% head() ``` From bf2d17190b2dd17f485fb1c10ff3efa924441149 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 15 Sep 2022 02:00:52 -0700 Subject: [PATCH 028/382] fix linting, add model, various edits --- vignettes/panel-data.Rmd | 248 ++++++++++++++++++++++++++++----------- 1 file changed, 178 insertions(+), 70 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 073ada7e2..16f7aa7d3 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -18,12 +18,12 @@ knitr::opts_chunk$set( ```{r libraries} library(dplyr) +library(tidyr) library(parsnip) library(recipes) library(epiprocess) library(epipredict) library(ggplot2) -library(gridExtra) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -89,8 +89,7 @@ gemploy <- statcan_grad_employ %>% select(c( "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics" - )) %>% + "Characteristics after graduation", "Graduate statistics")) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -102,8 +101,7 @@ gemploy <- statcan_grad_employ %>% "age_group" = "Age group", "student_status" = "Status of student in Canada", "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics" - ) %>% + "grad_stat" = "Graduate statistics") %>% # The original `VALUE` column contain the statistic indicated by # `Graduate statistics` in the original data. Below we pivot the data # wider so that each unique statistic can have its own column. @@ -116,8 +114,7 @@ gemploy <- statcan_grad_employ %>% `Median employment income five years after graduation` = "med_income_5y" ), # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value) - ) %>% + time_value = as.integer(time_value)) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% filter( # Drop aggregates for some columns @@ -137,8 +134,7 @@ gemploy <- statcan_grad_employ %>% # Only keep "good" data is.na(status) & # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) - ) %>% + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% select(-c(status, gender, student_status, grad_charac, fos)) ``` @@ -157,12 +153,10 @@ a list of all the `type_type`s available. grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index = time_value, - key = c(geo_value, age_group, edu_qual) - ) %>% + key = c(geo_value, age_group, edu_qual)) %>% as_epi_df( geo_type = "custom", time_type = "year", - additional_metadata = c(other_keys = list("age_group", "edu_qual")) - ) + additional_metadata = c(other_keys = list("age_group", "edu_qual"))) ``` ```{r data-dim, include=F} @@ -203,7 +197,7 @@ In the following sections, we will go over preprocessing the data in the As a simple example, let's work with the `num_graduates` column for now. We will first pre-process by "standardizing" each numeric column by the total within each group of keys. We do this since those raw numeric values will vary greatly -from province to province since there are large differences in population. +from province to province since there are large differences in population. ```{r employ-small, include=T} employ_small <- employ %>% @@ -213,8 +207,7 @@ employ_small <- employ %>% mutate( num_graduates_prop = num_graduates / sum(num_graduates), med_income_2y_prop = med_income_2y / sum(med_income_2y), - med_income_5y_prop = med_income_5y / sum(med_income_5y) - ) %>% + med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% ungroup() head(employ_small) ``` @@ -241,7 +234,7 @@ AR(3) model). Such a model is represented algebraically like this: \[ x_{t+1} = - \phi_0 + \phi_1 x_{t} + \phi_2 x_{t-1} + \phi_3 x_{t-2} + \epsilon_t + \alpha_0 + \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t \] where $x_i$ is the proportion of graduates at time $i$, and the current time is @@ -271,11 +264,11 @@ and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -baked_sample <- r %>% - prep() %>% - bake(new_data = employ_small) %>% - sample_n(5) -baked_sample +bake_and_show_sample <- function(recipe, new_data, n=5) { + recipe %>% prep() %>% bake(new_data = new_data) %>% sample_n(n) +} + +bake_and_show_sample(r, employ_small) ``` We can see that the `prep` and `bake` steps created new columns according to @@ -286,7 +279,7 @@ our `epi_recipe`: `lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ respectively. -## Model fitting and prediction +## Model Fitting and Prediction Since our goal for now is to fit a simple autoregressive model, we can use [`parsnip::linear_reg()`]( @@ -297,36 +290,44 @@ We will use `epi_workflow` with the `epi_recipe` we defined in the preprocessing section along with the `parsnip::linear_reg()` model. Note again that `epi_workflow` is a container and doesn't actually do the fitting. We have to pass the workflow into `fit()` to get our model coefficients -$\phi_i, i=0,...,3$. +$\alpha_i, i=0,...,3$. ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% parsnip::fit(employ_small) -wf_linreg +summary(extract_fit_engine(wf_linreg)) ``` This output tells us the coefficients of the fitted model; for instance, -the intercept is $\phi_0 = 0.24804$ and the coefficient for $x_{t}$ is -$\phi_1 = 0.06648$. +the intercept is $\alpha_0 = 0.24804$ and the coefficient for $x_{t}$ is +$\alpha_1 = 0.06648$. The summary also tells us that only the intercept and lags +at 2 years and 3 years ago have coefficients significantly greater than zero. + +Extracting the 95% confidence intervals for the coefficients also leads us to +the same conclusion: all the coefficients except for $\alpha_1$ (lag 0) contain +0. + +```{r} +confint(extract_fit_engine(wf_linreg)) +``` Now that we have our workflow, we can generate predictions from a subset of our data. For this demo, we will predict the number of graduates using the last 2 years of our dataset. ```{r linearreg-predict, include=T} -latest <- employ_small %>% filter(time_value >= max(time_value) - 2) +latest <- get_test_data(recipe = r, x = employ_small) preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) # Display a sample of the prediction values, excluding NAs -preds %>% head() +preds %>% sample_n(5) ``` We can do this using the `augment` function too. Note that `predict` and `augment` both still return an `epi_df` with all of the keys that were present in the original dataset. -```{r linearreg-augment, include=T} -employ_small_with_preds <- augment(wf_linreg, latest) -employ_small_with_preds %>% head() +```{r linearreg-augment, include=T, eval=F} +augment(wf_linreg, latest) %>% sample_n(5) ``` ## Model Diagnostics @@ -338,79 +339,186 @@ fitted values ($\hat{y}_{t}$). employ_small_with_preds <- employ_small_with_preds %>% mutate(resid = num_graduates_prop - .pred) -p1 <- employ_small_with_preds %>% +employ_small_with_preds %>% ggplot(aes(x = .pred, y = resid)) + geom_point(size = 1.5, alpha = .8) + geom_smooth(method = "loess", color = "red", linetype = "dashed", size = .7) + xlab("Fitted values") + ylab("Residuals") + ggtitle("Plot of Fitted Values vs. Residuals in AR(3) Model") +``` -p2 <- employ_small_with_preds %>% +The fitted values vs. residuals plot shows us that the residuals are mostly +clustered around zero, but do not form an even band around the zero line, +indicating that the variance of the residuals is not constant. + +```{r linearreg-qqplot, include=T, warning=F} +employ_small_with_preds %>% ggplot(aes(sample = resid)) + stat_qq(alpha = .6) + stat_qq_line() + ggtitle("Q-Q Plot of Residuals") +``` + +The Q-Q plot shows us that the residuals have heavier tails than a Normal +distribution. So both the constant variance and normality assumptions of the +linear model have been violated. + +# Autoregressive Linear Model with Exogenous Inputs + +Now suppose we want to model the 5-year employment income using 3 lags, while +also incorporating information from the other two time-series in our dataset: +the 2-year employment income and the number of graduates in the previous 2 +years. We would do this using an autoregressive model with exogenous inputs, +defined as follows: -grid.arrange(p1, p2, ncol = 2) +\[ + y_{t+1} = + \alpha_0 + \alpha_1 y_{t} + \alpha_2 y_{t-1} + \alpha_3 y_{t-2} + + \beta_1 x_{t} + \beta_2 x_{t-1} + \gamma_2 z_{t} + \gamma_2 z_{t-1} +\] + +where $y_i$ is the 5-year median income (proportion) at time $i$, +$x_i$ is the 2-year median income (proportion) at time $i$, and +$z_i$ is the number of graduates (proportion) at time $i$. + +## Preprocessing + +Again, we construct an `epi_recipe` detailing the preprocessing steps. + +```{r custom-arx, include=T} +rx <- epi_recipe(employ_small) %>% + step_epi_ahead(med_income_5y_prop, ahead = 1) %>% + # 5-year median income has 3 lags c(0,1,2) + step_epi_lag(med_income_5y_prop, lag = c(0,1,2)) %>% + # But the two exogenous variables have 2 lags c(0,1) + step_epi_lag(med_income_2y_prop, lag = c(0,1)) %>% + step_epi_lag(num_graduates_prop, lag = c(0,1)) %>% + step_epi_naomit() + +bake_and_show_sample(rx, employ_small) ``` -The left plot shows us that the residuals are mostly clustered around zero, -but do not form an even band around the zero line, indicating that the variance -of the residuals is not constant. The right Q-Q plot shows us that the residuals -have heavier tails than a Normal distribution. So both the constant variance and -normality assumptions of the linear model have been violated. +## Model Fitting & Postprocessing + +Before fitting our model and making predictions, let's add some post-processing +steps using a few `frosting` layers to do a few things: + +1. Convert our predictions back to income values and number of graduates, +rather than standardized proportions. We do this via the frosting layer +`layer_population_scaling`. +2. Threshold our predictions to 0. We are predicting proportions, which can't +be negative. And the transformed values back to dollars and people can't be +negative either. +3. Generate prediction intervals based on residual quantiles, allowing us to +quantify the uncertainty associated with future predicted values. + +```{r custom-arx-post, include=T} +# Create dataframe of the sums we used for standardizing +# Only have to include med_income_5y since that is our outcome +totals <- employ_small %>% + group_by(geo_value, age_group, edu_qual) %>% + summarise(med_income_5y_tot = sum(med_income_5y)) + +# Define post-processing steps +f <- frosting() %>% + layer_predict() %>% + layer_naomit(.pred) %>% + layer_threshold(.pred, lower = 0) %>% + # 90% prediction interval + layer_residual_quantiles(probs = c(0.05, 0.95), symmetrize = F) %>% + layer_population_scaling( + .pred, .pred_distn, df = totals, df_pop_col = "med_income_5y_tot") + +wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% + fit(employ_small) %>% + add_frosting(f) + +summary(extract_fit_engine(wfx_linreg)) +``` + +Based on the summary output for this model, only the intercept term, 5-year +median income from 3 years ago, and the 2-year median income from 1 year ago +are significant linear predictors for today's 5-year median income at a 95% +confidence level. Both lags for the number of graduates were insigificant. + +Let's take a look at the predictions along with their 90% prediction intervals. + + ```{r} +latest <- get_test_data(recipe = rx, x = employ_small) +predsx <- predict(wfx_linreg, latest) + +# Display values within prediction intervals +predsx %>% + select( + geo_value, time_value, edu_qual, age_group, + .pred_original, .pred_distn_original) %>% + dplyr::mutate(.quantiles = nested_quantiles(.pred_distn_original)) %>% + tidyr::unnest(.quantiles) %>% + pivot_wider(names_from = tau, values_from = q) %>% + head() + ``` # Using canned forecasters -Even though we aren't working with epidemiological data, canned forecasters -still work as expected, out of the box. We will demonstrate this with the simple +We've seen what we can do with non-epidemiological panel data using the +recipes frame, with `epi_recipe` for preprocessing, `epi_workflow` for model +fitting, and `frosting` for postprocessing. + +`epipredict` also comes with canned forecasters that do all of those steps +behind the scenes for some simple models. Even though we aren't working with +epidemiological data, canned forecasters still work as expected, out of the box. +We will demonstrate this with the simple [`flatline_forecaster`]( https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) and the direct autoregressive (AR) forecaster [`arx_forecaster`]( https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). -With canned forecasters, we don't need to manually create a recipe and workflow; -we just need to specify the lags, aheads, and some additional arguments that -are passed in a forecast-specific way that we'll see below. +For both illustrations, we will continue to use the `employ_small` dataset +with the transformed numeric columns that are proportions within each group +by the keys in our `epi_df`. + +## Flatline Forecaster In this first example, we'll use `flatline_forecaster` to make a simple prediction of the 2-year median income for the next year, based on one previous time point. This model is representated algebraically as: -\[y_{t+1} = \phi_0 + \phi_1 y_{t}\] -where $y_i$ is the 2-year median income at time $i$. +\[y_{t+1} = \alpha_0 + \alpha_0 y_{t}\] +where $y_i$ is the 2-year median income (proportion) at time $i$. ```{r flatline, include=T, warning=F} -out_fl <- flatline_forecaster(employ_small, "med_income_2y", +out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", args_list = flatline_args_list( - ahead = 1L, forecast_date = as.Date("2015-01-01") - ) -) + ahead = 1L, forecast_date = as.Date("2015-01-01"))) -augment(out_fl$epi_workflow, employ_small) %>% head() +# The first argument to augment grabs the epi_workflow object from the +# forecaster output. +augment(out_fl$epi_workflow, employ_small) %>% sample_n(5) ``` +## Autoregressive Forecaster with Exogenous Inputs + In this second example, we'll use `arx_forecaster` to make a prediction of the -2-year median income based on the previous two time points' 2-year median -income _and_ 5-year median income. This model is represented algebraically as: -\[ - y_{t+1} = - \phi_0 + \phi_1 y_{t} + \phi_2 y_{t-1} + \phi_3 z_{t} + \phi_4 z_{t-1} -\] -where $y_i$ is as before, and $z_i$ is the 5-year median income at time $i$. +5-year median income based using two lags, _and_ using two lags on two exogenous +variables: 2-year median income and number of graduates. + +The canned forecaster gives us a simple way of making this forecast since it +defines the recipe, workflow, and post-processing steps behind the scenes. This +is very similar to the model we introduced in the "Autoregressive Linear Model +with Exogenous Inputs" section of this article, but where all inputs have the +same number of lags. ```{r arx-lr, include=T, warning=F} arx_args <- arx_args_list( - lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01") -) + lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01")) -out_arx_lr <- arx_forecaster(employ_small, "med_income_2y", - c("med_income_2y", "med_income_5y"), - args_list = arx_args -) +out_arx_lr <- arx_forecaster(employ_small, "med_income_5y_prop", + c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), + args_list = arx_args) -out_arx_lr$predictions %>% head() +augment(out_arx_lr$epi_workflow, employ_small) %>% sample_n(5) ``` Other changes to the direct AR forecaster, like changing the engine, also work @@ -418,10 +526,10 @@ as expected. Below we use a boosted tree model instead of a linear regression. ```{r arx-rf, include=T, warning=F} out_arx_rf <- arx_forecaster( - employ_small, "med_income_2y", c("med_income_2y", "med_income_5y"), + employ_small, "med_income_5y_prop", + c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), trainer = parsnip::boost_tree(mode = "regression", trees = 20), - args_list = arx_args -) + args_list = arx_args) -out_arx_rf$predictions %>% head() +augment(out_arx_rf$epi_workflow, employ_small) %>% sample_n(5) ``` From 9822f8d595730c56a31a5d5f88a5d574d1545af9 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 15 Sep 2022 02:05:30 -0700 Subject: [PATCH 029/382] fix data.R --- R/data.R | 24 ------------------------ man/epi_workflow.Rd | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/R/data.R b/R/data.R index 90bfc4073..1088853c8 100644 --- a/R/data.R +++ b/R/data.R @@ -57,30 +57,6 @@ #' and \url{https://www.census.gov/data/tables/2010/dec/2010-island-areas.html} "state_census" -#' Subset of Statistics Canada employment numbers by industry and province -#' -#' @format A tibble with 109,388 rows and 6 variables: -#' \describe{ -#' \item{geo_value}{The province in Canada associated with each -#' row of measurements.} -#' \item{time_value}{The time value, in YYYY-MM-01 format, -#' associated with each row of measurements.} -#' \item{ppl_count}{The number of people employed, seasonally -#' adjusted.} -#' \item{employee_type}{The type of employee} -#' \item{naics_industry}{The industry name and associated code -#' according to \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS}} -#' } -#' @source This object contains modified data from the following Statistics Canada -#' data table: \href{https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1410022001#data}{Table 14-10-0220-01 Employment and average weekly earnings (including overtime) for all employees by industry, monthly, seasonally adjusted, Canada} -#' -#' Modifications: -#' * From the given Statistics Canada table, the employee counts -#' are taken as-is. Only \href{https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553}{NAICS} codes at hierarchy level 2 are -#' filtered in. Only data rows that are \href{https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol}{good quality or higher and not missing} -#' according to Statistics Canada are removed. -"statcan_employ_subset" - #' Subset of Statistics Canada median employment income for postsecondary graduates #' #' @format A tibble with 1607 rows and 7 variables: diff --git a/man/epi_workflow.Rd b/man/epi_workflow.Rd index f9d753d84..bcf0e78aa 100644 --- a/man/epi_workflow.Rd +++ b/man/epi_workflow.Rd @@ -11,7 +11,7 @@ epi_workflow(preprocessor = NULL, spec = NULL, postprocessor = NULL) \itemize{ \item A formula, passed on to \code{\link[workflows:add_formula]{add_formula()}}. \item A recipe, passed on to \code{\link[workflows:add_recipe]{add_recipe()}}. -\item A \code{\link[workflows:workflow_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. +\item A \code{\link[workflows:add_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. }} \item{spec}{An optional parsnip model specification to add to the workflow. From 8d8d5280ce4b77f57d6dae0c90958fe75b050950 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 15 Sep 2022 02:06:46 -0700 Subject: [PATCH 030/382] remove raw data generation eda lines --- data-raw/grad_employ_subset.R | 96 ----------------------------------- 1 file changed, 96 deletions(-) diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index 36aa561bd..a5d605867 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -91,11 +91,6 @@ gemploy <- statcan_grad_employ %>% !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% select(-c(status, gender, student_status, grad_charac, fos)) -# gemploy$time_value %>% unique() -# class(gemploy$fos) -# class(gemploy$edu_qual) -# class(gemploy$age_group) -# head(gemploy) nrow(gemploy) ncol(gemploy) @@ -107,94 +102,3 @@ grad_employ_subset <- gemploy %>% geo_type = "custom", time_type = "year", as_of = "2022-07-19", additional_metadata = list(other_keys = c("age_group", "edu_qual"))) usethis::use_data(grad_employ_subset, overwrite = TRUE) - -# ================== EDA ================== - -statcan_grad_employ %>% - group_by(`Characteristics after graduation`) %>% - # filter(`Graduate statistics` == "Median employment income two years after graduation") %>% - filter(`Graduate statistics` == "Number of graduates") %>% - slice(1) %>% - select(`Characteristics after graduation`) - -names(statcan_grad_employ) -unique(statcan_grad_employ$REF_DATE) -# [1] "2010" "2011" "2012" "2013" "2014" "2015" - -unique(statcan_grad_employ$GEO) -# [1] "Canada" "Newfoundland and Labrador" -# [3] "Prince Edward Island" "Nova Scotia" -# [5] "New Brunswick" "Quebec" -# [7] "Ontario" "Manitoba" -# [9] "Saskatchewan" "Alberta" -# [11] "British Columbia" "Territories" -unique(statcan_grad_employ$DGUID) - -unique(statcan_grad_employ$UOM) -# [1] "Number" "2020 constant dollars" -statcan_grad_employ %>% - group_by(UOM, `Graduate statistics`) %>% - select(UOM, `Graduate statistics`, VALUE) %>% - slice(1) -unique(statcan_grad_employ$UOM_ID) - -unique(statcan_grad_employ$SCALAR_FACTOR) # "units" -unique(statcan_grad_employ$SCALAR_ID) # "0" - -length(unique(statcan_grad_employ$VECTOR)) -length(unique(statcan_grad_employ$COORDINATE)) - -length(unique(statcan_grad_employ$VALUE)) -unique(statcan_grad_employ$STATUS) -# [1] NA ".." "x" - -unique(statcan_grad_employ$SYMBOL) -# [1] NA - -unique(statcan_grad_employ$TERMINATED) -# [1] NA - -unique(statcan_grad_employ$DECIMALS) -# [1] "0" - -unique(statcan_grad_employ$GeoUID) -# redundant with geo - -unique(statcan_grad_employ$`Hierarchy for GEO`) -# redundant with geo - -unique(statcan_grad_employ$`Classification Code for Educational qualification`) # NA -unique(statcan_grad_employ$`Hierarchy for Educational qualification`) - -unique(statcan_grad_employ$`Classification Code for Field of study`) -unique(statcan_grad_employ$`Hierarchy for Field of study`) - -unique(statcan_grad_employ$`Classification Code for Gender`) # NA -unique(statcan_grad_employ$`Hierarchy for Gender`) - -unique(statcan_grad_employ$`Classification Code for Age group`) # NA -unique(statcan_grad_employ$`Hierarchy for Age group`) - -unique(statcan_grad_employ$`Classification Code for Status of student in Canada`) # NA -unique(statcan_grad_employ$`Hierarchy for Status of student in Canada`) - -unique(statcan_grad_employ$`Classification Code for Characteristics after graduation`) # NA -unique(statcan_grad_employ$`Hierarchy for Characteristics after graduation`) - -unique(statcan_grad_employ$`Classification Code for Graduate statistics`) # NA -unique(statcan_grad_employ$`Hierarchy for Graduate statistics`) - -length(unique(statcan_grad_employ$`val_norm`)) -statcan_grad_employ %>% filter(val_norm != VALUE) %>% nrow() #0 - -unique(statcan_grad_employ$`Date`) -# [1] "2010-07-01" "2011-07-01" "2012-07-01" "2013-07-01" "2014-07-01" -# [6] "2015-07-01" - -unique(statcan_grad_employ$`Educational qualification`) # 32 levels -unique(statcan_grad_employ$`Field of study`) # 60 levels -unique(statcan_grad_employ$`Gender`) -unique(statcan_grad_employ$`Age group`) -unique(statcan_grad_employ$`Status of student in Canada`) -unique(statcan_grad_employ$`Characteristics after graduation`) -unique(statcan_grad_employ$`Graduate statistics`) From e9f8751f43ebbc9da89cfe86fa9c01ad83bc28f0 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 15 Sep 2022 02:33:16 -0700 Subject: [PATCH 031/382] use extracted fit in plot --- vignettes/panel-data.Rmd | 50 +++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 16f7aa7d3..d02e20b9a 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -190,7 +190,7 @@ In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -# A Simple AR(3) Model Example +# Simple autoregressive with 3 lags to predict number of graduates in a year ## Preprocessing @@ -279,7 +279,7 @@ our `epi_recipe`: `lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ respectively. -## Model Fitting and Prediction +## Model fitting and prediction Since our goal for now is to fit a simple autoregressive model, we can use [`parsnip::linear_reg()`]( @@ -330,41 +330,33 @@ in the original dataset. augment(wf_linreg, latest) %>% sample_n(5) ``` -## Model Diagnostics +## Model diagnostics First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the fitted values ($\hat{y}_{t}$). -```{r lienarreg-resid-plot, include=T, warning=F} -employ_small_with_preds <- employ_small_with_preds %>% - mutate(resid = num_graduates_prop - .pred) - -employ_small_with_preds %>% - ggplot(aes(x = .pred, y = resid)) + - geom_point(size = 1.5, alpha = .8) + - geom_smooth(method = "loess", color = "red", linetype = "dashed", size = .7) + - xlab("Fitted values") + - ylab("Residuals") + - ggtitle("Plot of Fitted Values vs. Residuals in AR(3) Model") +```{r lienarreg-resid-plot, include=T, fig.height=8} +par(mfrow = c(2,2)); plot(extract_fit_engine(wf_linreg)) ``` The fitted values vs. residuals plot shows us that the residuals are mostly clustered around zero, but do not form an even band around the zero line, -indicating that the variance of the residuals is not constant. - -```{r linearreg-qqplot, include=T, warning=F} -employ_small_with_preds %>% - ggplot(aes(sample = resid)) + - stat_qq(alpha = .6) + - stat_qq_line() + - ggtitle("Q-Q Plot of Residuals") -``` +indicating that the variance of the residuals is not constant. Additionally, +the fitted values vs. square root of standardized residuals makes this more +obvious - the spread of the square root of standardized residuals varies with +the fitted values. The Q-Q plot shows us that the residuals have heavier tails than a Normal -distribution. So both the constant variance and normality assumptions of the -linear model have been violated. +distribution. So the normality of residuals assumption doesn't hold either. + +Finally, the residuals vs. leverage plot shows us that we have a few influential +points based on the Cooks distance (those outside the red dotted line). + +Since we appear to be violating the linear model assumptions, we might consider +transforming our data differently, or considering a non-linear model, or +something else. -# Autoregressive Linear Model with Exogenous Inputs +# Autoregressive model with exogenous inputs Now suppose we want to model the 5-year employment income using 3 lags, while also incorporating information from the other two time-series in our dataset: @@ -400,7 +392,7 @@ rx <- epi_recipe(employ_small) %>% bake_and_show_sample(rx, employ_small) ``` -## Model Fitting & Postprocessing +## Model fitting & postprocessing Before fitting our model and making predictions, let's add some post-processing steps using a few `frosting` layers to do a few things: @@ -480,7 +472,7 @@ For both illustrations, we will continue to use the `employ_small` dataset with the transformed numeric columns that are proportions within each group by the keys in our `epi_df`. -## Flatline Forecaster +## Flatline forecaster In this first example, we'll use `flatline_forecaster` to make a simple prediction of the 2-year median income for the next year, based on one previous @@ -498,7 +490,7 @@ out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", augment(out_fl$epi_workflow, employ_small) %>% sample_n(5) ``` -## Autoregressive Forecaster with Exogenous Inputs +## Autoregressive forecaster with exogenous inputs In this second example, we'll use `arx_forecaster` to make a prediction of the 5-year median income based using two lags, _and_ using two lags on two exogenous From 039abf51c8d33dd46c2d8b8166f2855e359aeaed Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Thu, 15 Sep 2022 02:35:32 -0700 Subject: [PATCH 032/382] add a hyperlink --- vignettes/panel-data.Rmd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index d02e20b9a..2d93ea8b9 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -395,7 +395,9 @@ bake_and_show_sample(rx, employ_small) ## Model fitting & postprocessing Before fitting our model and making predictions, let's add some post-processing -steps using a few `frosting` layers to do a few things: +steps using a few [`frosting`]( + https://cmu-delphi.github.io/epipredict/reference/frosting.html) layers to do +a few things: 1. Convert our predictions back to income values and number of graduates, rather than standardized proportions. We do this via the frosting layer From d04e2b43c614c4209e754d267d003b60521ff715 Mon Sep 17 00:00:00 2001 From: Maggie Liu Date: Sat, 17 Sep 2022 21:44:58 -0700 Subject: [PATCH 033/382] fix the build --- vignettes/panel-data.Rmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 2d93ea8b9..abc6a4af7 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -443,14 +443,14 @@ Let's take a look at the predictions along with their 90% prediction intervals. latest <- get_test_data(recipe = rx, x = employ_small) predsx <- predict(wfx_linreg, latest) -# Display values within prediction intervals +# Display values within prediction intervals predsx %>% select( - geo_value, time_value, edu_qual, age_group, - .pred_original, .pred_distn_original) %>% - dplyr::mutate(.quantiles = nested_quantiles(.pred_distn_original)) %>% + geo_value, time_value, edu_qual, age_group, + .pred_scaled, .pred_distn_scaled) %>% + dplyr::mutate(.quantiles = nested_quantiles(.pred_distn_scaled)) %>% tidyr::unnest(.quantiles) %>% - pivot_wider(names_from = tau, values_from = q) %>% + pivot_wider(names_from = tau, values_from = q) %>% head() ``` From 738bb683bed7e564047fff1d8b7542dea8eb1a5e Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Dec 2022 10:41:42 -0800 Subject: [PATCH 034/382] rebuild documentation --- man/epi_workflow.Rd | 2 +- man/flatline.Rd | 4 +++- man/grad_employ_subset.Rd | 9 +-------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/man/epi_workflow.Rd b/man/epi_workflow.Rd index bcf0e78aa..f9d753d84 100644 --- a/man/epi_workflow.Rd +++ b/man/epi_workflow.Rd @@ -11,7 +11,7 @@ epi_workflow(preprocessor = NULL, spec = NULL, postprocessor = NULL) \itemize{ \item A formula, passed on to \code{\link[workflows:add_formula]{add_formula()}}. \item A recipe, passed on to \code{\link[workflows:add_recipe]{add_recipe()}}. -\item A \code{\link[workflows:add_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. +\item A \code{\link[workflows:workflow_variables]{workflow_variables()}} object, passed on to \code{\link[workflows:add_variables]{add_variables()}}. }} \item{spec}{An optional parsnip model specification to add to the workflow. diff --git a/man/flatline.Rd b/man/flatline.Rd index a30272456..a396cfeb9 100644 --- a/man/flatline.Rd +++ b/man/flatline.Rd @@ -11,7 +11,9 @@ flatline(formula, data) would actually be the observed time series shifted forward by the forecast horizon. The right hand side must contain any keys (locations) for the panel data separated by plus. The observed time series must come last. -For example\if{html}{\out{

    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) +For example + +\if{html}{\out{
    }}\preformatted{form <- as.formula(lead7_y ~ state + age + y) }\if{html}{\out{
    }} Note that this function doesn't DO the shifting, that has to be done diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index c49791510..46ba36913 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -5,20 +5,13 @@ \alias{grad_employ_subset} \title{Subset of Statistics Canada median employment income for postsecondary graduates} \format{ -<<<<<<< HEAD -A tibble with 10193 rows and 8 variables: -======= -A tibble with 1607 rows and 7 variables: ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 +An \link[epiprocess:epi_df]{epiprocess::epi_df} with 10193 rows and 8 variables: \describe{ \item{geo_value}{The province in Canada associated with each row of measurements.} \item{time_value}{The time value, a year integer in YYYY format} \item{edu_qual}{The education qualification} -<<<<<<< HEAD \item{fos}{The field of study} -======= ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 \item{age_group}{The age group; either 15 to 34 or 35 to 64} \item{num_graduates}{The number of graduates for the given row of characteristics} \item{med_income_2y}{The median employment income two years after graduation} From fd4798d1fafefe0ba92e79f5762c3b57fbe098ef Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Dec 2022 11:05:18 -0800 Subject: [PATCH 035/382] merge main, fix conflicts --- data-raw/grad_employ_subset.R | 163 ++++----------------------- vignettes/panel-data.Rmd | 203 +--------------------------------- 2 files changed, 24 insertions(+), 342 deletions(-) diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index afef0c49c..e9358ecd8 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -8,7 +8,7 @@ library(tidyr) # https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501 statcan_grad_employ <- get_cansim("37-10-0115-01") -gemploy <- statcan_grad_employ %>% +gemploy <- statcan_grad_employ %>% select(c( "REF_DATE", "GEO", @@ -63,8 +63,8 @@ gemploy <- statcan_grad_employ %>% "grad_stat" = "Graduate statistics") %>% mutate( grad_stat = recode_factor( - grad_stat, - `Number of graduates` = "num_graduates", + grad_stat, + `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", `Median employment income five years after graduation` = "med_income_5y"), time_value = as.integer(time_value) @@ -72,143 +72,23 @@ gemploy <- statcan_grad_employ %>% pivot_wider(names_from = grad_stat, values_from = value) %>% filter( # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & -<<<<<<< HEAD - fos != "Total, field of study" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep -======= - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - fos == "Total, field of study" & ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% -<<<<<<< HEAD - select(-c(status, gender, student_status, grad_charac)) - -# gemploy$time_value %>% unique() -# class(gemploy$fos) -# class(gemploy$edu_qual) -# class(gemploy$age_group) -# head(gemploy) -nrow(gemploy) -ncol(gemploy) - -gemploy$grad_charac %>% unique() -gemploy %>% group_by(grad_charac) %>% slice(1) - -grad_employ_subset <- gemploy %>% - tsibble::as_tsibble( - index=time_value, - key=c(geo_value, age_group, fos, edu_qual)) %>% - as_epi_df( - geo_type = "custom", time_type = "year", as_of = "2022-07-19", - additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) -usethis::use_data(grad_employ_subset, overwrite = TRUE) - -# ================== EDA ================== - -statcan_grad_employ %>% - group_by(`Characteristics after graduation`) %>% - # filter(`Graduate statistics` == "Median employment income two years after graduation") %>% - filter(`Graduate statistics` == "Number of graduates") %>% - slice(1) %>% - select(`Characteristics after graduation`) - -names(statcan_grad_employ) -unique(statcan_grad_employ$REF_DATE) -# [1] "2010" "2011" "2012" "2013" "2014" "2015" - -unique(statcan_grad_employ$GEO) -# [1] "Canada" "Newfoundland and Labrador" -# [3] "Prince Edward Island" "Nova Scotia" -# [5] "New Brunswick" "Quebec" -# [7] "Ontario" "Manitoba" -# [9] "Saskatchewan" "Alberta" -# [11] "British Columbia" "Territories" -unique(statcan_grad_employ$DGUID) - -unique(statcan_grad_employ$UOM) -# [1] "Number" "2020 constant dollars" -statcan_grad_employ %>% - group_by(UOM, `Graduate statistics`) %>% - select(UOM, `Graduate statistics`, VALUE) %>% - slice(1) -unique(statcan_grad_employ$UOM_ID) - -unique(statcan_grad_employ$SCALAR_FACTOR) # "units" -unique(statcan_grad_employ$SCALAR_ID) # "0" - -length(unique(statcan_grad_employ$VECTOR)) -length(unique(statcan_grad_employ$COORDINATE)) - -length(unique(statcan_grad_employ$VALUE)) -unique(statcan_grad_employ$STATUS) -# [1] NA ".." "x" - -unique(statcan_grad_employ$SYMBOL) -# [1] NA - -unique(statcan_grad_employ$TERMINATED) -# [1] NA - -unique(statcan_grad_employ$DECIMALS) -# [1] "0" - -unique(statcan_grad_employ$GeoUID) -# redundant with geo - -unique(statcan_grad_employ$`Hierarchy for GEO`) -# redundant with geo - -unique(statcan_grad_employ$`Classification Code for Educational qualification`) # NA -unique(statcan_grad_employ$`Hierarchy for Educational qualification`) - -unique(statcan_grad_employ$`Classification Code for Field of study`) -unique(statcan_grad_employ$`Hierarchy for Field of study`) - -unique(statcan_grad_employ$`Classification Code for Gender`) # NA -unique(statcan_grad_employ$`Hierarchy for Gender`) - -unique(statcan_grad_employ$`Classification Code for Age group`) # NA -unique(statcan_grad_employ$`Hierarchy for Age group`) - -unique(statcan_grad_employ$`Classification Code for Status of student in Canada`) # NA -unique(statcan_grad_employ$`Hierarchy for Status of student in Canada`) - -unique(statcan_grad_employ$`Classification Code for Characteristics after graduation`) # NA -unique(statcan_grad_employ$`Hierarchy for Characteristics after graduation`) - -unique(statcan_grad_employ$`Classification Code for Graduate statistics`) # NA -unique(statcan_grad_employ$`Hierarchy for Graduate statistics`) - -length(unique(statcan_grad_employ$`val_norm`)) -statcan_grad_employ %>% filter(val_norm != VALUE) %>% nrow() #0 - -unique(statcan_grad_employ$`Date`) -# [1] "2010-07-01" "2011-07-01" "2012-07-01" "2013-07-01" "2014-07-01" -# [6] "2015-07-01" - -unique(statcan_grad_employ$`Educational qualification`) # 32 levels -unique(statcan_grad_employ$`Field of study`) # 60 levels -unique(statcan_grad_employ$`Gender`) -unique(statcan_grad_employ$`Age group`) -unique(statcan_grad_employ$`Status of student in Canada`) -unique(statcan_grad_employ$`Characteristics after graduation`) -unique(statcan_grad_employ$`Graduate statistics`) -======= + geo_value != "Canada" & + age_group != "15 to 64 years" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + fos == "Total, field of study" & + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% select(-c(status, gender, student_status, grad_charac, fos)) nrow(gemploy) @@ -216,10 +96,9 @@ ncol(gemploy) grad_employ_subset <- gemploy %>% tsibble::as_tsibble( - index=time_value, + index=time_value, key=c(geo_value, age_group, edu_qual)) %>% as_epi_df( geo_type = "custom", time_type = "year", as_of = "2022-07-19", additional_metadata = list(other_keys = c("age_group", "edu_qual"))) usethis::use_data(grad_employ_subset, overwrite = TRUE) ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 9411e6b60..d4f799218 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -17,13 +17,6 @@ knitr::opts_chunk$set( ``` ```{r libraries} -<<<<<<< HEAD -library(epiprocess) -library(epipredict) -library(dplyr) -library(parsnip) -library(recipes) -======= library(dplyr) library(tidyr) library(parsnip) @@ -31,7 +24,6 @@ library(recipes) library(epiprocess) library(epipredict) library(ggplot2) ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -43,41 +35,25 @@ dataset, which contains daily state-wise measures of `case_rate` and `death_rate` for COVID-19 in 2021: ```{r epi-panel-ex, include=T} -<<<<<<< HEAD -head(case_death_rate_subset) -======= head(case_death_rate_subset, 3) ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 ``` `epipredict` functions work with data in [`epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) format. Despite the stated goal and name of the package, other panel datasets -<<<<<<< HEAD -are also valid candidates for `epipredict` functionality. Specifically, the -`epipredict` framework and direct forecasters can work with any panel data, as -long as it's in `epi_df` format. -======= are also valid candidates for `epipredict` functionality, as long as they are in `epi_df` format. ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 ```{r employ-stats, include=F} +data("grad_employ_subset") year_start <- min(grad_employ_subset$time_value) year_end <- max(grad_employ_subset$time_value) ``` -<<<<<<< HEAD -## Example panel data overview - -In this vignette, we will demonstrate using `epipredict` with employment data -from Statistics Canada. We will be using -======= # Example panel data overview In this vignette, we will demonstrate using `epipredict` with employment panel data from Statistics Canada. We will be using ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 [ Table 37-10-0115-01: Characteristics and median employment income of longitudinal cohorts of postsecondary graduates two and five years after @@ -87,11 +63,7 @@ data from Statistics Canada. We will be using The full dataset contains yearly median employment income two and five years after graduation, and number of graduates. The data is stratified by -<<<<<<< HEAD -variables such as geographic region (Canadian province), field of study, and -======= variables such as geographic region (Canadian province), education, and ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 age group. The year range of the dataset is `r year_start` to `r year_end`, inclusive. The full dataset also contains metadata that describes the quality of data collected. For demonstration purposes, we make the following @@ -99,17 +71,10 @@ modifications to get a subset of the full dataset: * Only keep provincial-level geographic region (the full data also has "Canada" as a region) -<<<<<<< HEAD -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`] -(https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column -* Choose a subset of covariates and aggregate across the remaining ones. The -chosen covariates are age group, field of study, and educational qualification. -======= * Only keep "good" or better quality data rows, as indicated by the [`STATUS`]( https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column * Choose a subset of covariates and aggregate across the remaining ones. The chosen covariates are age group, and educational qualification. ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 Below is the query for obtaining the full data and code for subsetting it as we just described: @@ -117,15 +82,6 @@ just described: ```{r employ-query, eval=F} library(cansim) -<<<<<<< HEAD -# Get original dataset -statcan_grad_employ <- get_cansim("37-10-0115-01") - -gemploy <- statcan_grad_employ %>% - # Drop some columns and rename the ones we keep - select(c("REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", - "Field of study", "Gender", "Age group", "Status of student in Canada", -======= # Get statcan data using get_cansim, which returns a tibble statcan_grad_employ <- get_cansim("37-10-0115-01") @@ -134,7 +90,6 @@ gemploy <- statcan_grad_employ %>% select(c( "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", "Field of study", "Gender", "Age group", "Status of student in Canada", ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 "Characteristics after graduation", "Graduate statistics")) %>% rename( "geo_value" = "GEO", @@ -148,47 +103,12 @@ gemploy <- statcan_grad_employ %>% "student_status" = "Status of student in Canada", "grad_charac" = "Characteristics after graduation", "grad_stat" = "Graduate statistics") %>% -<<<<<<< HEAD - # The original `VALUE` column contain the statistic indicated by - # `Graduate statistics` in the original data. Below we pivot the data -======= # The original `VALUE` column contain the statistic indicated by # `Graduate statistics` in the original data. Below we pivot the data ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 # wider so that each unique statistic can have its own column. mutate( # Recode for easier pivoting grad_stat = recode_factor( -<<<<<<< HEAD - grad_stat, - `Number of graduates` = "num_graduates", - `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y"), - # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value) - ) %>% - pivot_wider(names_from = grad_stat, values_from = value) %>% - filter( - # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & - fos != "Total, field of study" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% - select(-c(status, gender, student_status, grad_charac)) -======= grad_stat, `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", @@ -217,46 +137,19 @@ gemploy <- statcan_grad_employ %>% # Drop NA value rows !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% select(-c(status, gender, student_status, grad_charac, fos)) ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 ``` To use this data with `epipredict`, we need to convert it into `epi_df` format using [`as_epi_df`]( https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -<<<<<<< HEAD -with additional keys. In our case, the additional keys are `age_group`, `fos` -and `edu_qual`. Note that in the above modifications, we encoded `time_value` -as type `integer`. This allows us to set `time_type` to `"year"`, and to ensure -======= with additional keys. In our case, the additional keys are `age_group`, and `edu_qual`. Note that in the above modifications, we encoded `time_value` as type `integer`. This lets us set `time_type = "year"`, and ensures that ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 lag and ahead modifications later on are using the correct time units. See the [`epi_df` documentation]( https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for a list of all the `type_type`s available. -<<<<<<< HEAD - -```{r convert-to-epidf, eval=F} -grad_employ_subset <- gemploy %>% - tsibble::as_tsibble( - index=time_value, - key=c(geo_value, age_group, fos, edu_qual)) %>% - as_epi_df( - geo_type = "custom", time_type = "year", - additional_metadata=c(other_keys=list("age_group", "fos", "edu_qual"))) -``` - -```{r data-dim, include=F} -employ_rowcount <- format(nrow(grad_employ_subset), big.mark=",") -employ_colcount <- length(names(grad_employ_subset)) -``` - -The data contains `r employ_rowcount` rows and `r employ_colcount` columns. Now, -we are ready to use `grad_employ_subset` with `epipredict`. -======= ```{r convert-to-epidf, eval=F} grad_employ_subset <- gemploy %>% tsibble::as_tsibble( @@ -286,8 +179,7 @@ after graduation * `age_group` (key): one of two age groups, either 15 to 34 years, or 35 to 64 years * `edu_qual` (key): one of 32 unique educational qualifications, e.g., -"Master's disploma" ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 +"Master's diploma" ```{r preview-data, include=T} # Rename for simplicity @@ -299,62 +191,6 @@ In the following sections, we will go over preprocessing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -<<<<<<< HEAD -## Preprocessing - -We will create a recipe that adds one `ahead` column and 3 `lag` columns. - -```{r make-recipe, include=T} -r <- epi_recipe(employ) %>% - step_epi_ahead(num_graduates, ahead = 1) %>% # lag & ahead units in years - step_epi_lag(num_graduates, lag = c(0, 1, 1)) %>% - step_epi_naomit() -r -``` - -There is one `raw` role which includes our value column `num_graduates`, and two -`key` roles which include our additional keys `age_group`, `fos` and -`edu_qual`. Let's take a look at what these additional columns look like. - -```{r view-preprocessed, include=T} -# Display a sample of the preprocessed data -baked_sample <- r %>% prep() %>% bake(new_data = employ) %>% sample_n(5) -baked_sample -``` - -## Model fitting and prediction - -### Within recipes framework - -We will look at a simple model: `parsnip::linear_reg()` with default engine -`lm`. We can use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section to fit an autoregressive linear model using lags at -time $t$ (current), $t-1$ (last year), and $t-2$ (2 years ago). - -```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% fit(employ) -wf_linreg -``` - -Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the employment counts from the last 12 -months of our dataset. - -```{r linearreg-predict, include=T} -latest <- employ %>% filter(time_value >= max(time_value) - 12) -preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) -# Display a sample of the prediction values -head(preds) -``` - -Notice that `predict` still returns an `epi_df` with all of the keys that were -present in the original dataset. - -### With canned forecasters - -Even though we aren't working with epidemiological data, canned forecasters -still work as expected, out of the box. We will demonstrate this with the simple -======= # Simple autoregressive with 3 lags to predict number of graduates in a year ## Preprocessing @@ -381,7 +217,7 @@ Below is a visualization for a sample of the small data. Note that some groups do not have any time series information since we filtered out all timeseries with incomplete dates. -```{r employ-small-graph, include=T, eval=T} +```{r employ-small-graph, include=T, eval=T, fig.width=9, fig.height=6} employ_small %>% filter(geo_value %in% c("British Columbia", "Ontario")) %>% filter(grepl("degree", edu_qual, fixed = T)) %>% @@ -629,44 +465,12 @@ fitting, and `frosting` for postprocessing. behind the scenes for some simple models. Even though we aren't working with epidemiological data, canned forecasters still work as expected, out of the box. We will demonstrate this with the simple ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 [`flatline_forecaster`]( https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) and the direct autoregressive (AR) forecaster [`arx_forecaster`]( https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). -<<<<<<< HEAD -```{r flatline, include=T} -out_fl <- flatline_forecaster(employ, "med_income_2y", - args_list = flatline_args_list( - ahead=1L, forecast_date = as.Date("2022-08-16"))) - -augment(out_fl$epi_workflow, employ) -``` - -```{r arx-lr, include=T} -arx_args <- arx_args_list( - lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2022-08-01")) - -out_arx_lr <- arx_forecaster(employ, "med_income_2y", - c("med_income_2y", "med_income_5y", "num_graduates"), - args_list = arx_args) - -out_arx_lr$predictions -``` - -Other changes to the direct AR forecaster, like changing the engine, also work -as expected. - -```{r arx-rf, include=F, warning=F} -out_arx_rf <- arx_forecaster( - employ, "med_income_2y", c("med_income_2y", "med_income_5y", "num_graduates"), - trainer = parsnip::boost_tree(mode = "regression", trees = 20), - args_list = arx_args) - -out_arx_rf$predictions -======= For both illustrations, we will continue to use the `employ_small` dataset with the transformed numeric columns that are proportions within each group by the keys in our `epi_df`. @@ -723,5 +527,4 @@ out_arx_rf <- arx_forecaster( args_list = arx_args) augment(out_arx_rf$epi_workflow, employ_small) %>% sample_n(5) ->>>>>>> d04e2b43c614c4209e754d267d003b60521ff715 ``` From 13b9fd96fd1e6a785e6764e0e566372e35e8be2f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 5 Nov 2023 09:20:06 -0800 Subject: [PATCH 036/382] implement epi_df method --- .Rprofile | 2 ++ R/autoplot.R | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 R/autoplot.R diff --git a/.Rprofile b/.Rprofile index 172816a78..b77495b70 100644 --- a/.Rprofile +++ b/.Rprofile @@ -9,3 +9,5 @@ document <- function() { if (R.utils::isPackageLoaded("parsnip")) devtools::unload("parsnip") devtools::document() } + +options(lifecycle_verbosity = "warning") diff --git a/R/autoplot.R b/R/autoplot.R new file mode 100644 index 000000000..7f797ab1c --- /dev/null +++ b/R/autoplot.R @@ -0,0 +1,93 @@ +autoplot.epi_workflow <- function(object, ..., .max_keys = Inf) { + if (!workflows::is_trained_workflow(object)) { + cli::cli_abort(c( + "Can't plot an untrained {.cls epi_workflow}.", + i = "Do you need to call `fit()`?" + )) + } + + mold <- workflows::extract_mold(object) + y <- mold$outcomes + if (ncol(y) > 1) { + y <- y[,1] + cli::cli_warn("Multiple outcome variables were detected. Displaying only 1.") + } + edf <- dplyr::bind_cols(mold$extras, y) + if (starts_with_impl("ahead_", names(y))) { + new_name_y <- unlist(strsplit(names(y), "_")) + shift <- -as.numeric(new_name_y[2]) + edf <- dplyr::rename(edf, !!new_name_y[3] := !!names(y)) + } else if (starts_with_impl("lag_", names(y))) { + new_name_y <- unlist(strsplit(names(y), "_")) + shift <- as.numeric(new_name_y[2]) + edf <- dplyr::rename(edf, !!new_name_y[3] := !!names(y)) + } + + if (!is.null(shift)) { + edf <- dplyr::mutate(edf, time_value = time_value + shift_back) + } + autoplot(edf, ..., .max_keys = .max_keys) +} + +autoplot.epi_df <- function(object, ..., .max_keys = Inf) { + ek <- epi_keys(object) + mv <- setdiff(names(object), ek) + ek <- kill_time_value(ek) + allowed <- map_lgl(object[mv], is.numeric) + if (length(allowed) == 0) { + cli::cli_abort("No numeric variables were available to plot automatically.") + } + vars <- tidyselect::eval_select(rlang::expr(c(...)), object) + if (rlang::is_empty(vars)) { + vars <- tidyselect::eval_select(names(allowed)[1], object) + cli::cli_warn( + "Plot variable was unspecified. Automatically selecting {.var {allowed[1]}}." + ) + } else { + ok <- names(vars) %in% names(allowed) + if (!any(ok)) { + cli::cli_abort( + "None of the requested variables {.var {names(vars)}} are numeric." + ) + } else if (!all(ok)) { + cli::cli_warn(c( + "Only the requested variables {.var {names(vars)[ok]}} are numeric.", + i = "`autoplot()` cannot display {.var {names(vars)[!ok]}}." + )) + vars <- vars[ok] + } + } + pos <- tidyselect::eval_select(expr(c("time_value", ek, names(vars))), object) + if (length(vars) > 1) { + object <- tidyr::pivot_longer( + object[pos], tidyselect::all_of(names(vars)), + values_to = ".response" + ) + } else { + object <- dplyr::rename(object[pos], .response := !!names(vars)) + } + + cc <- rlang::expr(interaction(!!!syms(as.list(ek)), sep = "/")) + p <- ggplot2::ggplot( + object, + ggplot2::aes(x = .data$time_value, y = .data$.response) + ) + + ggplot2::geom_line( + ggplot2::aes(colour = !!cc), + key_glyph = "timeseries" + ) + + ggplot2::scale_colour_viridis_d(name = "") + + ggplot2::theme_bw() + + if (length(vars) > 1) { + p <- p + ggplot2::facet_wrap(~name, scales = "free_y") + ggplot2::ylab("") + } else { + p <- p + ggplot2::ylab(names(vars)) + } + p +} + +starts_with_impl <- function(x, vars) { + n <- nchar(x) + which(x == substr(vars, 1, n)) +} From dd1705839b9246497a09d46dc7784f19a6661d52 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 5 Nov 2023 09:26:27 -0800 Subject: [PATCH 037/382] document / export --- NAMESPACE | 3 +++ R/autoplot.R | 9 ++++++++- man/reexports.Rd | 5 ++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index ffa7432e1..73e4321b4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,7 @@ S3method(adjust_frosting,frosting) S3method(apply_frosting,default) S3method(apply_frosting,epi_workflow) S3method(augment,epi_workflow) +S3method(autoplot,epi_df) S3method(bake,epi_recipe) S3method(bake,step_epi_ahead) S3method(bake,step_epi_lag) @@ -124,6 +125,7 @@ export(arx_class_epi_workflow) export(arx_classifier) export(arx_fcast_epi_workflow) export(arx_forecaster) +export(autoplot) export(bake) export(cdc_baseline_args_list) export(cdc_baseline_forecaster) @@ -194,6 +196,7 @@ importFrom(cli,cli_abort) importFrom(epiprocess,growth_rate) importFrom(generics,augment) importFrom(generics,fit) +importFrom(ggplot2,autoplot) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(lifecycle,deprecated) diff --git a/R/autoplot.R b/R/autoplot.R index 7f797ab1c..127bc25e8 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -1,3 +1,9 @@ + +#' @importFrom ggplot2 autoplot +#' @export +ggplot2::autoplot + + autoplot.epi_workflow <- function(object, ..., .max_keys = Inf) { if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( @@ -29,6 +35,7 @@ autoplot.epi_workflow <- function(object, ..., .max_keys = Inf) { autoplot(edf, ..., .max_keys = .max_keys) } +#' @export autoplot.epi_df <- function(object, ..., .max_keys = Inf) { ek <- epi_keys(object) mv <- setdiff(names(object), ek) @@ -41,7 +48,7 @@ autoplot.epi_df <- function(object, ..., .max_keys = Inf) { if (rlang::is_empty(vars)) { vars <- tidyselect::eval_select(names(allowed)[1], object) cli::cli_warn( - "Plot variable was unspecified. Automatically selecting {.var {allowed[1]}}." + "Plot variable was unspecified. Automatically selecting {.var {names(allowed)[1]}}." ) } else { ok <- names(vars) %in% names(allowed) diff --git a/man/reexports.Rd b/man/reexports.Rd index b23f00698..d376e1281 100644 --- a/man/reexports.Rd +++ b/man/reexports.Rd @@ -1,8 +1,9 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/reexports-tidymodels.R +% Please edit documentation in R/autoplot.R, R/reexports-tidymodels.R \docType{import} \name{reexports} \alias{reexports} +\alias{autoplot} \alias{fit} \alias{prep} \alias{bake} @@ -15,6 +16,8 @@ below to see their documentation. \describe{ \item{generics}{\code{\link[generics]{fit}}} + \item{ggplot2}{\code{\link[ggplot2]{autoplot}}} + \item{recipes}{\code{\link[recipes]{bake}}, \code{\link[recipes]{prep}}} }} From d6524ee8fe9b34b61c6b39fee51f4031891f6762 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 7 Nov 2023 12:32:55 -0500 Subject: [PATCH 038/382] missing rlang hook --- R/autoplot.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/autoplot.R b/R/autoplot.R index 127bc25e8..40ccbb8b5 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -64,7 +64,9 @@ autoplot.epi_df <- function(object, ..., .max_keys = Inf) { vars <- vars[ok] } } - pos <- tidyselect::eval_select(expr(c("time_value", ek, names(vars))), object) + pos <- tidyselect::eval_select( + rlang::expr(c("time_value", ek, names(vars))), object + ) if (length(vars) > 1) { object <- tidyr::pivot_longer( object[pos], tidyselect::all_of(names(vars)), @@ -74,7 +76,7 @@ autoplot.epi_df <- function(object, ..., .max_keys = Inf) { object <- dplyr::rename(object[pos], .response := !!names(vars)) } - cc <- rlang::expr(interaction(!!!syms(as.list(ek)), sep = "/")) + cc <- rlang::expr(interaction(!!!rlang::syms(as.list(ek)), sep = "/")) p <- ggplot2::ggplot( object, ggplot2::aes(x = .data$time_value, y = .data$.response) From 04742ed3867699d605d3c0a584865ef78607645d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 15 Nov 2023 13:55:10 -0800 Subject: [PATCH 039/382] fix a bug that might have allowed unordered quantile extrapolation, simplify options --- R/dist_quantiles.R | 85 +++++++--------------------- tests/testthat/test-dist_quantiles.R | 11 ++++ 2 files changed, 30 insertions(+), 66 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 750e9560d..0e4ef340f 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -174,18 +174,14 @@ mean.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "line #' @import distributional quantile.dist_quantiles <- function( x, p, ..., - middle = c("cubic", "linear"), - left_tail = c("normal", "exponential"), - right_tail = c("normal", "exponential")) { + middle = c("cubic", "linear")) { arg_is_probabilities(p) middle <- match.arg(middle) - left_tail <- match.arg(left_tail) - right_tail <- match.arg(right_tail) - quantile_extrapolate(x, p, middle, left_tail, right_tail) + quantile_extrapolate(x, p, middle) } -quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { +quantile_extrapolate <- function(x, tau_out, middle) { tau <- field(x, "quantile_levels") qvals <- field(x, "values") r <- range(tau, na.rm = TRUE) @@ -196,10 +192,10 @@ quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { if (all(tau_out %in% tau)) { return(qvals[match(tau_out, tau)]) } - if (length(qvals) < 3 || r[1] > .25 || r[2] < .75) { + if (length(qvals) < 2 || r[1] > .5 || r[2] < .5) { cli::cli_warn(c( "Quantile extrapolation is not possible with fewer than", - "3 quantiles or when the probs don't span [.25, .75]" + "2 values or when the probabilties don't span 0.5." )) return(qvals_out) } @@ -214,87 +210,44 @@ quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { { Q <- stats::splinefun(tau, qvals, method = "hyman") qvals_out[indm] <- Q(tau_out[indm]) - quartiles <- Q(c(.25, .5, .75)) }, error = function(e) { return(NA) } ) } - if (middle == "linear" || any(is.na(result))) { - method <- "linear" - quartiles <- stats::approx(tau, qvals, c(.25, .5, .75))$y - } + if (middle == "linear" || any(is.na(result))) method <- "linear" if (any(indm)) { qvals_out[indm] <- switch(method, linear = stats::approx(tau, qvals, tau_out[indm])$y, cubic = Q(tau_out[indm]) ) + tau <- sort(unique(c(tau, tau_out[indm]))) + qvals <- sort(unique(c(qvals, qvals_out[indm]))) } if (any(indl)) { - qvals_out[indl] <- tail_extrapolate( - tau_out[indl], quartiles, "left", left_tail - ) + ta <- head(tau, 2) + qv <- head(qvals, 2) + qvals_out[indl] <- normal_tail(tau_out[indl], ta, qv, "left") } if (any(indr)) { - qvals_out[indr] <- tail_extrapolate( - tau_out[indr], quartiles, "right", right_tail - ) + ta <- tail(tau, 2) + qv <- tail(qvals, 2) + qvals_out[indr] <- normal_tail(tau_out[indr], ta, qv, "right") } qvals_out } -tail_extrapolate <- function(tau_out, quartiles, tail, type) { - if (tail == "left") { - p <- c(.25, .5) - par <- quartiles[1:2] - } - if (tail == "right") { - p <- c(.75, .5) - par <- quartiles[3:2] - } - if (type == "normal") { - return(norm_tail_q(p, par, tau_out)) - } - if (type == "exponential") { - return(exp_tail_q(p, par, tau_out)) - } +normal_tail <- function(tau_out, tau, qvals, lr = c("left", "right")) { + lr <- match.arg(lr) + s <- abs(diff(qvals)) / abs(diff(qnorm(tau))) + m <- qvals[1] - s * qnorm(tau[1]) + qnorm(tau_out, m, s) } -exp_q_par <- function(q) { - # tau should always be c(.75, .5) or c(.25, .5) - iqr <- 2 * abs(diff(q)) - s <- iqr / (2 * log(2)) - m <- q[2] - return(list(m = m, s = s)) -} - -exp_tail_q <- function(p, q, target) { - ms <- exp_q_par(q) - qlaplace(target, ms$m, ms$s) -} - -qlaplace <- function(p, centre = 0, b = 1) { - # lower.tail = TRUE, log.p = FALSE - centre - b * sign(p - 0.5) * log(1 - 2 * abs(p - 0.5)) -} - -norm_q_par <- function(q) { - # tau should always be c(.75, .5) or c(.25, .5) - iqr <- 2 * abs(diff(q)) - s <- iqr / 1.34897950039 # abs(diff(qnorm(c(.75, .25)))) - m <- q[2] - return(list(m = m, s = s)) -} - -norm_tail_q <- function(p, q, target) { - ms <- norm_q_par(q) - stats::qnorm(target, ms$m, ms$s) -} - #' @method Math dist_quantiles #' @export Math.dist_quantiles <- function(x, ...) { diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 4fc5587d4..d5b0cf6d6 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -34,6 +34,17 @@ test_that("single dist_quantiles works, quantiles are accessible", { ) }) +test_that("normal tail extrapolator works", { + tau <- c(.5, .75) + v <- qnorm(tau, 2, 3) + expect_equal(normal_tail(c(.8, .9), tau, v, "right"), qnorm(c(.8, .9), 2, 3)) + + tau <- c(.25, .4) + v <- qnorm(tau, -1, 3) + expect_equal(normal_tail(c(.1, .2), tau, v, "left"), qnorm(c(.1, .2), -1, 3)) + expect_equal(normal_tail(c(.1, .3), tau, v, "left"), qnorm(c(.1, .3), -1, 3)) +}) + test_that("quantile extrapolator works", { dstn <- dist_normal(c(10, 2), c(5, 10)) qq <- extrapolate_quantiles(dstn, p = c(.25, 0.5, .75)) From 8c6222928868bc0842da49f64108fbb1d1cc92d3 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 15 Nov 2023 13:56:05 -0800 Subject: [PATCH 040/382] add autoplot method --- NAMESPACE | 3 + R/autoplot.R | 278 ++++++++++++++++++++++++++++++++++++++++++++++----- R/epi_keys.R | 11 +- 3 files changed, 265 insertions(+), 27 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 73e4321b4..153b8df6a 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,7 +10,9 @@ S3method(adjust_frosting,frosting) S3method(apply_frosting,default) S3method(apply_frosting,epi_workflow) S3method(augment,epi_workflow) +S3method(autoplot,canned_epipred) S3method(autoplot,epi_df) +S3method(autoplot,epi_workflow) S3method(bake,epi_recipe) S3method(bake,step_epi_ahead) S3method(bake,step_epi_lag) @@ -23,6 +25,7 @@ S3method(detect_layer,workflow) S3method(epi_keys,data.frame) S3method(epi_keys,default) S3method(epi_keys,epi_df) +S3method(epi_keys,epi_workflow) S3method(epi_keys,recipe) S3method(epi_recipe,default) S3method(epi_recipe,epi_df) diff --git a/R/autoplot.R b/R/autoplot.R index 40ccbb8b5..b0673fe70 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -1,10 +1,17 @@ - #' @importFrom ggplot2 autoplot #' @export ggplot2::autoplot - -autoplot.epi_workflow <- function(object, ..., .max_keys = Inf) { +#' @export +autoplot.epi_workflow <- function( + object, predictions = NULL, + .levels = c(.5, .8, .95), + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "#3A448F", + .pred_line_color = "orange", + .max_facets = Inf) { + arg_is_probabilities(.levels) if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( "Can't plot an untrained {.cls epi_workflow}.", @@ -15,42 +22,127 @@ autoplot.epi_workflow <- function(object, ..., .max_keys = Inf) { mold <- workflows::extract_mold(object) y <- mold$outcomes if (ncol(y) > 1) { - y <- y[,1] + y <- y[, 1] cli::cli_warn("Multiple outcome variables were detected. Displaying only 1.") } - edf <- dplyr::bind_cols(mold$extras, y) + keys <- c("time_value", "geo_value", "key") + mold_roles <- names(mold$extras$roles) + edf <- dplyr::bind_cols(mold$extras$roles[mold_roles %in% keys], y) if (starts_with_impl("ahead_", names(y))) { - new_name_y <- unlist(strsplit(names(y), "_")) - shift <- -as.numeric(new_name_y[2]) - edf <- dplyr::rename(edf, !!new_name_y[3] := !!names(y)) + old_name_y <- unlist(strsplit(names(y), "_")) + shift <- -as.numeric(old_name_y[2]) + new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") + edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) } else if (starts_with_impl("lag_", names(y))) { - new_name_y <- unlist(strsplit(names(y), "_")) - shift <- as.numeric(new_name_y[2]) - edf <- dplyr::rename(edf, !!new_name_y[3] := !!names(y)) + old_name_y <- unlist(strsplit(names(y), "_")) + shift <- as.numeric(old_name_y[2]) + new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") + edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) } if (!is.null(shift)) { - edf <- dplyr::mutate(edf, time_value = time_value + shift_back) + edf <- dplyr::mutate(edf, time_value = time_value + shift) + } + extra_keys <- setdiff(epi_keys_mold(mold), c("time_value", "geo_value")) + if (length(extra_keys) == 0L) extra_keys <- NULL + edf <- as_epi_df(edf, + as_of = wf$fit$meta$as_of, + additional_metadata = list(other_keys = extra_keys) + ) + if (is.null(predictions)) { + return(autoplot( + edf, new_name_y, + .color_by = .colour_by, .facet_by = .facet_by, .base_color = .base_color, + .max_facets = .max_facets + )) + } + + pred_cols_ok <- hardhat::check_column_names(predictions, epi_keys(edf)) + if (!pred_cols_ok$ok) { + cli::cli_warn(c( + "`predictions` is missing required variables: {.var {pred_cols_ok$missing_names}}.", + i = "Plotting the original data." + )) + return(autoplot( + edf, !!new_name_y, + .color_by = .colour_by, .facet_by = .facet_by, .base_color = .base_color, + .max_facets = .max_facets + )) + } + + # First we plot the history, always faceted by everything + bp <- autoplot(edf, !!new_name_y, + .color_by = "none", .facet_by = "all_keys", + .base_color = "black", .max_facets = .max_facets + ) + + # Now, prepare matching facets in the predictions + ek <- kill_time_value(epi_keys(edf)) + predictions <- predictions %>% + dplyr::mutate( + .facets = interaction(!!!rlang::syms(as.list(ek)), sep = "/"), + ) + if (.max_facets < Inf) { + top_n <- levels(as.factor(bp$data$.facets))[seq_len(.max_facets)] + predictions <- dplyr::filter(predictions, .facets %in% top_n) %>% + dplyr::mutate(.facets = droplevels(.facets)) } - autoplot(edf, ..., .max_keys = .max_keys) + + + if (".pred_distn" %in% names(predictions)) { + bp <- plot_bands(bp, predictions, .levels, .base_color) + } + + if (".pred" %in% names(predictions)) { + ntarget_dates <- dplyr::n_distinct(predictions$time_value) + if (ntarget_dates > 1L) { + bp <- bp + + ggplot2::geom_line( + data = predictions, aes(y = .data$.pred), + color = .pred_line_color + ) + } else { + bp <- bp + + ggplot2::geom_point( + data = predictions, aes(y = .data$.pred), + color = .pred_line_color + ) + } + } + bp } #' @export -autoplot.epi_df <- function(object, ..., .max_keys = Inf) { +autoplot.epi_df <- function( + object, ..., + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "#3A448F", + .max_facets = Inf) { + .color_by <- match.arg(.color_by) + .facet_by <- match.arg(.facet_by) + + arg_is_pos(.max_facets) + arg_is_scalar(.max_facets) + if (is.finite(.max_facets)) arg_is_int(.max_facets) + arg_is_chr_scalar(.base_color) + ek <- epi_keys(object) mv <- setdiff(names(object), ek) ek <- kill_time_value(ek) + + # --- check for numeric variables allowed <- map_lgl(object[mv], is.numeric) if (length(allowed) == 0) { cli::cli_abort("No numeric variables were available to plot automatically.") } vars <- tidyselect::eval_select(rlang::expr(c(...)), object) - if (rlang::is_empty(vars)) { + if (rlang::is_empty(vars)) { # find them automatically if unspecified vars <- tidyselect::eval_select(names(allowed)[1], object) cli::cli_warn( "Plot variable was unspecified. Automatically selecting {.var {names(allowed)[1]}}." ) - } else { + } else { # if variables were specified, ensure that they are numeric ok <- names(vars) %in% names(allowed) if (!any(ok)) { cli::cli_abort( @@ -64,39 +156,173 @@ autoplot.epi_df <- function(object, ..., .max_keys = Inf) { vars <- vars[ok] } } + + # --- create a viable df to plot pos <- tidyselect::eval_select( rlang::expr(c("time_value", ek, names(vars))), object ) if (length(vars) > 1) { object <- tidyr::pivot_longer( object[pos], tidyselect::all_of(names(vars)), - values_to = ".response" + values_to = ".response", + names_to = ".response_name" ) } else { object <- dplyr::rename(object[pos], .response := !!names(vars)) } + all_keys <- rlang::syms(as.list(ek)) + other_keys <- rlang::syms(as.list(setdiff(ek, "geo_value"))) + all_avail <- rlang::syms(as.list(c(ek, ".response_name"))) + + object <- object %>% + dplyr::mutate( + .colours = switch(.color_by, + all_keys = interaction(!!!all_keys, sep = "/"), + geo_value = geo_value, + other_keys = interaction(!!!other_keys, sep = "/"), + all = interaction(!!!all_avail, sep = "/"), + NULL + ), + .facets = switch(.facet_by, + all_keys = interaction(!!!all_keys, sep = "/"), + geo_value = as.factor(geo_value), + other_keys = interaction(!!!other_keys, sep = "/"), + all = interaction(!!!all_avail, sep = "/"), + NULL + ) + ) + + if (.max_facets < Inf && ".facets" %in% names(object)) { + n_facets <- nlevels(object$.facets) + if (n_facets > .max_facets) { + top_n <- levels(as.factor(object$.facets))[seq_len(.max_facets)] + object <- dplyr::filter(object, .facets %in% top_n) %>% + dplyr::mutate(.facets = droplevels(.facets)) + if (".colours" %in% names(object)) { + object <- dplyr::mutate(object, .colours = droplevels(.colours)) + } + } + } - cc <- rlang::expr(interaction(!!!rlang::syms(as.list(ek)), sep = "/")) p <- ggplot2::ggplot( object, - ggplot2::aes(x = .data$time_value, y = .data$.response) + ggplot2::aes(x = .data$time_value) ) + - ggplot2::geom_line( - ggplot2::aes(colour = !!cc), + ggplot2::theme_bw() + + if (".colours" %in% names(object)) { + p <- p + ggplot2::geom_line( + ggplot2::aes(y = .data$.response, colour = .data$.colours), key_glyph = "timeseries" ) + - ggplot2::scale_colour_viridis_d(name = "") + - ggplot2::theme_bw() + ggplot2::scale_colour_viridis_d(name = "") + } else if (length(vars) > 1 && .color_by == ".response") { + p <- p + + ggplot2::geom_line(ggplot2::aes( + y = .data$.response, colour = .data$.response_name + )) + + ggplot2::scale_colour_viridis_d(name = "") + } else { # none + p <- p + + ggplot2::geom_line(ggplot2::aes(y = .data$.response), color = .base_color) + } - if (length(vars) > 1) { - p <- p + ggplot2::facet_wrap(~name, scales = "free_y") + ggplot2::ylab("") + if (".facets" %in% names(object)) { + p <- p + ggplot2::facet_wrap(~.facets, scales = "free_y") + + ggplot2::ylab(names(vars)) + if (.facet_by == "all") p <- p + ggplot2::ylab("") + } else if ((length(vars) > 1 && .facet_by == ".response")) { + p <- p + ggplot2::facet_wrap(~.response_name, scales = "free_y") + + ggplot2::ylab("") } else { p <- p + ggplot2::ylab(names(vars)) } p } +#' @export +autoplot.canned_epipred <- function( + object, ..., + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "#3A448F", + .max_facets = Inf) { + rlang::check_dots_empty() + ewf <- object$epi_workflow + predictions <- object$predictions %>% + dplyr::rename(time_value = target_date) + + autoplot(ewf, predictions, + .color_by = .color_by, .facet_by = .facet_by, + .base_color = .base_color, .max_facets = .max_facets + ) +} + starts_with_impl <- function(x, vars) { n <- nchar(x) - which(x == substr(vars, 1, n)) + x == substr(vars, 1, n) +} + +plot_bands <- function( + base_plot, predictions, + levels = c(.5, .8, .95), + fill = "#3A448F", + alpha = 0.6, + linewidth = 0.05) { + innames <- names(predictions) + n <- length(levels) + alpha <- alpha / (n - 1) + l <- (1 - levels) / 2 + l <- c(rev(l), 1 - l) + + ntarget_dates <- dplyr::n_distinct(predictions$time_value) + + predictions <- predictions %>% + dplyr::mutate(.pred_distn = dist_quantiles(quantile(.pred_distn, l), l)) %>% + pivot_quantiles_wider(.pred_distn) + qnames <- setdiff(names(predictions), innames) + + for (i in 1:n) { + bottom <- qnames[i] + top <- rev(qnames)[i] + if (i == 1) { + if (ntarget_dates > 1L) { + base_plot <- base_plot + + ggplot2::geom_ribbon( + data = predictions, + ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + alpha = 0.2, linewidth = linewidth, fill = fill + ) + } else { + base_plot <- base_plot + + ggplot2::geom_linerange( + data = predictions, + ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + alpha = 0.2, linewidth = 2, color = fill + ) + } + } else { + if (ntarget_dates > 1L) { + base_plot <- base_plot + + ggplot2::geom_ribbon( + data = predictions, + ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + fill = fill, alpha = alpha + ) + } else { + base_plot <- base_plot + + ggplot2::geom_linerange( + data = predictions, + ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + color = fill, alpha = alpha, linewidth = 2 + ) + } + } + } + base_plot +} + + +find_level <- function(x) { + unique((x < .5) * (1 - 2 * x) + (x > .5) * (1 - 2 * (1 - x))) } diff --git a/R/epi_keys.R b/R/epi_keys.R index 4a00cbd46..08e4595c3 100644 --- a/R/epi_keys.R +++ b/R/epi_keys.R @@ -24,7 +24,7 @@ epi_keys.data.frame <- function(x, other_keys = character(0L), ...) { #' @export epi_keys.epi_df <- function(x, ...) { - c("time_value", "geo_value", attributes(x)$metadata$other_keys) + c("time_value", "geo_value", attr(x, "metadata")$other_keys) } #' @export @@ -32,6 +32,11 @@ epi_keys.recipe <- function(x, ...) { x$var_info$variable[x$var_info$role %in% c("time_value", "geo_value", "key")] } +#' @export +epi_keys.epi_workflow <- function(x, ...) { + epi_keys_mold(hardhat::extract_mold(x)) +} + # a mold is a list extracted from a fitted workflow, gives info about # training data. But it doesn't have a class epi_keys_mold <- function(mold) { @@ -45,3 +50,7 @@ kill_time_value <- function(v) { arg_is_chr(v) v[v != "time_value"] } + +epi_keys_only <- function(x, ...) { + kill_time_value(epi_keys(x, ...)) +} From 666702c81945e6a6c6c90881da84d72aa9d10493 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 22 Jan 2024 15:10:12 -0800 Subject: [PATCH 041/382] ci+doc: pull request template, version instructions, pkgdown --- .github/pull_request_template.md | 21 ++++++++++++ .github/workflows/pkgdown.yaml | 24 ++++++++++---- DEVELOPMENT.md | 56 ++++++++++++++++++++++++++++++++ NEWS.md | 22 ++----------- 4 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 .github/pull_request_template.md create mode 100644 DEVELOPMENT.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..7a7e9ae77 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,21 @@ +### Checklist + +Please: + +- [ ] Make sure this PR is against "dev", not "main". +- [ ] Request a review from one of the current epipredict main reviewers: + dajmcdon. +- [ ] Makes sure to bump the version number in `DESCRIPTION` and `NEWS.md`. + Always increment the patch version number (the third number), unless you are + making a release PR from dev to main, in which case increment the minor + version number (the second number). +- [ ] Describe changes made in NEWS.md, making sure breaking changes + (backwards-incompatible changes to the documented interface) are noted. + Collect the changes under the next release number (e.g. if you are on + 0.7.2, then write your changes under the 0.8 heading). + +### Change explanations for reviewer + +### Magic GitHub syntax to mark associated Issue(s) as resolved when this is merged into the default branch + +- Resolves #{issue number} diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 245e43c59..9490acc78 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -1,10 +1,12 @@ -# Workflow derived from https://github.com/r-lib/actions/tree/master/examples +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help # -# Created with usethis + edited to use API key. +# Created with usethis + edited to run on PRs to dev, use API key. on: push: - branches: [main, master] + branches: [dev, main] + pull_request: + branches: [dev, main] release: types: [published] workflow_dispatch: @@ -13,6 +15,8 @@ name: pkgdown jobs: pkgdown: + # only build docs on the main repository and not forks + if: github.repository_owner == 'cmu-delphi' runs-on: ubuntu-latest # Only restrict concurrency for non-PR jobs concurrency: @@ -20,7 +24,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: r-lib/actions/setup-pandoc@v2 @@ -35,13 +39,19 @@ jobs: - name: Build site env: - DELPHI_EPIDATA_KEY: ${{ secrets.SECRET_EPIPREDICT_GHACTIONS_DELPHI_EPIDATA_KEY }} - run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + DELPHI_EPIDATA_KEY: ${{ secrets.SECRET_EPIPROCESS_GHACTIONS_DELPHI_EPIDATA_KEY }} + run: | + if (startsWith("${{ github.event_name }}", "pull_request")) { + mode <- ifelse("${{ github.base_ref }}" == "main", "release", "devel") + } else { + mode <- ifelse("${{ github.ref_name }}" == "main", "release", "devel") + } + pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE, override=list(PKGDOWN_DEV_MODE=mode)) shell: Rscript {0} - name: Deploy to GitHub pages 🚀 if: github.event_name != 'pull_request' - uses: JamesIves/github-pages-deploy-action@4.1.4 + uses: JamesIves/github-pages-deploy-action@v4.4.1 with: clean: false branch: gh-pages diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 000000000..4bc5733ee --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,56 @@ +## Setting up the development environment + +```r +install.packages(c('devtools', 'pkgdown', 'styler', 'lintr')) # install dev dependencies +devtools::install_deps(dependencies = TRUE) # install package dependencies +devtools::document() # generate package meta data and man files +devtools::build() # build package +``` + +## Validating the package + +```r +styler::style_pkg() # format code +lintr::lint_package() # lint code + +devtools::test() # test package +devtools::check() # check package for errors +``` + +## Developing the documentation site + +The [documentation site](https://cmu-delphi.github.io/epipredict/) is built off of the `main` branch. The `dev` version of the site is available at https://cmu-delphi.github.io/epipredict/dev. + +The documentation site can be previewed locally by running in R + +```r +pkgdown::build_site(preview=TRUE) +``` + +The `main` version is available at `file:////epidatr/epipredict/index.html` and `dev` at `file:////epipredict/docs/dev/index.html`. + +You can also build the docs manually and launch the site with python. From the terminal, this looks like +```bash +R -e 'devtools::document()' +python -m http.server -d docs +``` + +## Versioning + +Please follow the guidelines in the PR template document (reproduced here): + +- [ ] Make sure this PR is against "dev", not "main". +- [ ] Request a review from one of the current epipredict main reviewers: + dajmcdon. +- [ ] Makes sure to bump the version number in `DESCRIPTION` and `NEWS.md`. + Always increment the patch version number (the third number), unless you are + making a release PR from dev to main, in which case increment the minor + version number (the second number). +- [ ] Describe changes made in NEWS.md, making sure breaking changes + (backwards-incompatible changes to the documented interface) are noted. + Collect the changes under the next release number (e.g. if you are on + 0.7.2, then write your changes under the 0.8 heading). + +## Release process + +TBD diff --git a/NEWS.md b/NEWS.md index d2cbc0d29..80eb9f19b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,49 +1,33 @@ # epipredict (development) -# epipredict 0.0.8 +Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicate PR's. + +# epipredict 0.1 - add `check_enough_train_data` that will error if training data is too small - added `check_enough_train_data` to `arx_forecaster` - -# epipredict 0.0.7 - - simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` - -# epipredict 0.0.6 - - rename the `dist_quantiles()` to be more descriptive, breaking change) - removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) - add `pivot_quantiles_wider()` for easier plotting - add complement `pivot_quantiles_longer()` - add `cdc_baseline_forecaster()` and `flusight_hub_formatter()` - -# epipredict 0.0.5 - - add `smooth_quantile_reg()` - improved printing of various methods / internals - canned forecasters get a class - fixed quantile bug in `flatline_forecaster()` - add functionality to output the unfit workflow from the canned forecasters - -# epipredict 0.0.4 - - add quantile_reg() - clean up documentation bugs - add smooth_quantile_reg() - add classifier - training window step debugged - `min_train_window` argument removed from canned forecasters - -# epipredict 0.0.3 - - add forecasters - implement postprocessing - vignettes avaliable - arx_forecaster - pkgdown - -# epipredict 0.0.0.9000 - - Publish public for easy navigation - Two simple forecasters as test beds - Working vignette From 6a83de6bc444854a07532e1eee16fceb0c6c6f7c Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 26 Jan 2024 15:24:04 -0800 Subject: [PATCH 042/382] refactor: use checkmate for arg validation --- DESCRIPTION | 1 + NAMESPACE | 11 ++ R/epipredict-package.R | 3 + R/utils-arg.R | 207 +++++++++------------------------- tests/testthat/test-arg_is_.R | 17 +-- 5 files changed, 73 insertions(+), 166 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index b0b592e2a..07c72e98a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,6 +27,7 @@ Depends: parsnip (>= 1.0.0), R (>= 3.5.0) Imports: + checkmate, cli, distributional, dplyr, diff --git a/NAMESPACE b/NAMESPACE index fc7a7ea00..3c63145b3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -195,6 +195,17 @@ import(distributional) import(epiprocess) import(parsnip) import(recipes) +importFrom(checkmate,assert) +importFrom(checkmate,assert_character) +importFrom(checkmate,assert_date) +importFrom(checkmate,assert_function) +importFrom(checkmate,assert_int) +importFrom(checkmate,assert_integer) +importFrom(checkmate,assert_integerish) +importFrom(checkmate,assert_logical) +importFrom(checkmate,assert_number) +importFrom(checkmate,assert_numeric) +importFrom(checkmate,assert_scalar) importFrom(cli,cli_abort) importFrom(dplyr,across) importFrom(dplyr,all_of) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 11e2ec833..69eb05bdc 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -4,6 +4,9 @@ #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort #' @importFrom lifecycle deprecated +#' @importFrom checkmate assert assert_character assert_int assert_scalar +#' assert_logical assert_numeric assert_number assert_integer +#' assert_integerish assert_date assert_function #' @import epiprocess parsnip ## usethis namespace: end NULL diff --git a/R/utils-arg.R b/R/utils-arg.R index 091987722..b4242eaf9 100644 --- a/R/utils-arg.R +++ b/R/utils-arg.R @@ -2,204 +2,103 @@ # http://adv-r.had.co.nz/Computing-on-the-language.html#substitute # Modeled after / copied from rundel/ghclass -handle_arg_list <- function(..., tests) { +handle_arg_list <- function(..., .tests) { values <- list(...) names <- eval(substitute(alist(...))) names <- map(names, deparse) - walk2(names, values, tests) + walk2(names, values, .tests) } arg_is_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (length(value) > 1 | (!allow_null & length(value) == 0)) { - cli::cli_abort("Argument {.val {name}} must be of length 1.") - } - if (!is.null(value)) { - if (is.na(value) & !allow_na) { - cli::cli_abort( - "Argument {.val {name}} must not be a missing value ({.val {NA}})." - ) - } - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_scalar(value, null.ok = allow_null, na.ok = allow_na, .var.name = name) + }) } - arg_is_lgl <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (is.null(value) & !allow_null) { - cli::cli_abort("Argument {.val {name}} must be of logical type.") - } - if (any(is.na(value)) & !allow_na) { - cli::cli_abort("Argument {.val {name}} must not contain any missing values ({.val {NA}}).") - } - if (!is.null(value) & (length(value) == 0 & !allow_empty)) { - cli::cli_abort("Argument {.val {name}} must have length >= 1.") - } - if (!is.null(value) & length(value) != 0 & !is.logical(value)) { - cli::cli_abort("Argument {.val {name}} must be of logical type.") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_logical(value, null.ok = allow_null, any.missing = allow_na, min.len = as.integer(!allow_empty), .var.name = name) + }) } arg_is_lgl_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { - arg_is_lgl(..., allow_null = allow_null, allow_na = allow_na) - arg_is_scalar(..., allow_null = allow_null, allow_na = allow_na) + handle_arg_list(..., .tests = function(name, value) { + assert_logical(value, null.ok = allow_null, any.missing = allow_na, min.len = 1, max.len = 1, .var.name = name) + }) } arg_is_numeric <- function(..., allow_null = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (!(is.numeric(value) | (is.null(value) & allow_null))) { - cli::cli_abort("All {.val {name}} must numeric.") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_numeric(value, null.ok = allow_null, any.missing = FALSE, .var.name = name) + }) } arg_is_pos <- function(..., allow_null = FALSE) { - arg_is_numeric(..., allow_null = allow_null) - handle_arg_list( - ..., - tests = function(name, value) { - if (!(all(value > 0) | (is.null(value) & allow_null))) { - cli::cli_abort("All {.val {name}} must be positive number(s).") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_numeric(value, lower = 1, null.ok = allow_null, any.missing = FALSE, .var.name = name) + }) } arg_is_nonneg <- function(..., allow_null = FALSE) { - arg_is_numeric(..., allow_null = allow_null) - handle_arg_list( - ..., - tests = function(name, value) { - if (!(all(value >= 0) | (is.null(value) & allow_null))) { - cli::cli_abort("All {.val {name}} must be nonnegative number(s).") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_numeric(value, lower = 0, null.ok = allow_null, any.missing = FALSE, .var.name = name) + }) } arg_is_int <- function(..., allow_null = FALSE) { - arg_is_numeric(..., allow_null = allow_null) - handle_arg_list( - ..., - tests = function(name, value) { - if (!(all(value %% 1 == 0) | (is.null(value) & allow_null))) { - cli::cli_abort("All {.val {name}} must be whole positive number(s).") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_integerish(value, null.ok = allow_null, .var.name = name) + }) } arg_is_pos_int <- function(..., allow_null = FALSE) { - arg_is_int(..., allow_null = allow_null) - arg_is_pos(..., allow_null = allow_null) + handle_arg_list(..., .tests = function(name, value) { + assert_integerish(value, null.ok = allow_null, lower = 1, any.missing = FALSE, .var.name = name) + }) } - arg_is_nonneg_int <- function(..., allow_null = FALSE) { - arg_is_int(..., allow_null = allow_null) - arg_is_nonneg(..., allow_null = allow_null) -} - -arg_is_date <- function(..., allow_null = FALSE, allow_na = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (is.null(value) & !allow_null) { - cli::cli_abort("Argument {.val {name}} may not be `NULL`.") - } - if (any(is.na(value)) & !allow_na) { - cli::cli_abort("Argument {.val {name}} must not contain any missing values ({.val {NA}}).") - } - if (!(is(value, "Date") | is.null(value) | all(is.na(value)))) { - cli::cli_abort("Argument {.val {name}} must be a Date. Try `as.Date()`.") - } - } - ) -} - -arg_is_probabilities <- function(..., allow_null = FALSE) { - arg_is_numeric(..., allow_null = allow_null) - handle_arg_list( - ..., - tests = function(name, value) { - if (!((all(value >= 0) && all(value <= 1)) | (is.null(value) & allow_null))) { - cli::cli_abort("All {.val {name}} must be in [0,1].") - } - } - ) + handle_arg_list(..., .tests = function(name, value) { + assert_integerish(value, null.ok = allow_null, lower = 0, any.missing = FALSE, .var.name = name) + }) } -arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (is.null(value) & !allow_null) { - cli::cli_abort("Argument {.val {name}} may not be `NULL`.") - } - if (any(is.na(value)) & !allow_na) { - cli::cli_abort("Argument {.val {name}} must not contain any missing values ({.val {NA}}).") - } - if (!is.null(value) & (length(value) == 0L & !allow_empty)) { - cli::cli_abort("Argument {.val {name}} must have length > 0.") - } - if (!(is.character(value) | is.null(value) | all(is.na(value)))) { - cli::cli_abort("Argument {.val {name}} must be of character type.") - } - } - ) +arg_is_date <- function(..., allow_null = FALSE) { + handle_arg_list(..., .tests = function(name, value) { + assert_date(value, null.ok = allow_null, .var.name = name) + }) } -arg_is_chr_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { - arg_is_chr(..., allow_null = allow_null, allow_na = allow_na) - arg_is_scalar(..., allow_null = allow_null, allow_na = allow_na) +arg_is_probabilities <- function(..., allow_null = FALSE, allow_na = FALSE) { + handle_arg_list(..., .tests = function(name, value) { + assert_numeric(value, lower = 0, upper = 1, null.ok = allow_null, any.missing = allow_na, .var.name = name) + }) } - -arg_is_function <- function(..., allow_null = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (is.null(value) & !allow_null) { - cli::cli_abort("Argument {.val {name}} must be a function.") - } - if (!is.null(value) & !is.function(value)) { - cli::cli_abort("Argument {.val {name}} must be a function.") - } - } - ) +arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE) { + handle_arg_list(..., .tests = function(name, value) { + assert_character(value, null.ok = allow_null, any.missing = allow_na, min.len = as.integer(!allow_empty), .var.name = name) + }) } - - -arg_is_sorted <- function(..., allow_null = FALSE) { - handle_arg_list( - ..., - tests = function(name, value) { - if (is.unsorted(value, na.rm = TRUE) | (is.null(value) & !allow_null)) { - cli::cli_abort("{.val {name}} must be sorted in increasing order.") - } - } - ) +arg_is_chr_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { + handle_arg_list(..., .tests = function(name, value) { + assert_character(value, null.ok = allow_null, any.missing = allow_na, min.len = 1, max.len = 1, .var.name = name) + }) } +arg_is_function <- function(..., allow_null = FALSE) { + handle_arg_list(..., .tests = function(name, value) { + assert_function(value, null.ok = allow_null, .var.name = name) + }) +} -arg_to_date <- function(x, allow_null = FALSE, allow_na = FALSE) { - arg_is_scalar(x, allow_null = allow_null, allow_na = allow_na) +arg_to_date <- function(x, allow_null = FALSE) { + arg_is_scalar(x, allow_null = allow_null) if (!is.null(x)) { x <- tryCatch(as.Date(x, origin = "1970-01-01"), error = function(e) NA) } - arg_is_date(x, allow_null = allow_null, allow_na = allow_na) + arg_is_date(x, allow_null = allow_null) x } diff --git a/tests/testthat/test-arg_is_.R b/tests/testthat/test-arg_is_.R index 7ca6f1d7f..52a4a16db 100644 --- a/tests/testthat/test-arg_is_.R +++ b/tests/testthat/test-arg_is_.R @@ -44,7 +44,7 @@ test_that("scalar", { test_that("numeric", { expect_silent(arg_is_numeric(i, j, x, y)) expect_error(arg_is_numeric(a)) - expect_error(arg_is_numeric(d)) + expect_silent(arg_is_numeric(d)) expect_silent(arg_is_numeric(c(i, j))) expect_silent(arg_is_numeric(i, k)) expect_silent(arg_is_numeric(i, j, n, allow_null = TRUE)) @@ -56,7 +56,7 @@ test_that("numeric", { test_that("positive", { expect_silent(arg_is_pos(i, j, x, y)) expect_error(arg_is_pos(a)) - expect_error(arg_is_pos(d)) + expect_silent(arg_is_pos(d)) expect_silent(arg_is_pos(c(i, j))) expect_error(arg_is_pos(i, k)) expect_silent(arg_is_pos(i, j, n, allow_null = TRUE)) @@ -68,7 +68,7 @@ test_that("positive", { test_that("nonneg", { expect_silent(arg_is_nonneg(i, j, x, y)) expect_error(arg_is_nonneg(a)) - expect_error(arg_is_nonneg(d)) + expect_silent(arg_is_nonneg(d)) expect_silent(arg_is_nonneg(c(i, j))) expect_error(arg_is_nonneg(i, k)) expect_silent(arg_is_nonneg(i, j, n, allow_null = TRUE)) @@ -96,7 +96,8 @@ test_that("date", { expect_error(arg_is_date(d, dd, n)) expect_error(arg_is_date(d, dd, nn)) expect_silent(arg_is_date(d, dd, n, allow_null = TRUE)) - expect_silent(arg_is_date(d, dd, nn, allow_na = TRUE)) + # Upstream issue, see: https://github.com/mllg/checkmate/issues/256 + # expect_silent(arg_is_date(d, dd, nn, allow_na = TRUE)) expect_error(arg_is_date(a)) expect_error(arg_is_date(v)) expect_error(arg_is_date(ll)) @@ -136,14 +137,6 @@ test_that("function", { expect_silent(arg_is_function(g, f = NULL, allow_null = TRUE)) }) -test_that("sorted", { - expect_silent(arg_is_sorted(a = 1:5, b = 6:10)) - expect_error(arg_is_sorted(a = 5:1, b = 6:10)) - expect_error(arg_is_sorted(b = NULL)) - expect_silent(arg_is_sorted(b = NULL, allow_null = TRUE)) -}) - - test_that("coerce scalar to date", { expect_error(arg_to_date("12345")) expect_s3_class(arg_to_date(12345), "Date") From cbb1d72fc0c66bbfb08f3dab209491774bea3345 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 29 Jan 2024 13:16:37 -0800 Subject: [PATCH 043/382] ci: make R CMD check run on dev --- .github/workflows/R-CMD-check.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index c4bcd6b68..1c8055ff0 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -4,9 +4,9 @@ # Created with usethis + edited to use API key. on: push: - branches: [main, master] + branches: [main, dev] pull_request: - branches: [main, master] + branches: [main, dev] name: R-CMD-check From f805c3b6c4216e68472c6c2b008ec9380d9b5da7 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 29 Jan 2024 14:19:45 -0800 Subject: [PATCH 044/382] doc: bump version --- DESCRIPTION | 2 +- NEWS.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 07c72e98a..c451f755b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.8 +Version: 0.0.9 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 80eb9f19b..3c5034080 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,7 +7,7 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - add `check_enough_train_data` that will error if training data is too small - added `check_enough_train_data` to `arx_forecaster` - simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` -- rename the `dist_quantiles()` to be more descriptive, breaking change) +- rename the `dist_quantiles()` to be more descriptive, breaking change - removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) - add `pivot_quantiles_wider()` for easier plotting - add complement `pivot_quantiles_longer()` @@ -31,3 +31,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Publish public for easy navigation - Two simple forecasters as test beds - Working vignette +- use `checkmate` for input validation From baed3136e1101e320f8db86ee85535025ca20da2 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 29 Jan 2024 15:11:05 -0800 Subject: [PATCH 045/382] doc: update installation instructions to reference stable branch --- README.Rmd | 38 ++++++++++++++++++++------------------ README.md | 44 ++++++++++++++++++++++++-------------------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/README.Rmd b/README.Rmd index c5dc66cab..36af14cd9 100644 --- a/README.Rmd +++ b/README.Rmd @@ -24,24 +24,26 @@ knitr::opts_chunk$set( ## Installation -You can install the development version of epipredict from [GitHub](https://github.com/) with: +To install (unless you're making changes to the package, use the stable version): -``` r -# install.packages("remotes") -remotes::install_github("cmu-delphi/epipredict") +```r +# Stable version +pak::pkg_install("cmu-delphi/epipredict@main") + +# Dev version +pak::pkg_install("cmu-delphi/epipredict@dev") ``` ## Documentation You can view documentation for the `main` branch at . - ## Goals for `epipredict` **We hope to provide:** -1. A set of basic, easy-to-use forecasters that work out of the box. You should be able to do a reasonably limited amount of customization on them. For the basic forecasters, we currently provide: - * Baseline flatline forecaster +1. A set of basic, easy-to-use forecasters that work out of the box. You should be able to do a reasonably limited amount of customization on them. For the basic forecasters, we currently provide: + * Baseline flatline forecaster * Autoregressive forecaster * Autoregressive classifier * CDC FluSight flatline forecaster @@ -54,12 +56,12 @@ You can view documentation for the `main` branch at ══ A basic forecaster of type ARX Forecaster ═══════════════════════════════ #> -#> This forecaster was fit on 2023-12-23 09:12:46. +#> This forecaster was fit on 2024-01-29 15:10:01. #> #> Training data was an with: #> • Geography: state, @@ -203,7 +207,7 @@ through the end of 2021 for the 14th of January 2022. A prediction for the death rate per 100K inhabitants is available for every state (`geo_value`) along with a 90% predictive interval. -[^1]: Other epidemiological signals for non-Covid related illnesses are +1. Other epidemiological signals for non-Covid related illnesses are also available with [`{epidatr}`](https://github.com/cmu-delphi/epidatr) which interfaces directly to Delphi’s [Epidata From ebb60adc1037fc22b955b460eee38673088c2930 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 3 Feb 2024 09:26:48 -0800 Subject: [PATCH 046/382] ignore vignette caches --- vignettes/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 097b24163..2c6ab8d7f 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,2 +1,3 @@ *.html *.R +*_cache/ From 009abf5a1bb144e5837c7eb438ddded6e6772139 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 3 Feb 2024 10:30:52 -0800 Subject: [PATCH 047/382] merge dev and minor revisions --- DESCRIPTION | 2 +- data-raw/grad_employ_subset.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c451f755b..d1e966278 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,4 +72,4 @@ Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.0 +RoxygenNote: 7.3.1 diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index e9358ecd8..4a0218ae7 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -96,8 +96,8 @@ ncol(gemploy) grad_employ_subset <- gemploy %>% tsibble::as_tsibble( - index=time_value, - key=c(geo_value, age_group, edu_qual)) %>% + index = time_value, + key = c(geo_value, age_group, edu_qual)) %>% as_epi_df( geo_type = "custom", time_type = "year", as_of = "2022-07-19", additional_metadata = list(other_keys = c("age_group", "edu_qual"))) From 4871589374d5faf0ad9d76094cc120d912782291 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 3 Feb 2024 10:31:06 -0800 Subject: [PATCH 048/382] bug: blocked by #291 --- vignettes/panel-data.Rmd | 132 ++++++++++++++++++++++----------------- 1 file changed, 76 insertions(+), 56 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index d4f799218..57e37aac2 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -9,10 +9,10 @@ vignette: > ```{r setup, include=F} knitr::opts_chunk$set( + echo = TRUE, collapse = TRUE, comment = "#>", - warning = FALSE, - message = FALSE + out.width = "100%" ) ``` @@ -24,6 +24,8 @@ library(recipes) library(epiprocess) library(epipredict) library(ggplot2) +library(lubridate) +theme_set(theme_bw()) ``` [Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, @@ -38,16 +40,18 @@ dataset, which contains daily state-wise measures of `case_rate` and head(case_death_rate_subset, 3) ``` -`epipredict` functions work with data in [`epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +`epipredict` functions work with data in +[`epi_df`](https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) format. Despite the stated goal and name of the package, other panel datasets are also valid candidates for `epipredict` functionality, as long as they are in `epi_df` format. ```{r employ-stats, include=F} data("grad_employ_subset") -year_start <- min(grad_employ_subset$time_value) -year_end <- max(grad_employ_subset$time_value) +grad_employ_subset <- grad_employ_subset %>% + mutate(time_value = ymd(paste0(time_value, "0101"))) +year_start <- year(min(grad_employ_subset$time_value)) +year_end <- year(max(grad_employ_subset$time_value)) ``` # Example panel data overview @@ -90,7 +94,8 @@ gemploy <- statcan_grad_employ %>% select(c( "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics")) %>% + "Characteristics after graduation", "Graduate statistics" + )) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -102,7 +107,8 @@ gemploy <- statcan_grad_employ %>% "age_group" = "Age group", "student_status" = "Status of student in Canada", "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics") %>% + "grad_stat" = "Graduate statistics" + ) %>% # The original `VALUE` column contain the statistic indicated by # `Graduate statistics` in the original data. Below we pivot the data # wider so that each unique statistic can have its own column. @@ -115,7 +121,8 @@ gemploy <- statcan_grad_employ %>% `Median employment income five years after graduation` = "med_income_5y" ), # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value)) %>% + time_value = as.integer(time_value) + ) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% filter( # Drop aggregates for some columns @@ -135,7 +142,8 @@ gemploy <- statcan_grad_employ %>% # Only keep "good" data is.na(status) & # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) + ) %>% select(-c(status, gender, student_status, grad_charac, fos)) ``` @@ -154,10 +162,12 @@ a list of all the `type_type`s available. grad_employ_subset <- gemploy %>% tsibble::as_tsibble( index = time_value, - key = c(geo_value, age_group, edu_qual)) %>% + key = c(geo_value, age_group, edu_qual) + ) %>% as_epi_df( geo_type = "custom", time_type = "year", - additional_metadata = c(other_keys = list("age_group", "edu_qual"))) + additional_metadata = c(other_keys = list("age_group", "edu_qual")) + ) ``` ```{r data-dim, include=F} @@ -169,7 +179,7 @@ Now, we are ready to use `grad_employ_subset` with `epipredict`. Our `epi_df` contains `r employ_rowcount` rows and `r employ_colcount` columns. Here is a quick summary of the columns in our `epi_df`: -* `time_value` (time value): year in YYYY format +* `time_value` (time value): year in `date` format * `geo_value` (geo value): province in Canada * `num_graduates` (raw, time series value): number of graduates * `med_income_2y` (raw, time series value): median employment income 2 years @@ -208,7 +218,8 @@ employ_small <- employ %>% mutate( num_graduates_prop = num_graduates / sum(num_graduates), med_income_2y_prop = med_income_2y / sum(med_income_2y), - med_income_5y_prop = med_income_5y / sum(med_income_5y)) %>% + med_income_5y_prop = med_income_5y / sum(med_income_5y) + ) %>% ungroup() head(employ_small) ``` @@ -226,7 +237,8 @@ employ_small %>% facet_grid(rows = vars(edu_qual), cols = vars(age_group)) + xlab("Year") + ylab("# of graduates as proportion of sum within group") + - ggtitle("Trend in # of Graduates by Age Group and Education in BC and ON") + ggtitle("Trend in # of Graduates by Age Group and Education in BC and ON") + + theme(legend.position = "bottom") ``` We will predict the "standardized" number of graduates (a proportion) in the @@ -254,8 +266,8 @@ values are both in years. ```{r make-recipe, include=T, eval=T} r <- epi_recipe(employ_small) %>% - step_epi_ahead(num_graduates_prop, ahead = 1) %>% # lag & ahead units in years - step_epi_lag(num_graduates_prop, lag = 0:2) %>% + step_epi_ahead(num_graduates_prop, ahead = 365) %>% # lag & ahead units in days + step_epi_lag(num_graduates_prop, lag = 0:2 * 365) %>% step_epi_naomit() r ``` @@ -265,11 +277,11 @@ and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data -bake_and_show_sample <- function(recipe, new_data, n=5) { - recipe %>% prep() %>% bake(new_data = new_data) %>% sample_n(n) +bake_and_show_sample <- function(recipe, data, n = 5) { + recipe %>% prep(data) %>% bake(new_data = data) %>% sample_n(n) } -bake_and_show_sample(r, employ_small) +r %>% bake_and_show_sample(employ_small) ``` We can see that the `prep` and `bake` steps created new columns according to @@ -337,7 +349,8 @@ First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the fitted values ($\hat{y}_{t}$). ```{r lienarreg-resid-plot, include=T, fig.height=8} -par(mfrow = c(2,2)); plot(extract_fit_engine(wf_linreg)) +par(mfrow = c(2, 2), mar = c(5, 3.5, 1, 1) + .5) +plot(extract_fit_engine(wf_linreg)) ``` The fitted values vs. residuals plot shows us that the residuals are mostly @@ -381,14 +394,14 @@ $z_i$ is the number of graduates (proportion) at time $i$. Again, we construct an `epi_recipe` detailing the preprocessing steps. ```{r custom-arx, include=T} -rx <- epi_recipe(employ_small) %>% - step_epi_ahead(med_income_5y_prop, ahead = 1) %>% - # 5-year median income has 3 lags c(0,1,2) - step_epi_lag(med_income_5y_prop, lag = c(0,1,2)) %>% - # But the two exogenous variables have 2 lags c(0,1) - step_epi_lag(med_income_2y_prop, lag = c(0,1)) %>% - step_epi_lag(num_graduates_prop, lag = c(0,1)) %>% - step_epi_naomit() +rx <- epi_recipe(employ_small) %>% + step_epi_ahead(med_income_5y_prop, ahead = 1) %>% + # 5-year median income has 3 lags c(0,1,2) + step_epi_lag(med_income_5y_prop, lag = c(0, 1, 2)) %>% + # But the two exogenous variables have 2 lags c(0,1) + step_epi_lag(med_income_2y_prop, lag = c(0, 1)) %>% + step_epi_lag(num_graduates_prop, lag = c(0, 1)) %>% + step_epi_naomit() bake_and_show_sample(rx, employ_small) ``` @@ -414,20 +427,25 @@ quantify the uncertainty associated with future predicted values. # Only have to include med_income_5y since that is our outcome totals <- employ_small %>% group_by(geo_value, age_group, edu_qual) %>% - summarise(med_income_5y_tot = sum(med_income_5y)) + summarise(med_income_5y_tot = sum(med_income_5y), .groups = "keep") -# Define post-processing steps +# Define post-processing steps f <- frosting() %>% layer_predict() %>% - layer_naomit(.pred) %>% - layer_threshold(.pred, lower = 0) %>% + layer_naomit(.pred) %>% + layer_threshold(.pred, lower = 0) %>% # 90% prediction interval - layer_residual_quantiles(probs = c(0.05, 0.95), symmetrize = F) %>% + layer_residual_quantiles( + quantile_levels = c(0.05, 0.95), + symmetrize = FALSE + ) %>% layer_population_scaling( - .pred, .pred_distn, df = totals, df_pop_col = "med_income_5y_tot") - -wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% - fit(employ_small) %>% + .pred, .pred_distn, + df = totals, df_pop_col = "med_income_5y_tot" + ) + +wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% + fit(employ_small) %>% add_frosting(f) summary(extract_fit_engine(wfx_linreg)) @@ -440,20 +458,19 @@ confidence level. Both lags for the number of graduates were insigificant. Let's take a look at the predictions along with their 90% prediction intervals. - ```{r} +```{r} latest <- get_test_data(recipe = rx, x = employ_small) predsx <- predict(wfx_linreg, latest) # Display values within prediction intervals predsx %>% - select( - geo_value, time_value, edu_qual, age_group, - .pred_scaled, .pred_distn_scaled) %>% - dplyr::mutate(.quantiles = nested_quantiles(.pred_distn_scaled)) %>% - tidyr::unnest(.quantiles) %>% - pivot_wider(names_from = tau, values_from = q) %>% - head() - ``` + select( + geo_value, time_value, edu_qual, age_group, fos, + .pred_scaled, .pred_distn_scaled + ) %>% + head() %>% + pivot_quantiles_wider(.pred_distn_scaled) +``` # Using canned forecasters @@ -486,11 +503,11 @@ where $y_i$ is the 2-year median income (proportion) at time $i$. ```{r flatline, include=T, warning=F} out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", args_list = flatline_args_list( - ahead = 1L, forecast_date = as.Date("2015-01-01"))) + ahead = 365L, forecast_date = as.Date("2015-01-01"), + ) +) -# The first argument to augment grabs the epi_workflow object from the -# forecaster output. -augment(out_fl$epi_workflow, employ_small) %>% sample_n(5) +out_fl ``` ## Autoregressive forecaster with exogenous inputs @@ -507,13 +524,15 @@ same number of lags. ```{r arx-lr, include=T, warning=F} arx_args <- arx_args_list( - lags = c(0L, 1L), ahead = 1L, forecast_date = as.Date("2015-01-01")) + lags = c(0L, 365L), ahead = 365L, forecast_date = as.Date("2015-01-01") +) out_arx_lr <- arx_forecaster(employ_small, "med_income_5y_prop", c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), - args_list = arx_args) + args_list = arx_args +) -augment(out_arx_lr$epi_workflow, employ_small) %>% sample_n(5) +out_arx_lr ``` Other changes to the direct AR forecaster, like changing the engine, also work @@ -524,7 +543,8 @@ out_arx_rf <- arx_forecaster( employ_small, "med_income_5y_prop", c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), trainer = parsnip::boost_tree(mode = "regression", trees = 20), - args_list = arx_args) + args_list = arx_args +) -augment(out_arx_rf$epi_workflow, employ_small) %>% sample_n(5) +out_arx_rf ``` From 8552e1a8a4eae384651f6ee5a5ae8c5003dffebb Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 6 Feb 2024 10:31:23 -0800 Subject: [PATCH 049/382] done. forecast_date/target_date processing is bolixed by #291 --- vignettes/panel-data.Rmd | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 57e37aac2..82d0a94d6 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -24,7 +24,6 @@ library(recipes) library(epiprocess) library(epipredict) library(ggplot2) -library(lubridate) theme_set(theme_bw()) ``` @@ -48,10 +47,9 @@ in `epi_df` format. ```{r employ-stats, include=F} data("grad_employ_subset") -grad_employ_subset <- grad_employ_subset %>% - mutate(time_value = ymd(paste0(time_value, "0101"))) -year_start <- year(min(grad_employ_subset$time_value)) -year_end <- year(max(grad_employ_subset$time_value)) +grad_employ_subset <- grad_employ_subset +year_start <- min(grad_employ_subset$time_value) +year_end <- max(grad_employ_subset$time_value) ``` # Example panel data overview @@ -232,12 +230,14 @@ with incomplete dates. employ_small %>% filter(geo_value %in% c("British Columbia", "Ontario")) %>% filter(grepl("degree", edu_qual, fixed = T)) %>% + group_by(geo_value, time_value, edu_qual, age_group) %>% + summarise(num_graduates_prop = sum(num_graduates_prop), .groups = "drop") %>% ggplot(aes(x = time_value, y = num_graduates_prop, color = geo_value)) + geom_line() + + scale_colour_manual(values = c("Cornflowerblue", "Orange"), name = "") + facet_grid(rows = vars(edu_qual), cols = vars(age_group)) + xlab("Year") + - ylab("# of graduates as proportion of sum within group") + - ggtitle("Trend in # of Graduates by Age Group and Education in BC and ON") + + ylab("Percentage of gratuates") + theme(legend.position = "bottom") ``` @@ -266,8 +266,8 @@ values are both in years. ```{r make-recipe, include=T, eval=T} r <- epi_recipe(employ_small) %>% - step_epi_ahead(num_graduates_prop, ahead = 365) %>% # lag & ahead units in days - step_epi_lag(num_graduates_prop, lag = 0:2 * 365) %>% + step_epi_ahead(num_graduates_prop, ahead = 1) %>% + step_epi_lag(num_graduates_prop, lag = 0:2) %>% step_epi_naomit() r ``` @@ -502,9 +502,7 @@ where $y_i$ is the 2-year median income (proportion) at time $i$. ```{r flatline, include=T, warning=F} out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", - args_list = flatline_args_list( - ahead = 365L, forecast_date = as.Date("2015-01-01"), - ) + args_list = flatline_args_list(ahead = 1) ) out_fl @@ -523,9 +521,7 @@ with Exogenous Inputs" section of this article, but where all inputs have the same number of lags. ```{r arx-lr, include=T, warning=F} -arx_args <- arx_args_list( - lags = c(0L, 365L), ahead = 365L, forecast_date = as.Date("2015-01-01") -) +arx_args <- arx_args_list(lags = c(0L, 1L), ahead = 1L) out_arx_lr <- arx_forecaster(employ_small, "med_income_5y_prop", c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), From c21f36618e1054a6c2c06124bd2a551fbb37fce6 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 6 Feb 2024 10:35:30 -0800 Subject: [PATCH 050/382] fix: don't track caches --- vignettes/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 097b24163..2c6ab8d7f 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,2 +1,3 @@ *.html *.R +*_cache/ From fb743117dadae02d8890d02da2710ead5ffa438c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 6 Feb 2024 10:38:25 -0800 Subject: [PATCH 051/382] ignore vignette caches --- vignettes/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 097b24163..2c6ab8d7f 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,2 +1,3 @@ *.html *.R +*_cache/ From 08947ed39f06e9097e5ede0545c0ff043cc54bfe Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 6 Feb 2024 10:45:24 -0800 Subject: [PATCH 052/382] use the autoplot method in epiprocess --- R/autoplot.R | 126 --------------------------------------------------- 1 file changed, 126 deletions(-) diff --git a/R/autoplot.R b/R/autoplot.R index b0673fe70..9aeeeaca1 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -112,133 +112,7 @@ autoplot.epi_workflow <- function( bp } -#' @export -autoplot.epi_df <- function( - object, ..., - .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), - .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "#3A448F", - .max_facets = Inf) { - .color_by <- match.arg(.color_by) - .facet_by <- match.arg(.facet_by) - - arg_is_pos(.max_facets) - arg_is_scalar(.max_facets) - if (is.finite(.max_facets)) arg_is_int(.max_facets) - arg_is_chr_scalar(.base_color) - - ek <- epi_keys(object) - mv <- setdiff(names(object), ek) - ek <- kill_time_value(ek) - # --- check for numeric variables - allowed <- map_lgl(object[mv], is.numeric) - if (length(allowed) == 0) { - cli::cli_abort("No numeric variables were available to plot automatically.") - } - vars <- tidyselect::eval_select(rlang::expr(c(...)), object) - if (rlang::is_empty(vars)) { # find them automatically if unspecified - vars <- tidyselect::eval_select(names(allowed)[1], object) - cli::cli_warn( - "Plot variable was unspecified. Automatically selecting {.var {names(allowed)[1]}}." - ) - } else { # if variables were specified, ensure that they are numeric - ok <- names(vars) %in% names(allowed) - if (!any(ok)) { - cli::cli_abort( - "None of the requested variables {.var {names(vars)}} are numeric." - ) - } else if (!all(ok)) { - cli::cli_warn(c( - "Only the requested variables {.var {names(vars)[ok]}} are numeric.", - i = "`autoplot()` cannot display {.var {names(vars)[!ok]}}." - )) - vars <- vars[ok] - } - } - - # --- create a viable df to plot - pos <- tidyselect::eval_select( - rlang::expr(c("time_value", ek, names(vars))), object - ) - if (length(vars) > 1) { - object <- tidyr::pivot_longer( - object[pos], tidyselect::all_of(names(vars)), - values_to = ".response", - names_to = ".response_name" - ) - } else { - object <- dplyr::rename(object[pos], .response := !!names(vars)) - } - all_keys <- rlang::syms(as.list(ek)) - other_keys <- rlang::syms(as.list(setdiff(ek, "geo_value"))) - all_avail <- rlang::syms(as.list(c(ek, ".response_name"))) - - object <- object %>% - dplyr::mutate( - .colours = switch(.color_by, - all_keys = interaction(!!!all_keys, sep = "/"), - geo_value = geo_value, - other_keys = interaction(!!!other_keys, sep = "/"), - all = interaction(!!!all_avail, sep = "/"), - NULL - ), - .facets = switch(.facet_by, - all_keys = interaction(!!!all_keys, sep = "/"), - geo_value = as.factor(geo_value), - other_keys = interaction(!!!other_keys, sep = "/"), - all = interaction(!!!all_avail, sep = "/"), - NULL - ) - ) - - if (.max_facets < Inf && ".facets" %in% names(object)) { - n_facets <- nlevels(object$.facets) - if (n_facets > .max_facets) { - top_n <- levels(as.factor(object$.facets))[seq_len(.max_facets)] - object <- dplyr::filter(object, .facets %in% top_n) %>% - dplyr::mutate(.facets = droplevels(.facets)) - if (".colours" %in% names(object)) { - object <- dplyr::mutate(object, .colours = droplevels(.colours)) - } - } - } - - p <- ggplot2::ggplot( - object, - ggplot2::aes(x = .data$time_value) - ) + - ggplot2::theme_bw() - - if (".colours" %in% names(object)) { - p <- p + ggplot2::geom_line( - ggplot2::aes(y = .data$.response, colour = .data$.colours), - key_glyph = "timeseries" - ) + - ggplot2::scale_colour_viridis_d(name = "") - } else if (length(vars) > 1 && .color_by == ".response") { - p <- p + - ggplot2::geom_line(ggplot2::aes( - y = .data$.response, colour = .data$.response_name - )) + - ggplot2::scale_colour_viridis_d(name = "") - } else { # none - p <- p + - ggplot2::geom_line(ggplot2::aes(y = .data$.response), color = .base_color) - } - - if (".facets" %in% names(object)) { - p <- p + ggplot2::facet_wrap(~.facets, scales = "free_y") + - ggplot2::ylab(names(vars)) - if (.facet_by == "all") p <- p + ggplot2::ylab("") - } else if ((length(vars) > 1 && .facet_by == ".response")) { - p <- p + ggplot2::facet_wrap(~.response_name, scales = "free_y") + - ggplot2::ylab("") - } else { - p <- p + ggplot2::ylab(names(vars)) - } - p -} #' @export autoplot.canned_epipred <- function( From a2af588858a8acf96a3b453c1146d58f339cae79 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 20 Feb 2024 12:22:37 -0800 Subject: [PATCH 053/382] fix: naming issue, missing dots arg --- DESCRIPTION | 2 +- R/autoplot.R | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d1e966278..f59be0c30 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,7 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.6.0), + epiprocess (>= 0.7.5), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: diff --git a/R/autoplot.R b/R/autoplot.R index 9aeeeaca1..bc0ccd42d 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -5,7 +5,7 @@ ggplot2::autoplot #' @export autoplot.epi_workflow <- function( object, predictions = NULL, - .levels = c(.5, .8, .95), + .levels = c(.5, .8, .95), ..., .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), .base_color = "#3A448F", @@ -46,13 +46,13 @@ autoplot.epi_workflow <- function( extra_keys <- setdiff(epi_keys_mold(mold), c("time_value", "geo_value")) if (length(extra_keys) == 0L) extra_keys <- NULL edf <- as_epi_df(edf, - as_of = wf$fit$meta$as_of, + as_of = object$fit$meta$as_of, additional_metadata = list(other_keys = extra_keys) ) if (is.null(predictions)) { return(autoplot( edf, new_name_y, - .color_by = .colour_by, .facet_by = .facet_by, .base_color = .base_color, + .color_by = .color_by, .facet_by = .facet_by, .base_color = .base_color, .max_facets = .max_facets )) } From 1fc981345519e5b6501c7926acb56c8b963c9f3c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 20 Feb 2024 12:24:30 -0800 Subject: [PATCH 054/382] handle the quantile grouping correctly --- R/layer_residual_quantiles.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index bd4ed27e3..4a47a579f 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -103,14 +103,16 @@ slather.layer_residual_quantiles <- if (length(common) > 0L) { r <- r %>% dplyr::select(tidyselect::any_of(c(common, ".resid"))) common_in_r <- common[common %in% names(r)] - if (length(common_in_r) != length(common)) { + if (length(common_in_r) == length(common)) { + r <- dplyr::left_join(key_cols, r, by = common_in_r) + } else { cli::cli_warn(c( "Some grouping keys are not in data.frame returned by the", "`residuals()` method. Groupings may not be correct." )) + r <- dplyr::bind_cols(key_cols, r %>% tidyselect::select(.resid)) %>% + dplyr::group_by(!!!rlang::syms(common)) } - r <- dplyr::bind_cols(key_cols, r) %>% - dplyr::group_by(!!!rlang::syms(common)) } } From 3094da9688a45baddbda0154fa224352e43f27ca Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 20 Feb 2024 12:34:50 -0800 Subject: [PATCH 055/382] existing tests pass, remove non-standard file --- .Rbuildignore | 1 + DESCRIPTION | 2 +- R/layer_residual_quantiles.R | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 3a77bb347..d0c10332d 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -3,6 +3,7 @@ ^epipredict\.Rproj$ ^\.Rproj\.user$ ^LICENSE\.md$ +^DEVELOPMENT\.md$ ^drafts$ ^\.Rprofile$ ^man-roxygen$ diff --git a/DESCRIPTION b/DESCRIPTION index c451f755b..d1e966278 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,4 +72,4 @@ Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.0 +RoxygenNote: 7.3.1 diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index 4a47a579f..b09956c2e 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -110,7 +110,7 @@ slather.layer_residual_quantiles <- "Some grouping keys are not in data.frame returned by the", "`residuals()` method. Groupings may not be correct." )) - r <- dplyr::bind_cols(key_cols, r %>% tidyselect::select(.resid)) %>% + r <- dplyr::bind_cols(key_cols, r %>% dplyr::select(.resid)) %>% dplyr::group_by(!!!rlang::syms(common)) } } From 63cd99145366eccd7353524405e0837cd1c5572a Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 20 Feb 2024 12:44:17 -0800 Subject: [PATCH 056/382] add a basic test --- .../testthat/test-layer_residual_quantiles.R | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index 73f69b54a..9cee038d5 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -49,3 +49,26 @@ test_that("Errors when used with a classifier", { wf <- wf %>% add_frosting(f) expect_error(predict(wf, tib)) }) + + +test_that("Grouping by keys is supported", { + f <- frosting() %>% + layer_predict() %>% + layer_naomit(.pred) %>% + layer_residual_quantiles() + wf1 <- wf %>% add_frosting(f) + expect_silent(p1 <- predict(wf1, latest)) + f2 <- frosting() %>% + layer_predict() %>% + layer_naomit(.pred) %>% + layer_residual_quantiles(by_key = "geo_value") + wf2 <- wf %>% add_frosting(f2) + expect_warning(p2 <- predict(wf2, latest)) + + pivot1 <- pivot_quantiles_wider(p1, .pred_distn) %>% + mutate(width = `0.95` - `0.05`) + pivot2 <- pivot_quantiles_wider(p2, .pred_distn) %>% + mutate(width = `0.95` - `0.05`) + expect_equal(pivot1$width, rep(pivot1$width[1], nrow(pivot1))) + expect_false(all(pivot2$width == pivot2$width[1])) +}) From aceeac4544f89a72b0bdc9f5a736832d35b652d6 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 20 Feb 2024 18:06:04 -0800 Subject: [PATCH 057/382] add flatline test --- .../testthat/test-layer_residual_quantiles.R | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index 9cee038d5..5723fbce9 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -72,3 +72,29 @@ test_that("Grouping by keys is supported", { expect_equal(pivot1$width, rep(pivot1$width[1], nrow(pivot1))) expect_false(all(pivot2$width == pivot2$width[1])) }) + +test_that("Canned forecasters work with / without", { + meta <- attr(jhu, "metadata") + meta$as_of <- max(jhu$time_value) + attr(jhu, "metadata") <- meta + + expect_silent( + flatline_forecaster(jhu, "death_rate") + ) + expect_silent( + flatline_forecaster( + jhu, "death_rate", + args_list = flatline_args_list(quantile_by_key = "geo_value") + ) + ) + + expect_silent( + arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate")) + ) + expect_silent( + flatline_forecaster( + jhu, "death_rate", + args_list = flatline_args_list(quantile_by_key = "geo_value") + ) + ) +}) From 695aeb07bcfc1791807282b35eaf243374a01b88 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 21 Feb 2024 09:03:53 -0800 Subject: [PATCH 058/382] fix: refactor quantile calculation * avoids bug when requesting quantile_values close to existing ones but off by a small tolerance * never creates unsorted quantiles * extrapolates outside the existing range by linearly interpolating on the logistic scale --- R/dist_quantiles.R | 99 +++++++++------------------- tests/testthat/test-dist_quantiles.R | 28 ++++++++ 2 files changed, 58 insertions(+), 69 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 750e9560d..c027873d9 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -172,20 +172,15 @@ mean.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "line #' @export #' @importFrom stats quantile #' @import distributional -quantile.dist_quantiles <- function( - x, p, ..., - middle = c("cubic", "linear"), - left_tail = c("normal", "exponential"), - right_tail = c("normal", "exponential")) { +quantile.dist_quantiles <- function(x, p, ..., middle = c("cubic", "linear")) { arg_is_probabilities(p) + p <- sort(p) middle <- match.arg(middle) - left_tail <- match.arg(left_tail) - right_tail <- match.arg(right_tail) - quantile_extrapolate(x, p, middle, left_tail, right_tail) + quantile_extrapolate(x, p, middle) } -quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { +quantile_extrapolate <- function(x, tau_out, middle) { tau <- field(x, "quantile_levels") qvals <- field(x, "values") r <- range(tau, na.rm = TRUE) @@ -196,10 +191,9 @@ quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { if (all(tau_out %in% tau)) { return(qvals[match(tau_out, tau)]) } - if (length(qvals) < 3 || r[1] > .25 || r[2] < .75) { - cli::cli_warn(c( - "Quantile extrapolation is not possible with fewer than", - "3 quantiles or when the probs don't span [.25, .75]" + if (length(qvals) < 2) { + cli::cli_abort(c( + "Quantile extrapolation is not possible with fewer than 2 quantiles." )) return(qvals_out) } @@ -213,87 +207,54 @@ quantile_extrapolate <- function(x, tau_out, middle, left_tail, right_tail) { result <- tryCatch( { Q <- stats::splinefun(tau, qvals, method = "hyman") - qvals_out[indm] <- Q(tau_out[indm]) quartiles <- Q(c(.25, .5, .75)) }, - error = function(e) { - return(NA) - } + error = function(e) { return(NA) } ) } if (middle == "linear" || any(is.na(result))) { method <- "linear" quartiles <- stats::approx(tau, qvals, c(.25, .5, .75))$y } - - if (any(indm)) { qvals_out[indm] <- switch(method, linear = stats::approx(tau, qvals, tau_out[indm])$y, cubic = Q(tau_out[indm]) ) } + if (any(indl) || any(indr)) { + qv <- data.frame( + q = c(tau, tau_out[indm]), + v = c(qvals, qvals_out[indm]) + ) %>% + dplyr::distinct(q, .keep_all = TRUE) %>% + dplyr::arrange(q) + } if (any(indl)) { - qvals_out[indl] <- tail_extrapolate( - tau_out[indl], quartiles, "left", left_tail - ) + qvals_out[indl] <- tail_extrapolate(tau_out[indl], head(qv, 2)) } if (any(indr)) { - qvals_out[indr] <- tail_extrapolate( - tau_out[indr], quartiles, "right", right_tail - ) + qvals_out[indr] <- tail_extrapolate(tau_out[indr], tail(qv, 2)) } qvals_out } -tail_extrapolate <- function(tau_out, quartiles, tail, type) { - if (tail == "left") { - p <- c(.25, .5) - par <- quartiles[1:2] - } - if (tail == "right") { - p <- c(.75, .5) - par <- quartiles[3:2] - } - if (type == "normal") { - return(norm_tail_q(p, par, tau_out)) - } - if (type == "exponential") { - return(exp_tail_q(p, par, tau_out)) - } -} - - -exp_q_par <- function(q) { - # tau should always be c(.75, .5) or c(.25, .5) - iqr <- 2 * abs(diff(q)) - s <- iqr / (2 * log(2)) - m <- q[2] - return(list(m = m, s = s)) +logit <- function(p) { + p <- pmax(pmin(p, 1), 0) + log(p) - log(1 - p) } -exp_tail_q <- function(p, q, target) { - ms <- exp_q_par(q) - qlaplace(target, ms$m, ms$s) +# extrapolates linearly on the logistic scale using +# the two points nearest the tail +tail_extrapolate <- function(tau_out, qv) { + if (nrow(qv) == 1L) return(rep(qv$v[1], length(tau_out))) + x <- logit(qv$q) + x0 <- logit(tau_out) + y <- qv$v + m <- diff(y) / diff(x) + m * (x0 - x[1]) + y[1] } -qlaplace <- function(p, centre = 0, b = 1) { - # lower.tail = TRUE, log.p = FALSE - centre - b * sign(p - 0.5) * log(1 - 2 * abs(p - 0.5)) -} - -norm_q_par <- function(q) { - # tau should always be c(.75, .5) or c(.25, .5) - iqr <- 2 * abs(diff(q)) - s <- iqr / 1.34897950039 # abs(diff(qnorm(c(.75, .25)))) - m <- q[2] - return(list(m = m, s = s)) -} - -norm_tail_q <- function(p, q, target) { - ms <- norm_q_par(q) - stats::qnorm(target, ms$m, ms$s) -} #' @method Math dist_quantiles #' @export diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 4fc5587d4..64bf16b23 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -49,6 +49,34 @@ test_that("quantile extrapolator works", { expect_length(parameters(qq[1])$q[[1]], 7L) }) +test_that("small deviations of quantile requests work", { + l <- c(.05, .1, .25, .75, .9, .95) + v <- c(0.0890306, 0.1424997, 0.1971793, 0.2850978, 0.3832912, 0.4240479) + badl <- l + badl[1] <- badl[1] - 1e-14 + distn <- dist_quantiles(list(v), list(l)) + + # was broken before, now works + expect_equal(quantile(distn, l), quantile(distn, badl)) + + # The tail extrapolation was still poor. It needs to _always_ use + # the smallest (largest) values or we could end up unsorted + l <- 1:9 / 10 + v <- 1:9 + distn <- dist_quantiles(list(v), list(l)) + expect_equal(quantile(distn, c(.25, .75)), list(c(2.5, 7.5))) + expect_equal(quantile(distn, c(.1, .9)), list(c(1, 9))) + qv <- data.frame(q = l, v = v) + expect_equal( + unlist(quantile(distn, c(.01, .05))), + tail_extrapolate(c(.01, .05), head(qv, 2)) + ) + expect_equal( + unlist(quantile(distn, c(.99, .95))), + tail_extrapolate(c(.95, .99), tail(qv, 2)) + ) +}) + test_that("unary math works on quantiles", { dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) dstn2 <- dist_quantiles(list(log(1:4), log(8:11)), list(c(.2, .4, .6, .8))) From fb04f20241a84514965f44de8bf1fa08cd94e759 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 21 Feb 2024 09:04:32 -0800 Subject: [PATCH 059/382] bump version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index d1e966278..e068fe7e3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.9 +Version: 0.0.10 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From 0165001d04e2e00bb93b5dc0dad24e6c1e258b43 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 21 Feb 2024 09:06:52 -0800 Subject: [PATCH 060/382] add to news --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 3c5034080..04dc78e4f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -32,3 +32,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Two simple forecasters as test beds - Working vignette - use `checkmate` for input validation +- refactor quantile extrapolation (possibly creates different results) From 0d133df5b92e38e72b039ee350186a36dc416101 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 21 Feb 2024 09:34:29 -0800 Subject: [PATCH 061/382] remove test for nonexistent functions --- tests/testthat/test-dist_quantiles.R | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 64bf16b23..99ce742d5 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -10,14 +10,6 @@ test_that("constructor returns reasonable quantiles", { expect_error(new_quantiles(c(1, 2, 3), c(.1, .2, 3))) }) -test_that("tail functions give reasonable output", { - expect_equal(norm_q_par(qnorm(c(.75, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(norm_q_par(qnorm(c(.25, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(norm_q_par(qnorm(c(.25, .5), 0, 1)), list(m = 0, s = 1)) - expect_equal(exp_q_par(qlaplace(c(.75, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(exp_q_par(qlaplace(c(.25, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(exp_q_par(qlaplace(c(.25, .5), 0, 1)), list(m = 0, s = 1)) -}) test_that("single dist_quantiles works, quantiles are accessible", { z <- new_quantiles(values = 1:5, quantile_levels = c(.2, .4, .5, .6, .8)) From 3b8c889e569165aa717bcc0cab0b59bb4b1cff35 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 21 Feb 2024 10:41:25 -0800 Subject: [PATCH 062/382] style only --- R/dist_quantiles.R | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index c027873d9..7f7af40f4 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -209,7 +209,9 @@ quantile_extrapolate <- function(x, tau_out, middle) { Q <- stats::splinefun(tau, qvals, method = "hyman") quartiles <- Q(c(.25, .5, .75)) }, - error = function(e) { return(NA) } + error = function(e) { + return(NA) + } ) } if (middle == "linear" || any(is.na(result))) { @@ -247,7 +249,9 @@ logit <- function(p) { # extrapolates linearly on the logistic scale using # the two points nearest the tail tail_extrapolate <- function(tau_out, qv) { - if (nrow(qv) == 1L) return(rep(qv$v[1], length(tau_out))) + if (nrow(qv) == 1L) { + return(rep(qv$v[1], length(tau_out))) + } x <- logit(qv$q) x0 <- logit(tau_out) y <- qv$v From 593208b3dffbc732944f59f8f1dc389731ed72ec Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 09:50:07 -0800 Subject: [PATCH 063/382] add documentation, fix ahead/lag behaviour --- R/autoplot.R | 75 ++++++++++++++++++++++++++++++++++-- man/autoplot.epi_workflow.Rd | 58 ++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 man/autoplot.epi_workflow.Rd diff --git a/R/autoplot.R b/R/autoplot.R index bc0ccd42d..7f97d4df7 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -2,7 +2,73 @@ #' @export ggplot2::autoplot +#' Automatically plot an `epi_workflow` +#' +#' For a fit workflow, the training data will be displayed, the response by +#' default. If `predictions` is not `NULL` then point and interval forecasts +#' will be shown as well. Unfit workflows will result in an error, (you +#' can simply call `autoplot()` on the original `epi_df`). +#' +#' +#' @inheritParams epiprocess::autoplot.epi_df +#' @param object An `epi_workflow` +#' +#' @param predictions A data frame with predictions. If `NULL`, only the +#' original data is shown. +#' @param .levels A numeric vector of levels to plot for any prediction bands. +#' More than 3 levels begins to be difficult to see. +#' @param ... Ignored +#' @param .base_color If available, prediction bands will be shown with this +#' color. +#' @param .pred_line_color If available, point forecasts will be shown with this +#' color. +#' #' @export +#' @examples +#' jhu <- case_death_rate_subset +#' +#' r <- epi_recipe(jhu) %>% +#' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% +#' step_epi_ahead(death_rate, ahead = 7) %>% +#' step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% +#' step_epi_naomit() +#' +#' f <- frosting() %>% +#' layer_residual_quantiles( +#' quantile_levels = c(.025, .1, .25, .75, .9, .975) +#' ) %>% +#' layer_threshold(dplyr::starts_with(".pred")) %>% +#' layer_add_target_date() +#' +#' wf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) +#' +#' autoplot(wf) +#' +#' latest <- jhu %>% dplyr::filter(time_value >= max(time_value) - 14) +#' preds <- predict(wf, latest) %>% +#' dplyr::select(-time_value) %>% +#' dplyr::rename(time_value = target_date) +#' autoplot(wf, preds, .max_facets = 4) + +#' ggplot2::coord_cartesian(xlim = as.Date(c("2021-11-01", NA))) +#' +#' # ------- Show multiple horizons +#' +#' p <- lapply(c(7, 14, 21, 28), \(h) { +#' r <- epi_recipe(jhu) %>% +#' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% +#' step_epi_ahead(death_rate, ahead = h) %>% +#' step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% +#' step_epi_naomit() +#' ewf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) +#' td <- get_test_data(r, jhu) +#' predict(ewf, new_data = td) %>% +#' select(-time_value) %>% +#' rename(time_value = target_date) +#' }) +#' +#' p <- do.call(rbind, p) +#' autoplot(wf, p, .max_facets = 4) + +#' coord_cartesian(xlim = as.Date(c("2021-11-01", NA))) autoplot.epi_workflow <- function( object, predictions = NULL, .levels = c(.5, .8, .95), ..., @@ -11,6 +77,7 @@ autoplot.epi_workflow <- function( .base_color = "#3A448F", .pred_line_color = "orange", .max_facets = Inf) { + rlang::check_dots_empty() arg_is_probabilities(.levels) if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( @@ -30,12 +97,12 @@ autoplot.epi_workflow <- function( edf <- dplyr::bind_cols(mold$extras$roles[mold_roles %in% keys], y) if (starts_with_impl("ahead_", names(y))) { old_name_y <- unlist(strsplit(names(y), "_")) - shift <- -as.numeric(old_name_y[2]) + shift <- as.numeric(old_name_y[2]) new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) } else if (starts_with_impl("lag_", names(y))) { old_name_y <- unlist(strsplit(names(y), "_")) - shift <- as.numeric(old_name_y[2]) + shift <- -as.numeric(old_name_y[2]) new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) } @@ -98,13 +165,13 @@ autoplot.epi_workflow <- function( if (ntarget_dates > 1L) { bp <- bp + ggplot2::geom_line( - data = predictions, aes(y = .data$.pred), + data = predictions, ggplot2::aes(y = .data$.pred), color = .pred_line_color ) } else { bp <- bp + ggplot2::geom_point( - data = predictions, aes(y = .data$.pred), + data = predictions, ggplot2::aes(y = .data$.pred), color = .pred_line_color ) } diff --git a/man/autoplot.epi_workflow.Rd b/man/autoplot.epi_workflow.Rd new file mode 100644 index 000000000..2ee2adc0d --- /dev/null +++ b/man/autoplot.epi_workflow.Rd @@ -0,0 +1,58 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/autoplot.R +\name{autoplot.epi_workflow} +\alias{autoplot.epi_workflow} +\title{Automatically plot an \code{epi_workflow}} +\usage{ +\method{autoplot}{epi_workflow}( + object, + predictions = NULL, + .levels = c(0.5, 0.8, 0.95), + ..., + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "#3A448F", + .pred_line_color = "orange", + .max_facets = Inf +) +} +\arguments{ +\item{object}{An \code{epi_workflow}} + +\item{predictions}{A data frame with predictions. If \code{NULL}, only the +original data is shown.} + +\item{.levels}{A numeric vector of levels to plot for any prediction bands. +More than 3 levels begins to be difficult to see.} + +\item{...}{Ignored} + +\item{.color_by}{Which variables should determine the color(s) used to plot +lines. Options include: +\itemize{ +\item \code{all_keys} - the default uses the interaction of any key variables +including the \code{geo_value} +\item \code{geo_value} - \code{geo_value} only +\item \code{other_keys} - any available keys that are not \code{geo_value} +\item \code{.response} - the numeric variables (same as the y-axis) +\item \code{all} - uses the interaction of all keys and numeric variables +\item \code{none} - no coloring aesthetic is applied +}} + +\item{.facet_by}{Similar to \code{.color_by} except that the default is to display +each numeric variable on a separate facet} + +\item{.base_color}{If available, prediction bands will be shown with this +color.} + +\item{.pred_line_color}{If available, point forecasts will be shown with this +color.} + +\item{.max_facets}{Cut down of the number of facets displayed. Especially +useful for testing when there are many \code{geo_value}'s or keys.} +} +\description{ +For an unfit workflow, the training data will be displayed, the response by +default. If \code{predictions} is not \code{NULL} then point and interval forecasts +will be shown as well. +} From dde25f1683d77a7212fb6684edf30abe29bed0fe Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 12:43:39 -0800 Subject: [PATCH 064/382] drafted --- R/autoplot.R | 60 +++++++++++------ man/autoplot-epipred.Rd | 123 +++++++++++++++++++++++++++++++++++ man/autoplot.epi_workflow.Rd | 58 ----------------- 3 files changed, 163 insertions(+), 78 deletions(-) create mode 100644 man/autoplot-epipred.Rd delete mode 100644 man/autoplot.epi_workflow.Rd diff --git a/R/autoplot.R b/R/autoplot.R index 7f97d4df7..4a6a99e8f 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -2,7 +2,7 @@ #' @export ggplot2::autoplot -#' Automatically plot an `epi_workflow` +#' Automatically plot an `epi_workflow` or `canned_epipred` object #' #' For a fit workflow, the training data will be displayed, the response by #' default. If `predictions` is not `NULL` then point and interval forecasts @@ -10,6 +10,8 @@ ggplot2::autoplot #' can simply call `autoplot()` on the original `epi_df`). #' #' +#' +#' #' @inheritParams epiprocess::autoplot.epi_df #' @param object An `epi_workflow` #' @@ -20,12 +22,13 @@ ggplot2::autoplot #' @param ... Ignored #' @param .base_color If available, prediction bands will be shown with this #' color. -#' @param .pred_line_color If available, point forecasts will be shown with this +#' @param .point_pred_color If available, point forecasts will be shown with this #' color. #' -#' @export +#' @name autoplot-epipred #' @examples -#' jhu <- case_death_rate_subset +#' jhu <- case_death_rate_subset %>% +#' filter(time_value >= as.Date("2021-11-01")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% @@ -45,11 +48,8 @@ ggplot2::autoplot #' autoplot(wf) #' #' latest <- jhu %>% dplyr::filter(time_value >= max(time_value) - 14) -#' preds <- predict(wf, latest) %>% -#' dplyr::select(-time_value) %>% -#' dplyr::rename(time_value = target_date) -#' autoplot(wf, preds, .max_facets = 4) + -#' ggplot2::coord_cartesian(xlim = as.Date(c("2021-11-01", NA))) +#' preds <- predict(wf, latest) +#' autoplot(wf, preds, .max_facets = 4) #' #' # ------- Show multiple horizons #' @@ -61,21 +61,33 @@ ggplot2::autoplot #' step_epi_naomit() #' ewf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) #' td <- get_test_data(r, jhu) -#' predict(ewf, new_data = td) %>% -#' select(-time_value) %>% -#' rename(time_value = target_date) +#' predict(ewf, new_data = td) #' }) #' #' p <- do.call(rbind, p) -#' autoplot(wf, p, .max_facets = 4) + -#' coord_cartesian(xlim = as.Date(c("2021-11-01", NA))) +#' autoplot(wf, p, .max_facets = 4) +#' +#' # ------- Plotting canned forecaster output +#' +#' jhu <- case_death_rate_subset %>% filter(time_value >= as.Date("2021-11-01")) +#' flat <- flatline_forecaster(jhu, "death_rate") +#' autoplot(flat, .max_facets = 4) +#' +#' arx <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), +#' args_list = arx_args_list(ahead = 14L) +#' ) +#' autoplot(arx, .max_facets = 6) +NULL + +#' @export +#' @rdname autoplot-epipred autoplot.epi_workflow <- function( object, predictions = NULL, .levels = c(.5, .8, .95), ..., .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "#3A448F", - .pred_line_color = "orange", + .base_color = "dodgerblue4", + .point_pred_color = "orange", .max_facets = Inf) { rlang::check_dots_empty() arg_is_probabilities(.levels) @@ -124,6 +136,12 @@ autoplot.epi_workflow <- function( )) } + if ("target_date" %in% names(predictions)) { + if ("time_value" %in% names(predictions)) { + predictions <- dplyr::select(predictions, -time_value) + } + predictions <- dplyr::rename(predictions, time_value = target_date) + } pred_cols_ok <- hardhat::check_column_names(predictions, epi_keys(edf)) if (!pred_cols_ok$ok) { cli::cli_warn(c( @@ -166,13 +184,13 @@ autoplot.epi_workflow <- function( bp <- bp + ggplot2::geom_line( data = predictions, ggplot2::aes(y = .data$.pred), - color = .pred_line_color + color = .point_pred_color ) } else { bp <- bp + ggplot2::geom_point( data = predictions, ggplot2::aes(y = .data$.pred), - color = .pred_line_color + color = .point_pred_color ) } } @@ -182,11 +200,13 @@ autoplot.epi_workflow <- function( #' @export +#' @rdname autoplot-epipred autoplot.canned_epipred <- function( object, ..., .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "#3A448F", + .base_color = "dodgerblue4", + .point_pred_color = "orange", .max_facets = Inf) { rlang::check_dots_empty() ewf <- object$epi_workflow @@ -207,7 +227,7 @@ starts_with_impl <- function(x, vars) { plot_bands <- function( base_plot, predictions, levels = c(.5, .8, .95), - fill = "#3A448F", + fill = "blue4", alpha = 0.6, linewidth = 0.05) { innames <- names(predictions) diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd new file mode 100644 index 000000000..61e2fc787 --- /dev/null +++ b/man/autoplot-epipred.Rd @@ -0,0 +1,123 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/autoplot.R +\name{autoplot-epipred} +\alias{autoplot-epipred} +\alias{autoplot.epi_workflow} +\alias{autoplot.canned_epipred} +\title{Automatically plot an \code{epi_workflow} or \code{canned_epipred} object} +\usage{ +\method{autoplot}{epi_workflow}( + object, + predictions = NULL, + .levels = c(0.5, 0.8, 0.95), + ..., + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "blue4", + .point_pred_color = "orange", + .max_facets = Inf +) + +\method{autoplot}{canned_epipred}( + object, + ..., + .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), + .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), + .base_color = "blue4", + .point_pred_color = "orange", + .max_facets = Inf +) +} +\arguments{ +\item{object}{An \code{epi_workflow}} + +\item{predictions}{A data frame with predictions. If \code{NULL}, only the +original data is shown.} + +\item{.levels}{A numeric vector of levels to plot for any prediction bands. +More than 3 levels begins to be difficult to see.} + +\item{...}{Ignored} + +\item{.color_by}{Which variables should determine the color(s) used to plot +lines. Options include: +\itemize{ +\item \code{all_keys} - the default uses the interaction of any key variables +including the \code{geo_value} +\item \code{geo_value} - \code{geo_value} only +\item \code{other_keys} - any available keys that are not \code{geo_value} +\item \code{.response} - the numeric variables (same as the y-axis) +\item \code{all} - uses the interaction of all keys and numeric variables +\item \code{none} - no coloring aesthetic is applied +}} + +\item{.facet_by}{Similar to \code{.color_by} except that the default is to display +each numeric variable on a separate facet} + +\item{.base_color}{If available, prediction bands will be shown with this +color.} + +\item{.point_pred_color}{If available, point forecasts will be shown with this +color.} + +\item{.max_facets}{Cut down of the number of facets displayed. Especially +useful for testing when there are many \code{geo_value}'s or keys.} +} +\description{ +For a fit workflow, the training data will be displayed, the response by +default. If \code{predictions} is not \code{NULL} then point and interval forecasts +will be shown as well. Unfit workflows will result in an error, (you +can simply call \code{autoplot()} on the original \code{epi_df}). +} +\examples{ +jhu <- case_death_rate_subset \%>\% + filter(time_value >= as.Date("2021-11-01")) + +r <- epi_recipe(jhu) \%>\% + step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% + step_epi_ahead(death_rate, ahead = 7) \%>\% + step_epi_lag(case_rate, lag = c(0, 7, 14)) \%>\% + step_epi_naomit() + +f <- frosting() \%>\% + layer_residual_quantiles( + quantile_levels = c(.025, .1, .25, .75, .9, .975) + ) \%>\% + layer_threshold(dplyr::starts_with(".pred")) \%>\% + layer_add_target_date() + +wf <- epi_workflow(r, parsnip::linear_reg(), f) \%>\% fit(jhu) + +autoplot(wf) + +latest <- jhu \%>\% dplyr::filter(time_value >= max(time_value) - 14) +preds <- predict(wf, latest) +autoplot(wf, preds, .max_facets = 4) + +# ------- Show multiple horizons + +p <- lapply(c(7, 14, 21, 28), \(h) { + r <- epi_recipe(jhu) \%>\% + step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% + step_epi_ahead(death_rate, ahead = h) \%>\% + step_epi_lag(case_rate, lag = c(0, 7, 14)) \%>\% + step_epi_naomit() + ewf <- epi_workflow(r, parsnip::linear_reg(), f) \%>\% fit(jhu) + td <- get_test_data(r, jhu) + predict(ewf, new_data = td) +}) + +p <- do.call(rbind, p) +autoplot(wf, p, .max_facets = 4) + +# ------- Plotting canned forecaster output + +jhu <- case_death_rate_subset \%>\% filter(time_value >= as.Date("2021-11-01")) +flat <- flatline_forecaster(jhu, "death_rate") +autoplot(flat, .max_facets = 4) + +arx <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), + args_list = arx_args_list(ahead = 14L) +) +autoplot(arx, .max_facets = 6) +} diff --git a/man/autoplot.epi_workflow.Rd b/man/autoplot.epi_workflow.Rd deleted file mode 100644 index 2ee2adc0d..000000000 --- a/man/autoplot.epi_workflow.Rd +++ /dev/null @@ -1,58 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/autoplot.R -\name{autoplot.epi_workflow} -\alias{autoplot.epi_workflow} -\title{Automatically plot an \code{epi_workflow}} -\usage{ -\method{autoplot}{epi_workflow}( - object, - predictions = NULL, - .levels = c(0.5, 0.8, 0.95), - ..., - .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), - .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "#3A448F", - .pred_line_color = "orange", - .max_facets = Inf -) -} -\arguments{ -\item{object}{An \code{epi_workflow}} - -\item{predictions}{A data frame with predictions. If \code{NULL}, only the -original data is shown.} - -\item{.levels}{A numeric vector of levels to plot for any prediction bands. -More than 3 levels begins to be difficult to see.} - -\item{...}{Ignored} - -\item{.color_by}{Which variables should determine the color(s) used to plot -lines. Options include: -\itemize{ -\item \code{all_keys} - the default uses the interaction of any key variables -including the \code{geo_value} -\item \code{geo_value} - \code{geo_value} only -\item \code{other_keys} - any available keys that are not \code{geo_value} -\item \code{.response} - the numeric variables (same as the y-axis) -\item \code{all} - uses the interaction of all keys and numeric variables -\item \code{none} - no coloring aesthetic is applied -}} - -\item{.facet_by}{Similar to \code{.color_by} except that the default is to display -each numeric variable on a separate facet} - -\item{.base_color}{If available, prediction bands will be shown with this -color.} - -\item{.pred_line_color}{If available, point forecasts will be shown with this -color.} - -\item{.max_facets}{Cut down of the number of facets displayed. Especially -useful for testing when there are many \code{geo_value}'s or keys.} -} -\description{ -For an unfit workflow, the training data will be displayed, the response by -default. If \code{predictions} is not \code{NULL} then point and interval forecasts -will be shown as well. -} From 6ee75c411027a8365665eab78e24e7b34f13d67d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:35:05 -0800 Subject: [PATCH 065/382] import ggplot2 --- DESCRIPTION | 1 + man/autoplot-epipred.Rd | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f59be0c30..68ab465bb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,6 +33,7 @@ Imports: dplyr, fs, generics, + ggplot2, glue, hardhat (>= 1.3.0), lifecycle, diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 61e2fc787..80a552604 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -13,7 +13,7 @@ ..., .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "blue4", + .base_color = "dodgerblue4", .point_pred_color = "orange", .max_facets = Inf ) @@ -23,7 +23,7 @@ ..., .color_by = c("all_keys", "geo_value", "other_keys", ".response", "all", "none"), .facet_by = c(".response", "other_keys", "all_keys", "geo_value", "all", "none"), - .base_color = "blue4", + .base_color = "dodgerblue4", .point_pred_color = "orange", .max_facets = Inf ) From af47f098d700f374b809ad7210b88ac1548a3739 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:44:25 -0800 Subject: [PATCH 066/382] remove test for old internal function --- tests/testthat/test-dist_quantiles.R | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index d5b0cf6d6..73404af67 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -10,14 +10,6 @@ test_that("constructor returns reasonable quantiles", { expect_error(new_quantiles(c(1, 2, 3), c(.1, .2, 3))) }) -test_that("tail functions give reasonable output", { - expect_equal(norm_q_par(qnorm(c(.75, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(norm_q_par(qnorm(c(.25, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(norm_q_par(qnorm(c(.25, .5), 0, 1)), list(m = 0, s = 1)) - expect_equal(exp_q_par(qlaplace(c(.75, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(exp_q_par(qlaplace(c(.25, .5), 10, 5)), list(m = 10, s = 5)) - expect_equal(exp_q_par(qlaplace(c(.25, .5), 0, 1)), list(m = 0, s = 1)) -}) test_that("single dist_quantiles works, quantiles are accessible", { z <- new_quantiles(values = 1:5, quantile_levels = c(.2, .4, .5, .6, .8)) From 6809ddaa3b93920eff701dd5426b28a60a041aae Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:44:36 -0800 Subject: [PATCH 067/382] typo in subfunction name --- R/workflow-printing.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/workflow-printing.R b/R/workflow-printing.R index c46d10848..d9c3446f9 100644 --- a/R/workflow-printing.R +++ b/R/workflow-printing.R @@ -105,7 +105,7 @@ print_preprocessor_formula <- function(x) { invisible(x) } -print_prepocessor_variables <- function(x) { +print_preprocessor_variables <- function(x) { variables <- workflows::extract_preprocessor(x) outcomes <- rlang::quo_get_expr(variables$outcomes) predictors <- rlang::quo_get_expr(variables$predictors) From 59a5485ba3a7a82528d8789dd1a9a0e468fb4d35 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:56:11 -0800 Subject: [PATCH 068/382] prefix head()/tail() --- R/dist_quantiles.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 0e4ef340f..592df17ea 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -228,13 +228,13 @@ quantile_extrapolate <- function(x, tau_out, middle) { qvals <- sort(unique(c(qvals, qvals_out[indm]))) } if (any(indl)) { - ta <- head(tau, 2) - qv <- head(qvals, 2) + ta <- utils::head(tau, 2) + qv <- utils::head(qvals, 2) qvals_out[indl] <- normal_tail(tau_out[indl], ta, qv, "left") } if (any(indr)) { - ta <- tail(tau, 2) - qv <- tail(qvals, 2) + ta <- utils::tail(tau, 2) + qv <- utils::tail(qvals, 2) qvals_out[indr] <- normal_tail(tau_out[indr], ta, qv, "right") } qvals_out From 042073a2d8a1529a0e0f35b89c727f6ad44f77d7 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:56:27 -0800 Subject: [PATCH 069/382] rm: from suggests to imports --- DESCRIPTION | 1 - 1 file changed, 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68ab465bb..9679a4ad3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -54,7 +54,6 @@ Suggests: covidcast, data.table, epidatr (>= 1.0.0), - ggplot2, knitr, lubridate, poissonreg, From db5acdeb9f03f74afd51a9872d858eba06b3a2e6 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 5 Mar 2024 13:56:40 -0800 Subject: [PATCH 070/382] ignore the dev md --- .Rbuildignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.Rbuildignore b/.Rbuildignore index 3a77bb347..d9c7ac5f1 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -15,5 +15,6 @@ ^data-raw$ ^vignettes/articles$ ^.git-blame-ignore-revs$ +^DEVELOPMENT\.md$ ^doc$ ^Meta$ From 95ce4d3a279aad8ce615f5082763f85653d05c9f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 12:00:47 -0800 Subject: [PATCH 071/382] complete dev quantile merge --- R/dist_quantiles.R | 53 +++++++++++++++++++++--------------- R/layer_residual_quantiles.R | 8 ++++-- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 592df17ea..60663d6ca 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -157,9 +157,6 @@ median.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "li if (length(quantile_levels) < 2 || min(quantile_levels) > 0.5 || max(quantile_levels) < 0.5) { return(NA) } - if (length(quantile_levels) < 3 || min(quantile_levels) > .25 || max(quantile_levels) < .75) { - return(stats::approx(quantile_levels, values, xout = 0.5)$y) - } quantile(x, 0.5, ..., middle = middle) } @@ -172,10 +169,9 @@ mean.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "line #' @export #' @importFrom stats quantile #' @import distributional -quantile.dist_quantiles <- function( - x, p, ..., - middle = c("cubic", "linear")) { +quantile.dist_quantiles <- function(x, p, ..., middle = c("cubic", "linear")) { arg_is_probabilities(p) + p <- sort(p) middle <- match.arg(middle) quantile_extrapolate(x, p, middle) } @@ -192,10 +188,9 @@ quantile_extrapolate <- function(x, tau_out, middle) { if (all(tau_out %in% tau)) { return(qvals[match(tau_out, tau)]) } - if (length(qvals) < 2 || r[1] > .5 || r[2] < .5) { - cli::cli_warn(c( - "Quantile extrapolation is not possible with fewer than", - "2 values or when the probabilties don't span 0.5." + if (length(qvals) < 2) { + cli::cli_abort(c( + "Quantile extrapolation is not possible with fewer than 2 quantiles." )) return(qvals_out) } @@ -209,7 +204,6 @@ quantile_extrapolate <- function(x, tau_out, middle) { result <- tryCatch( { Q <- stats::splinefun(tau, qvals, method = "hyman") - qvals_out[indm] <- Q(tau_out[indm]) }, error = function(e) { return(NA) @@ -227,24 +221,39 @@ quantile_extrapolate <- function(x, tau_out, middle) { tau <- sort(unique(c(tau, tau_out[indm]))) qvals <- sort(unique(c(qvals, qvals_out[indm]))) } + if (any(indl) || any(indr)) { + qv <- data.frame( + q = c(tau, tau_out[indm]), + v = c(qvals, qvals_out[indm]) + ) %>% + dplyr::distinct(q, .keep_all = TRUE) %>% + dplyr::arrange(q) + } if (any(indl)) { - ta <- utils::head(tau, 2) - qv <- utils::head(qvals, 2) - qvals_out[indl] <- normal_tail(tau_out[indl], ta, qv, "left") + qvals_out[indl] <- tail_extrapolate(tau_out[indl], utils::head(qv, 2)) } if (any(indr)) { - ta <- utils::tail(tau, 2) - qv <- utils::tail(qvals, 2) - qvals_out[indr] <- normal_tail(tau_out[indr], ta, qv, "right") + qvals_out[indr] <- tail_extrapolate(tau_out[indr], utils::tail(qv, 2)) } qvals_out } -normal_tail <- function(tau_out, tau, qvals, lr = c("left", "right")) { - lr <- match.arg(lr) - s <- abs(diff(qvals)) / abs(diff(qnorm(tau))) - m <- qvals[1] - s * qnorm(tau[1]) - qnorm(tau_out, m, s) +logit <- function(p) { + p <- pmax(pmin(p, 1), 0) + log(p) - log(1 - p) +} + +# extrapolates linearly on the logistic scale using +# the two points nearest the tail +tail_extrapolate <- function(tau_out, qv) { + if (nrow(qv) == 1L) { + return(rep(qv$v[1], length(tau_out))) + } + x <- logit(qv$q) + x0 <- logit(tau_out) + y <- qv$v + m <- diff(y) / diff(x) + m * (x0 - x[1]) + y[1] } diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index bd4ed27e3..b09956c2e 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -103,14 +103,16 @@ slather.layer_residual_quantiles <- if (length(common) > 0L) { r <- r %>% dplyr::select(tidyselect::any_of(c(common, ".resid"))) common_in_r <- common[common %in% names(r)] - if (length(common_in_r) != length(common)) { + if (length(common_in_r) == length(common)) { + r <- dplyr::left_join(key_cols, r, by = common_in_r) + } else { cli::cli_warn(c( "Some grouping keys are not in data.frame returned by the", "`residuals()` method. Groupings may not be correct." )) + r <- dplyr::bind_cols(key_cols, r %>% dplyr::select(.resid)) %>% + dplyr::group_by(!!!rlang::syms(common)) } - r <- dplyr::bind_cols(key_cols, r) %>% - dplyr::group_by(!!!rlang::syms(common)) } } From 046e7dece5232ac3643303b3c5a321758fe09f42 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 12:01:04 -0800 Subject: [PATCH 072/382] remove test for deleted function --- tests/testthat/test-dist_quantiles.R | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index f805b759c..ce4170837 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -26,16 +26,6 @@ test_that("single dist_quantiles works, quantiles are accessible", { ) }) -test_that("normal tail extrapolator works", { - tau <- c(.5, .75) - v <- qnorm(tau, 2, 3) - expect_equal(normal_tail(c(.8, .9), tau, v, "right"), qnorm(c(.8, .9), 2, 3)) - - tau <- c(.25, .4) - v <- qnorm(tau, -1, 3) - expect_equal(normal_tail(c(.1, .2), tau, v, "left"), qnorm(c(.1, .2), -1, 3)) - expect_equal(normal_tail(c(.1, .3), tau, v, "left"), qnorm(c(.1, .3), -1, 3)) -}) test_that("quantile extrapolator works", { dstn <- dist_normal(c(10, 2), c(5, 10)) From a06286e391d03cab67674df0a947028908abc536 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 12:04:41 -0800 Subject: [PATCH 073/382] complete merge, checks pass --- R/autoplot.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/autoplot.R b/R/autoplot.R index 4a6a99e8f..7c579ad28 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -150,7 +150,7 @@ autoplot.epi_workflow <- function( )) return(autoplot( edf, !!new_name_y, - .color_by = .colour_by, .facet_by = .facet_by, .base_color = .base_color, + .color_by = .color_by, .facet_by = .facet_by, .base_color = .base_color, .max_facets = .max_facets )) } From 86b8708dbad93103ec6c1500d43af2ba66b18e83 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 12:12:50 -0800 Subject: [PATCH 074/382] add plotting to pkgdown, clean up references --- _pkgdown.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index af4227b89..09288bdd6 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -30,9 +30,13 @@ reference: - title: Simple forecasters desc: Complete forecasters that produce reasonable baselines contents: - - contains("flatline") - - contains("arx") - - contains("cdc") + - contains("forecaster") + - contains("classifier") + - title: Forecaster modifications + desc: Constructors to modify forecaster arguments and utilities to produce `epi_workflow` objects + contents: + - contains("args_list") + - contains("_epi_workflow") - title: Helper functions for Hub submission contents: - flusight_hub_formatter @@ -70,6 +74,10 @@ reference: contents: - contains("layer") - contains("slather") + - title: Automatic forecast visualization + contents: + - autoplot.epi_workflow + - autoplot.canned_epipred - title: Utilities for quantile distribution processing contents: - dist_quantiles From 410da6074eb7d69c4a6c01e78b3df70f7dba8c55 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 13:52:17 -0800 Subject: [PATCH 075/382] revert changes --- R/dist_quantiles.R | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 60663d6ca..7f7af40f4 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -157,6 +157,9 @@ median.dist_quantiles <- function(x, na.rm = FALSE, ..., middle = c("cubic", "li if (length(quantile_levels) < 2 || min(quantile_levels) > 0.5 || max(quantile_levels) < 0.5) { return(NA) } + if (length(quantile_levels) < 3 || min(quantile_levels) > .25 || max(quantile_levels) < .75) { + return(stats::approx(quantile_levels, values, xout = 0.5)$y) + } quantile(x, 0.5, ..., middle = middle) } @@ -204,22 +207,22 @@ quantile_extrapolate <- function(x, tau_out, middle) { result <- tryCatch( { Q <- stats::splinefun(tau, qvals, method = "hyman") + quartiles <- Q(c(.25, .5, .75)) }, error = function(e) { return(NA) } ) } - - if (middle == "linear" || any(is.na(result))) method <- "linear" - + if (middle == "linear" || any(is.na(result))) { + method <- "linear" + quartiles <- stats::approx(tau, qvals, c(.25, .5, .75))$y + } if (any(indm)) { qvals_out[indm] <- switch(method, linear = stats::approx(tau, qvals, tau_out[indm])$y, cubic = Q(tau_out[indm]) ) - tau <- sort(unique(c(tau, tau_out[indm]))) - qvals <- sort(unique(c(qvals, qvals_out[indm]))) } if (any(indl) || any(indr)) { qv <- data.frame( @@ -230,10 +233,10 @@ quantile_extrapolate <- function(x, tau_out, middle) { dplyr::arrange(q) } if (any(indl)) { - qvals_out[indl] <- tail_extrapolate(tau_out[indl], utils::head(qv, 2)) + qvals_out[indl] <- tail_extrapolate(tau_out[indl], head(qv, 2)) } if (any(indr)) { - qvals_out[indr] <- tail_extrapolate(tau_out[indr], utils::tail(qv, 2)) + qvals_out[indr] <- tail_extrapolate(tau_out[indr], tail(qv, 2)) } qvals_out } From 29673be7bd16fda750ebe347a5760e84f4e28079 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 6 Mar 2024 13:54:14 -0800 Subject: [PATCH 076/382] bump version, add to news --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index efab33928..836e454c8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.10 +Version: 0.0.11 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 04dc78e4f..2a7fd0ec7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -33,3 +33,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Working vignette - use `checkmate` for input validation - refactor quantile extrapolation (possibly creates different results) +- add automatic plotting functionality `autoplot()` From dff767efb88069f5795310cc9b3be789a251a98f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 7 Mar 2024 15:27:44 -0800 Subject: [PATCH 077/382] add period utils --- NAMESPACE | 1 + R/period.R | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 R/period.R diff --git a/NAMESPACE b/NAMESPACE index 3c63145b3..89a522d66 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -43,6 +43,7 @@ S3method(fit,epi_workflow) S3method(flusight_hub_formatter,canned_epipred) S3method(flusight_hub_formatter,data.frame) S3method(format,dist_quantiles) +S3method(format,period) S3method(is.na,dist_quantiles) S3method(is.na,distribution) S3method(mean,dist_quantiles) diff --git a/R/period.R b/R/period.R new file mode 100644 index 000000000..af34a5896 --- /dev/null +++ b/R/period.R @@ -0,0 +1,41 @@ +new_period <- function(x) { + arg_is_scalar(x) + arg_is_chr(x) + + n <- as.integer(strextract("^[0-9]+", x)) + names_in <- tolower(strextract("[a-zA-Z]+$", x)) + names_allowed <- paste0(rlang::fn_fmls_names(default_period), "s") + if (length(n) == 0L || length(names_in) == 0L || + is.na(pmatch(names_in, names_allowed))) { + cli_abort(c( + "Requested periodicity {.var {names_in}} is not available.", + i = "Input must be a positive integer followed by one of {.val {names_allowed}}." + )) + } + names_in <- gsub("s$", "", names_in) + l <- rlang::list2(!!names_in := n) + res <- eval(rlang::call2("default_period", !!!l)) + vctrs::new_rcrd(res, class = "period") +} + +default_period <- function(year = 0L, quarter = 0L, month = 0L, epiweek = 0L, + week = 0L, day = 0L, hours = 0L, minutes = 0L, + seconds = 0L) { + enlist( + year = year, month = month + 3L * quarter, epiweek = epiweek, + day = day + 7L * week, hours = hours, minutes = minutes, seconds = seconds + ) +} + +#' @method format period +#' @export +format.period <- function(x, ...) { + nms <- c("Y", "M", "EW", "D", "h", "m", "s") + val <- vctrs::vec_c(!!!vctrs::vec_data(x)) + paste0(val[val != 0], nms[val != 0]) +} + +strextract <- function(pattern, x) { + m <- regexec(pattern, x) + unlist(regmatches(x, m)) +} From 06678456e80906644b21365ee12753318d0007e4 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 8 Mar 2024 14:35:55 -0800 Subject: [PATCH 078/382] ensure joins happen silently --- R/layer_population_scaling.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 2b7057bef..750ced0ee 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -144,6 +144,12 @@ slather.layer_population_scaling <- length(object$df_pop_col) == 1 ) + if (is.null(object$by)) { + object$by <- intersect( + kill_time_value(epi_keys(components$predictions)), + colnames(dplyr::select(object$df, !object$df_pop_col)) + ) + } try_join <- try( dplyr::left_join(components$predictions, object$df, by = object$by From edd5134144c9a6c0b7d93e3bc615c2c77d20eda6 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 07:40:54 -0800 Subject: [PATCH 079/382] fix time_type processing in forecast/target date --- R/epi_workflow.R | 7 +++-- R/layer_add_forecast_date.R | 27 ++++++++++--------- R/layer_add_target_date.R | 52 +++++++++++++++++++++++------------- R/layer_population_scaling.R | 5 ++-- R/period.R | 41 ---------------------------- R/step_epi_shift.R | 21 ++++++++------- R/time_types.R | 46 +++++++++++++++++++++++++++++++ 7 files changed, 110 insertions(+), 89 deletions(-) delete mode 100644 R/period.R create mode 100644 R/time_types.R diff --git a/R/epi_workflow.R b/R/epi_workflow.R index d5e7d13a2..0fca5dc6c 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -251,11 +251,10 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor #' preds predict.epi_workflow <- function(object, new_data, ...) { if (!workflows::is_trained_workflow(object)) { - rlang::abort( - c("Can't predict on an untrained epi_workflow.", + cli::cli_abort(c( + "Can't predict on an untrained epi_workflow.", i = "Do you need to call `fit()`?" - ) - ) + )) } components <- list() components$mold <- workflows::extract_mold(object) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 6bb2cf572..ea3635d79 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -78,8 +78,8 @@ layer_add_forecast_date <- } layer_add_forecast_date_new <- function(forecast_date, id) { - forecast_date <- arg_to_date(forecast_date, allow_null = TRUE) arg_is_chr_scalar(id) + # can't validate forecast_date until we know the time_type layer("add_forecast_date", forecast_date = forecast_date, id = id) } @@ -93,23 +93,24 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da ) object$forecast_date <- max_time_value } - as_of_pre <- attributes(workflows::extract_preprocessor(workflow)$template)$metadata$as_of - as_of_fit <- workflow$fit$meta$as_of - as_of_post <- attributes(new_data)$metadata$as_of - as_of_date <- as.Date(max(as_of_pre, as_of_fit, as_of_post)) + expected_time_type <- attr( + workflows::extract_preprocessor(workflow)$template, "metadata" + )$time_type + if (expected_time_type == "week") expected_time_type = "day" + check <- validate_date(object$forecast_date, expected_time_type) - if (object$forecast_date < as_of_date) { - cli_warn( - c("The forecast_date is less than the most ", - "recent update date of the data: ", - i = "forecast_date = {object$forecast_date} while data is from {as_of_date}." - ) - ) + if (!check$ok) { + cli::cli_abort(c( + "The `forecast_date` was given as a {.val {check$x}} while the", + `!` = "`time_type` of the training data was {.val {check$expected}}.", + i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + )) } + components$predictions <- dplyr::bind_cols( components$predictions, - forecast_date = as.Date(object$forecast_date) + forecast_date = coerce_time_type(object$forecast_date, expected_time_type) ) components } diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index f2fee889f..6a48cc923 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -63,7 +63,7 @@ #' p3 layer_add_target_date <- function(frosting, target_date = NULL, id = rand_id("add_target_date")) { - target_date <- arg_to_date(target_date, allow_null = TRUE) + # can't validate target_date until we know the time_type arg_is_chr_scalar(id) add_layer( frosting, @@ -84,33 +84,47 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data the_recipe <- workflows::extract_recipe(workflow) the_frosting <- extract_frosting(workflow) - if (!is.null(object$target_date)) { - target_date <- as.Date(object$target_date) - } else { # null target date case - if (detect_layer(the_frosting, "layer_add_forecast_date") && - !is.null(extract_argument( - the_frosting, - "layer_add_forecast_date", "forecast_date" - ))) { - forecast_date <- extract_argument( - the_frosting, - "layer_add_forecast_date", "forecast_date" - ) + expected_time_type <- attr( + workflows::extract_preprocessor(workflow)$template, "metadata" + )$time_type + if (expected_time_type == "week") expected_time_type = "day" - ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") + browser() + if (!is.null(object$target_date)) { + check <- validate_date(object$target_date, expected_time_type) + if (!check$ok) { + cli::cli_abort(c( + "The `target_date` was given as a {.val {check$x}} while the", + `!` = "`time_type` of the training data was {.val {check$expected}}.", + i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + )) + } + target_date <- coerce_time_type(object$target_date, expected_time_type) + } else if ( + detect_layer(the_frosting, "layer_add_forecast_date") && + !is.null(possible_fd <- extract_argument( + the_frosting, "layer_add_forecast_date", "forecast_date" + ))) { - target_date <- forecast_date + ahead - } else { + check <- validate_date(possible_fd, expected_time_type) + if (!check$ok) { + cli::cli_abort(c( + "The `forecast_date` was given as a {.val {check$x}} while the", + `!` = "`time_type` of the training data was {.val {check$expected}}.", + i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + )) + } + forecast_date <- coerce_time_type(fd, expected_time_type) + ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") + target_date <- forecast_date + ahead + } else { max_time_value <- max( workflows::extract_preprocessor(workflow)$max_time_value, workflow$fit$meta$max_time_value, max(new_data$time_value) ) - ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") - target_date <- max_time_value + ahead - } } components$predictions <- dplyr::bind_cols(components$predictions, diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 750ced0ee..1cdc35d7c 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -144,6 +144,7 @@ slather.layer_population_scaling <- length(object$df_pop_col) == 1 ) + browser() if (is.null(object$by)) { object$by <- intersect( kill_time_value(epi_keys(components$predictions)), @@ -163,8 +164,8 @@ slather.layer_population_scaling <- )) } - object$df <- object$df %>% - dplyr::mutate(dplyr::across(tidyselect::where(is.character), tolower)) + # object$df <- object$df %>% + # dplyr::mutate(dplyr::across(tidyselect::where(is.character), tolower)) pop_col <- rlang::sym(object$df_pop_col) exprs <- rlang::expr(c(!!!object$terms)) pos <- tidyselect::eval_select(exprs, components$predictions) diff --git a/R/period.R b/R/period.R deleted file mode 100644 index af34a5896..000000000 --- a/R/period.R +++ /dev/null @@ -1,41 +0,0 @@ -new_period <- function(x) { - arg_is_scalar(x) - arg_is_chr(x) - - n <- as.integer(strextract("^[0-9]+", x)) - names_in <- tolower(strextract("[a-zA-Z]+$", x)) - names_allowed <- paste0(rlang::fn_fmls_names(default_period), "s") - if (length(n) == 0L || length(names_in) == 0L || - is.na(pmatch(names_in, names_allowed))) { - cli_abort(c( - "Requested periodicity {.var {names_in}} is not available.", - i = "Input must be a positive integer followed by one of {.val {names_allowed}}." - )) - } - names_in <- gsub("s$", "", names_in) - l <- rlang::list2(!!names_in := n) - res <- eval(rlang::call2("default_period", !!!l)) - vctrs::new_rcrd(res, class = "period") -} - -default_period <- function(year = 0L, quarter = 0L, month = 0L, epiweek = 0L, - week = 0L, day = 0L, hours = 0L, minutes = 0L, - seconds = 0L) { - enlist( - year = year, month = month + 3L * quarter, epiweek = epiweek, - day = day + 7L * week, hours = hours, minutes = minutes, seconds = seconds - ) -} - -#' @method format period -#' @export -format.period <- function(x, ...) { - nms <- c("Y", "M", "EW", "D", "h", "m", "s") - val <- vctrs::vec_c(!!!vctrs::vec_data(x)) - paste0(val[val != 0], nms[val != 0]) -} - -strextract <- function(pattern, x) { - m <- regexec(pattern, x) - unlist(regmatches(x, m)) -} diff --git a/R/step_epi_shift.R b/R/step_epi_shift.R index ec5428d8f..94ef7178c 100644 --- a/R/step_epi_shift.R +++ b/R/step_epi_shift.R @@ -53,20 +53,20 @@ step_epi_lag <- function(recipe, ..., + lag, role = "predictor", trained = FALSE, - lag, prefix = "lag_", default = NA, columns = NULL, skip = FALSE, id = rand_id("epi_lag")) { if (!is_epi_recipe(recipe)) { - rlang::abort("This recipe step can only operate on an `epi_recipe`.") + cli::cli_abort("This step can only operate on an `epi_recipe`.") } if (missing(lag)) { - rlang::abort( + cli::cli_abort( c("The `lag` argument must not be empty.", i = "Did you perhaps pass an integer in `...` accidentally?" ) @@ -75,7 +75,8 @@ step_epi_lag <- arg_is_nonneg_int(lag) arg_is_chr_scalar(prefix, id) if (!is.null(columns)) { - rlang::abort(c("The `columns` argument must be `NULL.", + cli::cli_abort(c( + "The `columns` argument must be `NULL.", i = "Use `tidyselect` methods to choose columns to lag." )) } @@ -85,7 +86,7 @@ step_epi_lag <- terms = dplyr::enquos(...), role = role, trained = trained, - lag = lag, + lag = as.integer(lag), prefix = prefix, default = default, keys = epi_keys(recipe), @@ -104,21 +105,21 @@ step_epi_lag <- step_epi_ahead <- function(recipe, ..., + ahead, role = "outcome", trained = FALSE, - ahead, prefix = "ahead_", default = NA, columns = NULL, skip = FALSE, id = rand_id("epi_ahead")) { if (!is_epi_recipe(recipe)) { - rlang::abort("This recipe step can only operate on an `epi_recipe`.") + cli::cli_abort("This step can only operate on an `epi_recipe`.") } if (missing(ahead)) { - rlang::abort( - c("The `ahead` argument must not be empty.", + cli::cli_abort(c( + "The `ahead` argument must not be empty.", i = "Did you perhaps pass an integer in `...` accidentally?" ) ) @@ -136,7 +137,7 @@ step_epi_ahead <- terms = dplyr::enquos(...), role = role, trained = trained, - ahead = ahead, + ahead = as.integer(ahead), prefix = prefix, default = default, keys = epi_keys(recipe), diff --git a/R/time_types.R b/R/time_types.R new file mode 100644 index 000000000..02852696d --- /dev/null +++ b/R/time_types.R @@ -0,0 +1,46 @@ +guess_time_type <- function(time_value) { + if (is.character(time_value)) { + if (nchar(time_value[1]) <= "10") { + new_time_value <- tryCatch({ + as.Date(time_value) + }, error = function(e) NULL) + } else { + new_time_value <- tryCatch({ + as.POSIXct(time_value) + }, error = function(e) NULL) + } + if (!is.null(new_time_value)) time_value <- new_time_value + } + if (inherits(time_value, "POSIXct")) return("day-time") + if (inherits(time_value, "Date")) return("day") + if (inherits(time_value, "yearweek")) return("yearweek") + if (inherits(time_value, "yearmonth")) return("yearmonth") + if (inherits(time_value, "yearquarter")) return("yearquarter") + if (is.numeric(time_value) && all(time_value == as.integer(time_value)) && + all(time_value >= 1582)) { + return("year") + } + return("custom") +} + +coerce_time_type <- function(x, target_type) { + if (target_type == "year") { + if (is.numeric(x)) return(as.integer(x)) + else return(as.POSIXlt(x)$year + 1900L) + } + switch( + target_type, + "day-time" = as.POSIXct(x), + "day" = as.Date(x), + "week" = as.Date(x), + "yearweek" = tsibble::yearweek(x), + "yearmonth" = tsibble::yearmonth(x), + "yearquarter" = tsibble::yearquarter(x) + ) +} + +validate_date <- function(x, expected) { + x <- guess_time_type(x) + ok <- x == expected + enlist(ok, x, expected) +} From e3b2907db94784dc8636561bfdb543b9856d5384 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 07:41:05 -0800 Subject: [PATCH 080/382] import tsibble --- DESCRIPTION | 1 + NAMESPACE | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index e068fe7e3..68a566cee 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -46,6 +46,7 @@ Imports: tibble, tidyr, tidyselect, + tsibble, usethis, vctrs, workflows (>= 1.0.0) diff --git a/NAMESPACE b/NAMESPACE index 89a522d66..3c63145b3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -43,7 +43,6 @@ S3method(fit,epi_workflow) S3method(flusight_hub_formatter,canned_epipred) S3method(flusight_hub_formatter,data.frame) S3method(format,dist_quantiles) -S3method(format,period) S3method(is.na,dist_quantiles) S3method(is.na,distribution) S3method(mean,dist_quantiles) From a624b63244e71b2f45336ff47944760476be5239 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 07:41:26 -0800 Subject: [PATCH 081/382] use panel_data vignette for experiments, to be removed --- vignettes/panel-data.Rmd | 545 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 545 insertions(+) create mode 100644 vignettes/panel-data.Rmd diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd new file mode 100644 index 000000000..39321ae4c --- /dev/null +++ b/vignettes/panel-data.Rmd @@ -0,0 +1,545 @@ +--- +title: "Using epipredict on non-epidemic panel data" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Using epipredict on non-epidemic panel data} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=F} +knitr::opts_chunk$set( + echo = TRUE, + collapse = TRUE, + comment = "#>", + out.width = "100%" +) +``` + +```{r libraries} +library(dplyr) +library(tidyr) +library(parsnip) +library(recipes) +library(epiprocess) +library(epipredict) +library(ggplot2) +theme_set(theme_bw()) +``` + +[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, +contain cross-sectional measurements of subjects over time. The `epipredict` +package is most suitable for running forecasters on epidemiological panel data. +A built-in example of this is the [`case_death_rate_subset`]( + https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) +dataset, which contains daily state-wise measures of `case_rate` and +`death_rate` for COVID-19 in 2021: + +```{r epi-panel-ex, include=T} +head(case_death_rate_subset, 3) +``` + +`epipredict` functions work with data in +[`epi_df`](https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) +format. Despite the stated goal and name of the package, other panel datasets +are also valid candidates for `epipredict` functionality, as long as they are +in `epi_df` format. + +```{r employ-stats, include=F} +data("grad_employ_subset") +year_start <- min(grad_employ_subset$time_value) +year_end <- max(grad_employ_subset$time_value) +``` + +# Example panel data overview + +In this vignette, we will demonstrate using `epipredict` with employment panel +data from Statistics Canada. We will be using +[ + Table 37-10-0115-01: Characteristics and median employment income of + longitudinal cohorts of postsecondary graduates two and five years after + graduation, by educational qualification and field of study (primary + groupings) +](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). + +The full dataset contains yearly median employment income two and five years +after graduation, and number of graduates. The data is stratified by +variables such as geographic region (Canadian province), education, and +age group. The year range of the dataset is `r year_start` to `r year_end`, +inclusive. The full dataset also contains metadata that describes the +quality of data collected. For demonstration purposes, we make the following +modifications to get a subset of the full dataset: + +* Only keep provincial-level geographic region (the full data also has +"Canada" as a region) +* Only keep "good" or better quality data rows, as indicated by the [`STATUS`]( + https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column +* Choose a subset of covariates and aggregate across the remaining ones. The +chosen covariates are age group, and educational qualification. + +Below is the query for obtaining the full data and code for subsetting it as we +just described: + +```{r employ-query, eval=F} +library(cansim) + +# Get statcan data using get_cansim, which returns a tibble +statcan_grad_employ <- get_cansim("37-10-0115-01") + +gemploy <- statcan_grad_employ %>% + # Drop some columns and rename the ones we keep + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", + "Field of study", "Gender", "Age group", "Status of student in Canada", + "Characteristics after graduation", "Graduate statistics" + )) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "value" = "VALUE", + "status" = "STATUS", + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics" + ) %>% + # The original `VALUE` column contain the statistic indicated by + # `Graduate statistics` in the original data. Below we pivot the data + # wider so that each unique statistic can have its own column. + mutate( + # Recode for easier pivoting + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y" + ), + # They are originally strings but want ints for conversion to epi_df later + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% + filter( + # Drop aggregates for some columns + geo_value != "Canada" & + age_group != "15 to 64 years" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + fos == "Total, field of study" & + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) + ) %>% + select(-c(status, gender, student_status, grad_charac, fos)) +``` + +To use this data with `epipredict`, we need to convert it into `epi_df` format +using [`as_epi_df`]( + https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +with additional keys. In our case, the additional keys are `age_group`, +and `edu_qual`. Note that in the above modifications, we encoded `time_value` +as type `integer`. This lets us set `time_type = "year"`, and ensures that +lag and ahead modifications later on are using the correct time units. See the +[`epi_df` documentation]( + https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for +a list of all the `type_type`s available. + +```{r convert-to-epidf, eval=F} +grad_employ_subset <- gemploy %>% + tsibble::as_tsibble( + index = time_value, + key = c(geo_value, age_group, edu_qual) + ) %>% + as_epi_df( + geo_type = "custom", time_type = "year", + additional_metadata = c(other_keys = list("age_group", "edu_qual")) + ) +``` + +```{r data-dim, include=F} +employ_rowcount <- format(nrow(grad_employ_subset), big.mark = ",") +employ_colcount <- length(names(grad_employ_subset)) +``` + +Now, we are ready to use `grad_employ_subset` with `epipredict`. +Our `epi_df` contains `r employ_rowcount` rows and `r employ_colcount` columns. +Here is a quick summary of the columns in our `epi_df`: + +* `time_value` (time value): year in `date` format +* `geo_value` (geo value): province in Canada +* `num_graduates` (raw, time series value): number of graduates +* `med_income_2y` (raw, time series value): median employment income 2 years +after graduation +* `med_income_5y` (raw, time series value): median employment income 5 years +after graduation +* `age_group` (key): one of two age groups, either 15 to 34 years, or 35 to 64 +years +* `edu_qual` (key): one of 32 unique educational qualifications, e.g., +"Master's diploma" + +```{r preview-data, include=T} +# Rename for simplicity +employ <- grad_employ_subset +sample_n(employ, 6) +``` + +In the following sections, we will go over preprocessing the data in the +`epi_recipe` framework, and fitting a model and making predictions within the +`epipredict` framework and using the package's canned forecasters. + +# Simple autoregressive with 3 lags to predict number of graduates in a year + +## Preprocessing + +As a simple example, let's work with the `num_graduates` column for now. We will +first pre-process by "standardizing" each numeric column by the total within +each group of keys. We do this since those raw numeric values will vary greatly +from province to province since there are large differences in population. + +```{r employ-small, include=T} +employ_small <- employ %>% + group_by(geo_value, age_group, edu_qual) %>% + # Select groups where there are complete timeseries values + filter(n() >= 6) %>% + mutate( + num_graduates_prop = num_graduates / sum(num_graduates), + med_income_2y_prop = med_income_2y / sum(med_income_2y), + med_income_5y_prop = med_income_5y / sum(med_income_5y) + ) %>% + ungroup() +head(employ_small) +``` + +Below is a visualization for a sample of the small data. Note that some groups +do not have any time series information since we filtered out all timeseries +with incomplete dates. + +```{r employ-small-graph, include=T, eval=T, fig.width=9, fig.height=6} +employ_small %>% + filter(geo_value %in% c("British Columbia", "Ontario")) %>% + filter(grepl("degree", edu_qual, fixed = T)) %>% + group_by(geo_value, time_value, edu_qual, age_group) %>% + summarise(num_graduates_prop = sum(num_graduates_prop), .groups = "drop") %>% + ggplot(aes(x = time_value, y = num_graduates_prop, color = geo_value)) + + geom_line() + + scale_colour_manual(values = c("Cornflowerblue", "Orange"), name = "") + + facet_grid(rows = vars(edu_qual), cols = vars(age_group)) + + xlab("Year") + + ylab("Percentage of gratuates") + + theme(legend.position = "bottom") +``` + +We will predict the "standardized" number of graduates (a proportion) in the +next year (time $t+1$) using an autoregressive model with three lags (i.e., an +AR(3) model). Such a model is represented algebraically like this: + +\[ + x_{t+1} = + \alpha_0 + \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t +\] + +where $x_i$ is the proportion of graduates at time $i$, and the current time is +$t$. + +In the preprocessing step, we need to create additional columns in `employ` for +each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an +`epi_recipe`. Note that creating an `epi_recipe` alone doesn't add these +outcome and predictor columns; the recipe just stores the instructions for +adding them. + +Our `epi_recipe` should add one `ahead` column representing $x_{t+1}$ and +3 `lag` columns representing $x_{t}$, $x_{t-1}$, and $x_{t-2}$. Also note that +since we specified our `time_type` to be `year`, our `lag` and `lead` +values are both in years. + +```{r make-recipe, include=T, eval=T} +r <- epi_recipe(employ_small) %>% + step_epi_ahead(num_graduates_prop, ahead = 1) %>% + step_epi_lag(num_graduates_prop, lag = 0:2) %>% + step_epi_naomit() +r +``` + +Let's apply this recipe using `prep` and `bake` to generate and view the `lag` +and `ahead` columns. + +```{r view-preprocessed, include=T} +# Display a sample of the preprocessed data +bake_and_show_sample <- function(recipe, data, n = 5) { + recipe %>% prep(data) %>% bake(new_data = data) %>% sample_n(n) +} + +r %>% bake_and_show_sample(employ_small) +``` + +We can see that the `prep` and `bake` steps created new columns according to +our `epi_recipe`: + +- `ahead_1_num_graduates_prop` corresponds to $x_{t+1}$ +- `lag_0_num_graduates_prop`, `lag_1_num_graduates_prop`, and +`lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ +respectively. + +## Model fitting and prediction + +Since our goal for now is to fit a simple autoregressive model, we can use +[`parsnip::linear_reg()`]( + https://parsnip.tidymodels.org/reference/linear_reg.html) with the default +engine `lm`, which fits a linear regression using ordinary least squares. + +We will use `epi_workflow` with the `epi_recipe` we defined in the +preprocessing section along with the `parsnip::linear_reg()` model. Note again +that `epi_workflow` is a container and doesn't actually do the fitting. We have +to pass the workflow into `fit()` to get our model coefficients +$\alpha_i, i=0,...,3$. + +```{r linearreg-wf, include=T} +wf_linreg <- epi_workflow(r, linear_reg()) %>% + fit(employ_small) +summary(extract_fit_engine(wf_linreg)) +``` + +This output tells us the coefficients of the fitted model; for instance, +the intercept is $\alpha_0 = 0.24804$ and the coefficient for $x_{t}$ is +$\alpha_1 = 0.06648$. The summary also tells us that only the intercept and lags +at 2 years and 3 years ago have coefficients significantly greater than zero. + +Extracting the 95% confidence intervals for the coefficients also leads us to +the same conclusion: all the coefficients except for $\alpha_1$ (lag 0) contain +0. + +```{r} +confint(extract_fit_engine(wf_linreg)) +``` + +Now that we have our workflow, we can generate predictions from a subset of our +data. For this demo, we will predict the number of graduates using the last 2 +years of our dataset. + +```{r linearreg-predict, include=T} +latest <- get_test_data(recipe = r, x = employ_small) +preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) +# Display a sample of the prediction values, excluding NAs +preds %>% sample_n(5) +``` + +We can do this using the `augment` function too. Note that `predict` and +`augment` both still return an `epi_df` with all of the keys that were present +in the original dataset. + +```{r linearreg-augment, include=T, eval=F} +augment(wf_linreg, latest) %>% sample_n(5) +``` + +## Model diagnostics + +First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the +fitted values ($\hat{y}_{t}$). + +```{r lienarreg-resid-plot, include=T, fig.height=8} +par(mfrow = c(2, 2), mar = c(5, 3.5, 1, 1) + .5) +plot(extract_fit_engine(wf_linreg)) +``` + +The fitted values vs. residuals plot shows us that the residuals are mostly +clustered around zero, but do not form an even band around the zero line, +indicating that the variance of the residuals is not constant. Additionally, +the fitted values vs. square root of standardized residuals makes this more +obvious - the spread of the square root of standardized residuals varies with +the fitted values. + +The Q-Q plot shows us that the residuals have heavier tails than a Normal +distribution. So the normality of residuals assumption doesn't hold either. + +Finally, the residuals vs. leverage plot shows us that we have a few influential +points based on the Cooks distance (those outside the red dotted line). + +Since we appear to be violating the linear model assumptions, we might consider +transforming our data differently, or considering a non-linear model, or +something else. + +# Autoregressive model with exogenous inputs + +Now suppose we want to model the 5-year employment income using 3 lags, while +also incorporating information from the other two time-series in our dataset: +the 2-year employment income and the number of graduates in the previous 2 +years. We would do this using an autoregressive model with exogenous inputs, +defined as follows: + +\[ + y_{t+1} = + \alpha_0 + \alpha_1 y_{t} + \alpha_2 y_{t-1} + \alpha_3 y_{t-2} + + \beta_1 x_{t} + \beta_2 x_{t-1} + \gamma_2 z_{t} + \gamma_2 z_{t-1} +\] + +where $y_i$ is the 5-year median income (proportion) at time $i$, +$x_i$ is the 2-year median income (proportion) at time $i$, and +$z_i$ is the number of graduates (proportion) at time $i$. + +## Preprocessing + +Again, we construct an `epi_recipe` detailing the preprocessing steps. + +```{r custom-arx, include=T} +rx <- epi_recipe(employ_small) %>% + step_epi_ahead(med_income_5y_prop, ahead = 1) %>% + # 5-year median income has 3 lags c(0,1,2) + step_epi_lag(med_income_5y_prop, lag = c(0, 1, 2)) %>% + # But the two exogenous variables have 2 lags c(0,1) + step_epi_lag(med_income_2y_prop, lag = c(0, 1)) %>% + step_epi_lag(num_graduates_prop, lag = c(0, 1)) %>% + step_epi_naomit() + +bake_and_show_sample(rx, employ_small) +``` + +## Model fitting & postprocessing + +Before fitting our model and making predictions, let's add some post-processing +steps using a few [`frosting`]( + https://cmu-delphi.github.io/epipredict/reference/frosting.html) layers to do +a few things: + +1. Convert our predictions back to income values and number of graduates, +rather than standardized proportions. We do this via the frosting layer +`layer_population_scaling`. +2. Threshold our predictions to 0. We are predicting proportions, which can't +be negative. And the transformed values back to dollars and people can't be +negative either. +3. Generate prediction intervals based on residual quantiles, allowing us to +quantify the uncertainty associated with future predicted values. + +```{r custom-arx-post, include=T} +# Create dataframe of the sums we used for standardizing +# Only have to include med_income_5y since that is our outcome +totals <- employ_small %>% + group_by(geo_value, age_group, edu_qual) %>% + summarise(med_income_5y_tot = sum(med_income_5y), .groups = "drop") + +# Define post-processing steps +f <- frosting() %>% + layer_predict() %>% + layer_naomit(.pred) %>% + layer_threshold(.pred, lower = 0) %>% + # 90% prediction interval + layer_residual_quantiles( + quantile_levels = c(0.1, 0.9), + symmetrize = FALSE + ) %>% + layer_population_scaling( + .pred, .pred_distn, + df = totals, df_pop_col = "med_income_5y_tot" + ) + +wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% + fit(employ_small) %>% + add_frosting(f) + +summary(extract_fit_engine(wfx_linreg)) +``` + +Based on the summary output for this model, only the intercept term, 5-year +median income from 3 years ago, and the 2-year median income from 1 year ago +are significant linear predictors for today's 5-year median income at a 95% +confidence level. Both lags for the number of graduates were insignificant. + +Let's take a look at the predictions along with their 90% prediction intervals. + +```{r} +latest <- get_test_data(recipe = rx, x = employ_small) +predsx <- predict(wfx_linreg, latest) + +# Display values within prediction intervals +predsx %>% + select( + geo_value, time_value, edu_qual, age_group, fos, + .pred_scaled, .pred_distn_scaled + ) %>% + head() %>% + pivot_quantiles_wider(.pred_distn_scaled) +``` + +# Using canned forecasters + +We've seen what we can do with non-epidemiological panel data using the +recipes frame, with `epi_recipe` for preprocessing, `epi_workflow` for model +fitting, and `frosting` for postprocessing. + +`epipredict` also comes with canned forecasters that do all of those steps +behind the scenes for some simple models. Even though we aren't working with +epidemiological data, canned forecasters still work as expected, out of the box. +We will demonstrate this with the simple +[`flatline_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) +and the direct autoregressive (AR) forecaster +[`arx_forecaster`]( + https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). + +For both illustrations, we will continue to use the `employ_small` dataset +with the transformed numeric columns that are proportions within each group +by the keys in our `epi_df`. + +## Flatline forecaster + +In this first example, we'll use `flatline_forecaster` to make a simple +prediction of the 2-year median income for the next year, based on one previous +time point. This model is representated algebraically as: +\[y_{t+1} = \alpha_0 + \alpha_0 y_{t}\] +where $y_i$ is the 2-year median income (proportion) at time $i$. + +```{r flatline, include=T, warning=F} +out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", + args_list = flatline_args_list(ahead = 1) +) + +out_fl +``` + +## Autoregressive forecaster with exogenous inputs + +In this second example, we'll use `arx_forecaster` to make a prediction of the +5-year median income based using two lags, _and_ using two lags on two exogenous +variables: 2-year median income and number of graduates. + +The canned forecaster gives us a simple way of making this forecast since it +defines the recipe, workflow, and post-processing steps behind the scenes. This +is very similar to the model we introduced in the "Autoregressive Linear Model +with Exogenous Inputs" section of this article, but where all inputs have the +same number of lags. + +```{r arx-lr, include=T, warning=F} +arx_args <- arx_args_list(lags = c(0L, 1L), ahead = 1L) + +out_arx_lr <- arx_forecaster(employ_small, "med_income_5y_prop", + c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), + args_list = arx_args +) + +out_arx_lr +``` + +Other changes to the direct AR forecaster, like changing the engine, also work +as expected. Below we use a boosted tree model instead of a linear regression. + +```{r arx-rf, include=T, warning=F} +out_arx_rf <- arx_forecaster( + employ_small, "med_income_5y_prop", + c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), + trainer = parsnip::boost_tree(mode = "regression", trees = 20), + args_list = arx_args +) + +out_arx_rf +``` From 69b21c67cb8b891b9377b0da1936e5eefa8205ed Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:01:35 -0800 Subject: [PATCH 082/382] remove browser() --- R/layer_add_target_date.R | 3 +-- R/layer_population_scaling.R | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 6a48cc923..8ab077efa 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -89,7 +89,6 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data )$time_type if (expected_time_type == "week") expected_time_type = "day" - browser() if (!is.null(object$target_date)) { check <- validate_date(object$target_date, expected_time_type) if (!check$ok) { @@ -114,7 +113,7 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." )) } - forecast_date <- coerce_time_type(fd, expected_time_type) + forecast_date <- coerce_time_type(possible_fd, expected_time_type) ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") target_date <- forecast_date + ahead } else { diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 1cdc35d7c..f89160794 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -144,7 +144,6 @@ slather.layer_population_scaling <- length(object$df_pop_col) == 1 ) - browser() if (is.null(object$by)) { object$by <- intersect( kill_time_value(epi_keys(components$predictions)), From 3498fcfdc614ccca36bdc8ebe7c5f0f4f9988c6e Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:01:54 -0800 Subject: [PATCH 083/382] prefix with utils to avoid check warning --- R/dist_quantiles.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 7f7af40f4..f20ebe3dc 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -233,10 +233,10 @@ quantile_extrapolate <- function(x, tau_out, middle) { dplyr::arrange(q) } if (any(indl)) { - qvals_out[indl] <- tail_extrapolate(tau_out[indl], head(qv, 2)) + qvals_out[indl] <- tail_extrapolate(tau_out[indl], utils::head(qv, 2)) } if (any(indr)) { - qvals_out[indr] <- tail_extrapolate(tau_out[indr], tail(qv, 2)) + qvals_out[indr] <- tail_extrapolate(tau_out[indr], utils::tail(qv, 2)) } qvals_out } From b2b8134d033d7af825cef30e5743c33acee93ebe Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:02:05 -0800 Subject: [PATCH 084/382] redocument --- man/step_epi_shift.Rd | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/man/step_epi_shift.Rd b/man/step_epi_shift.Rd index bf135346e..f4419b831 100644 --- a/man/step_epi_shift.Rd +++ b/man/step_epi_shift.Rd @@ -8,9 +8,9 @@ step_epi_lag( recipe, ..., + lag, role = "predictor", trained = FALSE, - lag, prefix = "lag_", default = NA, columns = NULL, @@ -21,9 +21,9 @@ step_epi_lag( step_epi_ahead( recipe, ..., + ahead, role = "outcome", trained = FALSE, - ahead, prefix = "ahead_", default = NA, columns = NULL, @@ -38,16 +38,16 @@ sequence of operations for this recipe.} \item{...}{One or more selector functions to choose variables for this step. See \code{\link[recipes:selections]{recipes::selections()}} for more details.} +\item{lag, ahead}{A vector of integers. Each specified column will +be the lag or lead for each value in the vector. Lag integers must be +nonnegative, while ahead integers must be positive.} + \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} \item{trained}{A logical to indicate if the quantities for preprocessing have been estimated.} -\item{lag, ahead}{A vector of integers. Each specified column will -be the lag or lead for each value in the vector. Lag integers must be -nonnegative, while ahead integers must be positive.} - \item{prefix}{A prefix to indicate what type of variable this is} \item{default}{Determines what fills empty rows From f2f39a264e5fbf96b9b7df7f7bdaba870c270147 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:02:39 -0800 Subject: [PATCH 085/382] ahead/lag will always be integer type now --- tests/testthat/test-extract_argument.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-extract_argument.R b/tests/testthat/test-extract_argument.R index 0654304ba..3250b2991 100644 --- a/tests/testthat/test-extract_argument.R +++ b/tests/testthat/test-extract_argument.R @@ -43,19 +43,19 @@ test_that("recipe argument extractor works", { expect_error(extract_argument(r$steps[[1]], "uhoh", "bubble")) expect_error(extract_argument(r$steps[[1]], "step_epi_lag", "bubble")) - expect_identical(extract_argument(r$steps[[2]], "step_epi_ahead", "ahead"), 7) + expect_identical(extract_argument(r$steps[[2]], "step_epi_ahead", "ahead"), 7L) expect_error(extract_argument(r, "step_lightly", "quantile_levels")) expect_identical( extract_argument(r, "step_epi_lag", "lag"), - list(c(0, 7, 14), c(0, 7, 14)) + list(c(0L, 7L, 14L), c(0L, 7L, 14L)) ) wf <- epi_workflow(preprocessor = r) expect_error(extract_argument(epi_workflow(), "step_epi_lag", "lag")) expect_identical( extract_argument(wf, "step_epi_lag", "lag"), - list(c(0, 7, 14), c(0, 7, 14)) + list(c(0L, 7L, 14L), c(0L, 7L, 14L)) ) }) From f9859fe880a0209ab7d3f1c8c454c0a9c2b3f1df Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:16:37 -0800 Subject: [PATCH 086/382] we no longer warn if as_of > forecast_date --- tests/testthat/test-layer_add_forecast_date.R | 25 +++++++++++-------- tests/testthat/test-layer_add_target_date.R | 3 ++- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 1830118dc..29a427c3a 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -11,8 +11,9 @@ latest <- jhu %>% test_that("layer validation works", { f <- frosting() - expect_error(layer_add_forecast_date(f, "a")) - expect_error(layer_add_forecast_date(f, "2022-05-31", id = c("a", "b"))) + + + expect_error(layer_add_forecast_date(f, "2022-05-31", id = 2)) expect_silent(layer_add_forecast_date(f, "2022-05-31")) expect_silent(layer_add_forecast_date(f)) expect_silent(layer_add_forecast_date(f, as.Date("2022-05-31"))) @@ -41,10 +42,12 @@ test_that("Specify a `forecast_date` that is less than `as_of` date", { layer_naomit(.pred) wf2 <- wf %>% add_frosting(f2) - expect_warning( - p2 <- predict(wf2, latest), - "forecast_date is less than the most recent update date of the data." - ) + # this warning has been removed + # expect_warning( + # p2 <- predict(wf2, latest), + # "forecast_date is less than the most recent update date of the data." + # ) + expect_silent(p2 <- predict(wf2, latest)) expect_equal(ncol(p2), 4L) expect_s3_class(p2, "epi_df") expect_equal(nrow(p2), 3L) @@ -59,10 +62,12 @@ test_that("Do not specify a forecast_date in `layer_add_forecast_date()`", { layer_naomit(.pred) wf3 <- wf %>% add_frosting(f3) - expect_warning( - p3 <- predict(wf3, latest), - "forecast_date is less than the most recent update date of the data." - ) + # this warning has been removed + # expect_warning( + # p3 <- predict(wf3, latest), + # "forecast_date is less than the most recent update date of the data." + # ) + expect_silent(p3 <- predict(wf3, latest)) expect_equal(ncol(p3), 4L) expect_s3_class(p3, "epi_df") expect_equal(nrow(p3), 3L) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index 287956612..bf752e968 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -31,7 +31,8 @@ test_that("Use ahead + max time value from pre, fit, post", { layer_naomit(.pred) wf2 <- wf %>% add_frosting(f2) - expect_warning(p2 <- predict(wf2, latest)) + # expect_warning(p2 <- predict(wf2, latest)) # this warning has been removed + expect_silent(p2 <- predict(wf2, latest)) expect_equal(ncol(p2), 5L) expect_s3_class(p2, "epi_df") expect_equal(nrow(p2), 3L) From fb7faae256731bcf51a351d0a3d268289c4df0ed Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:17:01 -0800 Subject: [PATCH 087/382] upstream changes to prep() no require data --- tests/testthat/test-step_growth_rate.R | 8 ++++---- tests/testthat/test-step_lag_difference.R | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/testthat/test-step_growth_rate.R b/tests/testthat/test-step_growth_rate.R index d0dec170e..052141710 100644 --- a/tests/testthat/test-step_growth_rate.R +++ b/tests/testthat/test-step_growth_rate.R @@ -34,7 +34,7 @@ test_that("step_growth_rate works for a single signal", { res <- r %>% step_growth_rate(value, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$gr_1_rel_change_value, c(NA, 1 / 6:9)) @@ -46,7 +46,7 @@ test_that("step_growth_rate works for a single signal", { r <- epi_recipe(edf) res <- r %>% step_growth_rate(value, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$gr_1_rel_change_value, rep(c(NA, 1 / 6:9), each = 2)) }) @@ -63,7 +63,7 @@ test_that("step_growth_rate works for a two signals", { res <- r %>% step_growth_rate(v1, v2, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$gr_1_rel_change_v1, c(NA, 1 / 6:9)) expect_equal(res$gr_1_rel_change_v2, c(NA, 1 / 1:4)) @@ -76,7 +76,7 @@ test_that("step_growth_rate works for a two signals", { r <- epi_recipe(edf) res <- r %>% step_growth_rate(v1, v2, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$gr_1_rel_change_v1, rep(c(NA, 1 / 6:9), each = 2)) expect_equal(res$gr_1_rel_change_v2, rep(c(NA, 1 / 1:4), each = 2)) diff --git a/tests/testthat/test-step_lag_difference.R b/tests/testthat/test-step_lag_difference.R index dc61d12d4..c0fd377e6 100644 --- a/tests/testthat/test-step_lag_difference.R +++ b/tests/testthat/test-step_lag_difference.R @@ -27,13 +27,13 @@ test_that("step_lag_difference works for a single signal", { res <- r %>% step_lag_difference(value, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$lag_diff_1_value, c(NA, rep(1, 4))) res <- r %>% step_lag_difference(value, horizon = 1:2) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$lag_diff_1_value, c(NA, rep(1, 4))) expect_equal(res$lag_diff_2_value, c(NA, NA, rep(2, 3))) @@ -48,7 +48,7 @@ test_that("step_lag_difference works for a single signal", { r <- epi_recipe(edf) res <- r %>% step_lag_difference(value, horizon = 1) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$lag_diff_1_value, c(NA, NA, rep(1, 8))) }) @@ -65,7 +65,7 @@ test_that("step_lag_difference works for a two signals", { res <- r %>% step_lag_difference(v1, v2, horizon = 1:2) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$lag_diff_1_v1, c(NA, rep(1, 4))) expect_equal(res$lag_diff_2_v1, c(NA, NA, rep(2, 3))) @@ -80,7 +80,7 @@ test_that("step_lag_difference works for a two signals", { r <- epi_recipe(edf) res <- r %>% step_lag_difference(v1, v2, horizon = 1:2) %>% - prep() %>% + prep(edf) %>% bake(edf) expect_equal(res$lag_diff_1_v1, rep(c(NA, rep(1, 4)), each = 2)) expect_equal(res$lag_diff_2_v1, rep(c(NA, NA, rep(2, 3)), each = 2)) From 78ff1f94b341758f24a80e3e236f0504e19418ab Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 08:19:05 -0800 Subject: [PATCH 088/382] remove unused test --- tests/testthat/test-propagate_samples.R | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 tests/testthat/test-propagate_samples.R diff --git a/tests/testthat/test-propagate_samples.R b/tests/testthat/test-propagate_samples.R deleted file mode 100644 index 5278ab385..000000000 --- a/tests/testthat/test-propagate_samples.R +++ /dev/null @@ -1,7 +0,0 @@ -test_that("propagate_samples", { - r <- -30:50 - p <- 40 - quantiles <- 1:9 / 10 - aheads <- c(2, 4, 7) - nsim <- 100 -}) From 44a145fb0b6731ac9549214ceff9c0ad9970283a Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sat, 9 Mar 2024 09:27:55 -0800 Subject: [PATCH 089/382] some simplifications --- vignettes/panel-data.Rmd | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 82d0a94d6..39321ae4c 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -47,7 +47,6 @@ in `epi_df` format. ```{r employ-stats, include=F} data("grad_employ_subset") -grad_employ_subset <- grad_employ_subset year_start <- min(grad_employ_subset$time_value) year_end <- max(grad_employ_subset$time_value) ``` @@ -306,8 +305,8 @@ to pass the workflow into `fit()` to get our model coefficients $\alpha_i, i=0,...,3$. ```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, parsnip::linear_reg()) %>% - parsnip::fit(employ_small) +wf_linreg <- epi_workflow(r, linear_reg()) %>% + fit(employ_small) summary(extract_fit_engine(wf_linreg)) ``` @@ -427,7 +426,7 @@ quantify the uncertainty associated with future predicted values. # Only have to include med_income_5y since that is our outcome totals <- employ_small %>% group_by(geo_value, age_group, edu_qual) %>% - summarise(med_income_5y_tot = sum(med_income_5y), .groups = "keep") + summarise(med_income_5y_tot = sum(med_income_5y), .groups = "drop") # Define post-processing steps f <- frosting() %>% @@ -436,7 +435,7 @@ f <- frosting() %>% layer_threshold(.pred, lower = 0) %>% # 90% prediction interval layer_residual_quantiles( - quantile_levels = c(0.05, 0.95), + quantile_levels = c(0.1, 0.9), symmetrize = FALSE ) %>% layer_population_scaling( @@ -454,7 +453,7 @@ summary(extract_fit_engine(wfx_linreg)) Based on the summary output for this model, only the intercept term, 5-year median income from 3 years ago, and the 2-year median income from 1 year ago are significant linear predictors for today's 5-year median income at a 95% -confidence level. Both lags for the number of graduates were insigificant. +confidence level. Both lags for the number of graduates were insignificant. Let's take a look at the predictions along with their 90% prediction intervals. From 3d059f42951db9f7a1e114b67d915712eda93046 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 11:32:19 -0700 Subject: [PATCH 090/382] always a scalar --- R/time_types.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/time_types.R b/R/time_types.R index 02852696d..5f3aa4c14 100644 --- a/R/time_types.R +++ b/R/time_types.R @@ -1,6 +1,8 @@ guess_time_type <- function(time_value) { + # similar to epiprocess:::guess_time_type() but w/o the gap handling + arg_is_scalar(time_value) if (is.character(time_value)) { - if (nchar(time_value[1]) <= "10") { + if (nchar(time_value) <= "10") { new_time_value <- tryCatch({ as.Date(time_value) }, error = function(e) NULL) From de9e00a8163a9fc8028879d6c10b3bd37c408328 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 11:36:26 -0700 Subject: [PATCH 091/382] add some additional tests --- tests/testthat/test-layer_add_forecast_date.R | 32 +++++++++++++++++++ tests/testthat/test-layer_add_target_date.R | 32 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 29a427c3a..93f13baf7 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -74,3 +74,35 @@ test_that("Do not specify a forecast_date in `layer_add_forecast_date()`", { expect_equal(p3$forecast_date, rep(as.Date("2021-12-31"), times = 3)) expect_named(p3, c("geo_value", "time_value", ".pred", "forecast_date")) }) + + +test_that("forecast date works for daily", { + f <- frosting() %>% + layer_predict() %>% + layer_add_forecast_date() %>% + layer_naomit(.pred) + + wf1 <- add_frosting(wf, f) + p <- predict(wf1, latest) + expect_identical(p$forecast_date[1], as.Date("2021-12-31")) + + latest_bad <- latest %>% + unclass() %>% + as.data.frame() %>% + mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% + as_epi_df() + + expect_error(predict(wf1, latest_bad)) + wf1 <- add_frosting( + wf, + adjust_frosting(f, "layer_add_forecast_date", forecast_date = "2022-01-01") + ) + expect_silent(predict(wf1, latest)) + + wf1 <- add_frosting( + wf, + adjust_frosting(f, "layer_add_forecast_date", forecast_date = 2022L) + ) + expect_error(predict(wf1, latest)) # wrong time type of forecast_date + +}) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index bf752e968..f3b706aa6 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -86,3 +86,35 @@ test_that("Specify own target date", { expect_equal(p2$target_date, rep(as.Date("2022-01-08"), times = 3)) expect_named(p2, c("geo_value", "time_value", ".pred", "target_date")) }) + +test_that("forecast date works for daily", { + f <- frosting() %>% + layer_predict() %>% + layer_add_target_date() %>% + layer_naomit(.pred) + + wf1 <- add_frosting(wf, f) + p <- predict(wf1, latest) + expect_identical(p$target_date[1], as.Date("2021-12-31") + 7L) + + latest_bad <- latest %>% + unclass() %>% + as.data.frame() %>% + mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% + as_epi_df() + + expect_error(predict(wf1, latest_bad)) + wf1 <- add_frosting( + wf, + adjust_frosting(f, "layer_add_target_date", target_date = "2022-01-07") + ) + expect_silent(predict(wf1, latest)) + + wf1 <- add_frosting( + wf, + adjust_frosting(f, "layer_add_target_date", target_date = 2022L) + ) + expect_error(predict(wf1, latest)) # wrong time type of forecast_date + +}) + From 0c3872360ed0b26a122d9ce911dd61f6fcb52ecc Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 11:40:53 -0700 Subject: [PATCH 092/382] this shouldnt be on this branch --- vignettes/panel-data.Rmd | 545 --------------------------------------- 1 file changed, 545 deletions(-) delete mode 100644 vignettes/panel-data.Rmd diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd deleted file mode 100644 index 39321ae4c..000000000 --- a/vignettes/panel-data.Rmd +++ /dev/null @@ -1,545 +0,0 @@ ---- -title: "Using epipredict on non-epidemic panel data" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Using epipredict on non-epidemic panel data} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=F} -knitr::opts_chunk$set( - echo = TRUE, - collapse = TRUE, - comment = "#>", - out.width = "100%" -) -``` - -```{r libraries} -library(dplyr) -library(tidyr) -library(parsnip) -library(recipes) -library(epiprocess) -library(epipredict) -library(ggplot2) -theme_set(theme_bw()) -``` - -[Panel data](https://en.wikipedia.org/wiki/Panel_data), or longitudinal data, -contain cross-sectional measurements of subjects over time. The `epipredict` -package is most suitable for running forecasters on epidemiological panel data. -A built-in example of this is the [`case_death_rate_subset`]( - https://cmu-delphi.github.io/epipredict/reference/case_death_rate_subset.html) -dataset, which contains daily state-wise measures of `case_rate` and -`death_rate` for COVID-19 in 2021: - -```{r epi-panel-ex, include=T} -head(case_death_rate_subset, 3) -``` - -`epipredict` functions work with data in -[`epi_df`](https://cmu-delphi.github.io/epiprocess/reference/epi_df.html) -format. Despite the stated goal and name of the package, other panel datasets -are also valid candidates for `epipredict` functionality, as long as they are -in `epi_df` format. - -```{r employ-stats, include=F} -data("grad_employ_subset") -year_start <- min(grad_employ_subset$time_value) -year_end <- max(grad_employ_subset$time_value) -``` - -# Example panel data overview - -In this vignette, we will demonstrate using `epipredict` with employment panel -data from Statistics Canada. We will be using -[ - Table 37-10-0115-01: Characteristics and median employment income of - longitudinal cohorts of postsecondary graduates two and five years after - graduation, by educational qualification and field of study (primary - groupings) -](https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3710011501). - -The full dataset contains yearly median employment income two and five years -after graduation, and number of graduates. The data is stratified by -variables such as geographic region (Canadian province), education, and -age group. The year range of the dataset is `r year_start` to `r year_end`, -inclusive. The full dataset also contains metadata that describes the -quality of data collected. For demonstration purposes, we make the following -modifications to get a subset of the full dataset: - -* Only keep provincial-level geographic region (the full data also has -"Canada" as a region) -* Only keep "good" or better quality data rows, as indicated by the [`STATUS`]( - https://www.statcan.gc.ca/en/concepts/definitions/guide-symbol) column -* Choose a subset of covariates and aggregate across the remaining ones. The -chosen covariates are age group, and educational qualification. - -Below is the query for obtaining the full data and code for subsetting it as we -just described: - -```{r employ-query, eval=F} -library(cansim) - -# Get statcan data using get_cansim, which returns a tibble -statcan_grad_employ <- get_cansim("37-10-0115-01") - -gemploy <- statcan_grad_employ %>% - # Drop some columns and rename the ones we keep - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", - "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics" - )) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "value" = "VALUE", - "status" = "STATUS", - "edu_qual" = "Educational qualification", - "fos" = "Field of study", - "gender" = "Gender", - "age_group" = "Age group", - "student_status" = "Status of student in Canada", - "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics" - ) %>% - # The original `VALUE` column contain the statistic indicated by - # `Graduate statistics` in the original data. Below we pivot the data - # wider so that each unique statistic can have its own column. - mutate( - # Recode for easier pivoting - grad_stat = recode_factor( - grad_stat, - `Number of graduates` = "num_graduates", - `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y" - ), - # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value) - ) %>% - pivot_wider(names_from = grad_stat, values_from = value) %>% - filter( - # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - fos == "Total, field of study" & - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) - ) %>% - select(-c(status, gender, student_status, grad_charac, fos)) -``` - -To use this data with `epipredict`, we need to convert it into `epi_df` format -using [`as_epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) -with additional keys. In our case, the additional keys are `age_group`, -and `edu_qual`. Note that in the above modifications, we encoded `time_value` -as type `integer`. This lets us set `time_type = "year"`, and ensures that -lag and ahead modifications later on are using the correct time units. See the -[`epi_df` documentation]( - https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for -a list of all the `type_type`s available. - -```{r convert-to-epidf, eval=F} -grad_employ_subset <- gemploy %>% - tsibble::as_tsibble( - index = time_value, - key = c(geo_value, age_group, edu_qual) - ) %>% - as_epi_df( - geo_type = "custom", time_type = "year", - additional_metadata = c(other_keys = list("age_group", "edu_qual")) - ) -``` - -```{r data-dim, include=F} -employ_rowcount <- format(nrow(grad_employ_subset), big.mark = ",") -employ_colcount <- length(names(grad_employ_subset)) -``` - -Now, we are ready to use `grad_employ_subset` with `epipredict`. -Our `epi_df` contains `r employ_rowcount` rows and `r employ_colcount` columns. -Here is a quick summary of the columns in our `epi_df`: - -* `time_value` (time value): year in `date` format -* `geo_value` (geo value): province in Canada -* `num_graduates` (raw, time series value): number of graduates -* `med_income_2y` (raw, time series value): median employment income 2 years -after graduation -* `med_income_5y` (raw, time series value): median employment income 5 years -after graduation -* `age_group` (key): one of two age groups, either 15 to 34 years, or 35 to 64 -years -* `edu_qual` (key): one of 32 unique educational qualifications, e.g., -"Master's diploma" - -```{r preview-data, include=T} -# Rename for simplicity -employ <- grad_employ_subset -sample_n(employ, 6) -``` - -In the following sections, we will go over preprocessing the data in the -`epi_recipe` framework, and fitting a model and making predictions within the -`epipredict` framework and using the package's canned forecasters. - -# Simple autoregressive with 3 lags to predict number of graduates in a year - -## Preprocessing - -As a simple example, let's work with the `num_graduates` column for now. We will -first pre-process by "standardizing" each numeric column by the total within -each group of keys. We do this since those raw numeric values will vary greatly -from province to province since there are large differences in population. - -```{r employ-small, include=T} -employ_small <- employ %>% - group_by(geo_value, age_group, edu_qual) %>% - # Select groups where there are complete timeseries values - filter(n() >= 6) %>% - mutate( - num_graduates_prop = num_graduates / sum(num_graduates), - med_income_2y_prop = med_income_2y / sum(med_income_2y), - med_income_5y_prop = med_income_5y / sum(med_income_5y) - ) %>% - ungroup() -head(employ_small) -``` - -Below is a visualization for a sample of the small data. Note that some groups -do not have any time series information since we filtered out all timeseries -with incomplete dates. - -```{r employ-small-graph, include=T, eval=T, fig.width=9, fig.height=6} -employ_small %>% - filter(geo_value %in% c("British Columbia", "Ontario")) %>% - filter(grepl("degree", edu_qual, fixed = T)) %>% - group_by(geo_value, time_value, edu_qual, age_group) %>% - summarise(num_graduates_prop = sum(num_graduates_prop), .groups = "drop") %>% - ggplot(aes(x = time_value, y = num_graduates_prop, color = geo_value)) + - geom_line() + - scale_colour_manual(values = c("Cornflowerblue", "Orange"), name = "") + - facet_grid(rows = vars(edu_qual), cols = vars(age_group)) + - xlab("Year") + - ylab("Percentage of gratuates") + - theme(legend.position = "bottom") -``` - -We will predict the "standardized" number of graduates (a proportion) in the -next year (time $t+1$) using an autoregressive model with three lags (i.e., an -AR(3) model). Such a model is represented algebraically like this: - -\[ - x_{t+1} = - \alpha_0 + \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t -\] - -where $x_i$ is the proportion of graduates at time $i$, and the current time is -$t$. - -In the preprocessing step, we need to create additional columns in `employ` for -each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an -`epi_recipe`. Note that creating an `epi_recipe` alone doesn't add these -outcome and predictor columns; the recipe just stores the instructions for -adding them. - -Our `epi_recipe` should add one `ahead` column representing $x_{t+1}$ and -3 `lag` columns representing $x_{t}$, $x_{t-1}$, and $x_{t-2}$. Also note that -since we specified our `time_type` to be `year`, our `lag` and `lead` -values are both in years. - -```{r make-recipe, include=T, eval=T} -r <- epi_recipe(employ_small) %>% - step_epi_ahead(num_graduates_prop, ahead = 1) %>% - step_epi_lag(num_graduates_prop, lag = 0:2) %>% - step_epi_naomit() -r -``` - -Let's apply this recipe using `prep` and `bake` to generate and view the `lag` -and `ahead` columns. - -```{r view-preprocessed, include=T} -# Display a sample of the preprocessed data -bake_and_show_sample <- function(recipe, data, n = 5) { - recipe %>% prep(data) %>% bake(new_data = data) %>% sample_n(n) -} - -r %>% bake_and_show_sample(employ_small) -``` - -We can see that the `prep` and `bake` steps created new columns according to -our `epi_recipe`: - -- `ahead_1_num_graduates_prop` corresponds to $x_{t+1}$ -- `lag_0_num_graduates_prop`, `lag_1_num_graduates_prop`, and -`lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ -respectively. - -## Model fitting and prediction - -Since our goal for now is to fit a simple autoregressive model, we can use -[`parsnip::linear_reg()`]( - https://parsnip.tidymodels.org/reference/linear_reg.html) with the default -engine `lm`, which fits a linear regression using ordinary least squares. - -We will use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section along with the `parsnip::linear_reg()` model. Note again -that `epi_workflow` is a container and doesn't actually do the fitting. We have -to pass the workflow into `fit()` to get our model coefficients -$\alpha_i, i=0,...,3$. - -```{r linearreg-wf, include=T} -wf_linreg <- epi_workflow(r, linear_reg()) %>% - fit(employ_small) -summary(extract_fit_engine(wf_linreg)) -``` - -This output tells us the coefficients of the fitted model; for instance, -the intercept is $\alpha_0 = 0.24804$ and the coefficient for $x_{t}$ is -$\alpha_1 = 0.06648$. The summary also tells us that only the intercept and lags -at 2 years and 3 years ago have coefficients significantly greater than zero. - -Extracting the 95% confidence intervals for the coefficients also leads us to -the same conclusion: all the coefficients except for $\alpha_1$ (lag 0) contain -0. - -```{r} -confint(extract_fit_engine(wf_linreg)) -``` - -Now that we have our workflow, we can generate predictions from a subset of our -data. For this demo, we will predict the number of graduates using the last 2 -years of our dataset. - -```{r linearreg-predict, include=T} -latest <- get_test_data(recipe = r, x = employ_small) -preds <- stats::predict(wf_linreg, latest) %>% filter(!is.na(.pred)) -# Display a sample of the prediction values, excluding NAs -preds %>% sample_n(5) -``` - -We can do this using the `augment` function too. Note that `predict` and -`augment` both still return an `epi_df` with all of the keys that were present -in the original dataset. - -```{r linearreg-augment, include=T, eval=F} -augment(wf_linreg, latest) %>% sample_n(5) -``` - -## Model diagnostics - -First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the -fitted values ($\hat{y}_{t}$). - -```{r lienarreg-resid-plot, include=T, fig.height=8} -par(mfrow = c(2, 2), mar = c(5, 3.5, 1, 1) + .5) -plot(extract_fit_engine(wf_linreg)) -``` - -The fitted values vs. residuals plot shows us that the residuals are mostly -clustered around zero, but do not form an even band around the zero line, -indicating that the variance of the residuals is not constant. Additionally, -the fitted values vs. square root of standardized residuals makes this more -obvious - the spread of the square root of standardized residuals varies with -the fitted values. - -The Q-Q plot shows us that the residuals have heavier tails than a Normal -distribution. So the normality of residuals assumption doesn't hold either. - -Finally, the residuals vs. leverage plot shows us that we have a few influential -points based on the Cooks distance (those outside the red dotted line). - -Since we appear to be violating the linear model assumptions, we might consider -transforming our data differently, or considering a non-linear model, or -something else. - -# Autoregressive model with exogenous inputs - -Now suppose we want to model the 5-year employment income using 3 lags, while -also incorporating information from the other two time-series in our dataset: -the 2-year employment income and the number of graduates in the previous 2 -years. We would do this using an autoregressive model with exogenous inputs, -defined as follows: - -\[ - y_{t+1} = - \alpha_0 + \alpha_1 y_{t} + \alpha_2 y_{t-1} + \alpha_3 y_{t-2} + - \beta_1 x_{t} + \beta_2 x_{t-1} - \gamma_2 z_{t} + \gamma_2 z_{t-1} -\] - -where $y_i$ is the 5-year median income (proportion) at time $i$, -$x_i$ is the 2-year median income (proportion) at time $i$, and -$z_i$ is the number of graduates (proportion) at time $i$. - -## Preprocessing - -Again, we construct an `epi_recipe` detailing the preprocessing steps. - -```{r custom-arx, include=T} -rx <- epi_recipe(employ_small) %>% - step_epi_ahead(med_income_5y_prop, ahead = 1) %>% - # 5-year median income has 3 lags c(0,1,2) - step_epi_lag(med_income_5y_prop, lag = c(0, 1, 2)) %>% - # But the two exogenous variables have 2 lags c(0,1) - step_epi_lag(med_income_2y_prop, lag = c(0, 1)) %>% - step_epi_lag(num_graduates_prop, lag = c(0, 1)) %>% - step_epi_naomit() - -bake_and_show_sample(rx, employ_small) -``` - -## Model fitting & postprocessing - -Before fitting our model and making predictions, let's add some post-processing -steps using a few [`frosting`]( - https://cmu-delphi.github.io/epipredict/reference/frosting.html) layers to do -a few things: - -1. Convert our predictions back to income values and number of graduates, -rather than standardized proportions. We do this via the frosting layer -`layer_population_scaling`. -2. Threshold our predictions to 0. We are predicting proportions, which can't -be negative. And the transformed values back to dollars and people can't be -negative either. -3. Generate prediction intervals based on residual quantiles, allowing us to -quantify the uncertainty associated with future predicted values. - -```{r custom-arx-post, include=T} -# Create dataframe of the sums we used for standardizing -# Only have to include med_income_5y since that is our outcome -totals <- employ_small %>% - group_by(geo_value, age_group, edu_qual) %>% - summarise(med_income_5y_tot = sum(med_income_5y), .groups = "drop") - -# Define post-processing steps -f <- frosting() %>% - layer_predict() %>% - layer_naomit(.pred) %>% - layer_threshold(.pred, lower = 0) %>% - # 90% prediction interval - layer_residual_quantiles( - quantile_levels = c(0.1, 0.9), - symmetrize = FALSE - ) %>% - layer_population_scaling( - .pred, .pred_distn, - df = totals, df_pop_col = "med_income_5y_tot" - ) - -wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% - fit(employ_small) %>% - add_frosting(f) - -summary(extract_fit_engine(wfx_linreg)) -``` - -Based on the summary output for this model, only the intercept term, 5-year -median income from 3 years ago, and the 2-year median income from 1 year ago -are significant linear predictors for today's 5-year median income at a 95% -confidence level. Both lags for the number of graduates were insignificant. - -Let's take a look at the predictions along with their 90% prediction intervals. - -```{r} -latest <- get_test_data(recipe = rx, x = employ_small) -predsx <- predict(wfx_linreg, latest) - -# Display values within prediction intervals -predsx %>% - select( - geo_value, time_value, edu_qual, age_group, fos, - .pred_scaled, .pred_distn_scaled - ) %>% - head() %>% - pivot_quantiles_wider(.pred_distn_scaled) -``` - -# Using canned forecasters - -We've seen what we can do with non-epidemiological panel data using the -recipes frame, with `epi_recipe` for preprocessing, `epi_workflow` for model -fitting, and `frosting` for postprocessing. - -`epipredict` also comes with canned forecasters that do all of those steps -behind the scenes for some simple models. Even though we aren't working with -epidemiological data, canned forecasters still work as expected, out of the box. -We will demonstrate this with the simple -[`flatline_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/flatline_forecaster.html) -and the direct autoregressive (AR) forecaster -[`arx_forecaster`]( - https://cmu-delphi.github.io/epipredict/reference/arx_forecaster.html). - -For both illustrations, we will continue to use the `employ_small` dataset -with the transformed numeric columns that are proportions within each group -by the keys in our `epi_df`. - -## Flatline forecaster - -In this first example, we'll use `flatline_forecaster` to make a simple -prediction of the 2-year median income for the next year, based on one previous -time point. This model is representated algebraically as: -\[y_{t+1} = \alpha_0 + \alpha_0 y_{t}\] -where $y_i$ is the 2-year median income (proportion) at time $i$. - -```{r flatline, include=T, warning=F} -out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", - args_list = flatline_args_list(ahead = 1) -) - -out_fl -``` - -## Autoregressive forecaster with exogenous inputs - -In this second example, we'll use `arx_forecaster` to make a prediction of the -5-year median income based using two lags, _and_ using two lags on two exogenous -variables: 2-year median income and number of graduates. - -The canned forecaster gives us a simple way of making this forecast since it -defines the recipe, workflow, and post-processing steps behind the scenes. This -is very similar to the model we introduced in the "Autoregressive Linear Model -with Exogenous Inputs" section of this article, but where all inputs have the -same number of lags. - -```{r arx-lr, include=T, warning=F} -arx_args <- arx_args_list(lags = c(0L, 1L), ahead = 1L) - -out_arx_lr <- arx_forecaster(employ_small, "med_income_5y_prop", - c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), - args_list = arx_args -) - -out_arx_lr -``` - -Other changes to the direct AR forecaster, like changing the engine, also work -as expected. Below we use a boosted tree model instead of a linear regression. - -```{r arx-rf, include=T, warning=F} -out_arx_rf <- arx_forecaster( - employ_small, "med_income_5y_prop", - c("med_income_5y_prop", "med_income_2y_prop", "num_graduates_prop"), - trainer = parsnip::boost_tree(mode = "regression", trees = 20), - args_list = arx_args -) - -out_arx_rf -``` From e036b8d5d6713b9522607c96ce62d05a276ae83a Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 11:44:39 -0700 Subject: [PATCH 093/382] abort message typo --- R/layer_add_forecast_date.R | 2 +- R/layer_add_target_date.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index ea3635d79..31196f51c 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -104,7 +104,7 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da cli::cli_abort(c( "The `forecast_date` was given as a {.val {check$x}} while the", `!` = "`time_type` of the training data was {.val {check$expected}}.", - i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + i = "See {.topic epiprocess::epi_df} for how these are determined." )) } diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 8ab077efa..6a9affc71 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -110,7 +110,7 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data cli::cli_abort(c( "The `forecast_date` was given as a {.val {check$x}} while the", `!` = "`time_type` of the training data was {.val {check$expected}}.", - i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + i = "See {.topic epiprocess::epi_df} for how these are determined." )) } forecast_date <- coerce_time_type(possible_fd, expected_time_type) From e6e60cd7b5305bcc3af65e0dc6501234cb1225b1 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 11:49:36 -0700 Subject: [PATCH 094/382] bump version, add to news --- DESCRIPTION | 2 +- NEWS.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 68a566cee..9329382fd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.10 +Version: 0.0.11 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 04dc78e4f..5f629f45f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -33,3 +33,5 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Working vignette - use `checkmate` for input validation - refactor quantile extrapolation (possibly creates different results) +- force `target_date` + `forecast_date` handling to match the time_type of + the epi_df. allows for annual and weekly data From 845c1a9ecd7162e727c8c9cf4ee11754afaba345 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 18 Mar 2024 12:02:17 -0700 Subject: [PATCH 095/382] run styler --- R/epi_workflow.R | 2 +- R/layer_add_forecast_date.R | 2 +- R/layer_add_target_date.R | 23 ++++----- R/step_epi_shift.R | 5 +- R/time_types.R | 50 +++++++++++++------ tests/testthat/test-layer_add_forecast_date.R | 1 - tests/testthat/test-layer_add_target_date.R | 2 - 7 files changed, 49 insertions(+), 36 deletions(-) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 0fca5dc6c..e64e0f7bc 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -253,7 +253,7 @@ predict.epi_workflow <- function(object, new_data, ...) { if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( "Can't predict on an untrained epi_workflow.", - i = "Do you need to call `fit()`?" + i = "Do you need to call `fit()`?" )) } components <- list() diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 31196f51c..c02fc9173 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -97,7 +97,7 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da expected_time_type <- attr( workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type - if (expected_time_type == "week") expected_time_type = "day" + if (expected_time_type == "week") expected_time_type <- "day" check <- validate_date(object$forecast_date, expected_time_type) if (!check$ok) { diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 6a9affc71..9034398ff 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -87,7 +87,7 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data expected_time_type <- attr( workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type - if (expected_time_type == "week") expected_time_type = "day" + if (expected_time_type == "week") expected_time_type <- "day" if (!is.null(object$target_date)) { check <- validate_date(object$target_date, expected_time_type) @@ -101,10 +101,9 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data target_date <- coerce_time_type(object$target_date, expected_time_type) } else if ( detect_layer(the_frosting, "layer_add_forecast_date") && - !is.null(possible_fd <- extract_argument( - the_frosting, "layer_add_forecast_date", "forecast_date" - ))) { - + !is.null(possible_fd <- extract_argument( + the_frosting, "layer_add_forecast_date", "forecast_date" + ))) { check <- validate_date(possible_fd, expected_time_type) if (!check$ok) { cli::cli_abort(c( @@ -117,13 +116,13 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") target_date <- forecast_date + ahead } else { - max_time_value <- max( - workflows::extract_preprocessor(workflow)$max_time_value, - workflow$fit$meta$max_time_value, - max(new_data$time_value) - ) - ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") - target_date <- max_time_value + ahead + max_time_value <- max( + workflows::extract_preprocessor(workflow)$max_time_value, + workflow$fit$meta$max_time_value, + max(new_data$time_value) + ) + ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") + target_date <- max_time_value + ahead } components$predictions <- dplyr::bind_cols(components$predictions, diff --git a/R/step_epi_shift.R b/R/step_epi_shift.R index 94ef7178c..52f51de16 100644 --- a/R/step_epi_shift.R +++ b/R/step_epi_shift.R @@ -120,9 +120,8 @@ step_epi_ahead <- if (missing(ahead)) { cli::cli_abort(c( "The `ahead` argument must not be empty.", - i = "Did you perhaps pass an integer in `...` accidentally?" - ) - ) + i = "Did you perhaps pass an integer in `...` accidentally?" + )) } arg_is_nonneg_int(ahead) arg_is_chr_scalar(prefix, id) diff --git a/R/time_types.R b/R/time_types.R index 5f3aa4c14..0d1fa0662 100644 --- a/R/time_types.R +++ b/R/time_types.R @@ -3,23 +3,39 @@ guess_time_type <- function(time_value) { arg_is_scalar(time_value) if (is.character(time_value)) { if (nchar(time_value) <= "10") { - new_time_value <- tryCatch({ - as.Date(time_value) - }, error = function(e) NULL) + new_time_value <- tryCatch( + { + as.Date(time_value) + }, + error = function(e) NULL + ) } else { - new_time_value <- tryCatch({ - as.POSIXct(time_value) - }, error = function(e) NULL) + new_time_value <- tryCatch( + { + as.POSIXct(time_value) + }, + error = function(e) NULL + ) } if (!is.null(new_time_value)) time_value <- new_time_value } - if (inherits(time_value, "POSIXct")) return("day-time") - if (inherits(time_value, "Date")) return("day") - if (inherits(time_value, "yearweek")) return("yearweek") - if (inherits(time_value, "yearmonth")) return("yearmonth") - if (inherits(time_value, "yearquarter")) return("yearquarter") + if (inherits(time_value, "POSIXct")) { + return("day-time") + } + if (inherits(time_value, "Date")) { + return("day") + } + if (inherits(time_value, "yearweek")) { + return("yearweek") + } + if (inherits(time_value, "yearmonth")) { + return("yearmonth") + } + if (inherits(time_value, "yearquarter")) { + return("yearquarter") + } if (is.numeric(time_value) && all(time_value == as.integer(time_value)) && - all(time_value >= 1582)) { + all(time_value >= 1582)) { return("year") } return("custom") @@ -27,11 +43,13 @@ guess_time_type <- function(time_value) { coerce_time_type <- function(x, target_type) { if (target_type == "year") { - if (is.numeric(x)) return(as.integer(x)) - else return(as.POSIXlt(x)$year + 1900L) + if (is.numeric(x)) { + return(as.integer(x)) + } else { + return(as.POSIXlt(x)$year + 1900L) + } } - switch( - target_type, + switch(target_type, "day-time" = as.POSIXct(x), "day" = as.Date(x), "week" = as.Date(x), diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 93f13baf7..698924af3 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -104,5 +104,4 @@ test_that("forecast date works for daily", { adjust_frosting(f, "layer_add_forecast_date", forecast_date = 2022L) ) expect_error(predict(wf1, latest)) # wrong time type of forecast_date - }) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index f3b706aa6..6316ec991 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -115,6 +115,4 @@ test_that("forecast date works for daily", { adjust_frosting(f, "layer_add_target_date", target_date = 2022L) ) expect_error(predict(wf1, latest)) # wrong time type of forecast_date - }) - From 8feef06ded15745a3d0ae0be73841eaf8acc3eee Mon Sep 17 00:00:00 2001 From: Daniel McDonald Date: Wed, 27 Mar 2024 11:12:23 -0700 Subject: [PATCH 096/382] Apply @dsweber2 suggestions from code review Co-authored-by: David Weber --- tests/testthat/test-layer_add_forecast_date.R | 16 ++++++++++------ tests/testthat/test-layer_add_target_date.R | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 698924af3..809644b73 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -84,24 +84,28 @@ test_that("forecast date works for daily", { wf1 <- add_frosting(wf, f) p <- predict(wf1, latest) + # both forecast_date and epi_df are dates expect_identical(p$forecast_date[1], as.Date("2021-12-31")) - latest_bad <- latest %>% + # forecast_date is a date while the epi_df uses years (ints) + latest_yearly <- latest %>% unclass() %>% as.data.frame() %>% mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% as_epi_df() + expect_error(predict(wf1, latest_yearly)) - expect_error(predict(wf1, latest_bad)) - wf1 <- add_frosting( + # forecast_date is a string + wf2 <- add_frosting( wf, adjust_frosting(f, "layer_add_forecast_date", forecast_date = "2022-01-01") ) - expect_silent(predict(wf1, latest)) + expect_silent(predict(wf2, latest)) - wf1 <- add_frosting( + # forecast_date is a year/int while the epi_df is a date + wf3 <- add_frosting( wf, adjust_frosting(f, "layer_add_forecast_date", forecast_date = 2022L) ) - expect_error(predict(wf1, latest)) # wrong time type of forecast_date + expect_error(predict(wf3, latest)) }) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index 6316ec991..999c07367 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -87,7 +87,7 @@ test_that("Specify own target date", { expect_named(p2, c("geo_value", "time_value", ".pred", "target_date")) }) -test_that("forecast date works for daily", { +test_that("forecast date works for daily and yearly", { f <- frosting() %>% layer_predict() %>% layer_add_target_date() %>% From 6d5c3791956db72c3458c5c06576a97eddc90495 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 11:13:28 -0700 Subject: [PATCH 097/382] add back omitted test, include some comments --- tests/testthat/test-layer_add_forecast_date.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 698924af3..d452990e9 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -11,9 +11,9 @@ latest <- jhu %>% test_that("layer validation works", { f <- frosting() - - - expect_error(layer_add_forecast_date(f, "2022-05-31", id = 2)) + expect_error(layer_add_forecast_date(f, c("2022-05-31", "2022-05-31"))) # multiple forecast_dates + expect_error(layer_add_forecast_date(f, "2022-05-31", id = 2)) # id is not a character + expect_error(layer_add_forecast_date(f, "2022-05-31", id = c("a", "b"))) # multiple ids expect_silent(layer_add_forecast_date(f, "2022-05-31")) expect_silent(layer_add_forecast_date(f)) expect_silent(layer_add_forecast_date(f, as.Date("2022-05-31"))) From 047caa685e8a1038bc93afa178ff323207dd48ef Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 11:13:45 -0700 Subject: [PATCH 098/382] validate scalar forecast_date --- R/layer_add_forecast_date.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index c02fc9173..376194712 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -79,6 +79,7 @@ layer_add_forecast_date <- layer_add_forecast_date_new <- function(forecast_date, id) { arg_is_chr_scalar(id) + arg_is_scalar(forecast_date, allow_null = TRUE) # can't validate forecast_date until we know the time_type layer("add_forecast_date", forecast_date = forecast_date, id = id) } From fc05cd93d9a32a6060ed02a301188364c453e165 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 11:15:34 -0700 Subject: [PATCH 099/382] symmetrize scalar validation --- R/layer_add_forecast_date.R | 7 ++++--- R/layer_add_target_date.R | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 376194712..18d57337f 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -68,6 +68,9 @@ #' p3 layer_add_forecast_date <- function(frosting, forecast_date = NULL, id = rand_id("add_forecast_date")) { + arg_is_chr_scalar(id) + arg_is_scalar(forecast_date, allow_null = TRUE) + # can't validate the type of forecast_date until we know the time_type add_layer( frosting, layer_add_forecast_date_new( @@ -78,9 +81,7 @@ layer_add_forecast_date <- } layer_add_forecast_date_new <- function(forecast_date, id) { - arg_is_chr_scalar(id) - arg_is_scalar(forecast_date, allow_null = TRUE) - # can't validate forecast_date until we know the time_type + layer("add_forecast_date", forecast_date = forecast_date, id = id) } diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 9034398ff..217a06069 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -63,8 +63,9 @@ #' p3 layer_add_target_date <- function(frosting, target_date = NULL, id = rand_id("add_target_date")) { - # can't validate target_date until we know the time_type arg_is_chr_scalar(id) + arg_is_scalar(target_date, allow_null = TRUE) + # can't validate the type of target_date until we know the time_type add_layer( frosting, layer_add_target_date_new( From 1e76059401b996234fad022115b8f433967ff352 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 11:18:47 -0700 Subject: [PATCH 100/382] add uncommitted stuff from code review --- tests/testthat/test-layer_add_target_date.R | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index 999c07367..49049da7e 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -87,7 +87,7 @@ test_that("Specify own target date", { expect_named(p2, c("geo_value", "time_value", ".pred", "target_date")) }) -test_that("forecast date works for daily and yearly", { +test_that("target date works for daily and yearly", { f <- frosting() %>% layer_predict() %>% layer_add_target_date() %>% @@ -95,21 +95,25 @@ test_that("forecast date works for daily and yearly", { wf1 <- add_frosting(wf, f) p <- predict(wf1, latest) + # both target_date and epi_df are dates expect_identical(p$target_date[1], as.Date("2021-12-31") + 7L) + # target_date is a date while the epi_df uses years (ints) latest_bad <- latest %>% unclass() %>% as.data.frame() %>% mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% as_epi_df() - expect_error(predict(wf1, latest_bad)) + + # target_date is a string (gets correctly converted to Date) wf1 <- add_frosting( wf, adjust_frosting(f, "layer_add_target_date", target_date = "2022-01-07") ) expect_silent(predict(wf1, latest)) + # target_date is a year/int while the epi_df is a date wf1 <- add_frosting( wf, adjust_frosting(f, "layer_add_target_date", target_date = 2022L) From f5ef88ba2f08c6851971c295205180d0ca20c3ed Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 13:37:49 -0700 Subject: [PATCH 101/382] clarify some test purposes --- tests/testthat/test-layer_add_forecast_date.R | 5 +++-- tests/testthat/test-layer_add_target_date.R | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 1e04a3c11..9595b47b6 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -87,7 +87,8 @@ test_that("forecast date works for daily", { # both forecast_date and epi_df are dates expect_identical(p$forecast_date[1], as.Date("2021-12-31")) - # forecast_date is a date while the epi_df uses years (ints) + # the error happens at predict time because the + # time_value train/test types don't match latest_yearly <- latest %>% unclass() %>% as.data.frame() %>% @@ -95,7 +96,7 @@ test_that("forecast date works for daily", { as_epi_df() expect_error(predict(wf1, latest_yearly)) - # forecast_date is a string + # forecast_date is a string, gets correctly converted to date wf2 <- add_frosting( wf, adjust_frosting(f, "layer_add_forecast_date", forecast_date = "2022-01-01") diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index 49049da7e..e5349839b 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -98,7 +98,8 @@ test_that("target date works for daily and yearly", { # both target_date and epi_df are dates expect_identical(p$target_date[1], as.Date("2021-12-31") + 7L) - # target_date is a date while the epi_df uses years (ints) + # the error happens at predict time because the + # time_value train/test types don't match latest_bad <- latest %>% unclass() %>% as.data.frame() %>% From c1e3ff9c2a70bc018fe1232f6845270512aa8815 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 27 Mar 2024 13:38:21 -0700 Subject: [PATCH 102/382] refactor validate_date() to avoid duplication --- R/layer_add_forecast_date.R | 23 ++++++++++------------- R/layer_add_target_date.R | 30 +++++++++++------------------- R/time_types.R | 15 +++++++++++---- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 18d57337f..5bd6b6918 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -81,7 +81,6 @@ layer_add_forecast_date <- } layer_add_forecast_date_new <- function(forecast_date, id) { - layer("add_forecast_date", forecast_date = forecast_date, id = id) } @@ -93,27 +92,25 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da workflow$fit$meta$max_time_value, max(new_data$time_value) ) - object$forecast_date <- max_time_value + forecast_date <- max_time_value + } else { + forecast_date <- object$forecast_date } expected_time_type <- attr( workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type if (expected_time_type == "week") expected_time_type <- "day" - check <- validate_date(object$forecast_date, expected_time_type) - - if (!check$ok) { - cli::cli_abort(c( - "The `forecast_date` was given as a {.val {check$x}} while the", - `!` = "`time_type` of the training data was {.val {check$expected}}.", - i = "See {.topic epiprocess::epi_df} for how these are determined." - )) - } - + validate_date(forecast_date, expected_time_type, + call = expr(layer_add_forecast_date()) + ) + forecast_date <- coerce_time_type(forecast_date, expected_time_type) + object$forecast_date <- forecast_date components$predictions <- dplyr::bind_cols( components$predictions, - forecast_date = coerce_time_type(object$forecast_date, expected_time_type) + forecast_date = forecast_date ) + components } diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 217a06069..a50b6042c 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -91,29 +91,20 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data if (expected_time_type == "week") expected_time_type <- "day" if (!is.null(object$target_date)) { - check <- validate_date(object$target_date, expected_time_type) - if (!check$ok) { - cli::cli_abort(c( - "The `target_date` was given as a {.val {check$x}} while the", - `!` = "`time_type` of the training data was {.val {check$expected}}.", - i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." - )) - } - target_date <- coerce_time_type(object$target_date, expected_time_type) + target_date <- object$target_date + validate_date(target_date, expected_time_type, + call = expr(layer_add_target_date()) + ) + target_date <- coerce_time_type(target_date, expected_time_type) } else if ( detect_layer(the_frosting, "layer_add_forecast_date") && - !is.null(possible_fd <- extract_argument( + !is.null(forecast_date <- extract_argument( the_frosting, "layer_add_forecast_date", "forecast_date" ))) { - check <- validate_date(possible_fd, expected_time_type) - if (!check$ok) { - cli::cli_abort(c( - "The `forecast_date` was given as a {.val {check$x}} while the", - `!` = "`time_type` of the training data was {.val {check$expected}}.", - i = "See {.topic epiprocess::epi_df} for how these are determined." - )) - } - forecast_date <- coerce_time_type(possible_fd, expected_time_type) + validate_date(forecast_date, expected_time_type, + call = expr(layer_add_forecast_date()) + ) + forecast_date <- coerce_time_type(forecast_date, expected_time_type) ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") target_date <- forecast_date + ahead } else { @@ -126,6 +117,7 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data target_date <- max_time_value + ahead } + object$target_date <- target_date components$predictions <- dplyr::bind_cols(components$predictions, target_date = target_date ) diff --git a/R/time_types.R b/R/time_types.R index 0d1fa0662..7fe3e47b4 100644 --- a/R/time_types.R +++ b/R/time_types.R @@ -59,8 +59,15 @@ coerce_time_type <- function(x, target_type) { ) } -validate_date <- function(x, expected) { - x <- guess_time_type(x) - ok <- x == expected - enlist(ok, x, expected) +validate_date <- function(x, expected, arg = rlang::caller_arg(x), + call = rlang::caller_env()) { + time_type_x <- guess_time_type(x) + ok <- time_type_x == expected + if (!ok) { + cli::cli_abort(c( + "The {.arg {arg}} was given as a {.val {time_type_x}} while the", + `!` = "`time_type` of the training data was {.val {expected}}.", + i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." + ), call = call) + } } From 5341f95a1ab97bf272f5644f82a3c4c4701e4c92 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 08:43:40 -0700 Subject: [PATCH 103/382] adjust pkgdown to match epiprocess --- _pkgdown.yml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index af4227b89..07ceb6fec 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,15 +1,32 @@ url: https://cmu-delphi.github.io/epipredict/ + +# This is to give a default value to the `mode` parameter in the +# `pkgdown::build_site()` function. This is useful when building the site locally, +# as it will default to `devel` mode. In practice, this should all be handled +# dynamically by the CI/CD pipeline. +development: + mode: devel + version_label: success + template: bootstrap: 5 bootswatch: cosmo bslib: font_scale: 1.0 - primary: '#C41230' - link-color: '#C41230' + primary: "#C41230" + success: "#B4D43C" + link-color: "#C41230" navbar: bg: primary - type: dark + type: light + +repo: + url: + home: https://github.com/cmu-delphi/epipredict/tree/main/ + source: https://github.com/cmu-delphi/epipredict/blob/main/ + issue: https://github.com/cmu-delphi/epipredict/issues + user: https://github.com/ home: links: From 76a1111eb9bec68656c479da40f78321d86cd944 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 10:33:18 -0700 Subject: [PATCH 104/382] fix: #290 --- R/arx_classifier.R | 2 +- R/arx_forecaster.R | 2 +- R/cdc_baseline_forecaster.R | 2 +- R/flatline_forecaster.R | 3 +- tests/testthat/test-target_date_bug.R | 89 +++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 tests/testthat/test-target_date_bug.R diff --git a/R/arx_classifier.R b/R/arx_classifier.R index d42247426..1ce6a5b3c 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -197,7 +197,7 @@ arx_class_epi_workflow <- function( } forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) - target_date <- args_list$target_date %||% forecast_date + args_list$ahead + target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) # --- postprocessor f <- frosting() %>% layer_predict() # %>% layer_naomit() diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index ce2fa57b0..425a8f905 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -143,7 +143,7 @@ arx_fcast_epi_workflow <- function( } forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) - target_date <- args_list$target_date %||% forecast_date + args_list$ahead + target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) # --- postprocessor f <- frosting() %>% layer_predict() # %>% layer_naomit() diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index abb231bca..4af6d6f3f 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -75,7 +75,7 @@ cdc_baseline_forecaster <- function( step_training_window(n_recent = args_list$n_training) forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) - # target_date <- args_list$target_date %||% forecast_date + args_list$ahead + # target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) latest <- get_test_data( diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index 99ebc8694..c7b060caa 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -47,8 +47,7 @@ flatline_forecaster <- function( step_training_window(n_recent = args_list$n_training) forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) - target_date <- args_list$target_date %||% forecast_date + args_list$ahead - + target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) latest <- get_test_data( epi_recipe(epi_data), epi_data, TRUE, args_list$nafill_buffer, diff --git a/tests/testthat/test-target_date_bug.R b/tests/testthat/test-target_date_bug.R new file mode 100644 index 000000000..2d5d96fd9 --- /dev/null +++ b/tests/testthat/test-target_date_bug.R @@ -0,0 +1,89 @@ +library(dplyr) +train <- jhu_csse_daily_subset |> + filter(time_value >= as.Date("2021-10-01")) |> + select(geo_value, time_value, cr = case_rate_7d_av, dr = death_rate_7d_av) +ngeos <- n_distinct(train$geo_value) + +test_that("flatline determines target_date where forecast_date exists", { + + flat <- flatline_forecaster( + train, "dr", + args_list = flatline_args_list( + forecast_date = as.Date("2021-12-31"), + target_date = as.Date("2022-01-01"), + ahead = 1L + ) + ) + + # previously, if target_date existed, it could be + # erroneously incremented by the ahead + expect_identical( + flat$predictions$target_date, + rep(as.Date("2022-01-01"), ngeos) + ) + expect_identical( + flat$predictions$forecast_date, + rep(as.Date("2021-12-31"), ngeos) + ) + + # potentially resulted in NA predictions + # see #290 https://github.com/cmu-delphi/epipredict/issues/290 + expect_true(all(!is.na(flat$predictions$.pred_distn))) + expect_true(all(!is.na(flat$predictions$.pred))) +}) + +test_that("arx_forecaster determines target_date where forecast_date exists", { + + arx <- arx_forecaster( + train, "dr", c("dr", "cr"), + args_list = arx_args_list( + forecast_date = as.Date("2021-12-31"), + target_date = as.Date("2022-01-01"), + ahead = 1L + ) + ) + # previously, if target_date existed, it could be + # erroneously incremented by the ahead + expect_identical( + arx$predictions$target_date, + rep(as.Date("2022-01-01"), ngeos) + ) + expect_identical( + arx$predictions$forecast_date, + rep(as.Date("2021-12-31"), ngeos) + ) + + # potentially resulted in NA predictions + # see #290 https://github.com/cmu-delphi/epipredict/issues/290 + expect_true(all(!is.na(arx$predictions$.pred_distn))) + expect_true(all(!is.na(arx$predictions$.pred))) +}) + +test_that("arx_classifier determines target_date where forecast_date exists", { + + + arx <- arx_classifier( + train, "dr", c("dr"), + trainer = parsnip::nearest_neighbor(mode = "classification"), + args_list = arx_class_args_list( + forecast_date = as.Date("2021-12-31"), + target_date = as.Date("2022-01-01"), + ahead = 1L + ) + ) + + # previously, if target_date existed, it could be + # erroneously incremented by the ahead + expect_identical( + arx$predictions$target_date, + rep(as.Date("2022-01-01"), ngeos) + ) + expect_identical( + arx$predictions$forecast_date, + rep(as.Date("2021-12-31"), ngeos) + ) + + # potentially resulted in NA predictions + # see #290 https://github.com/cmu-delphi/epipredict/issues/290 + expect_true(all(!is.na(arx$predictions$.pred_class))) +}) From 655be90af47a31108e34d2f3c4a1e602dfb3427a Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 10:55:12 -0700 Subject: [PATCH 105/382] run styler --- tests/testthat/test-target_date_bug.R | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/testthat/test-target_date_bug.R b/tests/testthat/test-target_date_bug.R index 2d5d96fd9..0d14a393d 100644 --- a/tests/testthat/test-target_date_bug.R +++ b/tests/testthat/test-target_date_bug.R @@ -5,7 +5,6 @@ train <- jhu_csse_daily_subset |> ngeos <- n_distinct(train$geo_value) test_that("flatline determines target_date where forecast_date exists", { - flat <- flatline_forecaster( train, "dr", args_list = flatline_args_list( @@ -33,7 +32,6 @@ test_that("flatline determines target_date where forecast_date exists", { }) test_that("arx_forecaster determines target_date where forecast_date exists", { - arx <- arx_forecaster( train, "dr", c("dr", "cr"), args_list = arx_args_list( @@ -60,8 +58,6 @@ test_that("arx_forecaster determines target_date where forecast_date exists", { }) test_that("arx_classifier determines target_date where forecast_date exists", { - - arx <- arx_classifier( train, "dr", c("dr"), trainer = parsnip::nearest_neighbor(mode = "classification"), From b801d92f97744674831a193d02348a4256946dde Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 14:37:21 -0700 Subject: [PATCH 106/382] use available multiclass classifier (in Suggests) --- tests/testthat/test-target_date_bug.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-target_date_bug.R b/tests/testthat/test-target_date_bug.R index 0d14a393d..d37329ad8 100644 --- a/tests/testthat/test-target_date_bug.R +++ b/tests/testthat/test-target_date_bug.R @@ -60,7 +60,7 @@ test_that("arx_forecaster determines target_date where forecast_date exists", { test_that("arx_classifier determines target_date where forecast_date exists", { arx <- arx_classifier( train, "dr", c("dr"), - trainer = parsnip::nearest_neighbor(mode = "classification"), + trainer = parsnip::boost_tree(mode = "classification", trees = 5), args_list = arx_class_args_list( forecast_date = as.Date("2021-12-31"), target_date = as.Date("2022-01-01"), From 798877945b145359a62aea14d679b4f9f7b56118 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 15:01:39 -0700 Subject: [PATCH 107/382] slim down Imports --- DESCRIPTION | 5 ++--- NAMESPACE | 2 -- R/bake.epi_recipe.R | 1 - R/create-layer.R | 4 ++-- man/create_layer.Rd | 28 ---------------------------- 5 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 man/create_layer.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 9329382fd..db65a99e2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,13 +31,11 @@ Imports: cli, distributional, dplyr, - fs, generics, glue, hardhat (>= 1.3.0), lifecycle, magrittr, - methods, quantreg, recipes (>= 1.0.4), rlang, @@ -47,13 +45,13 @@ Imports: tidyr, tidyselect, tsibble, - usethis, vctrs, workflows (>= 1.0.0) Suggests: covidcast, data.table, epidatr (>= 1.0.0), + fs, ggplot2, knitr, lubridate, @@ -62,6 +60,7 @@ Suggests: RcppRoll, rmarkdown, testthat (>= 3.0.0), + usethis, xgboost VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index 3c63145b3..d949d6cb4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -132,7 +132,6 @@ export(bake) export(cdc_baseline_args_list) export(cdc_baseline_forecaster) export(check_enough_train_data) -export(create_layer) export(default_epi_recipe_blueprint) export(detect_layer) export(dist_quantiles) @@ -220,7 +219,6 @@ importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") -importFrom(methods,is) importFrom(quantreg,rq) importFrom(recipes,bake) importFrom(recipes,prep) diff --git a/R/bake.epi_recipe.R b/R/bake.epi_recipe.R index 6857df4ef..4a083ee19 100644 --- a/R/bake.epi_recipe.R +++ b/R/bake.epi_recipe.R @@ -13,7 +13,6 @@ #' original columns in `new_data`. #' @importFrom rlang is_empty quos #' @importFrom tibble is_tibble as_tibble -#' @importFrom methods is #' @rdname bake #' @export bake.epi_recipe <- function(object, new_data, ...) { diff --git a/R/create-layer.R b/R/create-layer.R index 69aeee7eb..0268a906f 100644 --- a/R/create-layer.R +++ b/R/create-layer.R @@ -7,8 +7,8 @@ #' @inheritParams usethis::use_test #' #' @importFrom rlang %||% -#' @export -#' +#' @noRd +#' @keywords internal #' @examples #' \dontrun{ #' diff --git a/man/create_layer.Rd b/man/create_layer.Rd deleted file mode 100644 index d36385fb2..000000000 --- a/man/create_layer.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create-layer.R -\name{create_layer} -\alias{create_layer} -\title{Create a new layer} -\usage{ -create_layer(name = NULL, open = rlang::is_interactive()) -} -\arguments{ -\item{name}{Either a string giving a file name (without directory) or -\code{NULL} to take the name from the currently open file in RStudio.} - -\item{open}{Whether to open the file for interactive editing.} -} -\description{ -This function creates the skeleton for a new \code{frosting} layer. When called -inside a package, it will create an R script in the \verb{R/} directory, -fill in the name of the layer, and open the file. -} -\examples{ -\dontrun{ - -# Note: running this will write `layer_strawberry.R` to -# the `R/` directory of your current project -create_layer("strawberry") -} - -} From d3fb50ecc0a15a96231e32588e23f23061db93fd Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 15:08:22 -0700 Subject: [PATCH 108/382] remove {lifecycle} in favour of rlang shim --- DESCRIPTION | 1 - NAMESPACE | 1 - R/epipredict-package.R | 3 +- R/pivot_quantiles.R | 2 +- R/standalone-lifecycle.R | 250 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 252 insertions(+), 5 deletions(-) create mode 100644 R/standalone-lifecycle.R diff --git a/DESCRIPTION b/DESCRIPTION index db65a99e2..90044790c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -34,7 +34,6 @@ Imports: generics, glue, hardhat (>= 1.3.0), - lifecycle, magrittr, quantreg, recipes (>= 1.0.4), diff --git a/NAMESPACE b/NAMESPACE index d949d6cb4..969daf0c0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -217,7 +217,6 @@ importFrom(generics,augment) importFrom(generics,fit) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) -importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") importFrom(quantreg,rq) importFrom(recipes,bake) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 69eb05bdc..a3c6a208a 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,9 +1,8 @@ ## usethis namespace: start #' @importFrom tibble tibble -#' @importFrom rlang := !! +#' @importFrom rlang := !! %||% #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort -#' @importFrom lifecycle deprecated #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer #' assert_integerish assert_date assert_function diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index e632748df..20be6c52d 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -143,7 +143,7 @@ pivot_quantiles_wider <- function(.data, ...) { } pivot_quantiles <- function(.data, ...) { - lifecycle::deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") + deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") } validate_pivot_quantiles <- function(.data, ...) { diff --git a/R/standalone-lifecycle.R b/R/standalone-lifecycle.R new file mode 100644 index 000000000..a58429769 --- /dev/null +++ b/R/standalone-lifecycle.R @@ -0,0 +1,250 @@ +# --- +# repo: r-lib/rlang +# file: standalone-lifecycle.R +# last-updated: 2023-02-23 +# license: https://unlicense.org +# imports: rlang (>= 1.0.0) +# --- +# +# This file serves as a reference for currently unexported rlang +# lifecycle functions. These functions require rlang in your `Imports` +# DESCRIPTION field but you don't need to import rlang in your +# namespace. +# +# ## Changelog +# +# 2023-02-23 +# +# - Updated the API and internals to match modern lifecycle tools. +# +# +# 2021-04-19 +# +# - Removed `lifecycle()` function. You can now use the following in +# your roxygen documentation to inline a badge: +# +# ``` +# `r lifecycle::badge()` +# ``` +# +# This is a build-time dependency on lifecycle so there is no need +# to add lifecycle to Imports just to use badges. See also +# `?usethis::use_lifecycle()` for importing or updating the badge +# images in your package. +# +# - Soft-namespaced private objects. +# +# nocov start + + +#' Signal deprecation +#' +#' @description +#' These functions provide two levels of verbosity for deprecation +#' warnings. +#' +#' * `deprecate_soft()` warns only if called directly: from the global +#' environment (so the user can change their script) or from the +#' package currently being tested (so the package developer can fix +#' the package). +#' +#' * `deprecate_warn()` warns unconditionally. +#' +#' * `deprecate_stop()` fails unconditionally. +#' +#' Both functions warn only once per session by default to avoid +#' overwhelming the user with repeated warnings. +#' +#' @param msg The deprecation message. +#' @param id The id of the deprecation. A warning is issued only once +#' for each `id`. Defaults to `msg`, but you should give a unique ID +#' when the message is built programmatically and depends on inputs. +#' @param user_env The environment in which the deprecated function +#' was called. The verbosity depends on whether the deprecated +#' feature was called directly, see [rlang::env_is_user_facing()] and the +#' documentation in the lifecycle package. +#' +#' @section Controlling verbosity: +#' +#' The verbosity of retirement warnings can be controlled with global +#' options. You'll generally want to set these options locally with +#' one of these helpers: +#' +#' * `with_lifecycle_silence()` disables all soft-deprecation and +#' deprecation warnings. +#' +#' * `with_lifecycle_warnings()` enforces warnings for both +#' soft-deprecated and deprecated functions. The warnings are +#' repeated rather than signalled once per session. +#' +#' * `with_lifecycle_errors()` enforces errors for both +#' soft-deprecated and deprecated functions. +#' +#' All the `with_` helpers have `scoped_` variants that are +#' particularly useful in testthat blocks. +#' +#' @noRd +NULL + +deprecate_soft <- function(msg, + id = msg, + user_env = rlang::caller_env(2)) { + .rlang_lifecycle_signal_stage(msg, "deprecated") + + id <- paste(id, collapse = "\n") + verbosity <- .rlang_lifecycle_verbosity() + + invisible(switch( + verbosity, + quiet = NULL, + warning = , + default = + if (rlang::env_is_user_facing(user_env)) { + always <- verbosity == "warning" + trace <- rlang::trace_back(bottom = caller_env()) + .rlang_lifecycle_deprecate_warn0( + msg, + id = id, + trace = trace, + always = always + ) + }, + error = deprecate_stop(msg) + )) +} + +deprecate_warn <- function(msg, + id = msg, + always = FALSE, + user_env = rlang::caller_env(2)) { + .rlang_lifecycle_signal_stage(msg, "deprecated") + + id <- paste(id, collapse = "\n") + verbosity <- .rlang_lifecycle_verbosity() + + invisible(switch( + verbosity, + quiet = NULL, + warning = , + default = { + direct <- rlang::env_is_user_facing(user_env) + always <- direct && (always || verbosity == "warning") + + trace <- tryCatch( + rlang::trace_back(bottom = rlang::caller_env()), + error = function(...) NULL + ) + + .rlang_lifecycle_deprecate_warn0( + msg, + id = id, + trace = trace, + always = always + ) + }, + error = deprecate_stop(msg), + )) +} + +.rlang_lifecycle_deprecate_warn0 <- function(msg, + id = msg, + trace = NULL, + always = FALSE, + call = rlang::caller_env()) { + if (always) { + freq <- "always" + } else { + freq <- "regularly" + } + + rlang::warn( + msg, + class = "lifecycle_warning_deprecated", + .frequency = freq, + .frequency_id = id + ) +} + +deprecate_stop <- function(msg) { + msg <- cli::format_error(msg) + .rlang_lifecycle_signal_stage(msg, "deprecated") + + stop(rlang::cnd( + c("defunctError", "error", "condition"), + old = NULL, + new = NULL, + package = NULL, + message = msg + )) +} + +.rlang_lifecycle_signal_stage <- function(msg, stage) { + rlang::signal(msg, "lifecycle_stage", stage = stage) +} + +expect_deprecated <- function(expr, regexp = NULL, ...) { + rlang::local_options(lifecycle_verbosity = "warning") + + if (!is.null(regexp) && rlang::is_na(regexp)) { + rlang::abort("`regexp` can't be `NA`.") + } + + testthat::expect_warning( + {{ expr }}, + regexp = regexp, + class = "lifecycle_warning_deprecated", + ... + ) +} + +local_lifecycle_silence <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "quiet" + ) +} +with_lifecycle_silence <- function(expr) { + local_lifecycle_silence() + expr +} + +local_lifecycle_warnings <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "warning" + ) +} +with_lifecycle_warnings <- function(expr) { + local_lifecycle_warnings() + expr +} + +local_lifecycle_errors <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "error" + ) +} +with_lifecycle_errors <- function(expr) { + local_lifecycle_errors() + expr +} + +.rlang_lifecycle_verbosity <- function() { + opt <- getOption("lifecycle_verbosity", "default") + + if (!rlang::is_string(opt, c("quiet", "default", "warning", "error"))) { + options(lifecycle_verbosity = "default") + rlang::warn(glue::glue( + " + The `lifecycle_verbosity` option must be set to one of: + \"quiet\", \"default\", \"warning\", or \"error\". + Resetting to \"default\". + " + )) + } + + opt +} + +# nocov end From 5e55e8878d9c506618f2ada7f919138180516181 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:21:16 -0700 Subject: [PATCH 109/382] fix warning --- R/pivot_quantiles.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 20be6c52d..5436580c0 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -143,7 +143,11 @@ pivot_quantiles_wider <- function(.data, ...) { } pivot_quantiles <- function(.data, ...) { - deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") + msg <- c( + "{.fn pivot_quantiles} was deprecated in {.pkg epipredict} 0.0.6", + i = "Please use {.fn pivot_quantiles_wider} instead." + ) + deprecate_stop(msg) } validate_pivot_quantiles <- function(.data, ...) { From 9aedd0b9d0a97b5e94b76474d225add73dc9a603 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:34:16 -0700 Subject: [PATCH 110/382] add standalone lifecycle --- NAMESPACE | 1 - R/epipredict-package.R | 3 +- R/pivot_quantiles.R | 6 +- R/standalone-lifecycle.R | 250 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 256 insertions(+), 4 deletions(-) create mode 100644 R/standalone-lifecycle.R diff --git a/NAMESPACE b/NAMESPACE index 3c63145b3..570d1919b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -218,7 +218,6 @@ importFrom(generics,augment) importFrom(generics,fit) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) -importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") importFrom(methods,is) importFrom(quantreg,rq) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 69eb05bdc..a3c6a208a 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,9 +1,8 @@ ## usethis namespace: start #' @importFrom tibble tibble -#' @importFrom rlang := !! +#' @importFrom rlang := !! %||% #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort -#' @importFrom lifecycle deprecated #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer #' assert_integerish assert_date assert_function diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index e632748df..5436580c0 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -143,7 +143,11 @@ pivot_quantiles_wider <- function(.data, ...) { } pivot_quantiles <- function(.data, ...) { - lifecycle::deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") + msg <- c( + "{.fn pivot_quantiles} was deprecated in {.pkg epipredict} 0.0.6", + i = "Please use {.fn pivot_quantiles_wider} instead." + ) + deprecate_stop(msg) } validate_pivot_quantiles <- function(.data, ...) { diff --git a/R/standalone-lifecycle.R b/R/standalone-lifecycle.R new file mode 100644 index 000000000..a58429769 --- /dev/null +++ b/R/standalone-lifecycle.R @@ -0,0 +1,250 @@ +# --- +# repo: r-lib/rlang +# file: standalone-lifecycle.R +# last-updated: 2023-02-23 +# license: https://unlicense.org +# imports: rlang (>= 1.0.0) +# --- +# +# This file serves as a reference for currently unexported rlang +# lifecycle functions. These functions require rlang in your `Imports` +# DESCRIPTION field but you don't need to import rlang in your +# namespace. +# +# ## Changelog +# +# 2023-02-23 +# +# - Updated the API and internals to match modern lifecycle tools. +# +# +# 2021-04-19 +# +# - Removed `lifecycle()` function. You can now use the following in +# your roxygen documentation to inline a badge: +# +# ``` +# `r lifecycle::badge()` +# ``` +# +# This is a build-time dependency on lifecycle so there is no need +# to add lifecycle to Imports just to use badges. See also +# `?usethis::use_lifecycle()` for importing or updating the badge +# images in your package. +# +# - Soft-namespaced private objects. +# +# nocov start + + +#' Signal deprecation +#' +#' @description +#' These functions provide two levels of verbosity for deprecation +#' warnings. +#' +#' * `deprecate_soft()` warns only if called directly: from the global +#' environment (so the user can change their script) or from the +#' package currently being tested (so the package developer can fix +#' the package). +#' +#' * `deprecate_warn()` warns unconditionally. +#' +#' * `deprecate_stop()` fails unconditionally. +#' +#' Both functions warn only once per session by default to avoid +#' overwhelming the user with repeated warnings. +#' +#' @param msg The deprecation message. +#' @param id The id of the deprecation. A warning is issued only once +#' for each `id`. Defaults to `msg`, but you should give a unique ID +#' when the message is built programmatically and depends on inputs. +#' @param user_env The environment in which the deprecated function +#' was called. The verbosity depends on whether the deprecated +#' feature was called directly, see [rlang::env_is_user_facing()] and the +#' documentation in the lifecycle package. +#' +#' @section Controlling verbosity: +#' +#' The verbosity of retirement warnings can be controlled with global +#' options. You'll generally want to set these options locally with +#' one of these helpers: +#' +#' * `with_lifecycle_silence()` disables all soft-deprecation and +#' deprecation warnings. +#' +#' * `with_lifecycle_warnings()` enforces warnings for both +#' soft-deprecated and deprecated functions. The warnings are +#' repeated rather than signalled once per session. +#' +#' * `with_lifecycle_errors()` enforces errors for both +#' soft-deprecated and deprecated functions. +#' +#' All the `with_` helpers have `scoped_` variants that are +#' particularly useful in testthat blocks. +#' +#' @noRd +NULL + +deprecate_soft <- function(msg, + id = msg, + user_env = rlang::caller_env(2)) { + .rlang_lifecycle_signal_stage(msg, "deprecated") + + id <- paste(id, collapse = "\n") + verbosity <- .rlang_lifecycle_verbosity() + + invisible(switch( + verbosity, + quiet = NULL, + warning = , + default = + if (rlang::env_is_user_facing(user_env)) { + always <- verbosity == "warning" + trace <- rlang::trace_back(bottom = caller_env()) + .rlang_lifecycle_deprecate_warn0( + msg, + id = id, + trace = trace, + always = always + ) + }, + error = deprecate_stop(msg) + )) +} + +deprecate_warn <- function(msg, + id = msg, + always = FALSE, + user_env = rlang::caller_env(2)) { + .rlang_lifecycle_signal_stage(msg, "deprecated") + + id <- paste(id, collapse = "\n") + verbosity <- .rlang_lifecycle_verbosity() + + invisible(switch( + verbosity, + quiet = NULL, + warning = , + default = { + direct <- rlang::env_is_user_facing(user_env) + always <- direct && (always || verbosity == "warning") + + trace <- tryCatch( + rlang::trace_back(bottom = rlang::caller_env()), + error = function(...) NULL + ) + + .rlang_lifecycle_deprecate_warn0( + msg, + id = id, + trace = trace, + always = always + ) + }, + error = deprecate_stop(msg), + )) +} + +.rlang_lifecycle_deprecate_warn0 <- function(msg, + id = msg, + trace = NULL, + always = FALSE, + call = rlang::caller_env()) { + if (always) { + freq <- "always" + } else { + freq <- "regularly" + } + + rlang::warn( + msg, + class = "lifecycle_warning_deprecated", + .frequency = freq, + .frequency_id = id + ) +} + +deprecate_stop <- function(msg) { + msg <- cli::format_error(msg) + .rlang_lifecycle_signal_stage(msg, "deprecated") + + stop(rlang::cnd( + c("defunctError", "error", "condition"), + old = NULL, + new = NULL, + package = NULL, + message = msg + )) +} + +.rlang_lifecycle_signal_stage <- function(msg, stage) { + rlang::signal(msg, "lifecycle_stage", stage = stage) +} + +expect_deprecated <- function(expr, regexp = NULL, ...) { + rlang::local_options(lifecycle_verbosity = "warning") + + if (!is.null(regexp) && rlang::is_na(regexp)) { + rlang::abort("`regexp` can't be `NA`.") + } + + testthat::expect_warning( + {{ expr }}, + regexp = regexp, + class = "lifecycle_warning_deprecated", + ... + ) +} + +local_lifecycle_silence <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "quiet" + ) +} +with_lifecycle_silence <- function(expr) { + local_lifecycle_silence() + expr +} + +local_lifecycle_warnings <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "warning" + ) +} +with_lifecycle_warnings <- function(expr) { + local_lifecycle_warnings() + expr +} + +local_lifecycle_errors <- function(frame = rlang::caller_env()) { + rlang::local_options( + .frame = frame, + lifecycle_verbosity = "error" + ) +} +with_lifecycle_errors <- function(expr) { + local_lifecycle_errors() + expr +} + +.rlang_lifecycle_verbosity <- function() { + opt <- getOption("lifecycle_verbosity", "default") + + if (!rlang::is_string(opt, c("quiet", "default", "warning", "error"))) { + options(lifecycle_verbosity = "default") + rlang::warn(glue::glue( + " + The `lifecycle_verbosity` option must be set to one of: + \"quiet\", \"default\", \"warning\", or \"error\". + Resetting to \"default\". + " + )) + } + + opt +} + +# nocov end From 84bebd3c76157a1c33400fdfd9093661aea49c92 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:38:01 -0700 Subject: [PATCH 111/382] remove layer creator docs --- DESCRIPTION | 6 ++---- NAMESPACE | 2 -- R/bake.epi_recipe.R | 1 - R/create-layer.R | 4 ++-- man/create_layer.Rd | 28 ---------------------------- 5 files changed, 4 insertions(+), 37 deletions(-) delete mode 100644 man/create_layer.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 9329382fd..90044790c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,13 +31,10 @@ Imports: cli, distributional, dplyr, - fs, generics, glue, hardhat (>= 1.3.0), - lifecycle, magrittr, - methods, quantreg, recipes (>= 1.0.4), rlang, @@ -47,13 +44,13 @@ Imports: tidyr, tidyselect, tsibble, - usethis, vctrs, workflows (>= 1.0.0) Suggests: covidcast, data.table, epidatr (>= 1.0.0), + fs, ggplot2, knitr, lubridate, @@ -62,6 +59,7 @@ Suggests: RcppRoll, rmarkdown, testthat (>= 3.0.0), + usethis, xgboost VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index 570d1919b..969daf0c0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -132,7 +132,6 @@ export(bake) export(cdc_baseline_args_list) export(cdc_baseline_forecaster) export(check_enough_train_data) -export(create_layer) export(default_epi_recipe_blueprint) export(detect_layer) export(dist_quantiles) @@ -219,7 +218,6 @@ importFrom(generics,fit) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(magrittr,"%>%") -importFrom(methods,is) importFrom(quantreg,rq) importFrom(recipes,bake) importFrom(recipes,prep) diff --git a/R/bake.epi_recipe.R b/R/bake.epi_recipe.R index 6857df4ef..4a083ee19 100644 --- a/R/bake.epi_recipe.R +++ b/R/bake.epi_recipe.R @@ -13,7 +13,6 @@ #' original columns in `new_data`. #' @importFrom rlang is_empty quos #' @importFrom tibble is_tibble as_tibble -#' @importFrom methods is #' @rdname bake #' @export bake.epi_recipe <- function(object, new_data, ...) { diff --git a/R/create-layer.R b/R/create-layer.R index 69aeee7eb..0268a906f 100644 --- a/R/create-layer.R +++ b/R/create-layer.R @@ -7,8 +7,8 @@ #' @inheritParams usethis::use_test #' #' @importFrom rlang %||% -#' @export -#' +#' @noRd +#' @keywords internal #' @examples #' \dontrun{ #' diff --git a/man/create_layer.Rd b/man/create_layer.Rd deleted file mode 100644 index d36385fb2..000000000 --- a/man/create_layer.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create-layer.R -\name{create_layer} -\alias{create_layer} -\title{Create a new layer} -\usage{ -create_layer(name = NULL, open = rlang::is_interactive()) -} -\arguments{ -\item{name}{Either a string giving a file name (without directory) or -\code{NULL} to take the name from the currently open file in RStudio.} - -\item{open}{Whether to open the file for interactive editing.} -} -\description{ -This function creates the skeleton for a new \code{frosting} layer. When called -inside a package, it will create an R script in the \verb{R/} directory, -fill in the name of the layer, and open the file. -} -\examples{ -\dontrun{ - -# Note: running this will write `layer_strawberry.R` to -# the `R/` directory of your current project -create_layer("strawberry") -} - -} From db8147c05e584ef76219e134c7a83679fdaaaf4e Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:41:31 -0700 Subject: [PATCH 112/382] Revert "fix warning" This reverts commit 5e55e8878d9c506618f2ada7f919138180516181. --- R/pivot_quantiles.R | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 5436580c0..20be6c52d 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -143,11 +143,7 @@ pivot_quantiles_wider <- function(.data, ...) { } pivot_quantiles <- function(.data, ...) { - msg <- c( - "{.fn pivot_quantiles} was deprecated in {.pkg epipredict} 0.0.6", - i = "Please use {.fn pivot_quantiles_wider} instead." - ) - deprecate_stop(msg) + deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") } validate_pivot_quantiles <- function(.data, ...) { From 1eec2d1017fb4a015a87e4967c913050e7c8cbe8 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:41:44 -0700 Subject: [PATCH 113/382] Revert "remove {lifecycle} in favour of rlang shim" This reverts commit d3fb50ecc0a15a96231e32588e23f23061db93fd. --- DESCRIPTION | 1 + NAMESPACE | 1 + R/epipredict-package.R | 3 +- R/pivot_quantiles.R | 2 +- R/standalone-lifecycle.R | 250 --------------------------------------- 5 files changed, 5 insertions(+), 252 deletions(-) delete mode 100644 R/standalone-lifecycle.R diff --git a/DESCRIPTION b/DESCRIPTION index 90044790c..db65a99e2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -34,6 +34,7 @@ Imports: generics, glue, hardhat (>= 1.3.0), + lifecycle, magrittr, quantreg, recipes (>= 1.0.4), diff --git a/NAMESPACE b/NAMESPACE index 969daf0c0..d949d6cb4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -217,6 +217,7 @@ importFrom(generics,augment) importFrom(generics,fit) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) +importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") importFrom(quantreg,rq) importFrom(recipes,bake) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index a3c6a208a..69eb05bdc 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,8 +1,9 @@ ## usethis namespace: start #' @importFrom tibble tibble -#' @importFrom rlang := !! %||% +#' @importFrom rlang := !! #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort +#' @importFrom lifecycle deprecated #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer #' assert_integerish assert_date assert_function diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 20be6c52d..e632748df 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -143,7 +143,7 @@ pivot_quantiles_wider <- function(.data, ...) { } pivot_quantiles <- function(.data, ...) { - deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") + lifecycle::deprecate_stop("0.0.6", "pivot_quantiles()", "pivot_quantiles_wider()") } validate_pivot_quantiles <- function(.data, ...) { diff --git a/R/standalone-lifecycle.R b/R/standalone-lifecycle.R deleted file mode 100644 index a58429769..000000000 --- a/R/standalone-lifecycle.R +++ /dev/null @@ -1,250 +0,0 @@ -# --- -# repo: r-lib/rlang -# file: standalone-lifecycle.R -# last-updated: 2023-02-23 -# license: https://unlicense.org -# imports: rlang (>= 1.0.0) -# --- -# -# This file serves as a reference for currently unexported rlang -# lifecycle functions. These functions require rlang in your `Imports` -# DESCRIPTION field but you don't need to import rlang in your -# namespace. -# -# ## Changelog -# -# 2023-02-23 -# -# - Updated the API and internals to match modern lifecycle tools. -# -# -# 2021-04-19 -# -# - Removed `lifecycle()` function. You can now use the following in -# your roxygen documentation to inline a badge: -# -# ``` -# `r lifecycle::badge()` -# ``` -# -# This is a build-time dependency on lifecycle so there is no need -# to add lifecycle to Imports just to use badges. See also -# `?usethis::use_lifecycle()` for importing or updating the badge -# images in your package. -# -# - Soft-namespaced private objects. -# -# nocov start - - -#' Signal deprecation -#' -#' @description -#' These functions provide two levels of verbosity for deprecation -#' warnings. -#' -#' * `deprecate_soft()` warns only if called directly: from the global -#' environment (so the user can change their script) or from the -#' package currently being tested (so the package developer can fix -#' the package). -#' -#' * `deprecate_warn()` warns unconditionally. -#' -#' * `deprecate_stop()` fails unconditionally. -#' -#' Both functions warn only once per session by default to avoid -#' overwhelming the user with repeated warnings. -#' -#' @param msg The deprecation message. -#' @param id The id of the deprecation. A warning is issued only once -#' for each `id`. Defaults to `msg`, but you should give a unique ID -#' when the message is built programmatically and depends on inputs. -#' @param user_env The environment in which the deprecated function -#' was called. The verbosity depends on whether the deprecated -#' feature was called directly, see [rlang::env_is_user_facing()] and the -#' documentation in the lifecycle package. -#' -#' @section Controlling verbosity: -#' -#' The verbosity of retirement warnings can be controlled with global -#' options. You'll generally want to set these options locally with -#' one of these helpers: -#' -#' * `with_lifecycle_silence()` disables all soft-deprecation and -#' deprecation warnings. -#' -#' * `with_lifecycle_warnings()` enforces warnings for both -#' soft-deprecated and deprecated functions. The warnings are -#' repeated rather than signalled once per session. -#' -#' * `with_lifecycle_errors()` enforces errors for both -#' soft-deprecated and deprecated functions. -#' -#' All the `with_` helpers have `scoped_` variants that are -#' particularly useful in testthat blocks. -#' -#' @noRd -NULL - -deprecate_soft <- function(msg, - id = msg, - user_env = rlang::caller_env(2)) { - .rlang_lifecycle_signal_stage(msg, "deprecated") - - id <- paste(id, collapse = "\n") - verbosity <- .rlang_lifecycle_verbosity() - - invisible(switch( - verbosity, - quiet = NULL, - warning = , - default = - if (rlang::env_is_user_facing(user_env)) { - always <- verbosity == "warning" - trace <- rlang::trace_back(bottom = caller_env()) - .rlang_lifecycle_deprecate_warn0( - msg, - id = id, - trace = trace, - always = always - ) - }, - error = deprecate_stop(msg) - )) -} - -deprecate_warn <- function(msg, - id = msg, - always = FALSE, - user_env = rlang::caller_env(2)) { - .rlang_lifecycle_signal_stage(msg, "deprecated") - - id <- paste(id, collapse = "\n") - verbosity <- .rlang_lifecycle_verbosity() - - invisible(switch( - verbosity, - quiet = NULL, - warning = , - default = { - direct <- rlang::env_is_user_facing(user_env) - always <- direct && (always || verbosity == "warning") - - trace <- tryCatch( - rlang::trace_back(bottom = rlang::caller_env()), - error = function(...) NULL - ) - - .rlang_lifecycle_deprecate_warn0( - msg, - id = id, - trace = trace, - always = always - ) - }, - error = deprecate_stop(msg), - )) -} - -.rlang_lifecycle_deprecate_warn0 <- function(msg, - id = msg, - trace = NULL, - always = FALSE, - call = rlang::caller_env()) { - if (always) { - freq <- "always" - } else { - freq <- "regularly" - } - - rlang::warn( - msg, - class = "lifecycle_warning_deprecated", - .frequency = freq, - .frequency_id = id - ) -} - -deprecate_stop <- function(msg) { - msg <- cli::format_error(msg) - .rlang_lifecycle_signal_stage(msg, "deprecated") - - stop(rlang::cnd( - c("defunctError", "error", "condition"), - old = NULL, - new = NULL, - package = NULL, - message = msg - )) -} - -.rlang_lifecycle_signal_stage <- function(msg, stage) { - rlang::signal(msg, "lifecycle_stage", stage = stage) -} - -expect_deprecated <- function(expr, regexp = NULL, ...) { - rlang::local_options(lifecycle_verbosity = "warning") - - if (!is.null(regexp) && rlang::is_na(regexp)) { - rlang::abort("`regexp` can't be `NA`.") - } - - testthat::expect_warning( - {{ expr }}, - regexp = regexp, - class = "lifecycle_warning_deprecated", - ... - ) -} - -local_lifecycle_silence <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "quiet" - ) -} -with_lifecycle_silence <- function(expr) { - local_lifecycle_silence() - expr -} - -local_lifecycle_warnings <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "warning" - ) -} -with_lifecycle_warnings <- function(expr) { - local_lifecycle_warnings() - expr -} - -local_lifecycle_errors <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "error" - ) -} -with_lifecycle_errors <- function(expr) { - local_lifecycle_errors() - expr -} - -.rlang_lifecycle_verbosity <- function() { - opt <- getOption("lifecycle_verbosity", "default") - - if (!rlang::is_string(opt, c("quiet", "default", "warning", "error"))) { - options(lifecycle_verbosity = "default") - rlang::warn(glue::glue( - " - The `lifecycle_verbosity` option must be set to one of: - \"quiet\", \"default\", \"warning\", or \"error\". - Resetting to \"default\". - " - )) - } - - opt -} - -# nocov end From 8c2a8a27875706de404762cc7d770a411f9c2160 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:44:16 -0700 Subject: [PATCH 114/382] Revert "slim down Imports" This reverts commit 798877945b145359a62aea14d679b4f9f7b56118. --- DESCRIPTION | 5 +++-- NAMESPACE | 2 ++ R/bake.epi_recipe.R | 1 + R/create-layer.R | 4 ++-- man/create_layer.Rd | 28 ++++++++++++++++++++++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 man/create_layer.Rd diff --git a/DESCRIPTION b/DESCRIPTION index db65a99e2..9329382fd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,11 +31,13 @@ Imports: cli, distributional, dplyr, + fs, generics, glue, hardhat (>= 1.3.0), lifecycle, magrittr, + methods, quantreg, recipes (>= 1.0.4), rlang, @@ -45,13 +47,13 @@ Imports: tidyr, tidyselect, tsibble, + usethis, vctrs, workflows (>= 1.0.0) Suggests: covidcast, data.table, epidatr (>= 1.0.0), - fs, ggplot2, knitr, lubridate, @@ -60,7 +62,6 @@ Suggests: RcppRoll, rmarkdown, testthat (>= 3.0.0), - usethis, xgboost VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index d949d6cb4..3c63145b3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -132,6 +132,7 @@ export(bake) export(cdc_baseline_args_list) export(cdc_baseline_forecaster) export(check_enough_train_data) +export(create_layer) export(default_epi_recipe_blueprint) export(detect_layer) export(dist_quantiles) @@ -219,6 +220,7 @@ importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") +importFrom(methods,is) importFrom(quantreg,rq) importFrom(recipes,bake) importFrom(recipes,prep) diff --git a/R/bake.epi_recipe.R b/R/bake.epi_recipe.R index 4a083ee19..6857df4ef 100644 --- a/R/bake.epi_recipe.R +++ b/R/bake.epi_recipe.R @@ -13,6 +13,7 @@ #' original columns in `new_data`. #' @importFrom rlang is_empty quos #' @importFrom tibble is_tibble as_tibble +#' @importFrom methods is #' @rdname bake #' @export bake.epi_recipe <- function(object, new_data, ...) { diff --git a/R/create-layer.R b/R/create-layer.R index 0268a906f..69aeee7eb 100644 --- a/R/create-layer.R +++ b/R/create-layer.R @@ -7,8 +7,8 @@ #' @inheritParams usethis::use_test #' #' @importFrom rlang %||% -#' @noRd -#' @keywords internal +#' @export +#' #' @examples #' \dontrun{ #' diff --git a/man/create_layer.Rd b/man/create_layer.Rd new file mode 100644 index 000000000..d36385fb2 --- /dev/null +++ b/man/create_layer.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create-layer.R +\name{create_layer} +\alias{create_layer} +\title{Create a new layer} +\usage{ +create_layer(name = NULL, open = rlang::is_interactive()) +} +\arguments{ +\item{name}{Either a string giving a file name (without directory) or +\code{NULL} to take the name from the currently open file in RStudio.} + +\item{open}{Whether to open the file for interactive editing.} +} +\description{ +This function creates the skeleton for a new \code{frosting} layer. When called +inside a package, it will create an R script in the \verb{R/} directory, +fill in the name of the layer, and open the file. +} +\examples{ +\dontrun{ + +# Note: running this will write `layer_strawberry.R` to +# the `R/` directory of your current project +create_layer("strawberry") +} + +} From c44de1a72dd7c426e02b91e588950a8e6e567447 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 17:59:23 -0700 Subject: [PATCH 115/382] faster flusight example --- R/flusight_hub_formatter.R | 4 ++++ man/flusight_hub_formatter.Rd | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/R/flusight_hub_formatter.R b/R/flusight_hub_formatter.R index 0dbd1a954..e45f88189 100644 --- a/R/flusight_hub_formatter.R +++ b/R/flusight_hub_formatter.R @@ -58,6 +58,10 @@ abbr_to_location <- function(abbr) { #' @examples #' if (require(dplyr)) { #' weekly_deaths <- case_death_rate_subset %>% +#' filter( +#' time_value >= as.Date("2021-09-01"), +#' geo_value %in% c("ca", "ny", "dc", "ga", "vt") +#' ) %>% #' select(geo_value, time_value, death_rate) %>% #' left_join(state_census %>% select(pop, abbr), by = c("geo_value" = "abbr")) %>% #' mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) %>% diff --git a/man/flusight_hub_formatter.Rd b/man/flusight_hub_formatter.Rd index 8f3604756..87cfc7e4f 100644 --- a/man/flusight_hub_formatter.Rd +++ b/man/flusight_hub_formatter.Rd @@ -43,6 +43,10 @@ format for this forecast task is \href{https://github.com/cdcepi/FluSight-foreca \examples{ if (require(dplyr)) { weekly_deaths <- case_death_rate_subset \%>\% + filter( + time_value >= as.Date("2021-09-01"), + geo_value \%in\% c("ca", "ny", "dc", "ga", "vt") + ) \%>\% select(geo_value, time_value, death_rate) \%>\% left_join(state_census \%>\% select(pop, abbr), by = c("geo_value" = "abbr")) \%>\% mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) \%>\% From 72e47f85119639c5167bce23842c9c8b575ef248 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 28 Mar 2024 18:04:57 -0700 Subject: [PATCH 116/382] style: annoying but breaks checks --- R/standalone-lifecycle.R | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/R/standalone-lifecycle.R b/R/standalone-lifecycle.R index a58429769..e1b812a6d 100644 --- a/R/standalone-lifecycle.R +++ b/R/standalone-lifecycle.R @@ -94,8 +94,7 @@ deprecate_soft <- function(msg, id <- paste(id, collapse = "\n") verbosity <- .rlang_lifecycle_verbosity() - invisible(switch( - verbosity, + invisible(switch(verbosity, quiet = NULL, warning = , default = @@ -122,8 +121,7 @@ deprecate_warn <- function(msg, id <- paste(id, collapse = "\n") verbosity <- .rlang_lifecycle_verbosity() - invisible(switch( - verbosity, + invisible(switch(verbosity, quiet = NULL, warning = , default = { From dee4de48f923c3e508128f0c3496da3b30d6dcbc Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Tue, 2 Apr 2024 18:16:08 -0700 Subject: [PATCH 117/382] fix: address n_train and ahead mismatch #290 --- R/layer_residual_quantiles.R | 4 ++++ tests/testthat/test-layer_residual_quantiles.R | 7 +++++++ tests/testthat/test-target_date_bug.R | 14 +++----------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index b09956c2e..86f86dbed 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -123,6 +123,10 @@ slather.layer_residual_quantiles <- probs = object$quantile_levels, na.rm = TRUE )) ) + # Check for NA + if (any(sapply(r$dstn, is.na))) { + cli::cli_abort("Quantiles could not be calculated due to missing residuals. Check your n_train and ahead values.") + } estimate <- components$predictions$.pred res <- tibble::tibble( diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index 5723fbce9..4340a026d 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -98,3 +98,10 @@ test_that("Canned forecasters work with / without", { ) ) }) + +test_that("flatline_forecaster correctly errors when n_training < ahead", { + expect_error( + flatline_forecaster(jhu, "death_rate", args_list = flatline_args_list(ahead = 10, n_training = 9)), + "Check your n_train and ahead values" + ) +}) diff --git a/tests/testthat/test-target_date_bug.R b/tests/testthat/test-target_date_bug.R index d37329ad8..4a7e7d2e8 100644 --- a/tests/testthat/test-target_date_bug.R +++ b/tests/testthat/test-target_date_bug.R @@ -1,3 +1,6 @@ +# These tests address #290: +# https://github.com/cmu-delphi/epipredict/issues/290 + library(dplyr) train <- jhu_csse_daily_subset |> filter(time_value >= as.Date("2021-10-01")) |> @@ -13,7 +16,6 @@ test_that("flatline determines target_date where forecast_date exists", { ahead = 1L ) ) - # previously, if target_date existed, it could be # erroneously incremented by the ahead expect_identical( @@ -24,9 +26,6 @@ test_that("flatline determines target_date where forecast_date exists", { flat$predictions$forecast_date, rep(as.Date("2021-12-31"), ngeos) ) - - # potentially resulted in NA predictions - # see #290 https://github.com/cmu-delphi/epipredict/issues/290 expect_true(all(!is.na(flat$predictions$.pred_distn))) expect_true(all(!is.na(flat$predictions$.pred))) }) @@ -50,9 +49,6 @@ test_that("arx_forecaster determines target_date where forecast_date exists", { arx$predictions$forecast_date, rep(as.Date("2021-12-31"), ngeos) ) - - # potentially resulted in NA predictions - # see #290 https://github.com/cmu-delphi/epipredict/issues/290 expect_true(all(!is.na(arx$predictions$.pred_distn))) expect_true(all(!is.na(arx$predictions$.pred))) }) @@ -67,7 +63,6 @@ test_that("arx_classifier determines target_date where forecast_date exists", { ahead = 1L ) ) - # previously, if target_date existed, it could be # erroneously incremented by the ahead expect_identical( @@ -78,8 +73,5 @@ test_that("arx_classifier determines target_date where forecast_date exists", { arx$predictions$forecast_date, rep(as.Date("2021-12-31"), ngeos) ) - - # potentially resulted in NA predictions - # see #290 https://github.com/cmu-delphi/epipredict/issues/290 expect_true(all(!is.na(arx$predictions$.pred_class))) }) From 6f3035bcb4460d182203f0b1c9976a94070626de Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 10:02:29 -0700 Subject: [PATCH 118/382] doc: update NEWS --- NEWS.md | 63 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/NEWS.md b/NEWS.md index 5f629f45f..5941a8f3b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,34 +4,35 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat # epipredict 0.1 -- add `check_enough_train_data` that will error if training data is too small -- added `check_enough_train_data` to `arx_forecaster` -- simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` -- rename the `dist_quantiles()` to be more descriptive, breaking change -- removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) -- add `pivot_quantiles_wider()` for easier plotting -- add complement `pivot_quantiles_longer()` -- add `cdc_baseline_forecaster()` and `flusight_hub_formatter()` -- add `smooth_quantile_reg()` -- improved printing of various methods / internals -- canned forecasters get a class -- fixed quantile bug in `flatline_forecaster()` -- add functionality to output the unfit workflow from the canned forecasters -- add quantile_reg() -- clean up documentation bugs -- add smooth_quantile_reg() -- add classifier -- training window step debugged -- `min_train_window` argument removed from canned forecasters -- add forecasters -- implement postprocessing -- vignettes avaliable -- arx_forecaster -- pkgdown -- Publish public for easy navigation -- Two simple forecasters as test beds -- Working vignette -- use `checkmate` for input validation -- refactor quantile extrapolation (possibly creates different results) -- force `target_date` + `forecast_date` handling to match the time_type of - the epi_df. allows for annual and weekly data +- `layer_residual_quantiles()` will now error if any of the residual quantiles are NA +- add `check_enough_train_data` that will error if training data is too small +- added `check_enough_train_data` to `arx_forecaster` +- simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` +- rename the `dist_quantiles()` to be more descriptive, breaking change +- removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) +- add `pivot_quantiles_wider()` for easier plotting +- add complement `pivot_quantiles_longer()` +- add `cdc_baseline_forecaster()` and `flusight_hub_formatter()` +- add `smooth_quantile_reg()` +- improved printing of various methods / internals +- canned forecasters get a class +- fixed quantile bug in `flatline_forecaster()` +- add functionality to output the unfit workflow from the canned forecasters +- add quantile_reg() +- clean up documentation bugs +- add smooth_quantile_reg() +- add classifier +- training window step debugged +- `min_train_window` argument removed from canned forecasters +- add forecasters +- implement postprocessing +- vignettes avaliable +- arx_forecaster +- pkgdown +- Publish public for easy navigation +- Two simple forecasters as test beds +- Working vignette +- use `checkmate` for input validation +- refactor quantile extrapolation (possibly creates different results) +- force `target_date` + `forecast_date` handling to match the time_type of + the epi_df. allows for annual and weekly data From 33be27f7ffd4ec328c125bdad8654c3a711ea25e Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 1 Apr 2024 15:22:31 -0700 Subject: [PATCH 119/382] lint: add .lintr config from epiprocess --- .Rbuildignore | 1 + .lintr | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 .lintr diff --git a/.Rbuildignore b/.Rbuildignore index d0c10332d..e4bff0b18 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -18,3 +18,4 @@ ^.git-blame-ignore-revs$ ^doc$ ^Meta$ +^.lintr$ \ No newline at end of file diff --git a/.lintr b/.lintr new file mode 100644 index 000000000..c7c90554d --- /dev/null +++ b/.lintr @@ -0,0 +1,9 @@ +linters: linters_with_defaults( + line_length_linter(120), + cyclocomp_linter = NULL, + object_length_linter(length = 40L) + ) +exclusions: list( + "renv", + "venv" + ) From 9e5796577bf16c93bea7e53320eea09bec6cc2ea Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Tue, 2 Apr 2024 16:31:58 -0700 Subject: [PATCH 120/382] fix: partial match warnings --- R/arx_forecaster.R | 4 ++-- tests/testthat/test-dist_quantiles.R | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index 425a8f905..d84f65df1 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -289,8 +289,8 @@ print.arx_fcast <- function(x, ...) { } compare_quantile_args <- function(alist, tlist) { - default_alist <- eval(formals(arx_args_list)$quantile_level) - default_tlist <- eval(formals(quantile_reg)$quantile_level) + default_alist <- eval(formals(arx_args_list)$quantile_levels) + default_tlist <- eval(formals(quantile_reg)$quantile_levels) if (setequal(alist, default_alist)) { if (setequal(tlist, default_tlist)) { return(sort(unique(union(alist, tlist)))) diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 99ce742d5..9c01ca103 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -28,17 +28,16 @@ test_that("single dist_quantiles works, quantiles are accessible", { test_that("quantile extrapolator works", { dstn <- dist_normal(c(10, 2), c(5, 10)) - qq <- extrapolate_quantiles(dstn, p = c(.25, 0.5, .75)) + qq <- extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) expect_s3_class(qq, "distribution") expect_s3_class(vctrs::vec_data(qq[1])[[1]], "dist_quantiles") - expect_length(parameters(qq[1])$q[[1]], 3L) - + expect_length(parameters(qq[1])$quantile_levels[[1]], 3L) dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) - qq <- extrapolate_quantiles(dstn, p = c(.25, 0.5, .75)) + qq <- extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) expect_s3_class(qq, "distribution") expect_s3_class(vctrs::vec_data(qq[1])[[1]], "dist_quantiles") - expect_length(parameters(qq[1])$q[[1]], 7L) + expect_length(parameters(qq[1])$quantile_levels[[1]], 7L) }) test_that("small deviations of quantile requests work", { From 18860ce40f811d4c8915ea1b29bd648d4344d58a Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 16:27:46 -0700 Subject: [PATCH 121/382] Update R/layer_residual_quantiles.R Co-authored-by: Daniel McDonald --- R/layer_residual_quantiles.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index 86f86dbed..56ebd2fb6 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -125,7 +125,10 @@ slather.layer_residual_quantiles <- ) # Check for NA if (any(sapply(r$dstn, is.na))) { - cli::cli_abort("Quantiles could not be calculated due to missing residuals. Check your n_train and ahead values.") + cli::cli_abort(c( + "Residual quantiles could not be calculated due to missing residuals.", + i = "This may be due to `n_train` < `ahead` in your {.cls epi_recipe}." + )) } estimate <- components$predictions$.pred From a6894d096d05d8186e787652fb51e75a64e4a40a Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 16:07:06 -0700 Subject: [PATCH 122/382] feat: add snaphot tests of canned forecasters --- tests/testthat/_snaps/snapshots.md | 1250 ++++++++++++++++++++++++++++ tests/testthat/test-snapshots.R | 81 ++ 2 files changed, 1331 insertions(+) create mode 100644 tests/testthat/_snaps/snapshots.md create mode 100644 tests/testthat/test-snapshots.R diff --git a/tests/testthat/_snaps/snapshots.md b/tests/testthat/_snaps/snapshots.md new file mode 100644 index 000000000..1514afa65 --- /dev/null +++ b/tests/testthat/_snaps/snapshots.md @@ -0,0 +1,1250 @@ +# flatline_forecaster snapshots + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, + 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, + "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, + "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, + "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" + )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(18999, 18999, + 18999, 18999, 18999, 18999), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, + 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0.084583345, + "95%" = 0.194105055), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.048438145, "95%" = 0.157959855), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.257363545, + "95%" = 0.366885255), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.367085245, "95%" = 0.476606955), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.677223545, + "95%" = 0.786745255), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.142781745, "95%" = 0.252303455), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" + )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(18993, 18993, + 18993, 18993, 18993, 18993), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, + 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, + "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, + "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, + "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" + )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(18999, 18999, + 18999, 18999, 18999, 18999), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, + 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, + "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, + "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, + "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" + )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(19000, 19000, + 19000, 19000, 19000, 19000), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +# cdc_baseline_forecaster snapshots + + structure(list(geo_value = c("ca", "ca", "ca", "ca", "ca", "fl", + "fl", "fl", "fl", "fl", "ga", "ga", "ga", "ga", "ga", "ny", "ny", + "ny", "ny", "ny", "pa", "pa", "pa", "pa", "pa", "tx", "tx", "tx", + "tx", "tx"), .pred = c(0.1393442, 0.1393442, 0.1393442, 0.1393442, + 0.1393442, 0.103199, 0.103199, 0.103199, 0.103199, 0.103199, + 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.4218461, + 0.4218461, 0.4218461, 0.4218461, 0.4218461, 0.7319844, 0.7319844, + 0.7319844, 0.7319844, 0.7319844, 0.1975426, 0.1975426, 0.1975426, + 0.1975426, 0.1975426), ahead = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, + 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, + 4L, 5L, 1L, 2L, 3L, 4L, 5L), .pred_distn = structure(list(structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.05519342, + "15%" = 0.082372705, "20%" = 0.0936219, "25%" = 0.1048711, + "30%" = 0.1157573, "35%" = 0.12317806, "40%" = 0.1302723, + "45%" = 0.1353526, "50%" = 0.1393442, "55%" = 0.1433358, + "60%" = 0.1484161, "65%" = 0.15551034, "70%" = 0.1629311, + "75%" = 0.1738173, "80%" = 0.1850665, "85%" = 0.196315695, + "90%" = 0.22349498, "95%" = 0.309768685, "97.5%" = 0.3567520625, + "99%" = 0.439580229), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0335550493877939, + "20%" = 0.0604073208819088, "25%" = 0.0796881899581496, "30%" = 0.0945180888333883, + "35%" = 0.107218788833388, "40%" = 0.118830788833388, "45%" = 0.129717088833388, + "50%" = 0.1393442, "55%" = 0.148949488833388, "60%" = 0.159110072060821, + "65%" = 0.171080110623306, "70%" = 0.184009705322953, "75%" = 0.19866346102411, + "80%" = 0.218798896615666, "85%" = 0.250961850618106, "90%" = 0.300471354816148, + "95%" = 0.368582781136862, "97.5%" = 0.43909595699107, "99%" = 0.520101234797705 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0310685196688967, "25%" = 0.0565901050435504, "30%" = 0.0768417663716637, + "35%" = 0.0947104815343153, "40%" = 0.110553706525765, "45%" = 0.125192081534315, + "50%" = 0.1393442, "55%" = 0.153133424194392, "60%" = 0.167807181271713, + "65%" = 0.183769310145952, "70%" = 0.202099979390294, "75%" = 0.224139947221972, + "80%" = 0.252840918770688, "85%" = 0.291417895572206, "90%" = 0.341073550318203, + "95%" = 0.420604597710477, "97.5%" = 0.494523225410904, "99%" = 0.573647294116801 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.00623643594225938, "25%" = 0.0360877950479505, + "30%" = 0.0604332430739307, "35%" = 0.0824028153516535, "40%" = 0.102509343235732, + "45%" = 0.121439405653606, "50%" = 0.1393442, "55%" = 0.15780837904264, + "60%" = 0.176333479766098, "65%" = 0.1971089199637, "70%" = 0.219859545844459, + "75%" = 0.246500872561225, "80%" = 0.279163385675357, "85%" = 0.320379296602716, + "90%" = 0.374497727839579, "95%" = 0.458894379633346, "97.5%" = 0.535545067037845, + "99%" = 0.628776504364044), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0.0192048017017668, "30%" = 0.0478501821296211, + "35%" = 0.0723167026720766, "40%" = 0.0958385084225842, "45%" = 0.11812331897399, + "50%" = 0.1393442, "55%" = 0.161074539705197, "60%" = 0.184026763327133, + "65%" = 0.207844848454635, "70%" = 0.23407004803228, "75%" = 0.265166265836908, + "80%" = 0.302137478236883, "85%" = 0.346008752873429, "90%" = 0.403205598400084, + "95%" = 0.495260096430714, "97.5%" = 0.574198142463125, "99%" = 0.672941852619816 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.016465765, + "20%" = 0.03549514, "25%" = 0.05225675, "30%" = 0.0644172, + "35%" = 0.0749343000000001, "40%" = 0.0847941, "45%" = 0.0966258, + "50%" = 0.103199, "55%" = 0.1097722, "60%" = 0.1216039, "65%" = 0.1314637, + "70%" = 0.1419808, "75%" = 0.15414125, "80%" = 0.17090286, + "85%" = 0.189932235, "90%" = 0.22848398, "95%" = 0.30542311, + "97.5%" = 0.40216399, "99%" = 0.512353658), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.00331296053340532, + "25%" = 0.0234804643776438, "30%" = 0.0414109089650896, "35%" = 0.0579040140087902, + "40%" = 0.0738391473860739, "45%" = 0.0882882738549385, "50%" = 0.103199, + "55%" = 0.118522737211872, "60%" = 0.134217143129031, "65%" = 0.15174910202592, + "70%" = 0.17076597900759, "75%" = 0.192368859892349, "80%" = 0.218887, + "85%" = 0.254338497855279, "90%" = 0.307871753369934, "95%" = 0.407530532639726, + "97.5%" = 0.506824682189646, "99%" = 0.607973477267732), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, "30%" = 0.0185864520320203, + "35%" = 0.0411215858914089, "40%" = 0.062281046686267, "45%" = 0.0828222124563246, + "50%" = 0.103199, "55%" = 0.123575888447284, "60%" = 0.144785989158292, + "65%" = 0.167277039342293, "70%" = 0.192536265178252, "75%" = 0.221677797769728, + "80%" = 0.256887836856768, "85%" = 0.302366681512415, "90%" = 0.3669383199518, + "95%" = 0.476508917333523, "97.5%" = 0.574293059865274, "99%" = 0.69194511433946 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, + "30%" = 0, "35%" = 0.0271019287070871, "40%" = 0.0535555494987951, + "45%" = 0.0785514374097741, "50%" = 0.103199, "55%" = 0.128043832742677, + "60%" = 0.154157375592856, "65%" = 0.181874602598776, "70%" = 0.212708648669987, + "75%" = 0.247608381738568, "80%" = 0.289082621291513, "85%" = 0.342486159511745, + "90%" = 0.41300665395314, "95%" = 0.52870334697862, "97.5%" = 0.634316186092986, + "99%" = 0.767614547228429), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0, "30%" = 0, "35%" = 0.0118725894981448, + "40%" = 0.0439446210512103, "45%" = 0.0736366703227029, "50%" = 0.103199, + "55%" = 0.133138617710077, "60%" = 0.16357656105121, "65%" = 0.19575459701827, + "70%" = 0.230475760859608, "75%" = 0.269323345322203, "80%" = 0.314976554734947, + "85%" = 0.373424338576786, "90%" = 0.452807955824158, "95%" = 0.578141866759416, + "97.5%" = 0.690542571738594, "99%" = 0.837295153768033), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0813658, "10%" = 0.14899276, + "15%" = 0.1960782, "20%" = 0.22542314, "25%" = 0.2414296, + "30%" = 0.25890318, "35%" = 0.2747762, "40%" = 0.2881148, + "45%" = 0.3027873, "50%" = 0.3121244, "55%" = 0.3214615, + "60%" = 0.336134, "65%" = 0.3494726, "70%" = 0.36534562, + "75%" = 0.3828192, "80%" = 0.39882566, "85%" = 0.4281706, + "90%" = 0.47525604, "95%" = 0.542883, "97.5%" = 0.682805397499999, + "99%" = 0.798878314999999), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0706949, + "15%" = 0.1267172, "20%" = 0.1667331, "25%" = 0.198582473624236, + "30%" = 0.225423180397104, "35%" = 0.2494327, "40%" = 0.2707747, + "45%" = 0.292116312116921, "50%" = 0.3121244, "55%" = 0.3321324, + "60%" = 0.353072222341423, "65%" = 0.375089999249792, "70%" = 0.3988256, + "75%" = 0.425831930221552, "80%" = 0.459232792604326, "85%" = 0.501467782274773, + "90%" = 0.562188443556836, "95%" = 0.685648485782108, "97.5%" = 0.80647163752115, + "99%" = 0.939224788489265), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0704696868359684, + "20%" = 0.121407167925079, "25%" = 0.161930580284053, "30%" = 0.197682797539976, + "35%" = 0.228361656891269, "40%" = 0.257706650923509, "45%" = 0.285717780926109, + "50%" = 0.3121244, "55%" = 0.338115598498035, "60%" = 0.365749693067931, + "65%" = 0.395921877240673, "70%" = 0.427437934626446, "75%" = 0.462388578749537, + "80%" = 0.504066064225642, "85%" = 0.558443518811788, "90%" = 0.636013559040791, + "95%" = 0.771225883005179, "97.5%" = 0.89210797204162, "99%" = 1.02314875759509 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0247190015881658, + "20%" = 0.0834693973257732, "25%" = 0.131490031120311, "30%" = 0.173258318827988, + "35%" = 0.211213742349423, "40%" = 0.246202447408474, "45%" = 0.279926744217642, + "50%" = 0.3121244, "55%" = 0.344908347408474, "60%" = 0.378255200773608, + "65%" = 0.412935547408474, "70%" = 0.45191576510605, "75%" = 0.494757615230152, + "80%" = 0.545060918490786, "85%" = 0.609312182129471, "90%" = 0.69704881099591, + "95%" = 0.838550239412991, "97.5%" = 0.962653262246773, "99%" = 1.11351403170759 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0501392705767058, "25%" = 0.104248897713977, "30%" = 0.151994400390804, + "35%" = 0.195087767727627, "40%" = 0.235544124698047, "45%" = 0.274058107118071, + "50%" = 0.3121244, "55%" = 0.350571341810268, "60%" = 0.390274666572666, + "65%" = 0.43048632300908, "70%" = 0.474320393891039, "75%" = 0.523839613390634, + "80%" = 0.581010268149082, "85%" = 0.652137495469405, "90%" = 0.748428674762348, + "95%" = 0.898563270096551, "97.5%" = 1.03273295410124, "99%" = 1.19211145220822 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.2148017, "10%" = 0.31250597, + "15%" = 0.350183905, "20%" = 0.3745639, "25%" = 0.3884161, + "30%" = 0.39746621, "35%" = 0.404854, "40%" = 0.4115031, + "45%" = 0.417413315, "50%" = 0.4218461, "55%" = 0.426278885, + "60%" = 0.4321891, "65%" = 0.4388382, "70%" = 0.44622599, + "75%" = 0.4552761, "80%" = 0.4691283, "85%" = 0.493508295, + "90%" = 0.53118623, "95%" = 0.628890499999999, "97.5%" = 1.22043540499999, + "99%" = 1.95905017899999), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.212369462232823, + "15%" = 0.289571577546325, "20%" = 0.324446887783878, "25%" = 0.351262144469445, + "30%" = 0.37087, "35%" = 0.3863844, "40%" = 0.399682509835098, + "45%" = 0.411036898891089, "50%" = 0.4218461, "55%" = 0.432927818676137, + "60%" = 0.444338520819208, "65%" = 0.4573077, "70%" = 0.4728222, + "75%" = 0.492817749438994, "80%" = 0.519442857224172, "85%" = 0.556165331447064, + "90%" = 0.635946057886079, "95%" = 1.18402232252562, "97.5%" = 1.7827032389242, + "99%" = 2.5561261649726), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0413098183761837, + "15%" = 0.216633655848608, "20%" = 0.28006329699657, "25%" = 0.3175577049983, + "30%" = 0.345923291761818, "35%" = 0.368957399144641, "40%" = 0.38804556403724, + "45%" = 0.405400893204282, "50%" = 0.4218461, "55%" = 0.43864616004845, + "60%" = 0.456105937661177, "65%" = 0.475585378227632, "70%" = 0.499018124730147, + "75%" = 0.5270891900114, "80%" = 0.564293444378844, "85%" = 0.630730263388634, + "90%" = 0.898212235100651, "95%" = 1.53976520159876, "97.5%" = 2.08228809477582, + "99%" = 2.80588762256078), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.114729892920429, + "20%" = 0.227785958288583, "25%" = 0.282278878729037, "30%" = 0.320407599201492, + "35%" = 0.350577823459785, "40%" = 0.376652303049231, "45%" = 0.39981364198757, + "50%" = 0.4218461, "55%" = 0.444009706175862, "60%" = 0.466962725214852, + "65%" = 0.493098379685547, "70%" = 0.523708407392674, "75%" = 0.562100740111401, + "80%" = 0.619050517814778, "85%" = 0.754868363055733, "90%" = 1.1177263295869, + "95%" = 1.76277018354499, "97.5%" = 2.37278671910076, "99%" = 2.9651652434047 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0100954501382014, + "20%" = 0.165091099860099, "25%" = 0.244964334392844, "30%" = 0.294577054174442, + "35%" = 0.333357739419644, "40%" = 0.365251480804308, "45%" = 0.394198909379894, + "50%" = 0.4218461, "55%" = 0.449607812233022, "60%" = 0.479120513116631, + "65%" = 0.511271131674317, "70%" = 0.5506402899964, "75%" = 0.60295411796593, + "80%" = 0.690751300611906, "85%" = 0.913578722060166, "90%" = 1.30856988553206, + "95%" = 1.94020220543606, "97.5%" = 2.57104934168037, "99%" = 3.07139639379724 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.303454977, "2.5%" = 0.3982330425, "5%" = 0.46791125, + "10%" = 0.57642367, "15%" = 0.631462275, "20%" = 0.6694025, + "25%" = 0.685048, "30%" = 0.69857015, "35%" = 0.7085162, + "40%" = 0.71633898, "45%" = 0.7252792, "50%" = 0.7319844, + "55%" = 0.7386896, "60%" = 0.74762982, "65%" = 0.7554526, + "70%" = 0.76539865, "75%" = 0.7789208, "80%" = 0.7945663, + "85%" = 0.832506525, "90%" = 0.88754513, "95%" = 0.99605755, + "97.5%" = 1.0657357575, "99%" = 1.160513823), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0.188727136659627, + "2.5%" = 0.292714653217782, "5%" = 0.380882595473705, "10%" = 0.476427609604196, + "15%" = 0.5464739, "20%" = 0.6001155, "25%" = 0.636506664263643, + "30%" = 0.6638148, "35%" = 0.684726301742618, "40%" = 0.701811, + "45%" = 0.7174565, "50%" = 0.7319844, "55%" = 0.7465124, "60%" = 0.7621578, + "65%" = 0.779322149415794, "70%" = 0.800154, "75%" = 0.826981204292293, + "80%" = 0.8649709, "85%" = 0.918345662372574, "90%" = 0.987315641681917, + "95%" = 1.08210087899389, "97.5%" = 1.17564510102166, "99%" = 1.27428433325155 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0.0928040444059739, + "2.5%" = 0.212569233904214, "5%" = 0.310718449102641, "10%" = 0.418013562853928, + "15%" = 0.489917936424114, "20%" = 0.546885925424654, "25%" = 0.593410228218282, + "30%" = 0.631406259421094, "35%" = 0.661579628218282, "40%" = 0.687282906872069, + "45%" = 0.710456666258662, "50%" = 0.7319844, "55%" = 0.754131389282943, + "60%" = 0.776685628218282, "65%" = 0.802388976168662, "70%" = 0.832758896293562, + "75%" = 0.869440928218282, "80%" = 0.916359694097141, "85%" = 0.97403912794778, + "90%" = 1.04529048496565, "95%" = 1.15710382277548, "97.5%" = 1.25675656404419, + "99%" = 1.37098330871205), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.0108404989744699, "2.5%" = 0.144337973117581, + "5%" = 0.250292371898569, "10%" = 0.367310419323293, "15%" = 0.44444044802193, + "20%" = 0.506592035751958, "25%" = 0.558428768125431, "30%" = 0.602035095628756, + "35%" = 0.64112383905529, "40%" = 0.674354964141041, "45%" = 0.703707875219752, + "50%" = 0.7319844, "55%" = 0.760702196782168, "60%" = 0.789758264058441, + "65%" = 0.823427572594726, "70%" = 0.860294897090771, "75%" = 0.904032120658957, + "80%" = 0.955736581115011, "85%" = 1.0165945004053, "90%" = 1.09529786576616, + "95%" = 1.21614421175967, "97.5%" = 1.32331604019295, "99%" = 1.45293812780298 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0.0783919019408445, "5%" = 0.19440762901709, + "10%" = 0.323264916745368, "15%" = 0.407999619319143, "20%" = 0.474764568463685, + "25%" = 0.530890671381964, "30%" = 0.580852443909739, "35%" = 0.623441748828038, + "40%" = 0.661393469870099, "45%" = 0.69827126098506, "50%" = 0.7319844, + "55%" = 0.766440770218252, "60%" = 0.802260162496625, "65%" = 0.840536805657307, + "70%" = 0.883133954556946, "75%" = 0.931565607767828, "80%" = 0.98815401699637, + "85%" = 1.05406790404239, "90%" = 1.138596250043, "95%" = 1.27030064370239, + "97.5%" = 1.39007785503355, "99%" = 1.5343628053761), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0.012845105, "10%" = 0.07040502, "15%" = 0.09495188, "20%" = 0.12669976, + "25%" = 0.1502248, "30%" = 0.1659163, "35%" = 0.1761341, "40%" = 0.18586528, + "45%" = 0.191290375, "50%" = 0.1975426, "55%" = 0.203794825, + "60%" = 0.20921992, "65%" = 0.2189511, "70%" = 0.2291689, "75%" = 0.2448604, + "80%" = 0.26838544, "85%" = 0.30013332, "90%" = 0.32468018, "95%" = 0.382240095, + "97.5%" = 0.5020427625, "99%" = 0.590302013999998), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0.0133856545472455, "15%" = 0.0528330564916649, + "20%" = 0.0825071163605637, "25%" = 0.107217748074731, "30%" = 0.130397558147181, + "35%" = 0.151367721571716, "40%" = 0.1688357, "45%" = 0.183736649076791, + "50%" = 0.1975426, "55%" = 0.2111662, "60%" = 0.226622576069161, + "65%" = 0.244738709634746, "70%" = 0.265660771838618, "75%" = 0.289502, + "80%" = 0.3157762, "85%" = 0.347933515877459, "90%" = 0.395446576674467, + "95%" = 0.494033943284933, "97.5%" = 0.586036939413118, "99%" = 0.696507800090321 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0119984314577645, + "20%" = 0.0497573816250162, "25%" = 0.081255049503995, "30%" = 0.108502307388674, + "35%" = 0.132961558931189, "40%" = 0.156011650575706, "45%" = 0.177125892134071, + "50%" = 0.1975426, "55%" = 0.217737120618906, "60%" = 0.239458499211792, + "65%" = 0.263562581820818, "70%" = 0.289525383565136, "75%" = 0.31824420000725, + "80%" = 0.351413051940519, "85%" = 0.393862560773808, "90%" = 0.453538799225292, + "95%" = 0.558631806850418, "97.5%" = 0.657452391363313, "99%" = 0.767918764883928 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0189057930465303, + "25%" = 0.0558619823820737, "30%" = 0.0885055048481483, "35%" = 0.117823094349893, + "40%" = 0.145878789120691, "45%" = 0.171852417645726, "50%" = 0.1975426, + "55%" = 0.222526993865839, "60%" = 0.249029206661066, "65%" = 0.27731797305948, + "70%" = 0.306704680469104, "75%" = 0.340659034209842, "80%" = 0.379550761828618, + "85%" = 0.429562304567396, "90%" = 0.499209921951019, "95%" = 0.612206099576094, + "97.5%" = 0.713714149138691, "99%" = 0.835600324727346), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0.0331956220262204, + "30%" = 0.0710455499705998, "35%" = 0.105140687231072, "40%" = 0.136976315413355, + "45%" = 0.167518817907279, "50%" = 0.1975426, "55%" = 0.226974062486675, + "60%" = 0.257640196272163, "65%" = 0.289459502055271, "70%" = 0.323342029611596, + "75%" = 0.361500312536625, "80%" = 0.407123841331413, "85%" = 0.46286764504675, + "90%" = 0.538379175655057, "95%" = 0.659249503348734, "97.5%" = 0.768470658367656, + "99%" = 0.898774707571334), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", + "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(18999, 19006, + 19013, 19020, 19027, 18999, 19006, 19013, 19020, 19027, 18999, + 19006, 19013, 19020, 19027, 18999, 19006, 19013, 19020, 19027, + 18999, 19006, 19013, 19020, 19027, 18999, 19006, 19013, 19020, + 19027), class = "Date")), row.names = c(NA, -30L), class = c("tbl_df", + "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "ca", "ca", "ca", "ca", "fl", + "fl", "fl", "fl", "fl", "ga", "ga", "ga", "ga", "ga", "ny", "ny", + "ny", "ny", "ny", "pa", "pa", "pa", "pa", "pa", "tx", "tx", "tx", + "tx", "tx"), .pred = c(0.1393442, 0.1393442, 0.1393442, 0.1393442, + 0.1393442, 0.103199, 0.103199, 0.103199, 0.103199, 0.103199, + 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.4218461, + 0.4218461, 0.4218461, 0.4218461, 0.4218461, 0.7319844, 0.7319844, + 0.7319844, 0.7319844, 0.7319844, 0.1975426, 0.1975426, 0.1975426, + 0.1975426, 0.1975426), ahead = c(2L, 3L, 4L, 5L, 6L, 2L, 3L, + 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, + 5L, 6L, 2L, 3L, 4L, 5L, 6L), .pred_distn = structure(list(structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0344362435566855, + "20%" = 0.0610170086495865, "25%" = 0.0798865084778347, "30%" = 0.0944014546310463, + "35%" = 0.107339121226462, "40%" = 0.11899734099851, "45%" = 0.129600408649586, + "50%" = 0.1393442, "55%" = 0.149195708649586, "60%" = 0.159627982246122, + "65%" = 0.170968308649587, "70%" = 0.184031805880359, "75%" = 0.198909658094331, + "80%" = 0.219058736130861, "85%" = 0.250692448549235, "90%" = 0.300646382944129, + "95%" = 0.368938143197633, "97.5%" = 0.440038195052124, "99%" = 0.51997011826723 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0303364052628526, "25%" = 0.0557306728227282, "30%" = 0.0766736159703596, + "35%" = 0.0942284381264812, "40%" = 0.11050757203172, "45%" = 0.125214601455714, + "50%" = 0.1393442, "55%" = 0.15359732398729, "60%" = 0.168500447692877, + "65%" = 0.184551468093631, "70%" = 0.202926420944109, "75%" = 0.22476606802393, + "80%" = 0.253070223293233, "85%" = 0.291229953951089, "90%" = 0.341963643747938, + "95%" = 0.419747975311502, "97.5%" = 0.495994046054689, "99%" = 0.5748791770223 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.00603076915889168, "25%" = 0.0356039073625737, + "30%" = 0.0609470811194113, "35%" = 0.0833232869645198, "40%" = 0.103265350891109, + "45%" = 0.121507077706427, "50%" = 0.1393442, "55%" = 0.157305073932789, + "60%" = 0.176004666813668, "65%" = 0.196866917086671, "70%" = 0.219796529731897, + "75%" = 0.247137200365254, "80%" = 0.280371254591746, "85%" = 0.320842872758278, + "90%" = 0.374783454750148, "95%" = 0.461368597638526, "97.5%" = 0.539683256474915, + "99%" = 0.632562403391324), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0.018869505399304, "30%" = 0.0471517885822858, + "35%" = 0.0732707765908659, "40%" = 0.0969223475714758, "45%" = 0.118188509171441, + "50%" = 0.1393442, "55%" = 0.161036861715017, "60%" = 0.183255665579256, + "65%" = 0.207206810683007, "70%" = 0.23409988698267, "75%" = 0.265549713886389, + "80%" = 0.302197074524145, "85%" = 0.346715970732557, "90%" = 0.40460690801818, + "95%" = 0.498076490174802, "97.5%" = 0.580016068409433, "99%" = 0.680138975526255 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0.00232218982614828, "30%" = 0.0342017690820909, + "35%" = 0.062828756299263, "40%" = 0.0893725834453345, "45%" = 0.114623710996309, + "50%" = 0.1393442, "55%" = 0.163790622390774, "60%" = 0.189495107256772, + "65%" = 0.216754530328403, "70%" = 0.247065337260473, "75%" = 0.281410456107061, + "80%" = 0.32037037400004, "85%" = 0.367018829587046, "90%" = 0.431198706165962, + "95%" = 0.52829547296083, "97.5%" = 0.619021148955337, "99%" = 0.728730172315724 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.00233673672776743, "25%" = 0.0223488000000001, + "30%" = 0.040304673503435, "35%" = 0.0576262998104982, "40%" = 0.0732741199141993, + "45%" = 0.088455610793058, "50%" = 0.103199, "55%" = 0.118707592060121, + "60%" = 0.134185928864089, "65%" = 0.151183139276793, "70%" = 0.1702454, + "75%" = 0.191937, "80%" = 0.2182298, "85%" = 0.253577609846549, + "90%" = 0.307351538752588, "95%" = 0.407165223924639, "97.5%" = 0.502529513927214, + "99%" = 0.605582108686126), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0, "30%" = 0.0190621000375005, "35%" = 0.0420071558734088, + "40%" = 0.0629230825705257, "45%" = 0.0833688260410605, "50%" = 0.103199, + "55%" = 0.124118509153392, "60%" = 0.145401945823358, "65%" = 0.168667287877079, + "70%" = 0.1939090000375, "75%" = 0.222597428173282, "80%" = 0.256984900377504, + "85%" = 0.301709122144422, "90%" = 0.366495424858649, "95%" = 0.475152766217062, + "97.5%" = 0.572497835146252, "99%" = 0.693762274318904), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0, "30%" = 0, "35%" = 0.0269530072946728, + "40%" = 0.0530040092850928, "45%" = 0.0782481277003769, "50%" = 0.103199, + "55%" = 0.12816325599641, "60%" = 0.154866111682517, "65%" = 0.182302899107341, + "70%" = 0.213783044306043, "75%" = 0.248363904708547, "80%" = 0.28995690796288, + "85%" = 0.341627908394784, "90%" = 0.413707680386504, "95%" = 0.528381820556805, + "97.5%" = 0.635771182105746, "99%" = 0.77652465912812), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, "30%" = 0, + "35%" = 0.0133969262208122, "40%" = 0.0447913089328894, "45%" = 0.0739787251314013, + "50%" = 0.103199, "55%" = 0.132965213784838, "60%" = 0.163644939246192, + "65%" = 0.196475575572506, "70%" = 0.231647450729907, "75%" = 0.271208219491195, + "80%" = 0.317741925837459, "85%" = 0.376214875186902, "90%" = 0.454693715463155, + "95%" = 0.578781950822058, "97.5%" = 0.695278060333427, "99%" = 0.835521146843828 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, + "30%" = 0, "35%" = 0.000725156354313476, "40%" = 0.036290207696477, + "45%" = 0.0701157049196494, "50%" = 0.103199, "55%" = 0.136581757676227, + "60%" = 0.170980571439515, "65%" = 0.20778982998995, "70%" = 0.247087076718167, + "75%" = 0.291689672899979, "80%" = 0.343587258527985, "85%" = 0.406717577407724, + "90%" = 0.490437549306793, "95%" = 0.620305872542078, "97.5%" = 0.740730855925609, + "99%" = 0.888992767585756), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0701359181289814, + "15%" = 0.126021564763798, "20%" = 0.165542973066331, "25%" = 0.197412078824538, + "30%" = 0.2254231, "35%" = 0.24849244896414, "40%" = 0.271074448350284, + "45%" = 0.292116376731667, "50%" = 0.3121244, "55%" = 0.3321324, + "60%" = 0.3534741, "65%" = 0.375505591313813, "70%" = 0.4001594, + "75%" = 0.4268368, "80%" = 0.459466546351464, "85%" = 0.501142770839258, + "90%" = 0.562143084394445, "95%" = 0.686511993260583, "97.5%" = 0.808747521078011, + "99%" = 0.936070949770187), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.00157374045240457, + "15%" = 0.0698662194634446, "20%" = 0.120287640452405, "25%" = 0.16090076400914, + "30%" = 0.195966561494315, "35%" = 0.227802919628796, "40%" = 0.257250456567366, + "45%" = 0.284352940452404, "50%" = 0.3121244, "55%" = 0.338954445099751, + "60%" = 0.366682808562485, "65%" = 0.395431772465525, "70%" = 0.428410340452405, + "75%" = 0.464424683613586, "80%" = 0.505774640452405, "85%" = 0.559060310062401, + "90%" = 0.635868688255882, "95%" = 0.771213743700187, "97.5%" = 0.895124744284645, + "99%" = 1.02835689610128), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0203251909788099, + "20%" = 0.0807941084801849, "25%" = 0.131156594663197, "30%" = 0.173483742579226, + "35%" = 0.211670557196072, "40%" = 0.246244078609487, "45%" = 0.278363918673537, + "50%" = 0.3121244, "55%" = 0.345057130768308, "60%" = 0.378403757196072, + "65%" = 0.414130127568126, "70%" = 0.451969178608786, "75%" = 0.495598517595426, + "80%" = 0.545136665227352, "85%" = 0.60807806098831, "90%" = 0.695394235571256, + "95%" = 0.837130344811698, "97.5%" = 0.966111057134121, "99%" = 1.11185508502426 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0477276069251695, "25%" = 0.103509981435814, "30%" = 0.15221877094871, + "35%" = 0.195952578625286, "40%" = 0.236147272793828, "45%" = 0.274650521629366, + "50%" = 0.3121244, "55%" = 0.349346986282313, "60%" = 0.388561057230272, + "65%" = 0.429378978625286, "70%" = 0.474721256740267, "75%" = 0.523806740641156, + "80%" = 0.581962784214742, "85%" = 0.652062951302463, "90%" = 0.746838578625286, + "95%" = 0.896492945755508, "97.5%" = 1.0340527654686, "99%" = 1.19219029825678 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0166039560593608, "25%" = 0.0776387168354182, "30%" = 0.132003170161801, + "35%" = 0.180530886857168, "40%" = 0.22594722201882, "45%" = 0.268822337600976, + "50%" = 0.3121244, "55%" = 0.354489864523245, "60%" = 0.398378553881739, + "65%" = 0.444274543339083, "70%" = 0.494499388431484, "75%" = 0.548837448212482, + "80%" = 0.612239188685087, "85%" = 0.690272902609576, "90%" = 0.790473599123991, + "95%" = 0.950950996975469, "97.5%" = 1.09638828065763, "99%" = 1.26930966690442 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.214450885057551, + "15%" = 0.288864871241312, "20%" = 0.3250653, "25%" = 0.3516615, + "30%" = 0.3716087, "35%" = 0.386718885323753, "40%" = 0.399682691320713, + "45%" = 0.411042976158862, "50%" = 0.4218461, "55%" = 0.4329278, + "60%" = 0.444139278140181, "65%" = 0.456951313505885, "70%" = 0.4720835, + "75%" = 0.4920307, "80%" = 0.518626803531635, "85%" = 0.555566110165902, + "90%" = 0.636745822624727, "95%" = 1.18069710590251, "97.5%" = 1.79487371178211, + "99%" = 2.55270530204625), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0412188277837779, + "15%" = 0.218851219710947, "20%" = 0.281178109847399, "25%" = 0.318187061211362, + "30%" = 0.346336916208562, "35%" = 0.368500427783778, "40%" = 0.387753955899259, + "45%" = 0.405439627783778, "50%" = 0.4218461, "55%" = 0.438238911502765, + "60%" = 0.455473161565916, "65%" = 0.474946888792488, "70%" = 0.497793222697627, + "75%" = 0.526600327783778, "80%" = 0.565677321171112, "85%" = 0.632773149305243, + "90%" = 0.891087255237454, "95%" = 1.53723873883164, "97.5%" = 2.07877430490449, + "99%" = 2.80265665435411), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.11916637099981, + "20%" = 0.229217761668717, "25%" = 0.283591182792578, "30%" = 0.32089403701397, + "35%" = 0.351025234947199, "40%" = 0.376764238355684, "45%" = 0.399580647158371, + "50%" = 0.4218461, "55%" = 0.44387311299288, "60%" = 0.466809871716417, + "65%" = 0.493008689720547, "70%" = 0.523409488360383, "75%" = 0.563157298622986, + "80%" = 0.621505313473235, "85%" = 0.756485815282202, "90%" = 1.12190615310943, + "95%" = 1.76010655352564, "97.5%" = 2.36678033794496, "99%" = 2.94420631979259 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0166944520132201, + "20%" = 0.165418069472795, "25%" = 0.245206977511275, "30%" = 0.294705591133411, + "35%" = 0.333122440419504, "40%" = 0.365628706470365, "45%" = 0.393898304736197, + "50%" = 0.4218461, "55%" = 0.449111464628896, "60%" = 0.478419567119571, + "65%" = 0.511583967360174, "70%" = 0.551380591704217, "75%" = 0.602914542469175, + "80%" = 0.695207681738717, "85%" = 0.912006796599716, "90%" = 1.31516316514125, + "95%" = 1.94296465866439, "97.5%" = 2.56528565211139, "99%" = 3.07364144272118 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.095868346511765, "25%" = 0.20216012803078, "30%" = 0.267545492825128, + "35%" = 0.314290150935209, "40%" = 0.353895445422154, "45%" = 0.388115128404834, + "50%" = 0.4218461, "55%" = 0.455823761272913, "60%" = 0.49135719600286, + "65%" = 0.53249009905049, "70%" = 0.582341165610556, "75%" = 0.654473427614026, + "80%" = 0.784511194125441, "85%" = 1.05644872659752, "90%" = 1.47044175860169, + "95%" = 2.09183984013705, "97.5%" = 2.69484857437112, "99%" = 3.1694157654766 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.189889609612846, "2.5%" = 0.28831400446517, + "5%" = 0.378590156778518, "10%" = 0.474951757151471, "15%" = 0.546550271666467, + "20%" = 0.599713541496415, "25%" = 0.636994072140471, "30%" = 0.663814888730087, + "35%" = 0.6839305, "40%" = 0.701811, "45%" = 0.71711131701917, + "50%" = 0.7319844, "55%" = 0.746512343291783, "60%" = 0.7621579, + "65%" = 0.7800383, "70%" = 0.800154, "75%" = 0.826974702066021, + "80%" = 0.86472325100111, "85%" = 0.918612458720487, "90%" = 0.988605006042461, + "95%" = 1.08324298909714, "97.5%" = 1.1736324426019, "99%" = 1.27400190201593 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.0970521814156041, "2.5%" = 0.21019273451422, + "5%" = 0.3073217, "10%" = 0.418096666577866, "15%" = 0.489016664299943, + "20%" = 0.547102113575136, "25%" = 0.594490775323003, "30%" = 0.63162246104581, + "35%" = 0.661579866583116, "40%" = 0.687283, "45%" = 0.709633785855109, + "50%" = 0.7319844, "55%" = 0.754030577281223, "60%" = 0.776967707389074, + "65%" = 0.802389, "70%" = 0.832791429272493, "75%" = 0.870576437517875, + "80%" = 0.917019363782438, "85%" = 0.973069487834329, "90%" = 1.04481411391714, + "95%" = 1.15502640396814, "97.5%" = 1.25613855529213, "99%" = 1.37419193312441 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.0121672025865257, "2.5%" = 0.139873460696682, + "5%" = 0.245836896475015, "10%" = 0.366700877088971, "15%" = 0.445024777793378, + "20%" = 0.506295707796278, "25%" = 0.557812941319663, "30%" = 0.601634091201612, + "35%" = 0.639324955546405, "40%" = 0.673001603565436, "45%" = 0.702827370737707, + "50%" = 0.7319844, "55%" = 0.760387153293983, "60%" = 0.790515252114921, + "65%" = 0.823330663438584, "70%" = 0.86065768198682, "75%" = 0.904468070814958, + "80%" = 0.954989716167962, "85%" = 1.01626566701207, "90%" = 1.09352836237872, + "95%" = 1.21548452077266, "97.5%" = 1.32239947141536, "99%" = 1.46006378366371 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0.0755189873928237, "5%" = 0.192404624794198, + "10%" = 0.322282766861868, "15%" = 0.409749729479745, "20%" = 0.475729034228042, + "25%" = 0.531171513462134, "30%" = 0.579442333436034, "35%" = 0.623023292701627, + "40%" = 0.662178609529395, "45%" = 0.697968947885378, "50%" = 0.7319844, + "55%" = 0.766345465406154, "60%" = 0.80256496503135, "65%" = 0.841452466611966, + "70%" = 0.884524366576965, "75%" = 0.93218174000415, "80%" = 0.988252217755677, + "85%" = 1.05297410373014, "90%" = 1.13838991320473, "95%" = 1.27210128334768, + "97.5%" = 1.38822119412612, "99%" = 1.53603026586717), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0.0137515321313713, + "5%" = 0.140785106599616, "10%" = 0.283710273212032, "15%" = 0.374321519596796, + "20%" = 0.446394180252102, "25%" = 0.505830587319873, "30%" = 0.559570052916329, + "35%" = 0.606684360953109, "40%" = 0.65111343293503, "45%" = 0.692845474832798, + "50%" = 0.7319844, "55%" = 0.771333743893139, "60%" = 0.812267094081241, + "65%" = 0.855930534362644, "70%" = 0.903545840608706, "75%" = 0.955193592261423, + "80%" = 1.01560313647486, "85%" = 1.08583632750787, "90%" = 1.17818451335943, + "95%" = 1.31856131315813, "97.5%" = 1.44615719776698, "99%" = 1.60468791291453 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0.0124103998425985, "15%" = 0.0518320161167612, + "20%" = 0.0822283734557346, "25%" = 0.106956582246572, "30%" = 0.130236689538895, + "35%" = 0.150852198845738, "40%" = 0.168835673455735, "45%" = 0.183678547429124, + "50%" = 0.1975426, "55%" = 0.211166273455735, "60%" = 0.226249473455735, + "65%" = 0.243919155834858, "70%" = 0.265304527061771, "75%" = 0.289781663064881, + "80%" = 0.315985067670677, "85%" = 0.347644682675627, "90%" = 0.394981842425824, + "95%" = 0.491215248628636, "97.5%" = 0.584975102439074, "99%" = 0.694697494489265 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0106056685868359, + "20%" = 0.0491424720812208, "25%" = 0.0803975947094471, "30%" = 0.108060576398464, + "35%" = 0.133638500841809, "40%" = 0.155968088623186, "45%" = 0.177107275224252, + "50%" = 0.1975426, "55%" = 0.218180906543366, "60%" = 0.239601831646016, + "65%" = 0.262811949904799, "70%" = 0.28886838404664, "75%" = 0.317235975224252, + "80%" = 0.350545157867879, "85%" = 0.393998327257523, "90%" = 0.454550976564066, + "95%" = 0.558555075803007, "97.5%" = 0.656859449317743, "99%" = 0.763718974419534 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0185370189554894, + "25%" = 0.0562218087603375, "30%" = 0.0890356919950198, "35%" = 0.118731362266373, + "40%" = 0.146216910144001, "45%" = 0.172533896645116, "50%" = 0.1975426, + "55%" = 0.223021121504065, "60%" = 0.249412654553045, "65%" = 0.277680444480195, + "70%" = 0.308522683806638, "75%" = 0.342270845449704, "80%" = 0.382702709814398, + "85%" = 0.433443929063141, "90%" = 0.501610622734127, "95%" = 0.614175801063261, + "97.5%" = 0.715138862353848, "99%" = 0.833535553075286), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0.0346528073343234, + "30%" = 0.0723584880324803, "35%" = 0.106222897173122, "40%" = 0.138467941096611, + "45%" = 0.167844669490445, "50%" = 0.1975426, "55%" = 0.227591504589096, + "60%" = 0.258479799230192, "65%" = 0.290862843650987, "70%" = 0.325718759418194, + "75%" = 0.364163081687565, "80%" = 0.409581315443156, "85%" = 0.46531554698862, + "90%" = 0.54043504498905, "95%" = 0.659111642885379, "97.5%" = 0.761453612496025, + "99%" = 0.889794566241181), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0.0134397969692197, "30%" = 0.0557212574100741, + "35%" = 0.0941597345954959, "40%" = 0.130401776157262, "45%" = 0.164200585080601, + "50%" = 0.1975426, "55%" = 0.231566981332063, "60%" = 0.265597088493385, + "65%" = 0.30192115798073, "70%" = 0.341652226704467, "75%" = 0.384249568152932, + "80%" = 0.43541812199952, "85%" = 0.495340659591346, "90%" = 0.575765691755518, + "95%" = 0.703032070294999, "97.5%" = 0.815605113815338, "99%" = 0.955488202108743 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", + "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(19006, 19013, + 19020, 19027, 19034, 19006, 19013, 19020, 19027, 19034, 19006, + 19013, 19020, 19027, 19034, 19006, 19013, 19020, 19027, 19034, + 19006, 19013, 19020, 19027, 19034, 19006, 19013, 19020, 19027, + 19034), class = "Date")), row.names = c(NA, -30L), class = c("tbl_df", + "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "ca", "ca", "ca", "ca", "fl", + "fl", "fl", "fl", "fl", "ga", "ga", "ga", "ga", "ga", "ny", "ny", + "ny", "ny", "ny", "pa", "pa", "pa", "pa", "pa", "tx", "tx", "tx", + "tx", "tx"), .pred = c(0.1393442, 0.1393442, 0.1393442, 0.1393442, + 0.1393442, 0.103199, 0.103199, 0.103199, 0.103199, 0.103199, + 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.3121244, 0.4218461, + 0.4218461, 0.4218461, 0.4218461, 0.4218461, 0.7319844, 0.7319844, + 0.7319844, 0.7319844, 0.7319844, 0.1975426, 0.1975426, 0.1975426, + 0.1975426, 0.1975426), ahead = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, + 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, + 4L, 5L, 1L, 2L, 3L, 4L, 5L), .pred_distn = structure(list(structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.00812835000000001, + "10%" = 0.07297428, "15%" = 0.0936219, "20%" = 0.10421786, + "25%" = 0.1121285, "30%" = 0.1201118, "35%" = 0.1273693, + "40%" = 0.1317238, "45%" = 0.1360783, "50%" = 0.1393442, + "55%" = 0.1426101, "60%" = 0.1469646, "65%" = 0.1513191, + "70%" = 0.1585766, "75%" = 0.1665599, "80%" = 0.17447054, + "85%" = 0.1850665, "90%" = 0.20571412, "95%" = 0.27056005, + "97.5%" = 0.313941744999999, "99%" = 0.384931126999997), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0250982954899548, + "15%" = 0.0576421230361804, "20%" = 0.0776985410529105, "25%" = 0.0929731777892779, + "30%" = 0.104205115094451, "35%" = 0.114209292598776, "40%" = 0.123365027741977, + "45%" = 0.131496226094211, "50%" = 0.1393442, "55%" = 0.147007648291083, + "60%" = 0.154990950042, "65%" = 0.16406284204392, "70%" = 0.173835548288583, + "75%" = 0.185472494222942, "80%" = 0.200167568392984, "85%" = 0.221760005190952, + "90%" = 0.260313716029161, "95%" = 0.318794320716957, "97.5%" = 0.376941794597195, + "99%" = 0.461705276864399), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.028693230499105, + "20%" = 0.055453963203632, "25%" = 0.0755679534410344, "30%" = 0.0913921813275133, + "35%" = 0.104804902302573, "40%" = 0.117142722458225, "45%" = 0.128444430213702, + "50%" = 0.1393442, "55%" = 0.150479535783308, "60%" = 0.161776522458225, + "65%" = 0.173925041831968, "70%" = 0.187540579925299, "75%" = 0.204200618941439, + "80%" = 0.225353161205212, "85%" = 0.253695961466565, "90%" = 0.294498109305393, + "95%" = 0.358245879234942, "97.5%" = 0.427563795224327, "99%" = 0.501665748776186 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.00587171510650109, + "20%" = 0.0364866623781238, "25%" = 0.0602683002957529, "30%" = 0.0794861096145961, + "35%" = 0.0963414561651617, "40%" = 0.111439230212802, "45%" = 0.125394639614746, + "50%" = 0.1393442, "55%" = 0.153216527502025, "60%" = 0.167801944181742, + "65%" = 0.183359587288923, "70%" = 0.200880434888349, "75%" = 0.221656465706657, + "80%" = 0.24743726609676, "85%" = 0.279449270180852, "90%" = 0.322415149384594, + "95%" = 0.395367499639696, "97.5%" = 0.464904880713406, "99%" = 0.539558052669137 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.019055042091221, "25%" = 0.0457625510440105, "30%" = 0.068309473710537, + "35%" = 0.087945102194822, "40%" = 0.106033592330923, "45%" = 0.123045226382564, + "50%" = 0.1393442, "55%" = 0.155351600131351, "60%" = 0.172491058371384, + "65%" = 0.19101350900654, "70%" = 0.211425349928599, "75%" = 0.234936300692507, + "80%" = 0.264303292652126, "85%" = 0.299599722715327, "90%" = 0.346282638921389, + "95%" = 0.423857010226352, "97.5%" = 0.494689091614341, "99%" = 0.577833814673327 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.00138033000000002, + "15%" = 0.030893965, "20%" = 0.0479842, "25%" = 0.059815975, + "30%" = 0.07118759, "35%" = 0.0815075, "40%" = 0.0926819, + "45%" = 0.0992551, "50%" = 0.103199, "55%" = 0.1071429, "60%" = 0.1137161, + "65%" = 0.1248905, "70%" = 0.13521041, "75%" = 0.146582025, + "80%" = 0.1584138, "85%" = 0.175504035, "90%" = 0.20501767, + "95%" = 0.25694586, "97.5%" = 0.335051815, "99%" = 0.436709474 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0.0179658025100251, "25%" = 0.0356060154111541, "30%" = 0.050834301692017, + "35%" = 0.0650050989327893, "40%" = 0.0784417069434695, "45%" = 0.0916422518458685, + "50%" = 0.103199, "55%" = 0.115251501692017, "60%" = 0.128398001692017, + "65%" = 0.142201701692017, "70%" = 0.157319973859039, "75%" = 0.174980914065641, + "80%" = 0.196101805086251, "85%" = 0.223989860848608, "90%" = 0.266334685464555, + "95%" = 0.354050965519204, "97.5%" = 0.437948459272293, "99%" = 0.520203978940639 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0.0134241653129031, "30%" = 0.0338447112456125, + "35%" = 0.052643303388484, "40%" = 0.0699345638167383, "45%" = 0.0866373614747148, + "50%" = 0.103199, "55%" = 0.119627111136411, "60%" = 0.137401026927169, + "65%" = 0.156056395793358, "70%" = 0.175781901322513, "75%" = 0.198564535163602, + "80%" = 0.226934571881819, "85%" = 0.263862501322513, "90%" = 0.317121769745397, + "95%" = 0.412419996940619, "97.5%" = 0.491470213131306, "99%" = 0.580892509639735 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0, "30%" = 0.0170903, "35%" = 0.0403385023363734, + "40%" = 0.0616387632732329, "45%" = 0.0827585779094291, "50%" = 0.103199, + "55%" = 0.123094939420544, "60%" = 0.14464638301663, "65%" = 0.1669589, + "70%" = 0.191770645535455, "75%" = 0.220735117412174, "80%" = 0.254231042750228, + "85%" = 0.296807527848978, "90%" = 0.357153759489695, "95%" = 0.45347931404539, + "97.5%" = 0.538725322834228, "99%" = 0.636530647411066), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, + "20%" = 0, "25%" = 0, "30%" = 0.0026415954262542, "35%" = 0.0297423239924899, + "40%" = 0.0555402340406406, "45%" = 0.0792255827466275, "50%" = 0.103199, + "55%" = 0.127366925585556, "60%" = 0.151700351432014, "65%" = 0.177708522618176, + "70%" = 0.206088123699737, "75%" = 0.238712707453825, "80%" = 0.277708313715037, + "85%" = 0.325132239647296, "90%" = 0.390468252727729, "95%" = 0.490417296529864, + "97.5%" = 0.578557086846368, "99%" = 0.688679948593326), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0.0320461375000001, "5%" = 0.129384955, + "10%" = 0.18940881, "15%" = 0.2200878, "20%" = 0.2427634, + "25%" = 0.2587698, "30%" = 0.2734423, "35%" = 0.2841133, + "40%" = 0.296118, "45%" = 0.3041212, "50%" = 0.3121244, "55%" = 0.3201276, + "60%" = 0.3281308, "65%" = 0.3401355, "70%" = 0.3508065, + "75%" = 0.365479, "80%" = 0.3814854, "85%" = 0.404161, "90%" = 0.43483999, + "95%" = 0.494863845, "97.5%" = 0.592202662499998, "99%" = 0.737413847999994 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0319186440152902, + "10%" = 0.118606588418984, "15%" = 0.166386434627046, "20%" = 0.198884154069741, + "25%" = 0.224089313858389, "30%" = 0.245418255377554, "35%" = 0.2641052, + "40%" = 0.281445422925429, "45%" = 0.297451875378704, "50%" = 0.3121244, + "55%" = 0.327667648091081, "60%" = 0.343487967727477, "65%" = 0.360314881408664, + "70%" = 0.379575527422374, "75%" = 0.400991145952209, "80%" = 0.426605204088841, + "85%" = 0.4588495, "90%" = 0.506128350755908, "95%" = 0.604640728888889, + "97.5%" = 0.713520019350718, "99%" = 0.848429920658984), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0628145244703447, + "15%" = 0.119951261697167, "20%" = 0.161800708429584, "25%" = 0.194481529786298, + "30%" = 0.221976473503235, "35%" = 0.246382528361484, "40%" = 0.268661795456855, + "45%" = 0.29099237601426, "50%" = 0.3121244, "55%" = 0.332687273503235, + "60%" = 0.354487379145491, "65%" = 0.376704773503235, "70%" = 0.401222379758598, + "75%" = 0.428725473503235, "80%" = 0.462071908680987, "85%" = 0.503745448659536, + "90%" = 0.564825512591627, "95%" = 0.677307126205362, "97.5%" = 0.788889302835928, + "99%" = 0.92389000979736), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0154147362739629, + "15%" = 0.0815589624901754, "20%" = 0.130419447103471, "25%" = 0.16933591200637, + "30%" = 0.202296191455315, "35%" = 0.23230661698317, "40%" = 0.260103744489245, + "45%" = 0.28583424396924, "50%" = 0.3121244, "55%" = 0.337226511153312, + "60%" = 0.3628113, "65%" = 0.3894886, "70%" = 0.419049975899859, + "75%" = 0.453339140405904, "80%" = 0.492830630339104, "85%" = 0.542883079890499, + "90%" = 0.613577832767128, "95%" = 0.73571689900399, "97.5%" = 0.853844909059791, + "99%" = 0.988010467319443), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0493531737111374, + "20%" = 0.104172112803728, "25%" = 0.147940700281253, "30%" = 0.185518687303273, + "35%" = 0.220197034594646, "40%" = 0.2521005, "45%" = 0.282477641919719, + "50%" = 0.3121244, "55%" = 0.3414694, "60%" = 0.371435390499905, + "65%" = 0.402230766363414, "70%" = 0.436173824348844, "75%" = 0.474579164424894, + "80%" = 0.519690345185252, "85%" = 0.576673752066771, "90%" = 0.655151246845668, + "95%" = 0.78520792902029, "97.5%" = 0.90968118047453, "99%" = 1.05112182091783 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.28439515, "10%" = 0.33688581, + "15%" = 0.369872555, "20%" = 0.3863845, "25%" = 0.3945111, + "30%" = 0.40189893, "35%" = 0.4078092, "40%" = 0.4137194, + "45%" = 0.4174134, "50%" = 0.4218461, "55%" = 0.4262788, + "60%" = 0.4299728, "65%" = 0.435883, "70%" = 0.44179327, + "75%" = 0.4491811, "80%" = 0.4573077, "85%" = 0.473819645, + "90%" = 0.50680639, "95%" = 0.55929705, "97.5%" = 0.9841905175, + "99%" = 1.556671116), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.003694, "10%" = 0.268840486221162, + "15%" = 0.320208490155752, "20%" = 0.34804029700677, "25%" = 0.368653615349654, + "30%" = 0.3834292, "35%" = 0.3945111, "40%" = 0.4041153, + "45%" = 0.413171785132151, "50%" = 0.4218461, "55%" = 0.430424661802068, + "60%" = 0.4395769, "65%" = 0.4491812, "70%" = 0.4610017, + "75%" = 0.47590450199302, "80%" = 0.497193409669697, "85%" = 0.525275921931869, + "90%" = 0.57616046396334, "95%" = 0.97179808113241, "97.5%" = 1.42880557869041, + "99%" = 2.00265362857685), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0925362072632727, + "15%" = 0.270427502912579, "20%" = 0.315212102423624, "25%" = 0.343335698090731, + "30%" = 0.364285966419164, "35%" = 0.381412585636556, "40%" = 0.3959887, + "45%" = 0.4092868, "50%" = 0.4218461, "55%" = 0.4344055, + "60%" = 0.447738051828318, "65%" = 0.4632179, "70%" = 0.480948870517105, + "75%" = 0.502553166907419, "80%" = 0.531676966454865, "85%" = 0.576804782629326, + "90%" = 0.776643061384413, "95%" = 1.21840177544959, "97.5%" = 1.666716830807, + "99%" = 2.19163048441111), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.186887482630176, + "20%" = 0.277238777881179, "25%" = 0.317854348809488, "30%" = 0.345779327332173, + "35%" = 0.367941987952029, "40%" = 0.38755201396574, "45%" = 0.405055828677287, + "50%" = 0.4218461, "55%" = 0.438666668060931, "60%" = 0.456611962704227, + "65%" = 0.476718028677287, "70%" = 0.499751625882259, "75%" = 0.528508989683397, + "80%" = 0.569810205861059, "85%" = 0.666081219804098, "90%" = 0.934028445917159, + "95%" = 1.42658287124316, "97.5%" = 1.85311957889209, "99%" = 2.30760254154095 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0845659921302213, + "20%" = 0.228553649752897, "25%" = 0.289236861333113, "30%" = 0.326073140839108, + "35%" = 0.354785333802038, "40%" = 0.379166830409904, "45%" = 0.401230227456875, + "50%" = 0.4218461, "55%" = 0.442801275729157, "60%" = 0.465572618600986, + "65%" = 0.490133389090691, "70%" = 0.520052318734487, "75%" = 0.558588500497255, + "80%" = 0.62065225601836, "85%" = 0.788392143304334, "90%" = 1.05428294678997, + "95%" = 1.55684044507063, "97.5%" = 2.01374350966068, "99%" = 2.37954449328776 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.33818795, "2.5%" = 0.4386877525, "5%" = 0.528816855, + "10%" = 0.61252005, "15%" = 0.6626973, "20%" = 0.6816954, + "25%" = 0.697340875, "30%" = 0.7085162, "35%" = 0.7152214, + "40%" = 0.7208091, "45%" = 0.72745833, "50%" = 0.7319844, + "55%" = 0.73651047, "60%" = 0.7431597, "65%" = 0.7487474, + "70%" = 0.7554526, "75%" = 0.766627925, "80%" = 0.7822734, + "85%" = 0.8012715, "90%" = 0.85144875, "95%" = 0.935151945, + "97.5%" = 1.0252810475, "99%" = 1.12578085), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0.276821846502455, + "2.5%" = 0.354318476867519, "5%" = 0.440270225449805, "10%" = 0.533132934163242, + "15%" = 0.5900576, "20%" = 0.631102729748298, "25%" = 0.660462274661497, + "30%" = 0.680831108876989, "35%" = 0.696223359635746, "40%" = 0.7096337, + "45%" = 0.7219265, "50%" = 0.7319844, "55%" = 0.7431597, "60%" = 0.7543351, + "65%" = 0.7677455, "70%" = 0.783391, "75%" = 0.804046832839828, + "80%" = 0.833541896886769, "85%" = 0.873735298798638, "90%" = 0.929106903073231, + "95%" = 1.02188617627186, "97.5%" = 1.10971107833641, "99%" = 1.18626816850867 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0.202265200637946, + "2.5%" = 0.298325094034965, "5%" = 0.380907645938709, "10%" = 0.481339524857949, + "15%" = 0.543219696138311, "20%" = 0.589507953775938, "25%" = 0.6258186, + "30%" = 0.654874580912809, "35%" = 0.6783427, "40%" = 0.6984583, + "45%" = 0.715655544727447, "50%" = 0.7319844, "55%" = 0.7487473, + "60%" = 0.7666278, "65%" = 0.785715489951649, "70%" = 0.8090941, + "75%" = 0.83815, "80%" = 0.873623567291473, "85%" = 0.920206978680437, + "90%" = 0.98231174201862, "95%" = 1.08425930872329, "97.5%" = 1.16639411427812, + "99%" = 1.25926838507547), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.129193504425124, "2.5%" = 0.241744300793533, + "5%" = 0.331949483165032, "10%" = 0.43649858695157, "15%" = 0.504472062268773, + "20%" = 0.556141464729147, "25%" = 0.597172505336053, "30%" = 0.631406591640416, + "35%" = 0.660898437441874, "40%" = 0.686684727470375, "45%" = 0.709633972330423, + "50%" = 0.7319844, "55%" = 0.753217699696647, "60%" = 0.77608746100351, + "65%" = 0.8012715950276, "70%" = 0.830327492252422, "75%" = 0.86464477397774, + "80%" = 0.906319686121761, "85%" = 0.956815387818928, "90%" = 1.02495125855129, + "95%" = 1.13129413647201, "97.5%" = 1.21644533535035, "99%" = 1.32424172966634 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0.0667682979050189, "2.5%" = 0.189580042212397, + "5%" = 0.290485041721667, "10%" = 0.402951609190092, "15%" = 0.475328740486855, + "20%" = 0.530590906520765, "25%" = 0.575504908587586, "30%" = 0.613421932920829, + "35%" = 0.647285177364573, "40%" = 0.678099283398734, "45%" = 0.70593862799773, + "50%" = 0.7319844, "55%" = 0.758701322488325, "60%" = 0.786639532920829, + "65%" = 0.816837200234752, "70%" = 0.850627936753767, "75%" = 0.888963924063491, + "80%" = 0.933785069065791, "85%" = 0.988913131611816, "90%" = 1.06240172852619, + "95%" = 1.16959624730917, "97.5%" = 1.2662008825538, "99%" = 1.38860505690239 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, + 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0419413650000001, + "10%" = 0.09882005, "15%" = 0.1230992, "20%" = 0.14226962, + "25%" = 0.1600776, "30%" = 0.1722416, "35%" = 0.1800265, + "40%" = 0.1880061, "45%" = 0.1936501, "50%" = 0.1975426, + "55%" = 0.2014351, "60%" = 0.2070791, "65%" = 0.2150587, + "70%" = 0.2228436, "75%" = 0.2350076, "80%" = 0.25281558, + "85%" = 0.271986, "90%" = 0.29626515, "95%" = 0.353143835, + "97.5%" = 0.4353357125, "99%" = 0.545314878), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, + "5%" = 0, "10%" = 0.0438463650372504, "15%" = 0.0808594787511875, + "20%" = 0.106995615813358, "25%" = 0.127478232938079, "30%" = 0.145480846633466, + "35%" = 0.1610508, "40%" = 0.17461199504795, "45%" = 0.186668812203222, + "50%" = 0.1975426, "55%" = 0.208428571374764, "60%" = 0.2204108, + "65%" = 0.233930283744537, "70%" = 0.249894552784127, "75%" = 0.267362348440485, + "80%" = 0.288755575723157, "85%" = 0.316120297580926, "90%" = 0.355450425419354, + "95%" = 0.443192503687136, "97.5%" = 0.536871211931719, "99%" = 0.636344785545224 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0.00188932708477086, "15%" = 0.0470905919531195, + "20%" = 0.079226864399944, "25%" = 0.105414109111591, "30%" = 0.127225815559956, + "35%" = 0.146699420891509, "40%" = 0.164644114298843, "45%" = 0.18142942603581, + "50%" = 0.1975426, "55%" = 0.213933119201142, "60%" = 0.231001630488804, + "65%" = 0.24941229702312, "70%" = 0.269578845560456, "75%" = 0.292362546530965, + "80%" = 0.319632071367214, "85%" = 0.354433951358713, "90%" = 0.406915236639266, + "95%" = 0.506944745332152, "97.5%" = 0.596044605353528, "99%" = 0.695533388807317 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0156342454546545, + "20%" = 0.0536811248488485, "25%" = 0.084228833507335, "30%" = 0.110407751354614, + "35%" = 0.134410113872139, "40%" = 0.156669167575476, "45%" = 0.177701902429674, + "50%" = 0.1975426, "55%" = 0.217759024165492, "60%" = 0.238897316673167, + "65%" = 0.261484572608426, "70%" = 0.286120039498095, "75%" = 0.313065324705997, + "80%" = 0.345395334882349, "85%" = 0.386811116673167, "90%" = 0.44780805303823, + "95%" = 0.550781846423163, "97.5%" = 0.644984940689833, "99%" = 0.752937731654986 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, + "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0290260214229144, + "25%" = 0.0653218111708617, "30%" = 0.0966336637233373, "35%" = 0.124670861123061, + "40%" = 0.149775978614687, "45%" = 0.174275935467055, "50%" = 0.1975426, + "55%" = 0.221291415429954, "60%" = 0.246723385601356, "65%" = 0.273144383515685, + "70%" = 0.30101566402084, "75%" = 0.33204051788793, "80%" = 0.369730347126771, + "85%" = 0.416909038104281, "90%" = 0.481925596660567, "95%" = 0.58989871202142, + "97.5%" = 0.688635568252056, "99%" = 0.803906183401304), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" + )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992), class = "Date"), + target_date = structure(c(18997, 19002, 19007, 19012, 19017, + 18997, 19002, 19007, 19012, 19017, 18997, 19002, 19007, 19012, + 19017, 18997, 19002, 19007, 19012, 19017, 18997, 19002, 19007, + 19012, 19017, 18997, 19002, 19007, 19012, 19017), class = "Date")), row.names = c(NA, + -30L), class = c("tbl_df", "tbl", "data.frame")) + +# arx_forecaster snapshots + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.353013358779434, 0.648525432444876, 0.667670289394328, + 1.1418673907239, 0.830448695683588, 0.329799431948648), .pred_distn = structure(list( + structure(list(values = c("5%" = 0.171022956902287, "95%" = 0.535003760656581 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.466535030567729, "95%" = 0.830515834322023 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.485679887517181, "95%" = 0.849660691271475 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.959876988846752, "95%" = 1.32385779260105 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.648458293806441, "95%" = 1.01243909756074 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.147809030071501, "95%" = 0.511789833825795 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", + "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, + 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18999, + 18999, 18999, 18999, 18999, 18999), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +--- + + structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" + ), .pred = c(0.149303403634372, 0.139764664505947, 0.333186321066645, + 0.470345577837144, 0.725986105412009, 0.212686665274006), .pred_distn = structure(list( + structure(list(values = c("5%" = 0.0961118191398626, "95%" = 0.202494988128881 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.0865730800114376, "95%" = 0.192956249000456 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.279994736572135, "95%" = 0.386377905561154 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.417153993342635, "95%" = 0.523537162331653 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.672794520917499, "95%" = 0.779177689906518 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c("5%" = 0.159495080779497, "95%" = 0.265878249768516 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", + "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, + 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18993, + 18993, 18993, 18993, 18993, 18993), class = "Date")), row.names = c(NA, + -6L), class = c("tbl_df", "tbl", "data.frame")) + +# arx_classifier snapshots + + structure(list(geo_value = c("ak", "al", "ar", "az", "ca", "co", + "ct", "dc", "de", "fl", "ga", "gu", "hi", "ia", "id", "il", "in", + "ks", "ky", "la", "ma", "me", "mi", "mn", "mo", "mp", "ms", "mt", + "nc", "nd", "ne", "nh", "nj", "nm", "nv", "ny", "oh", "ok", "or", + "pa", "pr", "ri", "sc", "sd", "tn", "tx", "ut", "va", "vt", "wa", + "wi", "wv", "wy"), .pred_class = structure(c(1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L), levels = c("(-Inf,0.25]", "(0.25, Inf]"), class = "factor"), + forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992, 18992, 18992), class = "Date"), target_date = structure(c(18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, 18999, + 18999, 18999, 18999, 18999, 18999, 18999, 18999), class = "Date")), row.names = c(NA, + -53L), class = c("tbl_df", "tbl", "data.frame")) + diff --git a/tests/testthat/test-snapshots.R b/tests/testthat/test-snapshots.R new file mode 100644 index 000000000..d624a4c21 --- /dev/null +++ b/tests/testthat/test-snapshots.R @@ -0,0 +1,81 @@ +train_data <- jhu_csse_daily_subset +expect_snapshot_tibble <- function(x) { + expect_snapshot_value(x, style = "deparse", cran = FALSE) +} + +test_that("flatline_forecaster snapshots", { + # Let's make a few forecasts using different settings and snapshot them + flat1 <- flatline_forecaster(train_data, "death_rate_7d_av") + expect_snapshot_tibble(flat1$predictions) + + flat2 <- flatline_forecaster( + train_data, "death_rate_7d_av", + args_list = flatline_args_list(ahead = 1L) + ) + expect_snapshot_tibble(flat2$predictions) + + flat3 <- flatline_forecaster( + train_data, "death_rate_7d_av", + args_list = flatline_args_list( + forecast_date = as.Date("2021-12-31") + ) + ) + expect_snapshot_tibble(flat3$predictions) + + flat4 <- flatline_forecaster( + train_data, "death_rate_7d_av", + args_list = flatline_args_list( + target_date = as.Date("2022-01-01"), + ) + ) + expect_snapshot_tibble(flat4$predictions) +}) + +test_that("cdc_baseline_forecaster snapshots", { + set.seed(1234) + cdc1 <- cdc_baseline_forecaster(train_data, "death_rate_7d_av") + expect_snapshot_tibble(cdc1$predictions) + + cdc2 <- cdc_baseline_forecaster( + train_data, "death_rate_7d_av", + args_list = cdc_baseline_args_list(aheads = 2:6) + ) + expect_snapshot_tibble(cdc2$predictions) + + cdc3 <- cdc_baseline_forecaster( + train_data, "death_rate_7d_av", + args_list = cdc_baseline_args_list( + data_frequency = "5 days", + ) + ) + expect_snapshot_tibble(cdc3$predictions) +}) + +test_that("arx_forecaster snapshots", { + arx1 <- arx_forecaster( + train_data, + "death_rate_7d_av", + c("death_rate_7d_av", "case_rate_7d_av") + ) + expect_snapshot_tibble(arx1$predictions) + + arx2 <- arx_forecaster( + train_data, + "death_rate_7d_av", + c("death_rate_7d_av", "case_rate_7d_av"), + args_list = arx_args_list( + ahead = 1L + ) + ) + expect_snapshot_tibble(arx2$predictions) +}) + +test_that("arx_classifier snapshots", { + arc1 <- arx_classifier( + case_death_rate_subset %>% + dplyr::filter(time_value >= as.Date("2021-11-01")), + "death_rate", + c("case_rate", "death_rate") + ) + expect_snapshot_tibble(arc1$predictions) +}) From 4c2a84f6eb0c0ae8e5a30900e5166b4c7540afaf Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 17:12:36 -0700 Subject: [PATCH 123/382] style: styler --- R/layer_residual_quantiles.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index 56ebd2fb6..e95c43462 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -128,7 +128,7 @@ slather.layer_residual_quantiles <- cli::cli_abort(c( "Residual quantiles could not be calculated due to missing residuals.", i = "This may be due to `n_train` < `ahead` in your {.cls epi_recipe}." - )) + )) } estimate <- components$predictions$.pred From 3c12fb7e9c4f4f70ea2d92d9480877960deea19f Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 17:22:14 -0700 Subject: [PATCH 124/382] fix: test --- R/layer_residual_quantiles.R | 2 +- tests/testthat/test-layer_residual_quantiles.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index e95c43462..a6bc93f18 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -127,7 +127,7 @@ slather.layer_residual_quantiles <- if (any(sapply(r$dstn, is.na))) { cli::cli_abort(c( "Residual quantiles could not be calculated due to missing residuals.", - i = "This may be due to `n_train` < `ahead` in your {.cls epi_recipe}." + i = "This may be due to `n_train` < `ahead` in your {.cls epi_recipe}." )) } diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index 4340a026d..a346c62a3 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -102,6 +102,6 @@ test_that("Canned forecasters work with / without", { test_that("flatline_forecaster correctly errors when n_training < ahead", { expect_error( flatline_forecaster(jhu, "death_rate", args_list = flatline_args_list(ahead = 10, n_training = 9)), - "Check your n_train and ahead values" + "This may be due to `n_train` < `ahead`" ) }) From 41908735f600f1ad2d3fc86d03fb06d2bac39399 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 3 Apr 2024 19:12:19 -0700 Subject: [PATCH 125/382] feat: add *_args_list warning #301 --- R/arx_classifier.R | 11 ++++++++ R/arx_forecaster.R | 11 ++++++++ R/flatline_forecaster.R | 11 ++++++++ tests/testthat/test-arx_args_list.R | 6 ++++ tests/testthat/test-arx_cargs_list.R | 6 ++++ tests/testthat/test-flatline_args_list.R | 35 ++++++++++++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 tests/testthat/test-flatline_args_list.R diff --git a/R/arx_classifier.R b/R/arx_classifier.R index d42247426..79663e668 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -299,6 +299,17 @@ arx_class_args_list <- function( arg_is_pos(check_enough_data_n, allow_null = TRUE) arg_is_chr(check_enough_data_epi_keys, allow_null = TRUE) + if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (forecast_date + ahead != target_date) { + cli::cli_warn( + "forecast_date + ahead does not equal target_date.", + forecast_date = forecast_date, + ahead = ahead, + target_date = target_date + ) + } + } + breaks <- sort(breaks) if (min(breaks) > -Inf) breaks <- c(-Inf, breaks) if (max(breaks) < Inf) breaks <- c(breaks, Inf) diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index ce2fa57b0..f1d80d841 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -260,6 +260,17 @@ arx_args_list <- function( arg_is_pos(check_enough_data_n, allow_null = TRUE) arg_is_chr(check_enough_data_epi_keys, allow_null = TRUE) + if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (forecast_date + ahead != target_date) { + cli::cli_warn( + "forecast_date + ahead does not equal target_date.", + forecast_date = forecast_date, + ahead = ahead, + target_date = target_date + ) + } + } + max_lags <- max(lags) structure( enlist( diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index 99ebc8694..e057b342d 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -131,6 +131,17 @@ flatline_args_list <- function( if (is.finite(n_training)) arg_is_pos_int(n_training) if (is.finite(nafill_buffer)) arg_is_pos_int(nafill_buffer, allow_null = TRUE) + if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (forecast_date + ahead != target_date) { + cli::cli_warn( + "forecast_date + ahead does not equal target_date.", + forecast_date = forecast_date, + ahead = ahead, + target_date = target_date + ) + } + } + structure( enlist( ahead, diff --git a/tests/testthat/test-arx_args_list.R b/tests/testthat/test-arx_args_list.R index 7566fd90d..9d81be024 100644 --- a/tests/testthat/test-arx_args_list.R +++ b/tests/testthat/test-arx_args_list.R @@ -25,6 +25,12 @@ test_that("arx_args checks inputs", { expect_error(arx_args_list(n_training_min = "de")) expect_error(arx_args_list(epi_keys = 1)) + + expect_warning(arx_args_list( + forecast_date = as.Date("2022-01-01"), + target_date = as.Date("2022-01-03"), + ahead = 1L + )) }) test_that("arx forecaster disambiguates quantiles", { diff --git a/tests/testthat/test-arx_cargs_list.R b/tests/testthat/test-arx_cargs_list.R index 69901220c..d225cf62a 100644 --- a/tests/testthat/test-arx_cargs_list.R +++ b/tests/testthat/test-arx_cargs_list.R @@ -19,4 +19,10 @@ test_that("arx_class_args checks inputs", { expect_error(arx_class_args_list(n_training_min = "de")) expect_error(arx_class_args_list(epi_keys = 1)) + + expect_warning(arx_class_args_list( + forecast_date = as.Date("2022-01-01"), + target_date = as.Date("2022-01-03"), + ahead = 1L + )) }) diff --git a/tests/testthat/test-flatline_args_list.R b/tests/testthat/test-flatline_args_list.R new file mode 100644 index 000000000..86f42a208 --- /dev/null +++ b/tests/testthat/test-flatline_args_list.R @@ -0,0 +1,35 @@ +test_that("flatline_args_list checks inputs", { + expect_s3_class(flatline_args_list(), c("flat_fcast", "alist")) + expect_error(flatline_args_list(ahead = c(0, 4))) + expect_error(flatline_args_list(n_training = c(28, 65))) + + expect_error(flatline_args_list(ahead = -1)) + expect_error(flatline_args_list(ahead = 1.5)) + expect_error(flatline_args_list(n_training = -1)) + expect_error(flatline_args_list(n_training = 1.5)) + expect_error(flatline_args_list(lags = c(-1, 0))) + expect_error(flatline_args_list(lags = list(c(1:5, 6.5), 2:8))) + + expect_error(flatline_args_list(symmetrize = 4)) + expect_error(flatline_args_list(nonneg = 4)) + + expect_error(flatline_args_list(quantile_levels = -.1)) + expect_error(flatline_args_list(quantile_levels = 1.1)) + expect_type(flatline_args_list(quantile_levels = NULL), "list") + + expect_error(flatline_args_list(target_date = "2022-01-01")) + expect_identical( + flatline_args_list(target_date = as.Date("2022-01-01"))$target_date, + as.Date("2022-01-01") + ) + + expect_error(flatline_args_list(n_training_min = "de")) + expect_error(flatline_args_list(epi_keys = 1)) + + # Detect mismatched ahead and target_date - forecast_date difference + expect_warning(flatline_args_list( + forecast_date = as.Date("2022-01-01"), + target_date = as.Date("2022-01-03"), + ahead = 1L + )) +}) From 4eda57a5f4be30ca7630a1b4d267bb5017da9c87 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 10:38:43 -0700 Subject: [PATCH 126/382] Update R/arx_classifier.R Co-authored-by: Daniel McDonald --- R/arx_classifier.R | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index 79663e668..617eb3bc4 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -301,12 +301,10 @@ arx_class_args_list <- function( if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { if (forecast_date + ahead != target_date) { - cli::cli_warn( - "forecast_date + ahead does not equal target_date.", - forecast_date = forecast_date, - ahead = ahead, - target_date = target_date - ) +cli::cli_warn(c( + "`forecast_date` + `ahead` must equal `target_date`.", + i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." +)) } } From 88629d1922561a411c5162c5ed3eaad14840c6d4 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 11:50:37 -0700 Subject: [PATCH 127/382] refactor: improvements from @dajmcdon review --- R/arx_classifier.R | 10 +++++----- R/arx_forecaster.R | 12 +++++------- R/flatline_forecaster.R | 12 +++++------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index 617eb3bc4..1ead900f2 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -299,12 +299,12 @@ arx_class_args_list <- function( arg_is_pos(check_enough_data_n, allow_null = TRUE) arg_is_chr(check_enough_data_epi_keys, allow_null = TRUE) - if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (!is.null(forecast_date) && !is.null(target_date)) { if (forecast_date + ahead != target_date) { -cli::cli_warn(c( - "`forecast_date` + `ahead` must equal `target_date`.", - i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." -)) + cli::cli_warn(c( + "`forecast_date` + `ahead` must equal `target_date`.", + i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." + )) } } diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index f1d80d841..132f2bf99 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -260,14 +260,12 @@ arx_args_list <- function( arg_is_pos(check_enough_data_n, allow_null = TRUE) arg_is_chr(check_enough_data_epi_keys, allow_null = TRUE) - if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (!is.null(forecast_date) && !is.null(target_date)) { if (forecast_date + ahead != target_date) { - cli::cli_warn( - "forecast_date + ahead does not equal target_date.", - forecast_date = forecast_date, - ahead = ahead, - target_date = target_date - ) + cli::cli_warn(c( + "`forecast_date` + `ahead` must equal `target_date`.", + i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." + )) } } diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index e057b342d..7993a1bf8 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -131,14 +131,12 @@ flatline_args_list <- function( if (is.finite(n_training)) arg_is_pos_int(n_training) if (is.finite(nafill_buffer)) arg_is_pos_int(nafill_buffer, allow_null = TRUE) - if (!is.null(forecast_date) && !is.null(target_date) && !is.null(ahead)) { + if (!is.null(forecast_date) && !is.null(target_date)) { if (forecast_date + ahead != target_date) { - cli::cli_warn( - "forecast_date + ahead does not equal target_date.", - forecast_date = forecast_date, - ahead = ahead, - target_date = target_date - ) + cli::cli_warn(c( + "`forecast_date` + `ahead` must equal `target_date`.", + i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." + )) } } From a518ab0da96dffd0a50e92fbec7ce363cf3cdbbf Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 11:52:22 -0700 Subject: [PATCH 128/382] doc+repo: bump version, add news line --- DESCRIPTION | 2 +- NEWS.md | 63 +++++++++++++++++++++++++++-------------------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 90044790c..d21127830 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.11 +Version: 0.0.12 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 5f629f45f..ee542bab6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,34 +4,35 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat # epipredict 0.1 -- add `check_enough_train_data` that will error if training data is too small -- added `check_enough_train_data` to `arx_forecaster` -- simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` -- rename the `dist_quantiles()` to be more descriptive, breaking change -- removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) -- add `pivot_quantiles_wider()` for easier plotting -- add complement `pivot_quantiles_longer()` -- add `cdc_baseline_forecaster()` and `flusight_hub_formatter()` -- add `smooth_quantile_reg()` -- improved printing of various methods / internals -- canned forecasters get a class -- fixed quantile bug in `flatline_forecaster()` -- add functionality to output the unfit workflow from the canned forecasters -- add quantile_reg() -- clean up documentation bugs -- add smooth_quantile_reg() -- add classifier -- training window step debugged -- `min_train_window` argument removed from canned forecasters -- add forecasters -- implement postprocessing -- vignettes avaliable -- arx_forecaster -- pkgdown -- Publish public for easy navigation -- Two simple forecasters as test beds -- Working vignette -- use `checkmate` for input validation -- refactor quantile extrapolation (possibly creates different results) -- force `target_date` + `forecast_date` handling to match the time_type of - the epi_df. allows for annual and weekly data +- `*_args_list()` functions now warn if `forecast_date + ahead != target_date` +- add `check_enough_train_data` that will error if training data is too small +- added `check_enough_train_data` to `arx_forecaster` +- simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` +- rename the `dist_quantiles()` to be more descriptive, breaking change +- removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) +- add `pivot_quantiles_wider()` for easier plotting +- add complement `pivot_quantiles_longer()` +- add `cdc_baseline_forecaster()` and `flusight_hub_formatter()` +- add `smooth_quantile_reg()` +- improved printing of various methods / internals +- canned forecasters get a class +- fixed quantile bug in `flatline_forecaster()` +- add functionality to output the unfit workflow from the canned forecasters +- add quantile_reg() +- clean up documentation bugs +- add smooth_quantile_reg() +- add classifier +- training window step debugged +- `min_train_window` argument removed from canned forecasters +- add forecasters +- implement postprocessing +- vignettes avaliable +- arx_forecaster +- pkgdown +- Publish public for easy navigation +- Two simple forecasters as test beds +- Working vignette +- use `checkmate` for input validation +- refactor quantile extrapolation (possibly creates different results) +- force `target_date` + `forecast_date` handling to match the time_type of + the epi_df. allows for annual and weekly data From 77e684be2cb77a217c767c6809dfd1a5b9750ffb Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 15:18:14 -0700 Subject: [PATCH 129/382] docs+lint: add arg checking and doc variables in autoplot --- R/autoplot.R | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/R/autoplot.R b/R/autoplot.R index 7c579ad28..fa3f26269 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -20,10 +20,16 @@ ggplot2::autoplot #' @param .levels A numeric vector of levels to plot for any prediction bands. #' More than 3 levels begins to be difficult to see. #' @param ... Ignored +#' @param .color_by A character string indicating how to color the data. See +#' `epiprocess::autoplot.epi_df()` for more details. +#' @param .facet_by A character string indicating how to facet the data. See +#' `epiprocess::autoplot.epi_df()` for more details. #' @param .base_color If available, prediction bands will be shown with this #' color. #' @param .point_pred_color If available, point forecasts will be shown with this #' color. +#' @param .max_facets The maximum number of facets to show. If the number of +#' facets is greater than this value, only the top facets will be shown. #' #' @name autoplot-epipred #' @examples @@ -91,6 +97,9 @@ autoplot.epi_workflow <- function( .max_facets = Inf) { rlang::check_dots_empty() arg_is_probabilities(.levels) + rlang::arg_match(.color_by) + rlang::arg_match(.facet_by) + if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( "Can't plot an untrained {.cls epi_workflow}.", @@ -197,8 +206,6 @@ autoplot.epi_workflow <- function( bp } - - #' @export #' @rdname autoplot-epipred autoplot.canned_epipred <- function( @@ -209,6 +216,9 @@ autoplot.canned_epipred <- function( .point_pred_color = "orange", .max_facets = Inf) { rlang::check_dots_empty() + rlang::arg_match(.color_by) + rlang::arg_match(.facet_by) + ewf <- object$epi_workflow predictions <- object$predictions %>% dplyr::rename(time_value = target_date) @@ -283,7 +293,6 @@ plot_bands <- function( base_plot } - find_level <- function(x) { unique((x < .5) * (1 - 2 * x) + (x > .5) * (1 - 2 * (1 - x))) } From e0512e73d47794cb8f89beab8eef9462873edd6e Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 15:18:30 -0700 Subject: [PATCH 130/382] test: add a few autoplot snapshots --- tests/testthat/_snaps/autoplot/autoplot.png | Bin 0 -> 778259 bytes tests/testthat/_snaps/autoplot/autoplot2.png | Bin 0 -> 152590 bytes tests/testthat/test-autoplot.R | 32 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 tests/testthat/_snaps/autoplot/autoplot.png create mode 100644 tests/testthat/_snaps/autoplot/autoplot2.png create mode 100644 tests/testthat/test-autoplot.R diff --git a/tests/testthat/_snaps/autoplot/autoplot.png b/tests/testthat/_snaps/autoplot/autoplot.png new file mode 100644 index 0000000000000000000000000000000000000000..2673eb60d18ad8d0da2d299a73094ee7503777ce GIT binary patch literal 778259 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

    a}N2Dc0?D;WGV4@1{MmZ@wyJ8)W011; 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�OeuVgc$ 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

    CNAEnb@PgEwHoJ%3t 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 literal 0 HcmV?d00001 diff --git a/tests/testthat/_snaps/autoplot/autoplot2.png b/tests/testthat/_snaps/autoplot/autoplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..571a7937896f68e4456c4bac33e706612e590857 GIT binary patch literal 152590 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%0A`rlorTIx2VJMO7`3~53}dMt{(7gD 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 RzL7p&eY2M8y-k03{0~HX% + filter(time_value >= as.Date("2021-11-01")) + + r <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) %>% + step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% + step_epi_naomit() + + f <- frosting() %>% + layer_residual_quantiles( + quantile_levels = c(.025, .1, .25, .75, .9, .975) + ) %>% + layer_threshold(dplyr::starts_with(".pred")) %>% + layer_add_target_date() + + wf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) + p <- autoplot(wf) + withr::with_file("autoplot.png", { + ggsave("autoplot.png", p) + expect_snapshot_file("autoplot.png") + }) + + latest <- jhu %>% dplyr::filter(time_value >= max(time_value) - 14) + preds <- predict(wf, latest) + p <- autoplot(wf, preds, .max_facets = 4) + withr::with_file("autoplot2.png", { + ggsave("autoplot2.png", p) + expect_snapshot_file("autoplot2.png") + }) +}) From 70d9f558ce691146755e961d5c4ed1a0496a51ef Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 15:44:07 -0700 Subject: [PATCH 131/382] fix: ggplot2::ggsave --- tests/testthat/test-autoplot.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-autoplot.R b/tests/testthat/test-autoplot.R index 0ac160265..0acd08293 100644 --- a/tests/testthat/test-autoplot.R +++ b/tests/testthat/test-autoplot.R @@ -18,7 +18,7 @@ test_that("autoplot snapshots", { wf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) p <- autoplot(wf) withr::with_file("autoplot.png", { - ggsave("autoplot.png", p) + ggplot2::ggsave("autoplot.png", p) expect_snapshot_file("autoplot.png") }) @@ -26,7 +26,7 @@ test_that("autoplot snapshots", { preds <- predict(wf, latest) p <- autoplot(wf, preds, .max_facets = 4) withr::with_file("autoplot2.png", { - ggsave("autoplot2.png", p) + ggplot2::ggsave("autoplot2.png", p) expect_snapshot_file("autoplot2.png") }) }) From ae950e1d720e496493fe3143b3496ca4c27a3f2b Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 15:58:08 -0700 Subject: [PATCH 132/382] doc: refer to PR template in dev doc --- DEVELOPMENT.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 4bc5733ee..67f1b3003 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -30,6 +30,7 @@ pkgdown::build_site(preview=TRUE) The `main` version is available at `file:////epidatr/epipredict/index.html` and `dev` at `file:////epipredict/docs/dev/index.html`. You can also build the docs manually and launch the site with python. From the terminal, this looks like + ```bash R -e 'devtools::document()' python -m http.server -d docs @@ -37,19 +38,7 @@ python -m http.server -d docs ## Versioning -Please follow the guidelines in the PR template document (reproduced here): - -- [ ] Make sure this PR is against "dev", not "main". -- [ ] Request a review from one of the current epipredict main reviewers: - dajmcdon. -- [ ] Makes sure to bump the version number in `DESCRIPTION` and `NEWS.md`. - Always increment the patch version number (the third number), unless you are - making a release PR from dev to main, in which case increment the minor - version number (the second number). -- [ ] Describe changes made in NEWS.md, making sure breaking changes - (backwards-incompatible changes to the documented interface) are noted. - Collect the changes under the next release number (e.g. if you are on - 0.7.2, then write your changes under the 0.8 heading). +Please follow the guidelines in the [PR template document](.github/pull_request_template.md). ## Release process From ed02c207fc27b9f79dbb5002fe674e4034b28db8 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 15:58:43 -0700 Subject: [PATCH 133/382] doc: version pin reminder #292 --- .github/pull_request_template.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 7a7e9ae77..201f22b93 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,20 +2,23 @@ Please: -- [ ] Make sure this PR is against "dev", not "main". -- [ ] Request a review from one of the current epipredict main reviewers: - dajmcdon. -- [ ] Makes sure to bump the version number in `DESCRIPTION` and `NEWS.md`. - Always increment the patch version number (the third number), unless you are - making a release PR from dev to main, in which case increment the minor - version number (the second number). -- [ ] Describe changes made in NEWS.md, making sure breaking changes - (backwards-incompatible changes to the documented interface) are noted. - Collect the changes under the next release number (e.g. if you are on - 0.7.2, then write your changes under the 0.8 heading). +- [ ] Make sure this PR is against "dev", not "main". +- [ ] Request a review from one of the current epipredict main reviewers: + dajmcdon. +- [ ] Make sure to bump the version number in `DESCRIPTION` and `NEWS.md`. + Always increment the patch version number (the third number), unless you are + making a release PR from dev to main, in which case increment the minor + version number (the second number). +- [ ] Describe changes made in NEWS.md, making sure breaking changes + (backwards-incompatible changes to the documented interface) are noted. + Collect the changes under the next release number (e.g. if you are on + 0.7.2, then write your changes under the 0.8 heading). +- [ ] Consider pinning the `epiprocess` version in the `DESCRIPTION` file if + - You anticipate breaking changes in `epiprocess` soon + - You want to co-develop features in `epipredict` and `epiprocess` ### Change explanations for reviewer ### Magic GitHub syntax to mark associated Issue(s) as resolved when this is merged into the default branch -- Resolves #{issue number} +- Resolves #{issue number} From 8ac8d4c0c842f0561a4afd57dfafe98d2b0e1a71 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 16:21:29 -0700 Subject: [PATCH 134/382] test: remove autoplot snapshots --- tests/testthat/_snaps/autoplot/autoplot.png | Bin 778259 -> 0 bytes tests/testthat/_snaps/autoplot/autoplot2.png | Bin 152590 -> 0 bytes tests/testthat/test-autoplot.R | 32 ------------------- 3 files changed, 32 deletions(-) delete mode 100644 tests/testthat/_snaps/autoplot/autoplot.png delete mode 100644 tests/testthat/_snaps/autoplot/autoplot2.png delete mode 100644 tests/testthat/test-autoplot.R diff --git a/tests/testthat/_snaps/autoplot/autoplot.png b/tests/testthat/_snaps/autoplot/autoplot.png deleted file mode 100644 index 2673eb60d18ad8d0da2d299a73094ee7503777ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778259 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

    a}N2Dc0?D;WGV4@1{MmZ@wyJ8)W011; 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�OeuVgc$ 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

    CNAEnb@PgEwHoJ%3t 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 diff --git a/tests/testthat/_snaps/autoplot/autoplot2.png b/tests/testthat/_snaps/autoplot/autoplot2.png deleted file mode 100644 index 571a7937896f68e4456c4bac33e706612e590857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152590 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%0A`rlorTIx2VJMO7`3~53}dMt{(7gD z;Gyg0vtx^s7k+D{O{fzs-M3dilJb2+UqF+;k3@Ta6R}@HUz&`eEf^p7{&^4IxrdJo zFJsb4&$cr6o~W<$*OoG313S~_vc!tZ4tAeDuUZ0!irSDo6b&yEI}MxHNO2M0-BtsX zRPI5%gNdT5ETx&Ck;4kRGcB;YGUFoJ5)+ruf!pZsj!{FAf1~w^MN+c^6Wz;${94wt zehZZ}!tgN22vS38Kckxsve@` zMyEyJwnq*fg45B@AirPp>L*km!xJWppj1&-M`Z<(u%B}Q4fH~$=~FI!B{XEhz*(08 zG?Oxey8Sdz@wLr5l23-pG&32tn{FwhO%$L^5*CZ<0A1}d7lrT5$6O0D)K+g8RP&1VYX;(SK{s?l6;`9hY(EQTqL8Lgsl%c`Wzg`_gJ~JTY(1C?rIP~ynW`fr$ z$VQ^tHk!ruCTw;n8?N{oC9NLWO4_l+Q&oAreHyJLkrCj1eMNb9L9Rd+b9y5C@|AeS z149m!+UNKQ)tiJr3E$$2M6F8KHj7wHM)VL+$4oqZMD-}lo&2oCDyg)Hs6&5hO<)26 zr>nnlO9mG2vJi+$OTN#28CLr+&?DyRK27fGN{(M^xB#UyNXJoZ!iwX64{RwL-CVRf ziMz@eo$}sv%1IUv07;6KKfFwNu=Fx{uI?uQy~rZw^b|~$M_#&mb9IHO(-Zu{1?Xdv0ySMLlM;b{h84bPkCiGy zcrNwkO;MRk-MbP;O)zExCkmd_X!o;e)xsy0?3e3pm5u*Bjgqr%UOr@X&k*RnOq{27R7H+^=_fS8A~V~ zj}M@(TuQYeDLWkjJg#J^to4 zq>nQ{y#S-u^UWbFF0k2Vj6G=+o!KlEc*+LvpGGxE=-CIa_seTCf> z^r_1v_s2-g1yuL+A|RC#J(aI-_@LG4PL^>PMtMM5k&9CZPK^mbi8 zwLI|jJB&*3K6uPoR42HftN}$NtH>gER3@-s=GZE<+U#EaQN2V;oW{+4S2doDiJ0!O zSPRDbg3HC%c`gRCp1U0hGmm-a6DbLRGECEsPaliC)DTegP~n%C$5xfa@++)tese<< zQ_CPoQIi-=9+g`_rl_YXOZGZ2Q(3h5S`f@r{j{12MRiO)&Jf)F= z?5Ka+Fj8d&%2}bYpLH@t;D(Ifooc>kJp3n;RBlbw+>-NSMxsCL$npD1qIjc?&zFN8 zE3hlBI19rUVZp&N$pD4yI21En#-XS!oDNW$oA>Tj%fyRUNa1`yKpo!t zSKpCu6$Up!c#K~^Ja4aXDKq+QKMaY0ES&zGIlC%ah^|l*##J$c>1q6`WfS7l>%xgh zKpczmRvYKNOxy(7g+FtvYA>9C+XR;gOHpdw9E-{c4X_spP7$9Chy~1$0efJ7F4jgo zZAbXDlgo%j=C;m*5YT7H?w_moZ^6N^4}?`Wi0=B-y}Q{uK;wvXo5EQI(x_^b zk7)qo_#)EhTA!<(tQi&e0UU(2wKK*w$)DVK~J5)FVQZpc)ER>2clT%P&1 zWjfpF9$+?ky-|YboHu3sVK|3(|Xp;vR;5a-6EvQm1N=U%Iv5umn%tAMfKIirkPfba9 z1rDM(1!9FK?3L|5UQ`e`P*6QS`NAoF(PdnUd(M4|Jz({hRNwrx=QkTQuy)!W5<+Wd zrAR07%A@CO0JulZXHZ+InBRW-qtS2Oy5&LHnu>h{A-}a3EANV{5sj74pNGAR8GVPO z9^rDH-O00<)Y1!>;@0qPJ#Ik&PC#&8WDE#_olPu>*dnnF=tR4 z11#7~6KzC91TGs}9J67fSXNUFETjExn@1W13DmY~bk9mxQaWZ&5KTCHxNgj6s=Ck_ z5g$SYrCtiAo#+doRfj|`|HwECi*}UG@Q%`s?tJg=-7rJPvOEpGsw{M9Y6}Cl3j1ig~LtT%n zsTmF>FXDNlkFFz#5Dl)MSQa2HJ;i`*UT7OR-h*BwAFXEDN^XZq z_OHi&OAtL4G{+Vn{SS<`^NarIBdejW9`j7c?L0U?!i2(AVl(zy;)X?LU$4NA4s$(j zBf6X5G=h717Nd*D1!T@d)ah+=^ied*0*YhcvL{?CiKL^KEUo_bVAA%p4;h))7fV)} zN|8P%>#fhL)IkE2#avtWxQig5a6_@VB{Q*#$Kn{y?ghVKmo{& z+#EM!qhoak_*`Szf3RsW4jr8fAID}9vr{5z z?ciAbXu`ZXmO?7AL}bpAaR}UY5v+j!gcFHX8C4pw9|nG!{m)WaMz{hZm5P}uE#voS z4_u6PBe74f<1bR(#YZtO5)k5EX%6?^4_^#e-{bht>?b0MlNEUQ$dS9d4GNsH${ehD zd$~j)%U%`D*bJS8T}hBKs`SdWEy2NToh>|xn1+8H$&F2VOej8l?o$SDi?FE@S6z2I zWg3PtY^LG9TZ-YZ>IYNZ^*H(1bEIMiVRnFFB2E!;2sU)HAO9eIunm&Mn($AfK3%E% zh;?D@y#L!@Ai;*e0L+_Sva}(xhtN>p5XyJ3BU>TZLia^us_oBZv}74eM7|R#!fTEr zH*3bDl-1buBgQSr=f@?JdI=6}2+qeUyl7}-ECXGrT(;-N zo{QKJXnk5v(5ucAgyqtyg|gtp&h>z$TRPj7Ovo%zL?tXYe>w(e2oOnRif% zT(IzY40qzy$@upP@hLrf^-6$$hl*x%=kh!5-b)@?8m>wIndI8_%T`jo*0J*AIsnNA zf%hIE8zH@84AT(a%wk|;QxTbu3#<1l3g z)uCM`tCo5$0_DK#&HnX3B`sAt4FSO%3^Ff-p&o)j=k0K!A%D8bYZ2QPm->J5JV9)*f=dRC95~Ie`+p@w?H9KS@;$w=Pr)ILPTk<7VvW z)GBWWREz##G4gzniwVrKeF=MH5JjUNr&Crh#nv!%hq7zO69g`vUermTU3`{Q0YJ@u z$r$uJs!;cB?<}<+St8P%J3m2iv-7L#m}`?dJRt1L?J0R1j1MDs8DC&XT&gVMzoo}& zWodWo<^uGH9e9t-&MsS2?Prnfz+6e7TO;4~HQ9nXX}ITMViSzeXZPwxH#5~wUD^e_ zMz?PS+CqNQp_`HHotvNO5VneBqMhlPqh={If__3uX*rO)G%GnX809K#!$N> zg?&B-dlxD-I)?K@f5S8W{JtU~pt1-*?k^J=cW0TEc4pp{t#i|kJ@|w9Zg_euV9I0W z;nMW~jKr6&pU8*ZF%6EQC`KiOAp`FR`N|%wG5bb=&;6zDjVAa(+$P6 zrl~t*{Pw%_rVDjc2Hx3uSN+JMXX+h;|FV59x?l&dE&>tneB#wf8P>zD#DYBIwNeuI zD+8Z;3d+qH5XoHb6EL4-;_x7p+M>+2m5tixmA`1+D#ysl`f-$eyNFR~1>JWRZ_O+olNP07%BNAZD6&wd zPlJ>)l|qJ!kfbsXQTj}ck|9$R4TeQXWLVDqp!Pm{?{l4Vu50geUFW*?`seE_*7~jA z?|q;5dG6=F?}y|~8_}Bac!p2}csrwadXq+8`$`&;No@kX3+h7nDRih!QD?(|#`tq7 zLNCbk^3-S29P=)t6*z_A%1w~}6>_SE zFvut8Gvy7aDm=_l9wUhAxrhpd&jt{OY$F(fDCiL%zBB1#Q9Pc+2=q^GRaofceu+Rm z;R@Qav;e_{*%D>{>lR|MdL^LuLx#Q1G-MV8J4*?=e;;30=|wCU(K&#!)izwWHv@sB z1C%r?IL&OFUtw9&@Qz_0JF>#1Ru+ITy`n{HklLvY!3K@>do0dXEVO6b+Asrcr|a3^(xM-ds>n-OD3;SAu4=XAcn zz`(g?aF6ODyC96cL1SSs&H-{f7i=Ck@(~VCDSvnsBqhv7`Fr{!(EealY_#voSR61hM@`d$a~$4#5j%J6D8^BO*s_fMjN(1+ zWZ4_Bk+oJTn>%K?A0DeYc|cAZM=2k707%*P7oL{zVh1=v3_871DSP$h|z{dW+RueLuAS%UvCVeQv~}I z_c?zaYvqn{GS)SY@YNx!JDB?olqI5A4+V*G+xhl=Bfs};dREL9e@no*sH{(s3V{&v zy^0HS5v;PXYVi2vfpD*IZ9iFubH~tmw1)20#-X@}-VbmMp?TCd$0id^^yQG*hK4W| zCb08z#_!3aK1F7nPy2cQ{?oN1#$FtyGY*@}ahNYaH;-U`FI9lQ+)Q!jM4UY6oJzEg zu7`*p4{S%S7KOsvQNk&(sH49cFdV-1;A4-x1fEQpH2Oy+4-j}qGAs^`n2m4L?m9K! zo*T>865Y1y+<{gx>%N4KQnnh+XKIbgKr}t#4Q@F~v{sL*#Wmx`St%TN>CAeGfMAcnwVu5*Kd=AiP9YC9Af-t7}>(iloFO zZBOZiZbzyD6ZQmfuRI*U)(ZLVzz(k7*OvW6@Ih(KxOC5c*3FWfM~$C92QI$M_Beie zR5bDcL2$x$N z#Pf2)_q=%(P7e-0E04`Q3%uj$plDKwn^k!Kxr)19Kev1OuLrDp-9@>{w~l+?ybYhv#l-&?kp26s#bAA`1F^DD-P5ByT@MO+YzagXqwCn5N9OB}8~r!^ zw(w*=IQzHtZO$W|d1tHxL*p=C(fZpZAybe@kG`hF#eAq7TD896XuCe7QOPM5$Ajec$oy)pP&p?D zGSG(oqqm`Bi`UuO30^kXmFB4!uNz`||71`0(?=pwy1pjYjo2;7@I?lqY(+C=+ct%$8w*1&k-7qvb4$1zPvqF$CfXnh#=8u3Mx&4HYjrAd7R?(h|po z{Zp1_vwq)_;vwEi2o$sC+06Vdz-#zkmN6+8~tG}-2 zcE7S=V&tcam-4N0bro?}Ya^7IPWN75Tp7@C6B83AGyR@;PRS&2?w`4=#&zy!8W22} zpwo9K6z~={?){UoCQtb9bF-I4t%{5sK*#2dMd=|OZb-$t+QSqe9r)1xHZ2Iqr&Rc^{Czv_Q^lKgug@$Vh2 zaY)`u1X&8Ka{;I>-%a=^;zv)q^IezozF@NrUccAk5i*_Hq zuIe<-=aTY?c0am)wwyc|=Jd*e`6H-HL8@*Yg{pIF^L}M>T*uD;PWV2~`5njpTKVfd zazCf{I}*=|{vC;zY8@M0ZXBxDKmPjTf8Y2&b1T-Kw>5IE{4^(OsC{4Rbw?BrQhL+K8;I0kn5W zf!`U3M!q(hWUxpElZ4cDXs%V?`KRAAVLa$0)B)o)#21M7^2No(q!HAH%J#%R{qR9X z+lw(UN)1CTJ|BikkTM)Z-U>hs1Gl0Z9< zOL;r4wfI?bywoIMts&MKE4@)+x`M)iZ!OLfJ@a4%0_@JxcCjU#GWb7x{3e=RnTn+P{YU>?&OKqGPmZ=tgGA3wP-IsT(N z(C*X9$SQhJud-5rjUENA@U#~=WMSJsf6#Oux>TSDg5Cs1E|LL&3m@`L^8w8+yCDB; zXD)rE6OA=}i|_~AO?<0n>_mUf#l>ZQ587{=pJVva3eJt-3?Q{X!dkI!3O2b?i=SPK z1Ae}63L|FiAGm=vH=fWbodr17Guw*obKK@D(GSgida8l z65fJ_V?&!6#lU9#6=jxnF32hOQqA>^K65%Cps(-5(7vS8@rGlPlanugk=kzr)dhZ# zIjA!sL{2XDYtFrUVirNhR#GMJV{uJ3Eg-c2#FPs?>76;QF22(O&Qty0b0`bHugrx) z5ECtqFW=0^?Nh)vG>PVmUnuf5@9ysIaLkH`5D-t8KA07MQDZsx2XDc~$I8>D%oH1` zp(yAOHAkGKUG>*F4M7jJ2ULZybYD+%?S=6F`{!x za}^z?2Ntnl!_oAxD~pnM<>o*psh7Yaq)A|Mb4v?s(3w@H(n+C*woUUYXkcHc5;%03 z@to7iM4!Q6^lq4%v|`dj!>BtMDZKpr`t$PcOr0%n(_=Gz`t-w!r_T(jT~r*Za>4Se zD+gJP4L(n##W#@tWhZ;6E`9S%n1=|~J%GNeE&=Y%LM^)c(a+P-2C?_v>zbLRb}@%y zQ&N~lMvTK|pRhxsAEe6aFZ3OdQNbc_4!o#1%VJmDwGWF9tTx9(e;6mAn6R%ucejha zxw5p|_Mnl)g0b2II}^0+tID>rjQyLJ+oi|Q>U1l(uOYn5GXE!UN%Adkn)|54Jh?0m=$&K1P;YF8Os~;xNue~0V_SQ~Zde0ZRjdp*Wbttu+lDUiU zpLoMp@pY+S^zGPrty!Nd-F6BKJh+u-5p7uCx_SL7&YmBKy!2^AcJ{`_KG8cp<+9mZ z!6JK@j5X*8G&+{=*Q5?4q<~;?+qL2n5jEca-W;C7>LuTq20DUwyHQlu<>+S4aDpJyTWgDIV9}-=Nhu3BX zC4u0H-+@*S$Y6Bpm-|n@yLtrLwe&EkX>5OrL<9(lc*Q%*n7~%1KlGZy+an)N8rddZ z@tId*h4wC1B`G8kVN>jus90KAVL)_12*L?gr11;Sm^=6AWsNIZkbtpdE*Jw=q<0z5 zS2H#)ZrZ#Zhr^SFqW?M^EBX53rtTz*fhDe;{aGx_tY(Y+FG5XK{}6_JXIJewrqm#L z5ivU2;wKt7LJbG+{(L+7^f=hZvfGtEyj4MpCdFQxsK>&8Q1*F3*j114(;>F{euSYScl+-GHTM+ zc#}s{Yui6WEQ`S^!()#DiD+OA5OyCQ8(Vot86#6bip%YV8`ugFk>~#+kRoD(IRa|c z*$z;%q%n;G-KsIDY3*VAB_LRynK(SpaPze z2i9f1%{!UFB&zVb8+2fjXq*PU76k}TQoawW0nSWDY9)}}2iTNRU!xKEI1xrJw5`}p z++3v@>d$Q*qc8LvXHjp*BqzoGvwJZ}5D;M+L1brM;qZ8AA+At6k*ER3nsZ1acM%`>t`>AKk_y_{8iy|9a|H9e4puXkIvO4C9&|d>e5+01*Zg# zo?jLGfh={=N}u131`^)v7_)0hz=8z}JOm1#KSwr$^Oh5H6RH4~KZTn@@13}N&n(xg z8X}cg&JEO8T$@L{iOhZBmoAe|qnR&9~T$*)De4v z*#7wWeUjfo8z54qO&JoJc9)|X9cUQzoY*fv&4L9McPAPbXO7`0K!^EZ$jsuK)NyL` zZLdjBTr#uqCd9dorp8?3(NpQRo>)0-w5#jSS{;!bg1%a3Atq)lOcAI;o3_mHVHFZl zw7f+w{N#{+jorP|*qApTtRW$ZB-yFAM%SFcf37Z@`Y@D3=^jiU-hr(@i;Rh$SxYKu z@Jamf7@;W_4`yv<5r?!ka@7Ev1Ik?AA-=j$#PL|m<+D_{`r>pz>#OeU-;K5DL>EpX&E}FoYD1 zZnVx>XuQA|5e*g=JgO1)B*V=omR3}N)gOnU(Kw|+5Fw@z8V3|a!KTT|3cYNH&4sZr zl+xpX+Jy&??kgVsBP{aqPiAdhxCZ71-U{O^?xZL*I=Cg3mzB}jP0h**j6eDg?X0td z)I_FELuwk)d~l>!z7*cQU7y2tw`tgE;dR&FFq1wlv8kQzcc}J}=xm-~wPPH`CP@0v zo;}O3v9Yj-iH$WT4#R|L{&KM7swdm%uMwwk$0ynyF-B97XcyoP2BhA_mqf*dqX3h+ zx<aga>YQ7T(3r+SR6bzNG1UF#bOWy^vftwwF z<~)FzA-ueg14iY2HPyuH>vSjgn!Pv27Ej!4!`*gt;!0JU!f}mrXY)wr2aR(t|BA-@ ziWR*TeEN>>L(q~#$suN%(n?GoBub7Im}oAR@%1Lnd)u71OKT@4%A$9jo0gPx9Dbaj zQPXH{d}Y!MkOVy=WBp_gs6U7#39^2TwJ zF&Kr>4oU1LZMXC9n)v@L&sUuw;9pg>yyk)y% zDoTuO0Hbe^c=aSWRp#<3z^*t6>NvPpqE=09VX8}y5lM)qe!F4VuwVrr2;2BIezfI! zAQAZXjd(8F*CfoVwLsrN_dBQTqWq(&vy!+OmW9zSNn7eK`zTq_GcjOT(*46vh3 z&r?0a*<~}PF$|Ug;RB7rM88U_EH0*c_kQ!bc_0t}u1OiDUb{?8;0^jtVo%!94^S0e ze={IZy;QbwjO_)lsY=yz9;l~1<&B*CV988h)9w0&5{G7R*p?ZAWdY`54wU1{T$Gd% z5gaLwZc-gq7HFXgsPIwYVjvrMyEkwrXuK^XXrQu%q`hr!ZU!Si2OextNtk3Z86&zy zqP>;sY(;Y_)=8U;L(R#E65fqAnGBG^YLJ&9i58el5ftLrXs3RU8lE6r*mtnikenUD z=0sx}vVA+``V{ivQ`>lM*(H+tH5X`IU)zBKda_478A9l6UBok9SyS^R`q69A{6))@ zJUB4(8qa{#5@v|#^6J4c97zZKf=ra341>F5Aa$`G_H4Cj3e1`7l?ED0Jv2G5iROrn1F`nC3hgp7;~ zqC*xn9Jc@i9(xooG61N^{*jCkVu@ggUk%%Ymvfq8A3xR+g4b`>kAKX3g*9Q04-P(i?1bud=zp zE4~I_kep{{Yk$fBe+hZC4EyxbSj_6f?SKn_dY7(@&KQBwYrf6->zWTY?LJ}ZFkA4| zLXO51l*g_h;hR&V9fo=NJ>?Y@W-#>lFySP&8krm+?FEbha_wIY9pE<*w;P>&PLDre zr2uX`3HTqe#88D5c=INLxOBA3F1)`6znKmZnr8(Y7i5y{4BGd=mv48iGA;iZJ|R9A zZ|138S6fuF1&L~b+KDV5G&MD`dNJq@BWzuNph^P&z%)f~oG!@4gH;vTOibN!KnzhB zXO7j2DJH~{K*lm&`5P#>7m=}JUQuj6-l|C4?dNlW$*&ZL2FNWjDG6>6D4IIJ7I1-& zhljwqf(GJMfPYfyyWq+cI&{~NDGBp}Vabf+c}@TW z7tSc|`-5t7(`(i?r{-he{kf2{ebQ^Pa?II%~Dtx(ec)aPq6g+^3L&d~OjMKJ?T z?{r?t#z~63%IIa!wHucbhl?T&zq#k4z^gs{!nQ4#CW-ow2pHryi7UmGfHu`v+wOYx zrqhew#pclSa#|UsX0sv8i z%)aVuhM> zLZSC}u}ATlUfg+Ol&r0sRcjD08#2KG<(mjjax)lh=d~^=vU??n@|c>@f)ru;DUfx@ zX*x5Al|s_Qi8!lbO=ZJ)OUuflHq0)ZlD@I=?N{0YH2D`ZJc(_i4d;KDcXg8w8`5bq z=|-kJFXga>1!Tx~%f>cBuf+sT;n@Khh8|kU4;lb(IF!By`}OJCZu_|ofBma3U?CWs zP4QE^_ur(KsIZ4=}~o}aq@u8_D56TU8U=R^+at}YtT3t!_X z(&4DU3R2Q4>|PQs1~D3u;J^w*w$u;l=9f>Oz`_7o8|)Ey$HOvVQIXa9{DuxP?9Qwl z`|>`1{tQjg3eWh2i`09u)IZz=T8%rrhp)wOa5b`#8*nn!&oAMR+*gXjIDYHwtMAKe zRkycn=o>4&`Qd%Bcc1+g08h_21#L<@$aOP41pL%a7gX&>h7fQp24@1IaM4SQyE*d& zE7)}D(EfEydwY8Ta6Ua3FQnbjEW)MpVi80JXo0lmLvlcY$v8)o;1gQ0*j;3sQ#Je&Vx}3q+}&xZaxoz-a0@Uf^Brbp{5}PGy9{DF^wj2>sh9?|sB8>) z1=Y+qmGii~)jR7|rdk*P`LGAG&CtMrm2{wC=Al%pYV9L@8tl%94$nl*LpR4N`S#Ok z^G>nUZ_fy%Tj-5iAf55)*_9&4I3A6z8Tq{B2+aGhpO{+W$o;lgZf^1I z#y;QIk?;`I5z4PTW-INId%n#xj1Bxk8TB$X{{u) zHTvZX)lQF+aGws!%@$}PH;nntDA0mn2sAJI+ZhN;Aiw?c z<%=9!bQ735f!qT#g;sH>{y}Gh=G7C0lbYstm)9yyY%DIRRz33q4Zp_w2znyC;V2+X zYhl(?FF}A_uuIACqySFR4`Bg*w)Y1`oCbg9IwHrDw+vKU4zYKT1Z9R*Z{4qR{kbGu zy{xRP$m1j02M6VN1r9^FW_}d!W!-OXRf0T9>Wa>)|J}vhf%5nvMk9Dr_XNBs>#}-a z6P%~8T!b_xIFw;OT5WWA%*5w*jr(u3>A2s4aiYa1WViv#UxcW z?pqAEvi%AmkFGvARyqaPqr{5Ut7~*Z@Qx5MO6l>kP9s@1of|~SvUHx7=dZP^WIg=g zBoJ!bV(;F~0u>)ZkA>Ed4UzZXMeRv*ni2J=dhP{x_ar#By5A{Rhr|OFn_XNr;e3q` zej-x1LI3Pf`V?{)q-mKN+RLRea{xKML^jfJBupum7?-dHY+s3u_3qdsBnUI1``7PvhuWvDoEEsGEfqf2to0*p{a{A%b!K9Yru*tB=28 z0cT-+RI1lh-rGoZ$9SpkMWzZwBoxL;z*1jfpU|L)EI2J`UX!?ijZp1U59^*BAlhd; zz%J}Y?Y9>X5l{8QX+%1B9zQ}x56*8PsJc=pNx;WtR2P9vTa5fuA{#|Pfe(KUj=jcN zCs47XLdbx!f|MT!9tRaN!Q!QIg^kdMzoa3AsHG<;-v?_NT-jYPVkr6xxF^5tzInc; zH#amom;v{NdnTFEWFhF{ATD|<0dq@KA>hF_K+hbq_Sjy>eXHkMZO~XGVDa5F4p%}` z7f{J_Zauctk4{-6W1h+6IC3`8MyqXV_9%b^v3ece0eYJ<9V_?-WrOzpo18|ZsDw9+aw9OK)l$T z9wBXzX*F5z%PqFxk zj$V3FeefI7c{qVEdfo%p-v^d3YBB9MDogz=dbKaM*EZjCRCwR2zl2p)8&pq}gQND(Kts$x32e>SZV+nSd(ZXN>#K^p@P~opM2>mHPM;pSel=~$J`1m9DhFN0n89lxb{R#{0CC{ zpv?Dey-n}pXI?u!Q=8u9u{B8$Vd#)nc99TeYQ_1JNvx`uyhIpYd%iHYSF4c9g-#P(V=?#jVfQ-8 zW;g?Du*ID5d@HqxykjwY^k2|C6#JP;kIwzY(a-cw^cv;o_>QA$?ynq-4;QX(qJLPo z;!o< zrF<~^-Nv;m1cR@?+-rN3o$ZQAG~xX^%_SRVTZ4sgk}<87Z~^TAEE z4_oVHxS|`(QK11f1M~s%Kb&`ZQ0*fBU3BcPS){}V^qeA9d%(|)g|AU{c_+0?=y`Lw zzB+HL$B=4Pw3j;rA-;eWpjn+xKj24_Q_j7>`g&Nlytw!q384W; zVfakhrK*Lf`W=?SD5AJ;oH%iDCmU%<61tAb*j`s~h z$UDbd>XpSd8-g2PSfeN#rCJY|sSh%y`T4lNE!fJ2(=o3v!=Zg~KH>?}aO{pf! zFV7CDf1<=)R@(O)c2;3``fd>up$8p=yxt7Wo-|1yOn9gnEbtQKPdH+Uo!>MRA57+w z=-SHn-Bz6JLBb2fW3_`aNJ4-(tl!)p&i)>4Y9QKLh=)X*l!o$Xb+Bx?#*_0Q`Ua4I zg_IoXT4?uTO;Jt}tgUd7_?nch{CrGjZuK+w-JJk7AUL-|(wO;HU03o!UtiztB%gu? z&7VV4lEW(S0Ntf^hk0jj;4v0S_N2;OoQTGF_`AXUP*|LhkYEN~Kk1c@;MhzUY!p_U z;!zJ&OtZJ46Sdv|eDkRN|IQVbTu?bO~o!>tloc}z0eJ44hdOT9bSRr>YWA>r}=%NP98#s-m>?bO??c#=wRX z3r2ky%oUJ@0)A@!z6ASDo9zcI1z2BB?KGtU2s``1zR{LvC9yU>*`ctQA5|1Ut;C~= zfHMfHwYIr&dzWDZ{%Ed%b~GRY`)KViP~)bRql<;f<^c;p3S9Jm)- zWY}686cuwe_jD&GxL_4qSGV;PlUUq$iHd)S`GLn!(KtiJXwzdlgeS8fyLDy*tP*kn zc*<8bp*9X5VE#lnB-_%gTjH-~(&8Mf8`88UbXneQ+e=$OWI{QbZsg+*>!8q$jc}z> zk<143%;EcPHu-VUt=)V;iEBLi5p?ODl{9RNgt2;hukRZ64(}wf;cmFVLmKqe{-1+ym5@v={HBwZ>C2*AW=mKkDn5E z1qI&rH))k<>AS)tL{N@S`BGLxM=wO8fi;wFF%>;g`E1~=L+r||Gp|a1HM~WR1I5GZ z&2hj|_Q2~lpK1*Hp+df$x6hkVYA~KMUZp&_+w6P#9wtIYK>+4OnTNh*r%;UK;iQ!H#B=!U&K< zT|_)o8W>8DG!IX5zcx;d)Bu)gbb!rkA(~vGa!8IB(a&IXKkdLF zdhmEj@AJ<|d@umsxsYr86O3ni$T;>G!IaFT@{wZlqwsH@f!Z~D;FCC!6+zWO3UTP8I(7cr7`(e#(?*j zi;A9nb$t#VWdvuK19j7FWFdSdwy?aBKgBh=+4axz=qfYLUV; z46UJu##a}jwp?iYHQ$=7uQxB~_WVFoRSQlQ-k@Qnjku)H4Z|4U$ym^3^5dA_2gQ56`tj6CtXt8IusU z=i@ML)vC@xV9pG*>TCUedT3q8@O8`ox^Dc$@&+1B_)4T0Mrv+ImS<3Wqe+5J6>yLa z=pb%USvxxw$4nq{W#S+dotw3cnbCq2|JFKQn_I{BLSU%rRES2Zu3Vwl$dkM=%-L4+ z!9E6yVYysDU1;hmpp6BJ>|?fFGzM`#y5V(zONy#ruWj%y9YjNUJ+Iq`X=ZA>)wzBQ z;lyNFrc|TMx$N!G7w`5J?FIE(0pUHgDVd(b8>KJ?#H0NSeF_qr?649ZpioLqh=_W_^jI_QFx;tdOyoVTH*cHOO5AdYMS9)k@CLEvXa zTARW5?6P>j-AB6r5tYMtOKFRJ`}+;NMg|54)&v9|MQ=i=VG<^D!^*^X`@yZqh+NTh zJcG?phBR}*_$R1^t{gcE+YVMz04gxy2CBlXud6M`!l=Ez%ORq}fD^tx;Tat`-l}hZ z51O4owAzuAx`W1I;eh$tgD#tJrjoBB20o!EfNhslmR`w@s z>6g#@E25VYB0~pA*06&J?xWU84Dz`6`l%b72?P_i6(dzn!wE~$^)}|Sp${lFwerzm zGNV1fk~Mv>HxJSWEkiK5JwS!VL&wWS5L)7U;Cb+gCoq?nD@%&gfA) zOf-SdmOMn+l%dGF-p0bD2?3a9ZVO)zTH(mT$=DN#XTJXt=edL7DDsPXPuBJCnJu3V zZFzw3%xkbifIgi7aj-Yfrh<>brVJQC<{eF}Av_?g^%P|r7ws0ySeBCT-uBZoM}@`X zm63rFHyAZ3d9&hnDdXG--WlpU`gCuNK3!D8#Lx%`L8jM(Gd%d}RT#Y$x7DF;soTHi zX>A1*#BeX5zN_~8P5_S!?Mrn&NWtzA5-_CR0EVfNgO+rnty4eC)$BbUI;!_HuMNO# z$^X#G)(#aKDhgY)aeBu?=Bj{pB$+Tw_Q0M5X@y#Thl>=xzYS+6br`Rpab-wR@{T!=Q<{{wG9 zp>?n0A|-|Qen^3)gBBz5-3Hia2H^{Uo`b9Sfy0%M6J&yva=+a(*H?e%&iU+R8$gDq zAyM%2FwoKIh}Cv!_63`u2~8JRc;TZzch`)Z{lQD-MqOAimi9hg)wTp~48Q(;>XzaK zn&BHaq*No!JsecPn@1Sz7*6HrbN*gsBlZul#7K2dKlPu6CFnE$pDTNYX6`*}nO}1@ RzL7p&eY2M8y-k03{0~HX% - filter(time_value >= as.Date("2021-11-01")) - - r <- epi_recipe(jhu) %>% - step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% - step_epi_ahead(death_rate, ahead = 7) %>% - step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% - step_epi_naomit() - - f <- frosting() %>% - layer_residual_quantiles( - quantile_levels = c(.025, .1, .25, .75, .9, .975) - ) %>% - layer_threshold(dplyr::starts_with(".pred")) %>% - layer_add_target_date() - - wf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) - p <- autoplot(wf) - withr::with_file("autoplot.png", { - ggplot2::ggsave("autoplot.png", p) - expect_snapshot_file("autoplot.png") - }) - - latest <- jhu %>% dplyr::filter(time_value >= max(time_value) - 14) - preds <- predict(wf, latest) - p <- autoplot(wf, preds, .max_facets = 4) - withr::with_file("autoplot2.png", { - ggplot2::ggsave("autoplot2.png", p) - expect_snapshot_file("autoplot2.png") - }) -}) From 45dde20c4c88083d7542478f088443a7055f92c3 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 4 Apr 2024 16:06:15 -0700 Subject: [PATCH 135/382] refactor: update arx_forecaster predictor arg #298 --- NEWS.md | 5 +++-- R/arx_forecaster.R | 11 +++++++---- R/canned-epipred.R | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/NEWS.md b/NEWS.md index e4a1da0f2..9ed94d1a4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,10 +4,11 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat # epipredict 0.1 +- the `predictor` argument in `arx_forecaster()` now defaults to the value of the `outcome` argument - `*_args_list()` functions now warn if `forecast_date + ahead != target_date` - `layer_residual_quantiles()` will now error if any of the residual quantiles are NA -- add `check_enough_train_data` that will error if training data is too small -- added `check_enough_train_data` to `arx_forecaster` +- add `check_enough_train_data()` that will error if training data is too small +- added `check_enough_train_data()` to `arx_forecaster()` - simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` - rename the `dist_quantiles()` to be more descriptive, breaking change - removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index c4f7d73fe..a911b201e 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -8,8 +8,11 @@ #' @param epi_data An `epi_df` object #' @param outcome A character (scalar) specifying the outcome (in the #' `epi_df`). -#' @param predictors A character vector giving column(s) of predictor -#' variables. +#' @param predictors A character vector giving column(s) of predictor variables. +#' This defaults to the `outcome`. However, if manually specified, only those variables +#' specifically mentioned will be used. (The `outcome` will not be added.) +#' By default, equals the outcome. If manually specified, does not add the +#' outcome variable, so make sure to specify it. #' @param trainer A `{parsnip}` model describing the type of estimation. #' For now, we enforce `mode = "regression"`. #' @param args_list A list of customization arguments to determine @@ -37,7 +40,7 @@ #' ) arx_forecaster <- function(epi_data, outcome, - predictors, + predictors = outcome, trainer = parsnip::linear_reg(), args_list = arx_args_list()) { if (!is_regression(trainer)) { @@ -104,7 +107,7 @@ arx_forecaster <- function(epi_data, arx_fcast_epi_workflow <- function( epi_data, outcome, - predictors, + predictors = outcome, trainer = NULL, args_list = arx_args_list()) { # --- validation diff --git a/R/canned-epipred.R b/R/canned-epipred.R index 802d0f7e4..cb555e0bb 100644 --- a/R/canned-epipred.R +++ b/R/canned-epipred.R @@ -5,8 +5,8 @@ validate_forecaster_inputs <- function(epi_data, outcome, predictors) { "!" = "This one is a {.cls {class(epi_data)}}." )) } - arg_is_chr(predictors) arg_is_chr_scalar(outcome) + arg_is_chr(predictors) if (!outcome %in% names(epi_data)) { cli::cli_abort("{.var {outcome}} was not found in the training data.") } From 0abdac97b0d8afe1db1dcb598ac1004f1bc57ca8 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:05:10 -0700 Subject: [PATCH 136/382] Add arx classifier vignette --- vignettes/arx-classifier-vignette.Rmd | 160 ++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 vignettes/arx-classifier-vignette.Rmd diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd new file mode 100644 index 000000000..ee64db0bc --- /dev/null +++ b/vignettes/arx-classifier-vignette.Rmd @@ -0,0 +1,160 @@ +--- +title: "arx_classifier" +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + echo = TRUE, + collapse = FALSE, + comment = "#>", + warning = FALSE, + message = FALSE, + cache = TRUE +) +``` + +## Load required packages + +```{r, message = FALSE, warning = FALSE} +library(tidyverse) +library(epipredict) +``` + +## Introducing the ARX classifier + +The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. + +To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: + +```{r} +jhu <- case_death_rate_subset %>% + dplyr::filter( + time_value >= "2021-06-04", + time_value <= "2021-12-31", + geo_value %in% c("ca", "fl", "tx", "ny", "nj") + ) + +out <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate" +) + +out$predictions +``` + +The key takeaway from the predictions is that there are two prediction classes: (-Inf, 0.25] and (0.25, Inf). This is because for our goal of classification the classes must be discrete. The discretization of the real-valued outcome is controlled by the `breaks` argument, which defaults to 0.25. Such breaks will be automatically extended to cover the entire real line. For example, the default break of 0.25 is silently extended to breaks = c(-Inf, .25, Inf) and, therefore, results in two classes: [-Inf, 0.25] and (0.25, Inf). These two classes are used to discretize the outcome. The conversion of the outcome to such classes is handled internally. So if discrete classes already exist for the outcome in the `epi_df`, then we recommend to code a classifier from scratch using the `epi_workflow` framework for more control. + +The `trainer` is a `parsnip` model describing the type of estimation such that `mode = "classification"` is enforced. The two typical trainers that are used are `parsnip::logistic_reg()` for two classes or `parsnip::multinom_reg()` for more than two classes. + +```{r} +workflows::extract_spec_parsnip(out$epi_workflow) +``` + +From the parsnip model specification, we can see that the trainer used is logistic regression, which is expected for our binary outcome. More complicated trainers like `parsnip::naive_Bayes()` or `parsnip::rand_forest()` may also be used (however, we will stick to the basics in this gentle introduction to the classifier). + +If you use the default trainer of logistic regression for binary classification and you decide against using the default break of 0.25, then you should only input one break so that there are two classification bins to properly dichotomize the outcome. For example, let's set a break of 0.5 instead of relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: + +```{r} +out_break_0.5 <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.5 + ) +) + +out_break_0.5$predictions +``` +Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). + +```{r} +?arx_class_args_list +``` + +Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key as well as `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on these arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. + +## Example of using the ARX classifier + +Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. + +To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? #%% Ok to say relative to the present? Also, should I be more precise here and say relative change or best to keep it simple? + +To answer this question, we can create a predictive model for upsurges and downsurges of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes + +$$\begin{align} +Z_{l,t} = \left\{\begin{matrix} +\text{up,} & \text{if } Y_{l,t}^\Delta > 0.25\\ +\text{not up,} & \text{otherwise} +\end{matrix}\right. +\end{align}$$ +where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t- 7} / Y_{l, t- 7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. + +The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html): + +$$\begin{align} +\pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ +\pi_{\text{not up}}(x)&= Pr(Z_{l, t} = \text{not up}|x) = 1 - Pr(Z_{l, t} = \text{up}|x) = \frac{1}{1 + e^{g_{\text{up}}(x)}} +\end{align}$$ +where + +$$ +g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}t + \delta_{10}s_{state_1} + \delta_{10}s_{state_2} ... + \beta_{12}Y_{l,t}^\Delta + \beta_{13}Y_{l,t-7}^\Delta + \beta_{14}Y_{l,t-14}^\Delta. +$$ + +Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. + +Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). + +```{r} +log_res <- arx_classifier( + jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.25 / 7 # division by 7 gives weekly not daily + ) +) + +workflows::extract_preprocessor(log_res$epi_workflow) +``` + +Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). + +On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. #%% Last sentence correct? + +The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for [`epiprocess::growth_rate()`](https://cmu-delphi.github.io/epiprocess/reference/growth_rate.html) and the related [vignette](https://cmu-delphi.github.io/epiprocess/articles/growth_rate.html). + +### Visualizing the results + +To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: + +```{r} +multi_log_res <- map(1:14, ~ arx_classifier( + jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.25 / 7, + ahead = .x, + horizon = .x, + ))$predictions) %>% list_rbind() +``` + +Notice that the ahead and horizon are what we are are changing when we use `map()`. The reason we must also change `horizon` is because that is passed to the `h` argument of `epiprocess::growth_rate()` and determines the amount of data used to calculate the growth rate. So, for nearly all intents and purposes, it should be the same as `ahead`. + +We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting: + +```{r} +ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + + geom_tile() + + ylab("State") + + xlab("Target date") + +``` + +While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. + +## A brief reflection + +The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). #%% takes a complex turn, increases in complexity + From e090eb8b2aeaf138377cca80ef254a9427aecc4c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:05:50 -0700 Subject: [PATCH 137/382] Remove --- vignettes/arx-classifier-vignette.Rmd | 160 -------------------------- 1 file changed, 160 deletions(-) delete mode 100644 vignettes/arx-classifier-vignette.Rmd diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd deleted file mode 100644 index ee64db0bc..000000000 --- a/vignettes/arx-classifier-vignette.Rmd +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: "arx_classifier" ---- - -```{r setup, include = FALSE} -knitr::opts_chunk$set( - echo = TRUE, - collapse = FALSE, - comment = "#>", - warning = FALSE, - message = FALSE, - cache = TRUE -) -``` - -## Load required packages - -```{r, message = FALSE, warning = FALSE} -library(tidyverse) -library(epipredict) -``` - -## Introducing the ARX classifier - -The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. - -To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: - -```{r} -jhu <- case_death_rate_subset %>% - dplyr::filter( - time_value >= "2021-06-04", - time_value <= "2021-12-31", - geo_value %in% c("ca", "fl", "tx", "ny", "nj") - ) - -out <- arx_classifier(jhu, - outcome = "case_rate", - predictors = "case_rate" -) - -out$predictions -``` - -The key takeaway from the predictions is that there are two prediction classes: (-Inf, 0.25] and (0.25, Inf). This is because for our goal of classification the classes must be discrete. The discretization of the real-valued outcome is controlled by the `breaks` argument, which defaults to 0.25. Such breaks will be automatically extended to cover the entire real line. For example, the default break of 0.25 is silently extended to breaks = c(-Inf, .25, Inf) and, therefore, results in two classes: [-Inf, 0.25] and (0.25, Inf). These two classes are used to discretize the outcome. The conversion of the outcome to such classes is handled internally. So if discrete classes already exist for the outcome in the `epi_df`, then we recommend to code a classifier from scratch using the `epi_workflow` framework for more control. - -The `trainer` is a `parsnip` model describing the type of estimation such that `mode = "classification"` is enforced. The two typical trainers that are used are `parsnip::logistic_reg()` for two classes or `parsnip::multinom_reg()` for more than two classes. - -```{r} -workflows::extract_spec_parsnip(out$epi_workflow) -``` - -From the parsnip model specification, we can see that the trainer used is logistic regression, which is expected for our binary outcome. More complicated trainers like `parsnip::naive_Bayes()` or `parsnip::rand_forest()` may also be used (however, we will stick to the basics in this gentle introduction to the classifier). - -If you use the default trainer of logistic regression for binary classification and you decide against using the default break of 0.25, then you should only input one break so that there are two classification bins to properly dichotomize the outcome. For example, let's set a break of 0.5 instead of relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: - -```{r} -out_break_0.5 <- arx_classifier(jhu, - outcome = "case_rate", - predictors = "case_rate", - args_list = arx_class_args_list( - breaks = 0.5 - ) -) - -out_break_0.5$predictions -``` -Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). - -```{r} -?arx_class_args_list -``` - -Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key as well as `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on these arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. - -## Example of using the ARX classifier - -Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. - -To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? #%% Ok to say relative to the present? Also, should I be more precise here and say relative change or best to keep it simple? - -To answer this question, we can create a predictive model for upsurges and downsurges of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes - -$$\begin{align} -Z_{l,t} = \left\{\begin{matrix} -\text{up,} & \text{if } Y_{l,t}^\Delta > 0.25\\ -\text{not up,} & \text{otherwise} -\end{matrix}\right. -\end{align}$$ -where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t- 7} / Y_{l, t- 7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. - -The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html): - -$$\begin{align} -\pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ -\pi_{\text{not up}}(x)&= Pr(Z_{l, t} = \text{not up}|x) = 1 - Pr(Z_{l, t} = \text{up}|x) = \frac{1}{1 + e^{g_{\text{up}}(x)}} -\end{align}$$ -where - -$$ -g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}t + \delta_{10}s_{state_1} + \delta_{10}s_{state_2} ... + \beta_{12}Y_{l,t}^\Delta + \beta_{13}Y_{l,t-7}^\Delta + \beta_{14}Y_{l,t-14}^\Delta. -$$ - -Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. - -Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). - -```{r} -log_res <- arx_classifier( - jhu, - outcome = "case_rate", - predictors = "case_rate", - args_list = arx_class_args_list( - breaks = 0.25 / 7 # division by 7 gives weekly not daily - ) -) - -workflows::extract_preprocessor(log_res$epi_workflow) -``` - -Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). - -On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. #%% Last sentence correct? - -The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for [`epiprocess::growth_rate()`](https://cmu-delphi.github.io/epiprocess/reference/growth_rate.html) and the related [vignette](https://cmu-delphi.github.io/epiprocess/articles/growth_rate.html). - -### Visualizing the results - -To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: - -```{r} -multi_log_res <- map(1:14, ~ arx_classifier( - jhu, - outcome = "case_rate", - predictors = "case_rate", - args_list = arx_class_args_list( - breaks = 0.25 / 7, - ahead = .x, - horizon = .x, - ))$predictions) %>% list_rbind() -``` - -Notice that the ahead and horizon are what we are are changing when we use `map()`. The reason we must also change `horizon` is because that is passed to the `h` argument of `epiprocess::growth_rate()` and determines the amount of data used to calculate the growth rate. So, for nearly all intents and purposes, it should be the same as `ahead`. - -We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting: - -```{r} -ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + - geom_tile() + - ylab("State") + - xlab("Target date") - -``` - -While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. - -## A brief reflection - -The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). #%% takes a complex turn, increases in complexity - From e7ec83651713feb1eb9d5e8ccbf543e8b9f92034 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:06:30 -0700 Subject: [PATCH 138/382] Try adding vignette again --- vignettes/arx-classifier-vignette.Rmd | 160 ++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 vignettes/arx-classifier-vignette.Rmd diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd new file mode 100644 index 000000000..ee64db0bc --- /dev/null +++ b/vignettes/arx-classifier-vignette.Rmd @@ -0,0 +1,160 @@ +--- +title: "arx_classifier" +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + echo = TRUE, + collapse = FALSE, + comment = "#>", + warning = FALSE, + message = FALSE, + cache = TRUE +) +``` + +## Load required packages + +```{r, message = FALSE, warning = FALSE} +library(tidyverse) +library(epipredict) +``` + +## Introducing the ARX classifier + +The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. + +To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: + +```{r} +jhu <- case_death_rate_subset %>% + dplyr::filter( + time_value >= "2021-06-04", + time_value <= "2021-12-31", + geo_value %in% c("ca", "fl", "tx", "ny", "nj") + ) + +out <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate" +) + +out$predictions +``` + +The key takeaway from the predictions is that there are two prediction classes: (-Inf, 0.25] and (0.25, Inf). This is because for our goal of classification the classes must be discrete. The discretization of the real-valued outcome is controlled by the `breaks` argument, which defaults to 0.25. Such breaks will be automatically extended to cover the entire real line. For example, the default break of 0.25 is silently extended to breaks = c(-Inf, .25, Inf) and, therefore, results in two classes: [-Inf, 0.25] and (0.25, Inf). These two classes are used to discretize the outcome. The conversion of the outcome to such classes is handled internally. So if discrete classes already exist for the outcome in the `epi_df`, then we recommend to code a classifier from scratch using the `epi_workflow` framework for more control. + +The `trainer` is a `parsnip` model describing the type of estimation such that `mode = "classification"` is enforced. The two typical trainers that are used are `parsnip::logistic_reg()` for two classes or `parsnip::multinom_reg()` for more than two classes. + +```{r} +workflows::extract_spec_parsnip(out$epi_workflow) +``` + +From the parsnip model specification, we can see that the trainer used is logistic regression, which is expected for our binary outcome. More complicated trainers like `parsnip::naive_Bayes()` or `parsnip::rand_forest()` may also be used (however, we will stick to the basics in this gentle introduction to the classifier). + +If you use the default trainer of logistic regression for binary classification and you decide against using the default break of 0.25, then you should only input one break so that there are two classification bins to properly dichotomize the outcome. For example, let's set a break of 0.5 instead of relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: + +```{r} +out_break_0.5 <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.5 + ) +) + +out_break_0.5$predictions +``` +Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). + +```{r} +?arx_class_args_list +``` + +Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key as well as `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on these arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. + +## Example of using the ARX classifier + +Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. + +To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? #%% Ok to say relative to the present? Also, should I be more precise here and say relative change or best to keep it simple? + +To answer this question, we can create a predictive model for upsurges and downsurges of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes + +$$\begin{align} +Z_{l,t} = \left\{\begin{matrix} +\text{up,} & \text{if } Y_{l,t}^\Delta > 0.25\\ +\text{not up,} & \text{otherwise} +\end{matrix}\right. +\end{align}$$ +where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t- 7} / Y_{l, t- 7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. + +The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html): + +$$\begin{align} +\pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ +\pi_{\text{not up}}(x)&= Pr(Z_{l, t} = \text{not up}|x) = 1 - Pr(Z_{l, t} = \text{up}|x) = \frac{1}{1 + e^{g_{\text{up}}(x)}} +\end{align}$$ +where + +$$ +g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}t + \delta_{10}s_{state_1} + \delta_{10}s_{state_2} ... + \beta_{12}Y_{l,t}^\Delta + \beta_{13}Y_{l,t-7}^\Delta + \beta_{14}Y_{l,t-14}^\Delta. +$$ + +Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. + +Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). + +```{r} +log_res <- arx_classifier( + jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.25 / 7 # division by 7 gives weekly not daily + ) +) + +workflows::extract_preprocessor(log_res$epi_workflow) +``` + +Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). + +On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. #%% Last sentence correct? + +The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for [`epiprocess::growth_rate()`](https://cmu-delphi.github.io/epiprocess/reference/growth_rate.html) and the related [vignette](https://cmu-delphi.github.io/epiprocess/articles/growth_rate.html). + +### Visualizing the results + +To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: + +```{r} +multi_log_res <- map(1:14, ~ arx_classifier( + jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.25 / 7, + ahead = .x, + horizon = .x, + ))$predictions) %>% list_rbind() +``` + +Notice that the ahead and horizon are what we are are changing when we use `map()`. The reason we must also change `horizon` is because that is passed to the `h` argument of `epiprocess::growth_rate()` and determines the amount of data used to calculate the growth rate. So, for nearly all intents and purposes, it should be the same as `ahead`. + +We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting: + +```{r} +ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + + geom_tile() + + ylab("State") + + xlab("Target date") + +``` + +While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. + +## A brief reflection + +The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). #%% takes a complex turn, increases in complexity + From dd08998086bcbd4021b9c728b95c426ec3c5f52d Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:09:33 -0700 Subject: [PATCH 139/382] Added smooth qr vignette --- vignettes/smooth-qr.Rmd | 303 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 vignettes/smooth-qr.Rmd diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd new file mode 100644 index 000000000..777379120 --- /dev/null +++ b/vignettes/smooth-qr.Rmd @@ -0,0 +1,303 @@ +--- +title: "Smooth Quantile Regression" +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + collapse = FALSE, + comment = "#>", + warning = FALSE, + message = FALSE, + cache = TRUE +) +``` + +# Introducing smooth quantile regression + +Whereas the standard application of time-series forecasting techniques has been to forecast single horizons, in multi-period forecasting, the goal is to forecast several horizons simultaneously. The standard application of these techniques aims to predict the signal for a single forecast horizon (or "ahead"), most often one-step-ahead. This is useful in epidemiological applications where decisions are often based on the trend of a signal. + +The idea underlying smooth quantile regression that the future can be approximated by a smooth curve. So this approach enforces smoothness across the horizons for point estimation by regression or interval prediction by quantile regression. Our focus in this chapter is the latter. + +# Built-in function for smooth quantile regression and its parameters + +The built-in smooth quantile regression function, `smooth_quantile_reg()` provides a model specification for smooth quantile regression that works under the tidymodels framework. It has the following parameters and default values: + +```{r, eval = FALSE} +smooth_quantile_reg( + mode = "regression", + engine = "smoothqr", + outcome_locations = NULL, + quantile_levels = 0.5, + degree = 3L +) +``` + +For smooth quantile regression, the type of model or `mode` is regression. + +The only `engine` that is currently supported is `smooth_qr()` from the [`smooth_qr` package](https://dajmcdon.github.io/smoothqr/). + +The `outcome_locations` indicate the multiple horizon (ie. ahead) values. These should be specified by the user. + +The `quantile_levels` parameter is a vector of values that indicates the quantiles to be estimated. The default is the median (0.5 quantile). + +The `degree` parameter indicates the number of polynomials used for smoothing of the response. It should be no more than the number of responses. If the degree is precisely equal to the number of aheads, then there is no smoothing. To better understand this parameter and how it works, we should look to its origins and how it is used in the model. + +# Model form + +Smooth quantile regression is linear auto-regressive, with the key feature being a transformation that forces the coefficients to satisfy a constraint. The purpose if this is for each model coefficient to be a smooth function of ahead values, and so each such coefficient is set to be a linear combination of smooth basis functions (such as a spline or a polynomial). + +The `degree` parameter controls the number of these polynomials used. It should be no greater than the number of responses. This is a tuning parameter, and so it can be chosen by performing a grid search with cross-validation. Intuitively, $d = 1$ corresponds to the constant model, $d = 2$ gives straight line forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was found to work well in the tested applications (see Section 9 of Tuzhilina et al, 2022), it is the default value. + +# Demonstration of smooth quantile regression + +```{r, message = FALSE} +library(epipredict) +library(tidyverse) +``` + +We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec 31, 2020 to Dec 31, 2021. + +```{r} +edf <- case_death_rate_subset +``` + +We will set the forecast date to be November 30, 2021 so that we can produce forecasts for target dates of 1 to 28 days ahead. We construct our test data, `tedf` from the days beyond this. + +```{r} +fd <- as.Date("2021-11-30") + +tedf <- edf %>% filter(time_value >= fd) +``` + +We will use the most recent 3 months worth of data up to the forecast date for training. + +```{r} +edf <- edf %>% filter(time_value < fd, time_value >= fd - 90L) +``` + +And for plotting our focus will be on a subset of two states - California and Utah. + +```{r} +geos <- c("ut", "ca") +``` + +Suppose that our goal with this data is to predict COVID-19 death rates at several horizons for each state. On day $t$, we want to predict new deaths $y$ that are $a = 1,\dots, 28$ days ahead at locations $j$ using the death rates from today, 1 week ago, and 2 weeks ago. So for each location, we'll predict the median (0.5 quantile) for each of the target dates by using +$$ +\hat{y}_{j}(t+a) = \alpha(a) + \sum_{l = 0}^2 \beta_{l}(a) y_{j}(t - 7l) +$$ +where $\beta_{l}(a) = \sum_{i=1}^d \theta_{il} h_i(a)$ is the smoothing constraint where ${h_1(a), \dots, h_d(a)}$ are the set of smooth basis functions and $d$ is a hyperparameter that manages the flexibility of $\beta_{l}(a)$. Remember that the goal is to have each $\beta_{l}(a)$ to be a smooth function of the aheads and that is achieved through imposing the smoothing constraint. + +Note that this model is intended to be simple and straightforward. Our only modification to this model is to add case rates as another predictive feature (we will leave it to the reader to incorporate additional features beyond this and the historical response values). We can update the basic model incorporate the $k = 2$ predictive features of case and death rates for each location j, $x_j(t) = (x_{j1}(t), x_{j2}(t))$ as follows: + +$$ +\hat{y}_{j}(t+a) = \alpha(a) + \sum_{k = 1}^2 \sum_{l = 0}^2 \beta_{kl}(a) x_{jk}(t - 7l) +$$ +where $\beta_{kl}(a) = \sum_{i=1}^d \theta_{ikl} h_i(a)$. + +Now, we will create our own forecaster from scratch by building up an `epi_workflow` (there is no canned forecaster that is currently available). Building our own forecaster allows for customization and control over the pre-processing and post-processing actions we wish to take. + +The pre-processing steps we take in our `epi_recipe` are simply to lag the predictor (by 0, 7, and 14 days) and lead the response by the multiple aheads specified by the function user. + +The post-processing layers we add to our `frosting` are nearly as simple. We first predict, unnest the prediction list-cols, omit NAs from them, and enforce that they are greater than 0. + +The third component of an to an `epi_workflow`, the model, is smooth quantile regression, which has three main arguments - the quantiles, aheads, and degree. + +After creating our `epi_workflow` with these components, we get our test data based on longest lag period and make the predictions. + +We input our forecaster into a function for ease of use. + +```{r} +smooth_fc <- function(x, aheads = 1:28, degree = 3L, quantiles = 0.5, fd){ +rec <- epi_recipe(x) %>% + step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = aheads) + +f <- frosting() %>% + layer_predict() %>% + layer_unnest(.pred) %>% + layer_naomit(distn) %>% + layer_add_forecast_date() %>% + layer_threshold(distn) + +ee <- smooth_quantile_reg( + quantile_levels = quantiles, + outcome_locations = aheads, + degree = degree +) + +ewf <- epi_workflow(rec, ee, f) + +the_fit <- ewf %>% fit(x) + +latest <- get_test_data(rec, x, fill_locf = TRUE) + +preds <- predict(the_fit, new_data = latest) %>% + mutate(forecast_date = fd, target_date = fd + ahead) %>% + select(geo_value, target_date, distn, ahead) %>% + pivot_quantiles_wider(distn) + +preds +} +``` + +Notice that we allow the function user to specify the aheads, degree, and quantile as they may want to change these parameter values. We also allow for input of the forecast date as we fixed that at the onset of this demonstration. + +We now can produce smooth quantile regression predictions for our problem: + +```{r, warning = FALSE} +smooth_preds <- smooth_fc(edf, fd = fd) + +head(smooth_preds) +``` +Most often, we're not going to want to limit ourselves to just predicting the median value as there is uncertainty about the predictions, so let's try to predict several different quantiles in addition to the median: + +```{r, warning = FALSE} +smooth_preds <- smooth_fc(edf, quantiles = c(.1, .25, .5, .75, .9), fd = fd) + +head(smooth_preds) +``` + +We can see that we have different columns for the different quantile predictions. + +Let's visualize these results for the sample of two states. We will create a simple plotting function, under which the median predictions are an orange line and the surrounding quantiles are blue bands around this. For comparison, we will include the actual values over time as a black line. + +```{r} +plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd){ + + if (!is.null(geos_to_plot)) { + preds <- preds %>% filter(geo_value %in% geos_to_plot) + train_test_dat <- train_test_dat %>% filter(geo_value %in% geos_to_plot) + } + + ggplot(preds) + + geom_ribbon(aes(target_date, ymin = `0.1`, ymax = `0.9`), + fill = "cornflowerblue", alpha = .8) + + geom_ribbon(aes(target_date, ymin = `0.25`, ymax = `0.75`), + fill = "#00488E", alpha = .8) + + geom_line(data = train_test_dat, aes(time_value, death_rate), size = 1.5) + + geom_line(aes(target_date, `0.5`), color = "orange", size = 1.5) + + geom_vline(xintercept = fd) + + facet_wrap(~geo_value) + + theme_bw(16) + + scale_x_date(name = "", date_labels = "%b %Y") + + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + + ylab("Deaths per 100K inhabitants") +} +``` + +Since we would like to plot the actual death rates for these states over time, we bind the training and testing data together and input this into our plotting function as follows: + +```{r, warning = FALSE} +plot_preds(smooth_preds, geos, bind_rows(tedf, edf), fd) +``` + +We can see that the predictions are smooth curves for each state, as expected when using smooth quantile regression. In addition while the curvature of the forecasts matches that of the truth, the forecasts do not look remarkably accurate. + +## Varying the degrees parameter + +We can test the impact of different degrees by using the `map()` function. Let's try out all degrees from 1 to 7: + +```{r, warning = FALSE} +smooth_preds_list <- map(1:7, ~ smooth_fc(edf, + degree = .x, + quantiles = c(.1, .25, .5, .75, .9), + fd = fd) %>% + mutate(degree = .x) + +) %>% list_rbind() +``` + +One way to quantify the impact of these on the forecasting is to look at the mean absolute error (MAE) or mean squared error (MSE) over the degrees. We can select the degree that results in the lowest MAE. + +Since the MAE compares the predicted values to the actual values, we will first join the test data to the predicted data for our comparisons: +```{r, message = FALSE} +tedf_sub <- tedf %>% + rename(target_date = time_value, actual = death_rate) %>% + select(geo_value, target_date, actual) + +smooth_preds_df_deg = smooth_preds_list %>% + left_join(tedf_sub) +``` + +And then compute the MAE for each of the degrees: +```{r, message = FALSE} +smooth_preds_df_deg = smooth_preds_list %>% + left_join(tedf_sub) %>% + group_by(degree) %>% + mutate(error = abs(`0.5` - actual)) %>% + summarise(mean = mean(error)) + +# Arrange the MAE from smallest to largest +head(smooth_preds_df_deg %>% arrange(mean)) +``` + +Instead of just looking at the raw numbers, let's create a simple line plot to visualize how the MAE changes over degrees for this data: + +```{r} +ggplot(smooth_preds_df_deg, aes(degree, mean)) + + geom_line() + + xlab("Degrees of freedom") + + ylab("Mean MAE") +``` + +We can see that the degree that results in the lowest MAE is 3. Hence, we could pick this degree for future forecasting work on this data. + +## A brief comparison between smoothing and no smoothing + +Now, we will briefly compare the results from using smooth quantile regression to those obtained without smoothing. The latter approach amounts to ordinary quantile regression to get predictions for the intended target date. The main drawback is that it ignores the fact that the responses all represent the same signal, just for different ahead values. In contrast, the smooth quantile regression approach utilizes this information about the data structure - the fact that the aheads in are not be independent of each other, but rather they are naturally related over time by a smooth curve. + +To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. +```{r, warning = FALSE} +baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = c(.1, .25, .5, .75, .9), fd = fd) +``` + +And we can produce the corresponding plot to inspect the predictions obtained under the baseline model: + +```{r, warning = FALSE} +plot_preds(baseline_preds, geos, bind_rows(tedf, edf), fd) +``` + +Unlike for smooth quantile regression, the resulting forecasts are not smooth curves, but rather jagged and irregular in shape. + +For a more formal comparison between the two approaches, we could compare the test performance in terms of accuracy through calculating either the, MAE or MSE, where the performance measure of choice can be calculated over over all times and locations for each ahead value + +```{r, message = FALSE} +baseline_preds_df = baseline_preds %>% + left_join(tedf_sub) %>% + group_by(ahead) %>% + mutate(error = abs(`0.5` - actual)) %>% + summarise(mean = mean(error)) %>% + mutate(type = "baseline") + +smooth_preds_df = smooth_preds %>% + left_join(tedf_sub) %>% + group_by(ahead) %>% + mutate(error = abs(`0.5` - actual)) %>% + summarise(mean = mean(error)) %>% + mutate(type = "smooth") + +preds_df <- bind_rows(baseline_preds_df, smooth_preds_df) + +ggplot(preds_df, aes(ahead, mean, color = type)) + + geom_line() + + xlab("Ahead") + + ylab("Mean MAE") +``` + +or over all aheads, times, and locations for a single numerical summary. + +```{r} +mean(baseline_preds_df$mean) +mean(smooth_preds_df$mean) +``` + +The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. This demonstrates the standard conclusion that the farther ahead in time, the more challenging the forecasting. The latter shows that the smooth quantile regression model and baseline models perform very similarly, with the smooth quantile regression model only slightly beating the baseline model in terms of overall MAE. + +# What we've learned in a nutshell + +Smooth quantile regression is used in multi-period forecasting for predicting several horizons simultaneously with a single smooth curve. It operates under the key assumption that the future of the response can be approximated well by a smooth curve. + +# Attribution + +The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). \ No newline at end of file From 540fa2acd08b4060e9df4db9cf8510a8f73a9674 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:15:10 -0700 Subject: [PATCH 140/382] Added symptom surveys vignette --- vignettes/symptom-surveys.Rmd | 597 ++++++++++++++++++++++++++++++++++ 1 file changed, 597 insertions(+) create mode 100644 vignettes/symptom-surveys.Rmd diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd new file mode 100644 index 000000000..845adf410 --- /dev/null +++ b/vignettes/symptom-surveys.Rmd @@ -0,0 +1,597 @@ +--- +title: "Can Symptoms Surveys Improve COVID-19 Forecasts?" +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + echo = TRUE, + collapse = FALSE, + comment = "#>", + warning = FALSE, + message = FALSE, + cache = TRUE +) +``` + +# Introduction + +During the COVID-19 pandemic, Delphi ran COVID-19 symptom surveys through Facebook and Google. In these surveys, millions of +people in the US were asked whether they or the people that they know are experiencing COVID-like symptoms. This enabled the +calculation of a "% CLI-in-community" signal for counties across the US. This is simply an estimate of the percentage of people who know someone who is presently sick with a COVID-like illness. + +These surveys were valuable tools for monitoring the pandemic because they reported daily and not subject to reporting delays that plague other sources of data. + +In this chapter, we will look at whether the % CLI-in-community indicators from the Facebook and Google surveys improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The purpose here is to study and demonstrate the value of the Facebook and Google % CLI-in-community signals to add predictive power beyond what we can achieve with simple time series models trained on case rates alone. + +Now, we will delve into the forecasting problem set-up and code followed by a discussion of the results. + +## Problem Setup + +Our goal is to predict county-level COVID-19 case incidence rates for 1 and 2 weeks ahead. For this, we restrict our attention to the 442 counties that had at least 200 confirmed cases by May 14, 2020 (the end of the Google survey data) and in which both the Facebook and Google % CLI-in-community signals are available. + +To set the notation, let $Y_{l,t}$ denote the smoothed COVID-19 case incidence rate for location (county) $l$ and day $t$. Let $F_{l,t}$ and $G_{l,t}$ denote the Facebook and Google % CLI-in-community signals, respectively, for location $l$ and time $t$. Note that we rescale all these signals from their given values in our API so that they are true proportions. We then evaluate the following four models: + +$$ +\begin{align} +h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) \\ +h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) + \sum_{j = 0}^2 \gamma_j h(F_{l, t-7j}) \\ +h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) + \sum_{j = 0}^2 \tau_j h(G_{l, t-7j}) \\ +h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) + \sum_{j = 0}^2 \gamma_j h(F_{l, t-7j}) + \sum_{j = 0}^2 \tau_j h(G_{l, t-7j}) +\end{align} +$$ +Here $d = 7$ or $d = 14$ depending on the target value, and $h$ is a transformation to be specified later. + +We'll call the first model the "Cases" model because it bases its predictions of future case rates on COVID-19 case rates (from 0, 1 and 2 weeks back). The second model is called "Cases + Facebook" because it additionally incorporates the current Facebook signal, and the Facebook signal from 1 and 2 weeks back. The third model, "Cases + Google", is exactly the same as the second but substitutes the Google signal instead of the Facebook one. The fourth and final model model, "Cases + Facebook + Google", uses both Facebook and Google signals. For each model, we use our canned autoregressive forecaster with quantile regression to forecast at time $t_0$ (and predict case rates at $t_0 + d$). We train over training over all locations, $l$ (all 442 counties), and all time $t$ that are within the most recent 14 days of data available up to and including time $t_0$. In other words, we use 14 trailing days for the training set. + +The forecasts are denoted by $\hat{Y}_{l, t_0 + d}$. To see how accurate these forecasts are, we use the scaled absolute error: + +$$ +\frac{| \hat{Y}_{l, t_0 + d} - Y_{l, t_0 + d} |} {| Y_{l, t_0} - Y_{l, t_0 + d} |} +$$ + +where the error in the denominator is the strawman model error. This model simply uses the most recent case rate for future predictions. You may recognize this as an application of the flatline forecaster from `epipredict`. + +We normalize in this manner for two reasons. First, since the scaled error is the fraction improvement over the strawman’s error, we get an interpretable scale, where numebrs like 0.8 or 0.9 are favorable, and numbers like 2 or 5 are increasingly disastrous. Second, in such problems we should expect considerable county-to-county variability in the forecasting difficulty. Normalizing by the strawman's error helps to adjust for this so that the results on aggregate are not dominated by the county-to-county differences. + +## Transformations + +To help stabilize the variance of the case, Facebook and Google data, we chose to use the logit transformation on their proportions. In actuality, we use a "padded" version $h(x) = \log (\frac{x+a}{1-x+a})$ such that the numerator and denominator are pushed away from zero by a small constant, $a = 0.01$. An alternative to the logit transform is using a log transform (as in $h(x) = \log (x+a)$ where $a$ is for padding). Note that such variance-stabilizing transformations are used in the model fitting. When we calculate the errors, we back-transform the values for comparison using the inverse transform $h^{-1}$ so that we may calculate them on the original scale. + +## Forecasting Code + +The code below marches the forecast date $t_0$ forward, one day at a time for the nine forecasting dates for which the four models can all be fit (May 6, 2020 to May 14, 2020). Then, it fits the models, makes predictions 7 and 14 days ahead (as permissible by the data), and records the errors. + +There are a number of benefits to using `epipredict` over writing the code from scratch to fit and predict under each of the models. First, we do not have to reformat the data for input into a model or concern ourselves with its unique interface. We instead work under unifying interface to streamline the modelling process. Second, we avoid having to write our own function to append shift values (leads or lags). This is done for us under-the-hood in the `arx_forecaster()` function. You can see this in the forecaster output by inspecting the `step_epi_lag()` and `step_epi_ahead()` pre-processing steps in the `epi_workflow`. Third, we only need one for loop for the forecast dates (and not a second loop for the different aheads) as we can easily use `map()` with the `arx_forecaster()` over the different ahead values, as we’ve done before. + +However, there are some trade-offs to bear in mind. For instance, since we are using a canned arx forecaster, we are not able to easily modify and add steps such as that for signal transformations to the pre-processing (this is pre-specified as part of using a canned forecaster). If we were to code-up our own forecaster under the `epipredict` framework, we could easily add steps to re-scale and transform the signals to our `epi_recipe`. This would make the code more succinct and self-contained. + +```{r, message = FALSE, warning = FALSE} +library(covidcast) +library(tidyverse) +library(epipredict) +library(recipes) + +case_num = 200 +as_of_date = "2020-05-14" +geo_values = covidcast_signal("jhu-csse", "confirmed_cumulative_num", + "2020-05-14", "2020-05-14") %>% + filter(value >= case_num) %>% pull(geo_value) + +# Fetch county-level Google and Facebook % CLI-in-community signals, and JHU +# confirmed case incidence proportion +start_day = "2020-04-11" +end_day = "2020-09-01" + +g = covidcast_signal("google-survey", "smoothed_cli") %>% + filter(geo_value %in% geo_values) %>% + select(geo_value, time_value, value) +f = covidcast_signal("fb-survey", "smoothed_hh_cmnty_cli", + start_day, end_day) %>% + filter(geo_value %in% geo_values) %>% + select(geo_value, time_value, value) +c = covidcast_signal("jhu-csse", "confirmed_7dav_incidence_prop", + start_day, end_day) %>% + filter(geo_value %in% geo_values) %>% + select(geo_value, time_value, value) + +# Rename columns +colnames(g) = sub("^value", "goog", colnames(g)) +colnames(f) = sub("^value", "fb", colnames(f)) +colnames(c) = sub("^value", "case", colnames(c)) + +# Find "complete" counties, present in all three data signals at all times +geo_values_complete = intersect(intersect(g$geo_value, f$geo_value), + c$geo_value) + +# Make one big matrix by joining these three data frames +z = full_join(full_join(g, f, by = c("geo_value", "time_value")), + c, by = c("geo_value", "time_value")) %>% + filter(geo_value %in% geo_values_complete) %>% + as_epi_df() + +Logit = function(x, a = 0.01) log((x + a) / (1 - x + a)) +Sigmd = function(y, a = 0.01) (exp(y) * (1 + a) - a) / (1 + exp(y)) + +#### Parameters ##### + +# Transforms to consider, in what follows +trans = Logit +inv_trans = Sigmd + +# Rescale factors for our signals: bring them all down to proportions (between +# 0 and 1) +rescale_f = 1e-2 # Originally a percentage +rescale_g = 1e-2 # Originally a percentage +rescale_c = 1e-5 # Originally a count per 100,000 people + +z = z %>% mutate(case = trans(case * rescale_c), + fb = trans(fb * rescale_f), + goog = trans(goog * rescale_g)) + +# lead = 7 +leads = c(7, 14) +lags = c(0, 7, 14) +n = 14 # Number of trailing days to use for the training set + +# Nine forecast dates +dates = seq(as.Date("2020-05-06"), as.Date("2020-05-14"), by = "day") + +# List for storage of results +out_list <- vector(mode = "list", length = length(dates)) +for(k in 1:length(dates)){ + + date = dates[k] + + if(date %in% c("2020-05-13", "2020-05-14")) leads = c(7, 14) else leads = 7 + + # Pre-structuring test data for this date + z_te = z %>% + rename(target_date = time_value, + target_case = case) %>% + select(geo_value, target_date, target_case) + + # Strawman model + out_df0 <- map(leads, ~ flatline_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case), + outcome = "case", + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err0 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err0, lead) + + + # Cases model + out_df1 <- map(leads, ~ arx_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case) %>% + filter(complete.cases(.)), + outcome = "case", + predictors = "case", + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err1 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err1, lead) + + # Cases and Facebook model + out_df2 <- map(leads, ~ arx_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case, fb) %>% + filter(complete.cases(.)), + outcome = "case", + predictors = c("case", "fb"), + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err2 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err2, lead) + + + # Cases and Google model + out_df3 <- map(leads, ~ arx_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case, goog) %>% + filter(complete.cases(.)), + outcome = "case", + predictors = c("case", "goog"), + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err3 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err3, lead) + + # Cases, Facebook and Google model + out_df4 <- map(leads, ~ arx_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case, fb, goog) %>% + filter(complete.cases(.)), + outcome = "case", + predictors = c("case", "goog"), + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err4 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err4, lead) + + # Left join of the results for all models + out_list[[k]] = left_join(left_join(left_join(left_join(out_df0, out_df1), out_df2), out_df3), out_df4) +} +# Outside of loop bind rows of list +out_df = do.call(rbind, out_list) +``` + +## Results: All Four Models + +Since there are only two common forecast dates available for the four models for the 14-day-ahead forecasts (May 13 and May 14, 2020), we skip studying the 14-day-ahead forecast results in this four-way model discussion. + +Below we compute the median scaled errors for each of the four models over the 9-day test period. We can see that adding either or both of the survey signals improves on the median scaled error of the model that uses cases only, with the biggest gain achieved by the "Cases + Google" model. We can also see that the median scaled errors are all close to 1 (with all but that from the "Cases + Google" and "Cases + Facebook + Google" models exceeding 1), which speaks to the difficulty of the forecasting problem. + +```{r} +library(dplyr) +library(tidyr) +library(ggplot2) + +model_names = c("Cases", "Cases + Facebook", "Cases + Google", + "Cases + Facebook + Google") + +# Calculate the scaled errors for each model, that is, the error relative to the strawman's error +res_all4 = out_df %>% + drop_na() %>% # Restrict to common time + mutate(err1 = err1 / err0, err2 = err2 / err0, # Compute relative error + err3 = err3 / err0, err4 = err4 / err0) %>% # to strawman model + mutate(dif12 = err1 - err2, dif13 = err1 - err3, # Compute differences + dif14 = err1 - err4) %>% # relative to cases model + ungroup() %>% + select(-err0) + +# Calculate and print median errors, for all 4 models, and just 7 days ahead +res_err4 = res_all4 %>% + select(-starts_with("dif")) %>% + pivot_longer(names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead)) %>% + mutate(lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = model_names)) + +knitr::kable(res_err4 %>% + group_by(model, lead) %>% + summarize(err = median(err), n = length(unique(forecast_date))) %>% + arrange(lead) %>% ungroup() %>% + rename("Model" = model, "Median scaled error" = err, + "Target" = lead, "Test days" = n) %>% + filter(Target == "7 days ahead"), + caption = paste("Test period:", min(res_err4$forecast_date), "to", + max(res_err4$forecast_date)), + format = "html", table.attr = "style='width:70%;'") +``` +$$\\[0.01in]$$ +Are these differences in median scaled errors significant? Some basic hypothesis testing suggests that some probably are: Below we conduct a sign test for whether the difference in the "Cases" model’s scaled error and each other model’s scaled error is centered at zero. The sign test is run on the 9 test days x 442 counties = 3978 pairs of scaled errors. The p-value from the "Cases" versus "Cases + Google" test is tiny and well below a cutoff of 0.01. In contrast, the p-values from the "Cases" versus "Cases + Facebook" and the "Cases" versus "Cases + Facebook + Google" tests are much bigger and exceed this cutoff, suggesting that the Facebook survey is not adding as much for this situation (meaning the time and ahead considered, etc.) + +```{r} +# Compute p-values using the sign test against a one-sided alternative, for +# all models, and just 7 days ahead +res_dif4 = res_all4 %>% + select(-starts_with("err")) %>% + pivot_longer(names_to = "model", values_to = "dif", + cols = -c(geo_value, forecast_date, lead)) %>% + mutate(lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, + labels = c("Cases vs Cases + Facebook", + "Cases vs Cases + Google", + "Cases vs Cases + Facebook + Google"))) + +knitr::kable(res_dif4 %>% + group_by(model, lead) %>% + summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater")$p.val) %>% + ungroup() %>% filter(lead == "7 days ahead") %>% + rename("Comparison" = model, "Target" = lead, "P-value" = p), + format = "html", table.attr = "style='width:50%;'") +``` +$$\\[0.01in]$$ +We should take these test results with a grain of salt because the sign test assumes independence of observations, which clearly cannot be true given the spatiotemporal structure of our forecasting problem. To mitigate the dependence across time (which intuitively seems to matter more than that across space), we recomputed these tests in a stratified way, where for each day we run a sign test on the scaled errors between two models over all 442 counties. The results are plotted as histograms below; the "Cases + Google" and (to a lesser extent) the "Cases + Facebook + Google" models appear to deliver some decently small p-values, but this is not very evident with the "Cases + Facebook" model. Taking a larger sample size (of more than nine test days) would be a natural next step to take to see if these results persist. + +```{r} +# Red, blue (similar to ggplot defaults), then yellow +ggplot_colors = c("#FC4E07", "#00AFBB", "#E7B800") + +ggplot(res_dif4 %>% + group_by(model, lead, forecast_date) %>% + summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater")$p.val) %>% + ungroup() %>% filter(lead == "7 days ahead"), aes(p)) + + geom_histogram(aes(color = model, fill = model), alpha = 0.4) + + scale_color_manual(values = ggplot_colors) + + scale_fill_manual(values = ggplot_colors) + + facet_wrap(vars(lead, model)) + + labs(x = "P-value", y = "Count") + + theme_bw() + theme(legend.position = "none") +``` + +## Results: First Two Models + +One way to get a larger sample size with the current data is to compare a subset of the models. Therefore, next we focus on comparing results between the "Cases" and "Cases + Facebook" models only. Restricting to common forecast dates for these two models yields a much longer test period for the 7 and 14-day-ahead forecasts: May 20 through August 27, 2020. We make the code to compare these two models a simple function so that we have the option to use it over different dates or aheads (in particular, this function will be useful for the next section where we explore several ahead values): + +```{r} +case_fb_mods <- function(forecast_dates, leads){ + + # List for storage of results + out_list <- vector(mode = "list", length = length(forecast_dates)) + for(k in 1:length(forecast_dates)){ + + date = forecast_dates[k] + + z_te = z %>% + rename(target_date = time_value, + target_case = case) %>% + select(geo_value, target_date, target_case) + + # Strawman model + out_df0 <- map(leads, ~ flatline_forecaster( + z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case), + outcome = "case", + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err0 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err0, lead) + + # Cases model + out_df1 <- map(leads, ~ arx_forecaster( + z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case) %>% filter(complete.cases(.)), + outcome = "case", + predictors = "case", + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err1 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err1, lead) + + # Cases and Facebook model + out_df2 <- map(leads, ~ arx_forecaster( + z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, fb) %>% filter(complete.cases(.)), + outcome = "case", + predictors = c("case", "fb"), + trainer = quantile_reg(), + args_list = arx_args_list( + lags = lags, + ahead = .x, + nonneg = FALSE + ) + )$predictions %>% + mutate(lead = .x) %>% + left_join(z_te %>% filter(target_date == (date + .x)), by = c("geo_value", "target_date"))) %>% + list_rbind() %>% + mutate(err2 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% + select(geo_value, forecast_date, err2, lead) + + # Left join of the results for all models + out_list[[k]] = left_join(left_join(out_df0, out_df1), out_df2) + } + # Outside of loop bind rows and split into two lists by lead + out_df = do.call(rbind, out_list) +} + +# Choose forecast dates common to the Cases and Cases + Facebook models +dates = seq(as.Date("2020-05-20"), as.Date("2020-08-27"), by = "day") + +# Two leads to consider +leads = c(7, 14) + +res <- case_fb_mods(dates, leads) +``` + +The median scaled errors over the test period are computed and reported below. Now we see a decent improvement in median scaled error for the "Cases + Facebook" model, which is true for both 7-day-ahead and 14-day-ahead forecasts. + +```{r} +# For just models 1 and 2, then calculate the scaled +# errors, that is, the error relative to the strawman's error +res_all2 = res %>% + drop_na() %>% # Restrict to common time + mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error + # to strawman model + mutate(dif12 = err1 - err2) %>% # Compute differences + # relative to cases model + ungroup() %>% + select(-err0) + +# Calculate and print median errors, for just models 1 and 2, and both 7 and 14 +# days ahead +res_err2 = res_all2 %>% + select(-starts_with("dif")) %>% + pivot_longer(names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead)) %>% + mutate(lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = model_names[1:2])) + +knitr::kable(res_err2 %>% + select(-starts_with("dif")) %>% + group_by(model, lead) %>% + summarize(err = median(err), n = length(unique(forecast_date))) %>% + arrange(lead) %>% ungroup() %>% + rename("Model" = model, "Median scaled error" = err, + "Target" = lead, "Test days" = n), + caption = paste("Test period:", min(res_err2$forecast_date), "to", + max(res_err2$forecast_date)), + format = "html", table.attr = "style='width:70%;'") +``` +$$\\[0.01in]$$ + +Thanks to the extended length of the test period, we can also plot the trajectories of the median scaled errors over time, as we do below, with the left plot concerning 7-day-ahead forecasts, and the right 14-day-ahead forecasts. These plots reveal something at once interesting and bothersome: the median scaled errors are quite volatile over time, and for some periods in July, forecasting became much harder, with the scaled errors reaching above 1.5 for 7-day-ahead forecasts, and above 1.8 for 14-day-ahead forecasts. Furthermore, we can see a clear visual difference between the median scaled errors from the "Cases + Facebook" model in red and the "Cases" model in black. The former appears to be below the latter during periods with low median scaled errors and above during periods where forecasting becomes hard and the scaled errors shoot above 1. This suggests that the Facebook signal may be more useful to incorporate during periods of time where forecasting is easier. + +```{r} +# Plot median errors as a function of time, for models 1 and 2, and both 7 and +# 14 days ahead +ggplot(res_err2 %>% + group_by(model, lead, forecast_date) %>% + summarize(err = median(err)) %>% ungroup(), + aes(x = forecast_date, y = err)) + + geom_line(aes(color = model)) + + scale_color_manual(values = c("black", ggplot_colors)) + + geom_hline(yintercept = 1, linetype = 2, color = "gray") + + facet_wrap(vars(lead)) + + labs(x = "Date", y = "Median scaled error") + + theme_bw() + theme(legend.position = "bottom", legend.title = element_blank()) +``` + +The fact that the lines are non-coincident suggests that the results we’re seeing here are likely to be significantly different, though it’s hard to say definitively given the complicated dependence structure present in the data. Below we perform a sign test for whether the difference in scaled errors from the "Cases" and "Cases + Facebook" models is centered at zero. The p-values are essentially zero, given the large sample sizes: 98 test days in total for the 7-day-ahead forecasts and 91 days for the 14-day-ahead forecasts (times 442 counties for each day). + +```{r} +# Compute p-values using the sign test against a one-sided alternative, just +# for models 1 and 2, and both 7 and 14 days ahead +res_dif2 = res_all2 %>% + select(-starts_with("err")) %>% + pivot_longer(names_to = "model", values_to = "dif", + cols = -c(geo_value, forecast_date, lead)) %>% + mutate(lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = "Cases > Cases + Facebook")) + +knitr::kable(res_dif2 %>% + group_by(model, lead) %>% + summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater")$p.val) %>% + ungroup() %>% + rename("Comparison" = model, "Target" = lead, "P-value" = p), + format = "html", table.attr = "style='width:50%;'") +``` +$$\\[0.01in]$$ + +If we stratify and recompute p-values by forecast date, the bulk of p-values are quite small. + +```{r} +ggplot(res_dif2 %>% + group_by(model, lead, forecast_date) %>% + summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater")$p.val) %>% + ungroup(), aes(p)) + + geom_histogram(aes(color = model, fill = model), alpha = 0.4) + + scale_color_manual(values = ggplot_colors) + + scale_fill_manual(values = ggplot_colors) + + facet_wrap(vars(lead, model)) + + labs(x = "P-value", y = "Count") + + theme_bw() + theme(legend.position = "none") +``` + +This exploration illustrates an important point: The test period should be chosen so that it is large enough in size to see differences (if there are any) between the models under comparison. While we did not observe significant differences between the "Cases" and "Cases + Facebook" models when the test period was small at 9 days, we did observe a significant difference over this extended test period of nearly 100 days. + +## Varying the Number of Days Ahead + +Statistical significance refers to whether an effect exists (as opposed to occurring by chance), while practical significance refers to the magnitude of the effect and whether it is meaningful in the real world. Hypothesis tests, such as the sign tests we conducted above, tell us whether the differences in errors are statistically significant, but not about their practical significance. For example, for 7-day-ahead forecasts, what does an improvement of 0.019 units on the scaled error scale really mean, when comparing the "Cases + Facebook" model to the "Cases" model? Is this a meaningful gain in practice? + +To answer questions such as these, we can look at the way that the median scaled errors behave as a function of the number of days ahead. Previously, we considered forecasting case rates just 7 and 14 days ahead. Now we will systematically examine 5 through 20 days ahead (the key difference in the code being that we use `leads = 5:20`). Note that running the code for this many leads may take a while. + +```{r} +# Consider a number of leads +leads = 5:20 + +res <- case_fb_mods(dates, leads) +``` + +We obtain and plot the median scaled errors for the "Cases" and "Cases + Facebook" models for different number of days ahead for the forecast target. This is done over May 20 through August 27 for the forecast dates that are common to the two models. + +```{r} +err_by_lead = res %>% + drop_na() %>% # Restrict to common time + mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error + # to strawman model + ungroup() %>% + select(-err0) %>% + pivot_longer(names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead)) %>% + mutate(model = factor(model, labels = model_names[1:2])) %>% + group_by(model, lead) %>% + summarize(err = median(err)) %>% + ungroup() + +ggplot(err_by_lead, aes(x = lead, y = err)) + + geom_line(aes(color = model)) + + geom_point(aes(color = model)) + + scale_color_manual(values = c("black", ggplot_colors)) + + geom_hline(yintercept = err_by_lead %>% + filter(lead %in% 7, model == "Cases") %>% pull(err), + linetype = 2, color = "gray") + + labs(title = "Forecasting errors by number of days ahead", + subtitle = sprintf("Over all counties with at least %i cumulative cases", + case_num), + x = "Number of days ahead", y = "Median scaled error") + + theme_bw() # + theme(legend.position = "bottom", legend.title = element_blank()) +``` + +A first glance shows that the "Cases + Facebook" model, in red, gives better median scaled errors at all ahead values. Furthermore, the vertical gap between the two curves is consistently in the range of what we were seeing before (for 7 and 14 days ahead), around 0.02 units on the scaled error scale. + +But if we look at this from a different angle, by considering the horizontal gap between the curves, then we can infer something quite a bit more interesting: For 7-day-ahead forecasts, the median scaled error of the "Cases" model (indicated by the horizontal gray line) is comparable to that of 12-day-ahead forecasts from the "Cases + Facebook" model. So using the % CLI-in-community signal from our Facebook survey buys us around 4 extra days of lead time for this forecasting problem, which is striking. As you might imagine, different forecast targets yield different lead times (for 14-day-ahead forecasts, it appears to be around 2 to 3 days of lead time), but the added value of the survey signal is clear throughout. + +## Wrap-Up + +In this chapter, we've shown that either of the Facebook or Google % CLI-in-community signals can improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The significance of these improvements is more apparent with the Facebook signal, thanks to the much larger test period. With either signal, the magnitude of the improvement offered seems modest but nontrivial, especially because the forecasting problem is so difficult in the first place. + +We reiterate that this was just a demo. Our analysis was fairly simple and lacks a few qualities that we’d expect in a truly comprehensive, realistic forecasting analysis. For reflection, let's discuss three possible areas to improve: + +1. The models we considered are simple autoregressive structures from standard time series and could be improved in various ways (including, considering other relevant dimensions like mobility measures, county health metrics, etc.). + +2. The forecasts we produced are point rather than distributional forecasts. That is, we predict a single number, rather than an entire distribution for what happens 7 and 14 days ahead. Distributional forecasts portray uncertainty in a transparent way, which is important in practice. + +3. The way we trained our forecast models does not account for data latency and revisions, which are critical issues. For each (retrospective) forecast date, $t_0$, we constructed forecasts by training on data that we fetched from the API today, "as of" the day of writing this, and not "as of" the forecast date. This matters because nearly all signals are subject to latency and go through multiple revisions. + +On the flip side, our example here was not that far away from being realistic. The models we examined are actually not too different from Delphi’s forecasters in production. Also, the way we fit the quantile regression models in the code extends immediately to multiple quantile regression (this just requires changing the parameter `quantile_levels` in the call to `quantile_reg()`). And lastly, it’s fairly easy to change the data acquisition step in the code so that data gets pulled "as of" the forecast date (this requires specifying the parameter `as_of` in the call to `covidcast_signal()` and should change per forecast date). + +Hopefully these preliminary findings have gotten you excited about the possible uses of this symptom survey data. For further practice, try your hand at implementing the suggested improvements or develop your own novel analytic approach to extract insights from this data. + +## Attribution + +This chapter was adapted from the following [Delphi blog post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), with the necessary modifications to enable the use of `epipredict`. Note that the results may be different from those on the blog post (one reason is that we are exploring the use of a different forecaster and another is that we're using the most recent versions of the datasets). + + From d974e43e6c43384c7e9c7df5eca08c595104abbd Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:24:41 -0700 Subject: [PATCH 141/382] Remove space --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index ee64db0bc..21892f087 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -24,7 +24,7 @@ library(epipredict) The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. -To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: +To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: ```{r} jhu <- case_death_rate_subset %>% From aeef3c31756b1ef799019e522defc8d02328d402 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:36:49 -0700 Subject: [PATCH 142/382] Spacing --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 21892f087..ee64db0bc 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -24,7 +24,7 @@ library(epipredict) The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. -To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: +To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: ```{r} jhu <- case_death_rate_subset %>% From 3df82b21a96cd5102e5a9be9079ecc0698bd9a5e Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:41:21 -0700 Subject: [PATCH 143/382] Try to get rid of error --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index ee64db0bc..21892f087 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -24,7 +24,7 @@ library(epipredict) The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. -To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: +To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: ```{r} jhu <- case_death_rate_subset %>% From e4d8fb6db47edf65cf078c612d041f3137d4a29f Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:49:59 -0700 Subject: [PATCH 144/382] Space --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 21892f087..001823fc2 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -31,7 +31,7 @@ jhu <- case_death_rate_subset %>% dplyr::filter( time_value >= "2021-06-04", time_value <= "2021-12-31", - geo_value %in% c("ca", "fl", "tx", "ny", "nj") + geo_value %in% c("ca", "fl", "tx", "ny", "nj") ) out <- arx_classifier(jhu, From 907aaa0a4ce285eb31149f8d3a239383fa1f7c72 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:03:17 -0700 Subject: [PATCH 145/382] Add period --- vignettes/smooth-qr.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 777379120..e8f382f46 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -55,7 +55,7 @@ library(epipredict) library(tidyverse) ``` -We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec 31, 2020 to Dec 31, 2021. +We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. ```{r} edf <- case_death_rate_subset @@ -300,4 +300,4 @@ Smooth quantile regression is used in multi-period forecasting for predicting se # Attribution -The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). \ No newline at end of file +The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). From c592da9f0cb2b107432a93154feb4a0dddf02a73 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:10:04 -0700 Subject: [PATCH 146/382] Styled active file --- vignettes/symptom-surveys.Rmd | 426 ++++++++++++++++++++-------------- 1 file changed, 250 insertions(+), 176 deletions(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 845adf410..81624d23c 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -71,89 +71,103 @@ library(tidyverse) library(epipredict) library(recipes) -case_num = 200 -as_of_date = "2020-05-14" -geo_values = covidcast_signal("jhu-csse", "confirmed_cumulative_num", - "2020-05-14", "2020-05-14") %>% - filter(value >= case_num) %>% pull(geo_value) +case_num <- 200 +as_of_date <- "2020-05-14" +geo_values <- covidcast_signal( + "jhu-csse", "confirmed_cumulative_num", + "2020-05-14", "2020-05-14" +) %>% + filter(value >= case_num) %>% + pull(geo_value) # Fetch county-level Google and Facebook % CLI-in-community signals, and JHU # confirmed case incidence proportion -start_day = "2020-04-11" -end_day = "2020-09-01" +start_day <- "2020-04-11" +end_day <- "2020-09-01" -g = covidcast_signal("google-survey", "smoothed_cli") %>% +g <- covidcast_signal("google-survey", "smoothed_cli") %>% filter(geo_value %in% geo_values) %>% select(geo_value, time_value, value) -f = covidcast_signal("fb-survey", "smoothed_hh_cmnty_cli", - start_day, end_day) %>% +f <- covidcast_signal( + "fb-survey", "smoothed_hh_cmnty_cli", + start_day, end_day +) %>% filter(geo_value %in% geo_values) %>% select(geo_value, time_value, value) -c = covidcast_signal("jhu-csse", "confirmed_7dav_incidence_prop", - start_day, end_day) %>% +c <- covidcast_signal( + "jhu-csse", "confirmed_7dav_incidence_prop", + start_day, end_day +) %>% filter(geo_value %in% geo_values) %>% select(geo_value, time_value, value) # Rename columns -colnames(g) = sub("^value", "goog", colnames(g)) -colnames(f) = sub("^value", "fb", colnames(f)) -colnames(c) = sub("^value", "case", colnames(c)) +colnames(g) <- sub("^value", "goog", colnames(g)) +colnames(f) <- sub("^value", "fb", colnames(f)) +colnames(c) <- sub("^value", "case", colnames(c)) # Find "complete" counties, present in all three data signals at all times -geo_values_complete = intersect(intersect(g$geo_value, f$geo_value), - c$geo_value) +geo_values_complete <- intersect( + intersect(g$geo_value, f$geo_value), + c$geo_value +) # Make one big matrix by joining these three data frames -z = full_join(full_join(g, f, by = c("geo_value", "time_value")), - c, by = c("geo_value", "time_value")) %>% +z <- full_join(full_join(g, f, by = c("geo_value", "time_value")), + c, + by = c("geo_value", "time_value") +) %>% filter(geo_value %in% geo_values_complete) %>% as_epi_df() -Logit = function(x, a = 0.01) log((x + a) / (1 - x + a)) -Sigmd = function(y, a = 0.01) (exp(y) * (1 + a) - a) / (1 + exp(y)) +Logit <- function(x, a = 0.01) log((x + a) / (1 - x + a)) +Sigmd <- function(y, a = 0.01) (exp(y) * (1 + a) - a) / (1 + exp(y)) #### Parameters ##### # Transforms to consider, in what follows -trans = Logit -inv_trans = Sigmd +trans <- Logit +inv_trans <- Sigmd # Rescale factors for our signals: bring them all down to proportions (between # 0 and 1) -rescale_f = 1e-2 # Originally a percentage -rescale_g = 1e-2 # Originally a percentage -rescale_c = 1e-5 # Originally a count per 100,000 people - -z = z %>% mutate(case = trans(case * rescale_c), - fb = trans(fb * rescale_f), - goog = trans(goog * rescale_g)) +rescale_f <- 1e-2 # Originally a percentage +rescale_g <- 1e-2 # Originally a percentage +rescale_c <- 1e-5 # Originally a count per 100,000 people + +z <- z %>% mutate( + case = trans(case * rescale_c), + fb = trans(fb * rescale_f), + goog = trans(goog * rescale_g) +) # lead = 7 -leads = c(7, 14) -lags = c(0, 7, 14) -n = 14 # Number of trailing days to use for the training set +leads <- c(7, 14) +lags <- c(0, 7, 14) +n <- 14 # Number of trailing days to use for the training set # Nine forecast dates -dates = seq(as.Date("2020-05-06"), as.Date("2020-05-14"), by = "day") +dates <- seq(as.Date("2020-05-06"), as.Date("2020-05-14"), by = "day") # List for storage of results out_list <- vector(mode = "list", length = length(dates)) -for(k in 1:length(dates)){ +for (k in 1:length(dates)) { + date <- dates[k] - date = dates[k] - - if(date %in% c("2020-05-13", "2020-05-14")) leads = c(7, 14) else leads = 7 + if (date %in% c("2020-05-13", "2020-05-14")) leads <- c(7, 14) else leads <- 7 # Pre-structuring test data for this date - z_te = z %>% - rename(target_date = time_value, - target_case = case) %>% + z_te <- z %>% + rename( + target_date = time_value, + target_case = case + ) %>% select(geo_value, target_date, target_case) # Strawman model - out_df0 <- map(leads, ~ flatline_forecaster( - z %>% - filter(between(time_value, date - .x - max(lags) - n, date)) %>% + out_df0 <- map(leads, ~ flatline_forecaster( + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case), outcome = "case", args_list = arx_args_list( @@ -170,7 +184,7 @@ for(k in 1:length(dates)){ # Cases model - out_df1 <- map(leads, ~ arx_forecaster( + out_df1 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case) %>% @@ -191,7 +205,7 @@ for(k in 1:length(dates)){ select(geo_value, forecast_date, err1, lead) # Cases and Facebook model - out_df2 <- map(leads, ~ arx_forecaster( + out_df2 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, fb) %>% @@ -213,7 +227,7 @@ for(k in 1:length(dates)){ # Cases and Google model - out_df3 <- map(leads, ~ arx_forecaster( + out_df3 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, goog) %>% @@ -234,7 +248,7 @@ for(k in 1:length(dates)){ select(geo_value, forecast_date, err3, lead) # Cases, Facebook and Google model - out_df4 <- map(leads, ~ arx_forecaster( + out_df4 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, fb, goog) %>% @@ -255,10 +269,10 @@ for(k in 1:length(dates)){ select(geo_value, forecast_date, err4, lead) # Left join of the results for all models - out_list[[k]] = left_join(left_join(left_join(left_join(out_df0, out_df1), out_df2), out_df3), out_df4) + out_list[[k]] <- left_join(left_join(left_join(left_join(out_df0, out_df1), out_df2), out_df3), out_df4) } # Outside of loop bind rows of list -out_df = do.call(rbind, out_list) +out_df <- do.call(rbind, out_list) ``` ## Results: All Four Models @@ -272,37 +286,53 @@ library(dplyr) library(tidyr) library(ggplot2) -model_names = c("Cases", "Cases + Facebook", "Cases + Google", - "Cases + Facebook + Google") +model_names <- c( + "Cases", "Cases + Facebook", "Cases + Google", + "Cases + Facebook + Google" +) # Calculate the scaled errors for each model, that is, the error relative to the strawman's error -res_all4 = out_df %>% - drop_na() %>% # Restrict to common time - mutate(err1 = err1 / err0, err2 = err2 / err0, # Compute relative error - err3 = err3 / err0, err4 = err4 / err0) %>% # to strawman model - mutate(dif12 = err1 - err2, dif13 = err1 - err3, # Compute differences - dif14 = err1 - err4) %>% # relative to cases model +res_all4 <- out_df %>% + drop_na() %>% # Restrict to common time + mutate( + err1 = err1 / err0, err2 = err2 / err0, # Compute relative error + err3 = err3 / err0, err4 = err4 / err0 + ) %>% # to strawman model + mutate( + dif12 = err1 - err2, dif13 = err1 - err3, # Compute differences + dif14 = err1 - err4 + ) %>% # relative to cases model ungroup() %>% select(-err0) # Calculate and print median errors, for all 4 models, and just 7 days ahead -res_err4 = res_all4 %>% +res_err4 <- res_all4 %>% select(-starts_with("dif")) %>% - pivot_longer(names_to = "model", values_to = "err", - cols = -c(geo_value, forecast_date, lead)) %>% - mutate(lead = factor(lead, labels = paste(leads, "days ahead")), - model = factor(model, labels = model_names)) - -knitr::kable(res_err4 %>% - group_by(model, lead) %>% - summarize(err = median(err), n = length(unique(forecast_date))) %>% - arrange(lead) %>% ungroup() %>% - rename("Model" = model, "Median scaled error" = err, - "Target" = lead, "Test days" = n) %>% - filter(Target == "7 days ahead"), - caption = paste("Test period:", min(res_err4$forecast_date), "to", - max(res_err4$forecast_date)), - format = "html", table.attr = "style='width:70%;'") + pivot_longer( + names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead) + ) %>% + mutate( + lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = model_names) + ) + +knitr::kable( + res_err4 %>% + group_by(model, lead) %>% + summarize(err = median(err), n = length(unique(forecast_date))) %>% + arrange(lead) %>% ungroup() %>% + rename( + "Model" = model, "Median scaled error" = err, + "Target" = lead, "Test days" = n + ) %>% + filter(Target == "7 days ahead"), + caption = paste( + "Test period:", min(res_err4$forecast_date), "to", + max(res_err4$forecast_date) + ), + format = "html", table.attr = "style='width:70%;'" +) ``` $$\\[0.01in]$$ Are these differences in median scaled errors significant? Some basic hypothesis testing suggests that some probably are: Below we conduct a sign test for whether the difference in the "Cases" model’s scaled error and each other model’s scaled error is centered at zero. The sign test is run on the 9 test days x 442 counties = 3978 pairs of scaled errors. The p-value from the "Cases" versus "Cases + Google" test is tiny and well below a cutoff of 0.01. In contrast, the p-values from the "Cases" versus "Cases + Facebook" and the "Cases" versus "Cases + Facebook + Google" tests are much bigger and exceed this cutoff, suggesting that the Facebook survey is not adding as much for this situation (meaning the time and ahead considered, etc.) @@ -310,42 +340,56 @@ Are these differences in median scaled errors significant? Some basic hypothesis ```{r} # Compute p-values using the sign test against a one-sided alternative, for # all models, and just 7 days ahead -res_dif4 = res_all4 %>% +res_dif4 <- res_all4 %>% select(-starts_with("err")) %>% - pivot_longer(names_to = "model", values_to = "dif", - cols = -c(geo_value, forecast_date, lead)) %>% - mutate(lead = factor(lead, labels = paste(leads, "days ahead")), - model = factor(model, - labels = c("Cases vs Cases + Facebook", - "Cases vs Cases + Google", - "Cases vs Cases + Facebook + Google"))) - -knitr::kable(res_dif4 %>% - group_by(model, lead) %>% - summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), - n = n(), alt = "greater")$p.val) %>% - ungroup() %>% filter(lead == "7 days ahead") %>% - rename("Comparison" = model, "Target" = lead, "P-value" = p), - format = "html", table.attr = "style='width:50%;'") + pivot_longer( + names_to = "model", values_to = "dif", + cols = -c(geo_value, forecast_date, lead) + ) %>% + mutate( + lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, + labels = c( + "Cases vs Cases + Facebook", + "Cases vs Cases + Google", + "Cases vs Cases + Facebook + Google" + ) + ) + ) + +knitr::kable( + res_dif4 %>% + group_by(model, lead) %>% + summarize(p = binom.test( + x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater" + )$p.val) %>% + ungroup() %>% filter(lead == "7 days ahead") %>% + rename("Comparison" = model, "Target" = lead, "P-value" = p), + format = "html", table.attr = "style='width:50%;'" +) ``` $$\\[0.01in]$$ We should take these test results with a grain of salt because the sign test assumes independence of observations, which clearly cannot be true given the spatiotemporal structure of our forecasting problem. To mitigate the dependence across time (which intuitively seems to matter more than that across space), we recomputed these tests in a stratified way, where for each day we run a sign test on the scaled errors between two models over all 442 counties. The results are plotted as histograms below; the "Cases + Google" and (to a lesser extent) the "Cases + Facebook + Google" models appear to deliver some decently small p-values, but this is not very evident with the "Cases + Facebook" model. Taking a larger sample size (of more than nine test days) would be a natural next step to take to see if these results persist. ```{r} # Red, blue (similar to ggplot defaults), then yellow -ggplot_colors = c("#FC4E07", "#00AFBB", "#E7B800") +ggplot_colors <- c("#FC4E07", "#00AFBB", "#E7B800") ggplot(res_dif4 %>% - group_by(model, lead, forecast_date) %>% - summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), - n = n(), alt = "greater")$p.val) %>% - ungroup() %>% filter(lead == "7 days ahead"), aes(p)) + + group_by(model, lead, forecast_date) %>% + summarize(p = binom.test( + x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater" + )$p.val) %>% + ungroup() %>% filter(lead == "7 days ahead"), aes(p)) + geom_histogram(aes(color = model, fill = model), alpha = 0.4) + scale_color_manual(values = ggplot_colors) + scale_fill_manual(values = ggplot_colors) + facet_wrap(vars(lead, model)) + labs(x = "P-value", y = "Count") + - theme_bw() + theme(legend.position = "none") + theme_bw() + + theme(legend.position = "none") ``` ## Results: First Two Models @@ -353,21 +397,21 @@ ggplot(res_dif4 %>% One way to get a larger sample size with the current data is to compare a subset of the models. Therefore, next we focus on comparing results between the "Cases" and "Cases + Facebook" models only. Restricting to common forecast dates for these two models yields a much longer test period for the 7 and 14-day-ahead forecasts: May 20 through August 27, 2020. We make the code to compare these two models a simple function so that we have the option to use it over different dates or aheads (in particular, this function will be useful for the next section where we explore several ahead values): ```{r} -case_fb_mods <- function(forecast_dates, leads){ - +case_fb_mods <- function(forecast_dates, leads) { # List for storage of results out_list <- vector(mode = "list", length = length(forecast_dates)) - for(k in 1:length(forecast_dates)){ - - date = forecast_dates[k] - - z_te = z %>% - rename(target_date = time_value, - target_case = case) %>% + for (k in 1:length(forecast_dates)) { + date <- forecast_dates[k] + + z_te <- z %>% + rename( + target_date = time_value, + target_case = case + ) %>% select(geo_value, target_date, target_case) - + # Strawman model - out_df0 <- map(leads, ~ flatline_forecaster( + out_df0 <- map(leads, ~ flatline_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case), outcome = "case", args_list = arx_args_list( @@ -381,9 +425,9 @@ case_fb_mods <- function(forecast_dates, leads){ list_rbind() %>% mutate(err0 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% select(geo_value, forecast_date, err0, lead) - + # Cases model - out_df1 <- map(leads, ~ arx_forecaster( + out_df1 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case) %>% filter(complete.cases(.)), outcome = "case", predictors = "case", @@ -399,9 +443,9 @@ case_fb_mods <- function(forecast_dates, leads){ list_rbind() %>% mutate(err1 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% select(geo_value, forecast_date, err1, lead) - + # Cases and Facebook model - out_df2 <- map(leads, ~ arx_forecaster( + out_df2 <- map(leads, ~ arx_forecaster( z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, fb) %>% filter(complete.cases(.)), outcome = "case", predictors = c("case", "fb"), @@ -417,19 +461,19 @@ case_fb_mods <- function(forecast_dates, leads){ list_rbind() %>% mutate(err2 = abs(inv_trans(.pred) - inv_trans(target_case))) %>% select(geo_value, forecast_date, err2, lead) - + # Left join of the results for all models - out_list[[k]] = left_join(left_join(out_df0, out_df1), out_df2) + out_list[[k]] <- left_join(left_join(out_df0, out_df1), out_df2) } # Outside of loop bind rows and split into two lists by lead - out_df = do.call(rbind, out_list) + out_df <- do.call(rbind, out_list) } # Choose forecast dates common to the Cases and Cases + Facebook models -dates = seq(as.Date("2020-05-20"), as.Date("2020-08-27"), by = "day") +dates <- seq(as.Date("2020-05-20"), as.Date("2020-08-27"), by = "day") # Two leads to consider -leads = c(7, 14) +leads <- c(7, 14) res <- case_fb_mods(dates, leads) ``` @@ -439,34 +483,44 @@ The median scaled errors over the test period are computed and reported below. N ```{r} # For just models 1 and 2, then calculate the scaled # errors, that is, the error relative to the strawman's error -res_all2 = res %>% - drop_na() %>% # Restrict to common time - mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error - # to strawman model - mutate(dif12 = err1 - err2) %>% # Compute differences - # relative to cases model +res_all2 <- res %>% + drop_na() %>% # Restrict to common time + mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error + # to strawman model + mutate(dif12 = err1 - err2) %>% # Compute differences + # relative to cases model ungroup() %>% select(-err0) # Calculate and print median errors, for just models 1 and 2, and both 7 and 14 # days ahead -res_err2 = res_all2 %>% +res_err2 <- res_all2 %>% select(-starts_with("dif")) %>% - pivot_longer(names_to = "model", values_to = "err", - cols = -c(geo_value, forecast_date, lead)) %>% - mutate(lead = factor(lead, labels = paste(leads, "days ahead")), - model = factor(model, labels = model_names[1:2])) - -knitr::kable(res_err2 %>% - select(-starts_with("dif")) %>% - group_by(model, lead) %>% - summarize(err = median(err), n = length(unique(forecast_date))) %>% - arrange(lead) %>% ungroup() %>% - rename("Model" = model, "Median scaled error" = err, - "Target" = lead, "Test days" = n), - caption = paste("Test period:", min(res_err2$forecast_date), "to", - max(res_err2$forecast_date)), - format = "html", table.attr = "style='width:70%;'") + pivot_longer( + names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead) + ) %>% + mutate( + lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = model_names[1:2]) + ) + +knitr::kable( + res_err2 %>% + select(-starts_with("dif")) %>% + group_by(model, lead) %>% + summarize(err = median(err), n = length(unique(forecast_date))) %>% + arrange(lead) %>% ungroup() %>% + rename( + "Model" = model, "Median scaled error" = err, + "Target" = lead, "Test days" = n + ), + caption = paste( + "Test period:", min(res_err2$forecast_date), "to", + max(res_err2$forecast_date) + ), + format = "html", table.attr = "style='width:70%;'" +) ``` $$\\[0.01in]$$ @@ -475,16 +529,19 @@ Thanks to the extended length of the test period, we can also plot the trajector ```{r} # Plot median errors as a function of time, for models 1 and 2, and both 7 and # 14 days ahead -ggplot(res_err2 %>% - group_by(model, lead, forecast_date) %>% - summarize(err = median(err)) %>% ungroup(), - aes(x = forecast_date, y = err)) + +ggplot( + res_err2 %>% + group_by(model, lead, forecast_date) %>% + summarize(err = median(err)) %>% ungroup(), + aes(x = forecast_date, y = err) +) + geom_line(aes(color = model)) + scale_color_manual(values = c("black", ggplot_colors)) + geom_hline(yintercept = 1, linetype = 2, color = "gray") + facet_wrap(vars(lead)) + labs(x = "Date", y = "Median scaled error") + - theme_bw() + theme(legend.position = "bottom", legend.title = element_blank()) + theme_bw() + + theme(legend.position = "bottom", legend.title = element_blank()) ``` The fact that the lines are non-coincident suggests that the results we’re seeing here are likely to be significantly different, though it’s hard to say definitively given the complicated dependence structure present in the data. Below we perform a sign test for whether the difference in scaled errors from the "Cases" and "Cases + Facebook" models is centered at zero. The p-values are essentially zero, given the large sample sizes: 98 test days in total for the 7-day-ahead forecasts and 91 days for the 14-day-ahead forecasts (times 442 counties for each day). @@ -492,20 +549,28 @@ The fact that the lines are non-coincident suggests that the results we’re see ```{r} # Compute p-values using the sign test against a one-sided alternative, just # for models 1 and 2, and both 7 and 14 days ahead -res_dif2 = res_all2 %>% +res_dif2 <- res_all2 %>% select(-starts_with("err")) %>% - pivot_longer(names_to = "model", values_to = "dif", - cols = -c(geo_value, forecast_date, lead)) %>% - mutate(lead = factor(lead, labels = paste(leads, "days ahead")), - model = factor(model, labels = "Cases > Cases + Facebook")) - -knitr::kable(res_dif2 %>% - group_by(model, lead) %>% - summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), - n = n(), alt = "greater")$p.val) %>% - ungroup() %>% - rename("Comparison" = model, "Target" = lead, "P-value" = p), - format = "html", table.attr = "style='width:50%;'") + pivot_longer( + names_to = "model", values_to = "dif", + cols = -c(geo_value, forecast_date, lead) + ) %>% + mutate( + lead = factor(lead, labels = paste(leads, "days ahead")), + model = factor(model, labels = "Cases > Cases + Facebook") + ) + +knitr::kable( + res_dif2 %>% + group_by(model, lead) %>% + summarize(p = binom.test( + x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater" + )$p.val) %>% + ungroup() %>% + rename("Comparison" = model, "Target" = lead, "P-value" = p), + format = "html", table.attr = "style='width:50%;'" +) ``` $$\\[0.01in]$$ @@ -513,16 +578,19 @@ If we stratify and recompute p-values by forecast date, the bulk of p-values are ```{r} ggplot(res_dif2 %>% - group_by(model, lead, forecast_date) %>% - summarize(p = binom.test(x = sum(dif > 0, na.rm = TRUE), - n = n(), alt = "greater")$p.val) %>% - ungroup(), aes(p)) + + group_by(model, lead, forecast_date) %>% + summarize(p = binom.test( + x = sum(dif > 0, na.rm = TRUE), + n = n(), alt = "greater" + )$p.val) %>% + ungroup(), aes(p)) + geom_histogram(aes(color = model, fill = model), alpha = 0.4) + scale_color_manual(values = ggplot_colors) + scale_fill_manual(values = ggplot_colors) + facet_wrap(vars(lead, model)) + labs(x = "P-value", y = "Count") + - theme_bw() + theme(legend.position = "none") + theme_bw() + + theme(legend.position = "none") ``` This exploration illustrates an important point: The test period should be chosen so that it is large enough in size to see differences (if there are any) between the models under comparison. While we did not observe significant differences between the "Cases" and "Cases + Facebook" models when the test period was small at 9 days, we did observe a significant difference over this extended test period of nearly 100 days. @@ -535,7 +603,7 @@ To answer questions such as these, we can look at the way that the median scaled ```{r} # Consider a number of leads -leads = 5:20 +leads <- 5:20 res <- case_fb_mods(dates, leads) ``` @@ -543,14 +611,16 @@ res <- case_fb_mods(dates, leads) We obtain and plot the median scaled errors for the "Cases" and "Cases + Facebook" models for different number of days ahead for the forecast target. This is done over May 20 through August 27 for the forecast dates that are common to the two models. ```{r} -err_by_lead = res %>% - drop_na() %>% # Restrict to common time - mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error +err_by_lead <- res %>% + drop_na() %>% # Restrict to common time + mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error # to strawman model ungroup() %>% select(-err0) %>% - pivot_longer(names_to = "model", values_to = "err", - cols = -c(geo_value, forecast_date, lead)) %>% + pivot_longer( + names_to = "model", values_to = "err", + cols = -c(geo_value, forecast_date, lead) + ) %>% mutate(model = factor(model, labels = model_names[1:2])) %>% group_by(model, lead) %>% summarize(err = median(err)) %>% @@ -560,13 +630,19 @@ ggplot(err_by_lead, aes(x = lead, y = err)) + geom_line(aes(color = model)) + geom_point(aes(color = model)) + scale_color_manual(values = c("black", ggplot_colors)) + - geom_hline(yintercept = err_by_lead %>% - filter(lead %in% 7, model == "Cases") %>% pull(err), - linetype = 2, color = "gray") + - labs(title = "Forecasting errors by number of days ahead", - subtitle = sprintf("Over all counties with at least %i cumulative cases", - case_num), - x = "Number of days ahead", y = "Median scaled error") + + geom_hline( + yintercept = err_by_lead %>% + filter(lead %in% 7, model == "Cases") %>% pull(err), + linetype = 2, color = "gray" + ) + + labs( + title = "Forecasting errors by number of days ahead", + subtitle = sprintf( + "Over all counties with at least %i cumulative cases", + case_num + ), + x = "Number of days ahead", y = "Median scaled error" + ) + theme_bw() # + theme(legend.position = "bottom", legend.title = element_blank()) ``` @@ -593,5 +669,3 @@ Hopefully these preliminary findings have gotten you excited about the possible ## Attribution This chapter was adapted from the following [Delphi blog post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), with the necessary modifications to enable the use of `epipredict`. Note that the results may be different from those on the blog post (one reason is that we are exploring the use of a different forecaster and another is that we're using the most recent versions of the datasets). - - From 29afcc3960a63d455624b708a7cfdb9391cddb6c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:14:23 -0700 Subject: [PATCH 147/382] Style file --- vignettes/arx-classifier-vignette.Rmd | 35 +++++++++++++-------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 001823fc2..26a7e9471 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -31,12 +31,12 @@ jhu <- case_death_rate_subset %>% dplyr::filter( time_value >= "2021-06-04", time_value <= "2021-12-31", - geo_value %in% c("ca", "fl", "tx", "ny", "nj") - ) + geo_value %in% c("ca", "fl", "tx", "ny", "nj") + ) -out <- arx_classifier(jhu, - outcome = "case_rate", - predictors = "case_rate" +out <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate" ) out$predictions @@ -55,12 +55,12 @@ From the parsnip model specification, we can see that the trainer used is logist If you use the default trainer of logistic regression for binary classification and you decide against using the default break of 0.25, then you should only input one break so that there are two classification bins to properly dichotomize the outcome. For example, let's set a break of 0.5 instead of relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: ```{r} -out_break_0.5 <- arx_classifier(jhu, - outcome = "case_rate", - predictors = "case_rate", - args_list = arx_class_args_list( - breaks = 0.5 - ) +out_break_0.5 <- arx_classifier(jhu, + outcome = "case_rate", + predictors = "case_rate", + args_list = arx_class_args_list( + breaks = 0.5 + ) ) out_break_0.5$predictions @@ -129,15 +129,16 @@ The other optional arguments for controlling the growth rate calculation (that c To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: ```{r} -multi_log_res <- map(1:14, ~ arx_classifier( +multi_log_res <- map(1:14, ~ arx_classifier( jhu, outcome = "case_rate", predictors = "case_rate", args_list = arx_class_args_list( - breaks = 0.25 / 7, + breaks = 0.25 / 7, ahead = .x, horizon = .x, - ))$predictions) %>% list_rbind() + ) +)$predictions) %>% list_rbind() ``` Notice that the ahead and horizon are what we are are changing when we use `map()`. The reason we must also change `horizon` is because that is passed to the `h` argument of `epiprocess::growth_rate()` and determines the amount of data used to calculate the growth rate. So, for nearly all intents and purposes, it should be the same as `ahead`. @@ -145,11 +146,10 @@ Notice that the ahead and horizon are what we are are changing when we use `map( We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting: ```{r} -ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + - geom_tile() + +ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + + geom_tile() + ylab("State") + xlab("Target date") - ``` While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. @@ -157,4 +157,3 @@ While there is a bit of variability near to the beginning, we can clearly see th ## A brief reflection The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). #%% takes a complex turn, increases in complexity - From 6e8fac543151305d362ba46a496789d6ebebcf45 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:14:56 -0700 Subject: [PATCH 148/382] Style file --- vignettes/smooth-qr.Rmd | 112 ++++++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index e8f382f46..6769a8539 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -58,7 +58,7 @@ library(tidyverse) We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. ```{r} -edf <- case_death_rate_subset +edf <- case_death_rate_subset ``` We will set the forecast date to be November 30, 2021 so that we can produce forecasts for target dates of 1 to 28 days ahead. We construct our test data, `tedf` from the days beyond this. @@ -107,37 +107,37 @@ After creating our `epi_workflow` with these components, we get our test data ba We input our forecaster into a function for ease of use. ```{r} -smooth_fc <- function(x, aheads = 1:28, degree = 3L, quantiles = 0.5, fd){ -rec <- epi_recipe(x) %>% - step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% - step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% - step_epi_ahead(death_rate, ahead = aheads) - -f <- frosting() %>% - layer_predict() %>% - layer_unnest(.pred) %>% - layer_naomit(distn) %>% - layer_add_forecast_date() %>% - layer_threshold(distn) - -ee <- smooth_quantile_reg( - quantile_levels = quantiles, - outcome_locations = aheads, - degree = degree -) +smooth_fc <- function(x, aheads = 1:28, degree = 3L, quantiles = 0.5, fd) { + rec <- epi_recipe(x) %>% + step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = aheads) + + f <- frosting() %>% + layer_predict() %>% + layer_unnest(.pred) %>% + layer_naomit(distn) %>% + layer_add_forecast_date() %>% + layer_threshold(distn) + + ee <- smooth_quantile_reg( + quantile_levels = quantiles, + outcome_locations = aheads, + degree = degree + ) -ewf <- epi_workflow(rec, ee, f) + ewf <- epi_workflow(rec, ee, f) -the_fit <- ewf %>% fit(x) + the_fit <- ewf %>% fit(x) -latest <- get_test_data(rec, x, fill_locf = TRUE) + latest <- get_test_data(rec, x, fill_locf = TRUE) -preds <- predict(the_fit, new_data = latest) %>% - mutate(forecast_date = fd, target_date = fd + ahead) %>% - select(geo_value, target_date, distn, ahead) %>% - pivot_quantiles_wider(distn) + preds <- predict(the_fit, new_data = latest) %>% + mutate(forecast_date = fd, target_date = fd + ahead) %>% + select(geo_value, target_date, distn, ahead) %>% + pivot_quantiles_wider(distn) -preds + preds } ``` @@ -163,18 +163,19 @@ We can see that we have different columns for the different quantile predictions Let's visualize these results for the sample of two states. We will create a simple plotting function, under which the median predictions are an orange line and the surrounding quantiles are blue bands around this. For comparison, we will include the actual values over time as a black line. ```{r} -plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd){ - +plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { if (!is.null(geos_to_plot)) { preds <- preds %>% filter(geo_value %in% geos_to_plot) train_test_dat <- train_test_dat %>% filter(geo_value %in% geos_to_plot) } - + ggplot(preds) + geom_ribbon(aes(target_date, ymin = `0.1`, ymax = `0.9`), - fill = "cornflowerblue", alpha = .8) + + fill = "cornflowerblue", alpha = .8 + ) + geom_ribbon(aes(target_date, ymin = `0.25`, ymax = `0.75`), - fill = "#00488E", alpha = .8) + + fill = "#00488E", alpha = .8 + ) + geom_line(data = train_test_dat, aes(time_value, death_rate), size = 1.5) + geom_line(aes(target_date, `0.5`), color = "orange", size = 1.5) + geom_vline(xintercept = fd) + @@ -200,33 +201,32 @@ We can test the impact of different degrees by using the `map()` function. Let's ```{r, warning = FALSE} smooth_preds_list <- map(1:7, ~ smooth_fc(edf, - degree = .x, - quantiles = c(.1, .25, .5, .75, .9), - fd = fd) %>% - mutate(degree = .x) - -) %>% list_rbind() + degree = .x, + quantiles = c(.1, .25, .5, .75, .9), + fd = fd +) %>% + mutate(degree = .x)) %>% list_rbind() ``` One way to quantify the impact of these on the forecasting is to look at the mean absolute error (MAE) or mean squared error (MSE) over the degrees. We can select the degree that results in the lowest MAE. Since the MAE compares the predicted values to the actual values, we will first join the test data to the predicted data for our comparisons: ```{r, message = FALSE} -tedf_sub <- tedf %>% +tedf_sub <- tedf %>% rename(target_date = time_value, actual = death_rate) %>% select(geo_value, target_date, actual) -smooth_preds_df_deg = smooth_preds_list %>% - left_join(tedf_sub) +smooth_preds_df_deg <- smooth_preds_list %>% + left_join(tedf_sub) ``` And then compute the MAE for each of the degrees: ```{r, message = FALSE} -smooth_preds_df_deg = smooth_preds_list %>% - left_join(tedf_sub) %>% - group_by(degree) %>% +smooth_preds_df_deg <- smooth_preds_list %>% + left_join(tedf_sub) %>% + group_by(degree) %>% mutate(error = abs(`0.5` - actual)) %>% - summarise(mean = mean(error)) + summarise(mean = mean(error)) # Arrange the MAE from smallest to largest head(smooth_preds_df_deg %>% arrange(mean)) @@ -235,7 +235,7 @@ head(smooth_preds_df_deg %>% arrange(mean)) Instead of just looking at the raw numbers, let's create a simple line plot to visualize how the MAE changes over degrees for this data: ```{r} -ggplot(smooth_preds_df_deg, aes(degree, mean)) + +ggplot(smooth_preds_df_deg, aes(degree, mean)) + geom_line() + xlab("Degrees of freedom") + ylab("Mean MAE") @@ -249,7 +249,7 @@ Now, we will briefly compare the results from using smooth quantile regression t To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. ```{r, warning = FALSE} -baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = c(.1, .25, .5, .75, .9), fd = fd) +baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = c(.1, .25, .5, .75, .9), fd = fd) ``` And we can produce the corresponding plot to inspect the predictions obtained under the baseline model: @@ -263,23 +263,23 @@ Unlike for smooth quantile regression, the resulting forecasts are not smooth cu For a more formal comparison between the two approaches, we could compare the test performance in terms of accuracy through calculating either the, MAE or MSE, where the performance measure of choice can be calculated over over all times and locations for each ahead value ```{r, message = FALSE} -baseline_preds_df = baseline_preds %>% - left_join(tedf_sub) %>% - group_by(ahead) %>% +baseline_preds_df <- baseline_preds %>% + left_join(tedf_sub) %>% + group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% - summarise(mean = mean(error)) %>% + summarise(mean = mean(error)) %>% mutate(type = "baseline") -smooth_preds_df = smooth_preds %>% - left_join(tedf_sub) %>% - group_by(ahead) %>% +smooth_preds_df <- smooth_preds %>% + left_join(tedf_sub) %>% + group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% - summarise(mean = mean(error)) %>% + summarise(mean = mean(error)) %>% mutate(type = "smooth") preds_df <- bind_rows(baseline_preds_df, smooth_preds_df) -ggplot(preds_df, aes(ahead, mean, color = type)) + +ggplot(preds_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean MAE") From c9af54cb7454d1ed2a5d4885f44a317b1f29d62c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:21:04 -0700 Subject: [PATCH 149/382] Add purrr package to see if fixes error --- vignettes/symptom-surveys.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 81624d23c..ba0149991 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -68,6 +68,7 @@ However, there are some trade-offs to bear in mind. For instance, since we are u ```{r, message = FALSE, warning = FALSE} library(covidcast) library(tidyverse) +library(purrr) library(epipredict) library(recipes) From 62f0b79cfe5fdf135eb0d380dc5d17c71aedc46b Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 15:24:00 -0700 Subject: [PATCH 150/382] Add purrr to package description --- DESCRIPTION | 1 + vignettes/symptom-surveys.Rmd | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8dbe7ea7f..80e7de094 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,6 +36,7 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, + purrr, quantreg, recipes (>= 1.0.4), rlang, diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index ba0149991..fdd73abd3 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -67,7 +67,7 @@ However, there are some trade-offs to bear in mind. For instance, since we are u ```{r, message = FALSE, warning = FALSE} library(covidcast) -library(tidyverse) +library(dplyr) library(purrr) library(epipredict) library(recipes) From e94b581b3f4eb7d54a1607af3eeffbc28bfc9ee5 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:18:46 -0700 Subject: [PATCH 151/382] Add packages --- DESCRIPTION | 1 + vignettes/smooth-qr.Rmd | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8dbe7ea7f..80e7de094 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,6 +36,7 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, + purrr, quantreg, recipes (>= 1.0.4), rlang, diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 6769a8539..89448d2ed 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -52,7 +52,8 @@ The `degree` parameter controls the number of these polynomials used. It should ```{r, message = FALSE} library(epipredict) -library(tidyverse) +library(dplyr) +library(purrr) ``` We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. From 14082832096858c27292dc48e5cb8f0ca4a0cdbc Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:19:33 -0700 Subject: [PATCH 152/382] Add packages --- DESCRIPTION | 1 + vignettes/arx-classifier-vignette.Rmd | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8dbe7ea7f..80e7de094 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,6 +36,7 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, + purrr, quantreg, recipes (>= 1.0.4), rlang, diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 26a7e9471..d8001c7c8 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -16,7 +16,8 @@ knitr::opts_chunk$set( ## Load required packages ```{r, message = FALSE, warning = FALSE} -library(tidyverse) +library(dplyr) +library(purrr) library(epipredict) ``` From bbf85542a678d07c0e12a1c3021c30fadc97c119 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:30:55 -0700 Subject: [PATCH 153/382] Add ggplot2 --- vignettes/arx-classifier-vignette.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index d8001c7c8..64fa7fd94 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -18,6 +18,7 @@ knitr::opts_chunk$set( ```{r, message = FALSE, warning = FALSE} library(dplyr) library(purrr) +library(ggplot2) library(epipredict) ``` From 5507112bb6726cd00b8173bfcbaef3f879b6ee61 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:32:18 -0700 Subject: [PATCH 154/382] Add ggplot2 --- vignettes/smooth-qr.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 89448d2ed..be6b80053 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -54,6 +54,7 @@ The `degree` parameter controls the number of these polynomials used. It should library(epipredict) library(dplyr) library(purrr) +library(ggplot2) ``` We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. From 25bac2abf035727299554c0d54228575c284adb5 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 14:39:08 -0700 Subject: [PATCH 155/382] fmt: better printing of alist objects --- R/canned-epipred.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/R/canned-epipred.R b/R/canned-epipred.R index 802d0f7e4..b2112b91f 100644 --- a/R/canned-epipred.R +++ b/R/canned-epipred.R @@ -51,9 +51,16 @@ arx_lags_validator <- function(predictors, lags) { } + #' @export print.alist <- function(x, ...) { - utils::str(x) + nm <- names(x) + max_wid <- max(nchar(nm)) + for (i in seq_along(x)) { + if (is.null(x[[i]])) x[[i]] <- "NULL" + if (length(x[[i]]) == 0L) x[[i]] <- "_empty_" + cli::cli_bullets(c("*" = "{nm[[i]]} : {.val {x[[i]]}}")) + } } #' @export From 696603f014b25c01fc5d9bd6ed1ba1a3a97e7a42 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 14:40:38 -0700 Subject: [PATCH 156/382] simplify --- R/canned-epipred.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/canned-epipred.R b/R/canned-epipred.R index b2112b91f..994c658ff 100644 --- a/R/canned-epipred.R +++ b/R/canned-epipred.R @@ -55,7 +55,6 @@ arx_lags_validator <- function(predictors, lags) { #' @export print.alist <- function(x, ...) { nm <- names(x) - max_wid <- max(nchar(nm)) for (i in seq_along(x)) { if (is.null(x[[i]])) x[[i]] <- "NULL" if (length(x[[i]]) == 0L) x[[i]] <- "_empty_" From 4140ee1f8b765eff500ac853c4297efd9539bca5 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 15:06:18 -0700 Subject: [PATCH 157/382] move all vignette data to here vignettes/ --- data/grad_employ_subset.rda | Bin 39430 -> 0 bytes vignettes/.gitignore | 1 - .../all_states_covidcast_signals.rds | Bin vignettes/articles/sliding.Rmd | 5 +- vignettes/gemploy.rds | Bin 0 -> 10581 bytes vignettes/panel-data-gemploy.R | 65 +++++++++++++ vignettes/panel-data.Rmd | 86 ++---------------- 7 files changed, 73 insertions(+), 84 deletions(-) delete mode 100644 data/grad_employ_subset.rda rename {inst/extdata => vignettes/articles}/all_states_covidcast_signals.rds (100%) create mode 100644 vignettes/gemploy.rds create mode 100644 vignettes/panel-data-gemploy.R diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda deleted file mode 100644 index f2e52ce21eab825b6c2e379a5ed15f84b52d45ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39430 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 diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 2c6ab8d7f..3f91eff67 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,3 +1,2 @@ *.html -*.R *_cache/ diff --git a/inst/extdata/all_states_covidcast_signals.rds b/vignettes/articles/all_states_covidcast_signals.rds similarity index 100% rename from inst/extdata/all_states_covidcast_signals.rds rename to vignettes/articles/all_states_covidcast_signals.rds diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index a0b3312bc..eaaa95d38 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -61,10 +61,7 @@ versions for the less up-to-date input archive. ```{r grab-epi-data} theme_set(theme_bw()) -y <- readRDS(system.file( - "extdata", "all_states_covidcast_signals.rds", - package = "epipredict", mustWork = TRUE -)) +y <- readRDS("all_states_covidcast_signals.rds") y <- purrr::map(y, ~ select(.x, geo_value, time_value, version = issue, value)) diff --git a/vignettes/gemploy.rds b/vignettes/gemploy.rds new file mode 100644 index 0000000000000000000000000000000000000000..b5249036756566bde5953d2c4b2d1bb2efc36c41 GIT binary patch literal 10581 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 F`+xS6<6r;) literal 0 HcmV?d00001 diff --git a/vignettes/panel-data-gemploy.R b/vignettes/panel-data-gemploy.R new file mode 100644 index 000000000..644f8c79a --- /dev/null +++ b/vignettes/panel-data-gemploy.R @@ -0,0 +1,65 @@ +library(cansim) +library(dplyr) +library(tidyr) + +# Get statcan data using get_cansim, which returns a tibble +gemploy <- get_cansim("37-10-0115-01") + +gemploy <- gemploy %>% + # Drop some columns and rename the ones we keep + select(c( + "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", + "Field of study", "Gender", "Age group", "Status of student in Canada", + "Characteristics after graduation", "Graduate statistics" + )) %>% + rename( + "geo_value" = "GEO", + "time_value" = "REF_DATE", + "value" = "VALUE", + "status" = "STATUS", + "edu_qual" = "Educational qualification", + "fos" = "Field of study", + "gender" = "Gender", + "age_group" = "Age group", + "student_status" = "Status of student in Canada", + "grad_charac" = "Characteristics after graduation", + "grad_stat" = "Graduate statistics" + ) %>% + # The original `VALUE` column contain the statistic indicated by + # `Graduate statistics` in the original data. Below we pivot the data + # wider so that each unique statistic can have its own column. + mutate( + # Recode for easier pivoting + grad_stat = recode_factor( + grad_stat, + `Number of graduates` = "num_graduates", + `Median employment income two years after graduation` = "med_income_2y", + `Median employment income five years after graduation` = "med_income_5y" + ), + # They are originally strings but want ints for conversion to epi_df later + time_value = as.integer(time_value) + ) %>% + pivot_wider(names_from = grad_stat, values_from = value) %>% + filter( + # Drop aggregates for some columns + geo_value != "Canada" & + age_group != "15 to 64 years" & + edu_qual != "Total, educational qualification" & + # Keep aggregates for keys we don't want to keep + fos == "Total, field of study" & + gender == "Total, gender" & + student_status == "Canadian and international students" & + # Since we're looking at 2y and 5y employment income, the only + # characteristics remaining are: + # - Graduates reporting employment income + # - Graduates reporting wages, salaries, and commissions only + # For simplicity, keep the first one only + grad_charac == "Graduates reporting employment income" & + # Only keep "good" data + is.na(status) & + # Drop NA value rows + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) + ) %>% + select(-c(status, gender, student_status, grad_charac, fos)) + +saveRDS(gemploy, "vignettes/gemploy.rds") diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 39321ae4c..54fc488b7 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -77,94 +77,22 @@ modifications to get a subset of the full dataset: * Choose a subset of covariates and aggregate across the remaining ones. The chosen covariates are age group, and educational qualification. -Below is the query for obtaining the full data and code for subsetting it as we -just described: - -```{r employ-query, eval=F} -library(cansim) - -# Get statcan data using get_cansim, which returns a tibble -statcan_grad_employ <- get_cansim("37-10-0115-01") - -gemploy <- statcan_grad_employ %>% - # Drop some columns and rename the ones we keep - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", - "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics" - )) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "value" = "VALUE", - "status" = "STATUS", - "edu_qual" = "Educational qualification", - "fos" = "Field of study", - "gender" = "Gender", - "age_group" = "Age group", - "student_status" = "Status of student in Canada", - "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics" - ) %>% - # The original `VALUE` column contain the statistic indicated by - # `Graduate statistics` in the original data. Below we pivot the data - # wider so that each unique statistic can have its own column. - mutate( - # Recode for easier pivoting - grad_stat = recode_factor( - grad_stat, - `Number of graduates` = "num_graduates", - `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y" - ), - # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value) - ) %>% - pivot_wider(names_from = grad_stat, values_from = value) %>% - filter( - # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - fos == "Total, field of study" & - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) - ) %>% - select(-c(status, gender, student_status, grad_charac, fos)) -``` +Code to obtain the full data and subset it as we +just described is available in `vignettes/panel-data-gemploy.R`. To use this data with `epipredict`, we need to convert it into `epi_df` format -using [`as_epi_df`]( - https://cmu-delphi.github.io/epiprocess/reference/as_epi_df.html) +using `epiprocess::as_epi_df()` with additional keys. In our case, the additional keys are `age_group`, and `edu_qual`. Note that in the above modifications, we encoded `time_value` as type `integer`. This lets us set `time_type = "year"`, and ensures that lag and ahead modifications later on are using the correct time units. See the -[`epi_df` documentation]( - https://cmu-delphi.github.io/epiprocess/reference/epi_df.html#time-types) for -a list of all the `type_type`s available. +`epiprocess::epi_df` for +a list of all the `time_type`s available. ```{r convert-to-epidf, eval=F} +gemploy <- readRDS("gemploy.rds") grad_employ_subset <- gemploy %>% - tsibble::as_tsibble( - index = time_value, - key = c(geo_value, age_group, edu_qual) - ) %>% - as_epi_df( - geo_type = "custom", time_type = "year", - additional_metadata = c(other_keys = list("age_group", "edu_qual")) - ) + as_epi_df(additional_metadata = c(other_keys = list("age_group", "edu_qual"))) ``` ```{r data-dim, include=F} From 12745fb9b0b553817249e3863ff2792e169e5c77 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 15:12:07 -0700 Subject: [PATCH 158/382] export grad_employ_subset, redocument --- data-raw/grad_employ_subset.R | 8 +++----- data/grad_employ_subset.rda | Bin 0 -> 8491 bytes vignettes/gemploy.rds | Bin 10581 -> 0 bytes 3 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 data/grad_employ_subset.rda delete mode 100644 vignettes/gemploy.rds diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index 4a0218ae7..a09dfff06 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -95,10 +95,8 @@ nrow(gemploy) ncol(gemploy) grad_employ_subset <- gemploy %>% - tsibble::as_tsibble( - index = time_value, - key = c(geo_value, age_group, edu_qual)) %>% as_epi_df( - geo_type = "custom", time_type = "year", as_of = "2022-07-19", - additional_metadata = list(other_keys = c("age_group", "edu_qual"))) + as_of = "2022-07-19", + additional_metadata = list(other_keys = c("age_group", "edu_qual")) + ) usethis::use_data(grad_employ_subset, overwrite = TRUE) diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda new file mode 100644 index 0000000000000000000000000000000000000000..3d74741cbd65cfcd114a7a224baa610478ee49e0 GIT binary patch literal 8491 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 literal 0 HcmV?d00001 diff --git a/vignettes/gemploy.rds b/vignettes/gemploy.rds deleted file mode 100644 index b5249036756566bde5953d2c4b2d1bb2efc36c41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10581 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 F`+xS6<6r;) From 4296c169ac8cc25d509496008b3b9975562a6227 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 15:13:59 -0700 Subject: [PATCH 159/382] fix vignette to match --- vignettes/panel-data-gemploy.R | 65 ---------------------------------- vignettes/panel-data.Rmd | 7 +--- 2 files changed, 1 insertion(+), 71 deletions(-) delete mode 100644 vignettes/panel-data-gemploy.R diff --git a/vignettes/panel-data-gemploy.R b/vignettes/panel-data-gemploy.R deleted file mode 100644 index 644f8c79a..000000000 --- a/vignettes/panel-data-gemploy.R +++ /dev/null @@ -1,65 +0,0 @@ -library(cansim) -library(dplyr) -library(tidyr) - -# Get statcan data using get_cansim, which returns a tibble -gemploy <- get_cansim("37-10-0115-01") - -gemploy <- gemploy %>% - # Drop some columns and rename the ones we keep - select(c( - "REF_DATE", "GEO", "VALUE", "STATUS", "Educational qualification", - "Field of study", "Gender", "Age group", "Status of student in Canada", - "Characteristics after graduation", "Graduate statistics" - )) %>% - rename( - "geo_value" = "GEO", - "time_value" = "REF_DATE", - "value" = "VALUE", - "status" = "STATUS", - "edu_qual" = "Educational qualification", - "fos" = "Field of study", - "gender" = "Gender", - "age_group" = "Age group", - "student_status" = "Status of student in Canada", - "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics" - ) %>% - # The original `VALUE` column contain the statistic indicated by - # `Graduate statistics` in the original data. Below we pivot the data - # wider so that each unique statistic can have its own column. - mutate( - # Recode for easier pivoting - grad_stat = recode_factor( - grad_stat, - `Number of graduates` = "num_graduates", - `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y" - ), - # They are originally strings but want ints for conversion to epi_df later - time_value = as.integer(time_value) - ) %>% - pivot_wider(names_from = grad_stat, values_from = value) %>% - filter( - # Drop aggregates for some columns - geo_value != "Canada" & - age_group != "15 to 64 years" & - edu_qual != "Total, educational qualification" & - # Keep aggregates for keys we don't want to keep - fos == "Total, field of study" & - gender == "Total, gender" & - student_status == "Canadian and international students" & - # Since we're looking at 2y and 5y employment income, the only - # characteristics remaining are: - # - Graduates reporting employment income - # - Graduates reporting wages, salaries, and commissions only - # For simplicity, keep the first one only - grad_charac == "Graduates reporting employment income" & - # Only keep "good" data - is.na(status) & - # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) - ) %>% - select(-c(status, gender, student_status, grad_charac, fos)) - -saveRDS(gemploy, "vignettes/gemploy.rds") diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 54fc488b7..db5fa1d52 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -77,9 +77,6 @@ modifications to get a subset of the full dataset: * Choose a subset of covariates and aggregate across the remaining ones. The chosen covariates are age group, and educational qualification. -Code to obtain the full data and subset it as we -just described is available in `vignettes/panel-data-gemploy.R`. - To use this data with `epipredict`, we need to convert it into `epi_df` format using `epiprocess::as_epi_df()` with additional keys. In our case, the additional keys are `age_group`, @@ -90,9 +87,7 @@ lag and ahead modifications later on are using the correct time units. See the a list of all the `time_type`s available. ```{r convert-to-epidf, eval=F} -gemploy <- readRDS("gemploy.rds") -grad_employ_subset <- gemploy %>% - as_epi_df(additional_metadata = c(other_keys = list("age_group", "edu_qual"))) +data("grad_employ_subset") ``` ```{r data-dim, include=F} From 4dd2b1cdce315eb5f045140907876e37d16ec3c6 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 15:22:36 -0700 Subject: [PATCH 160/382] checks pass --- vignettes/.gitignore | 1 + vignettes/panel-data.Rmd | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 3f91eff67..324ceaf7e 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,2 +1,3 @@ *.html *_cache/ +*.R diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index db5fa1d52..952be8d7f 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -86,10 +86,6 @@ lag and ahead modifications later on are using the correct time units. See the `epiprocess::epi_df` for a list of all the `time_type`s available. -```{r convert-to-epidf, eval=F} -data("grad_employ_subset") -``` - ```{r data-dim, include=F} employ_rowcount <- format(nrow(grad_employ_subset), big.mark = ",") employ_colcount <- length(names(grad_employ_subset)) @@ -387,7 +383,7 @@ predsx <- predict(wfx_linreg, latest) # Display values within prediction intervals predsx %>% select( - geo_value, time_value, edu_qual, age_group, fos, + geo_value, time_value, edu_qual, age_group, .pred_scaled, .pred_distn_scaled ) %>% head() %>% From ec775a068ac6e29cc1785e592266c1084a624e58 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 9 Apr 2024 15:30:30 -0700 Subject: [PATCH 161/382] style and fix pkgdown --- _pkgdown.yml | 1 + data-raw/grad_employ_subset.R | 12 ++++++++---- vignettes/panel-data.Rmd | 9 ++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index 07ceb6fec..e9211338a 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -97,6 +97,7 @@ reference: contents: - case_death_rate_subset - state_census + - grad_employ_subset diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index a09dfff06..ae063d22f 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -48,7 +48,8 @@ gemploy <- statcan_grad_employ %>% "Age group", "Status of student in Canada", "Characteristics after graduation", - "Graduate statistics")) %>% + "Graduate statistics" + )) %>% rename( "geo_value" = "GEO", "time_value" = "REF_DATE", @@ -60,13 +61,15 @@ gemploy <- statcan_grad_employ %>% "age_group" = "Age group", "student_status" = "Status of student in Canada", "grad_charac" = "Characteristics after graduation", - "grad_stat" = "Graduate statistics") %>% + "grad_stat" = "Graduate statistics" + ) %>% mutate( grad_stat = recode_factor( grad_stat, `Number of graduates` = "num_graduates", `Median employment income two years after graduation` = "med_income_2y", - `Median employment income five years after graduation` = "med_income_5y"), + `Median employment income five years after graduation` = "med_income_5y" + ), time_value = as.integer(time_value) ) %>% pivot_wider(names_from = grad_stat, values_from = value) %>% @@ -88,7 +91,8 @@ gemploy <- statcan_grad_employ %>% # Only keep "good" data is.na(status) & # Drop NA value rows - !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y)) %>% + !is.na(num_graduates) & !is.na(med_income_2y) & !is.na(med_income_5y) + ) %>% select(-c(status, gender, student_status, grad_charac, fos)) nrow(gemploy) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 952be8d7f..409253a38 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -184,7 +184,7 @@ values are both in years. ```{r make-recipe, include=T, eval=T} r <- epi_recipe(employ_small) %>% - step_epi_ahead(num_graduates_prop, ahead = 1) %>% + step_epi_ahead(num_graduates_prop, ahead = 1) %>% step_epi_lag(num_graduates_prop, lag = 0:2) %>% step_epi_naomit() r @@ -196,7 +196,10 @@ and `ahead` columns. ```{r view-preprocessed, include=T} # Display a sample of the preprocessed data bake_and_show_sample <- function(recipe, data, n = 5) { - recipe %>% prep(data) %>% bake(new_data = data) %>% sample_n(n) + recipe %>% + prep(data) %>% + bake(new_data = data) %>% + sample_n(n) } r %>% bake_and_show_sample(employ_small) @@ -354,7 +357,7 @@ f <- frosting() %>% layer_threshold(.pred, lower = 0) %>% # 90% prediction interval layer_residual_quantiles( - quantile_levels = c(0.1, 0.9), + quantile_levels = c(0.1, 0.9), symmetrize = FALSE ) %>% layer_population_scaling( From 6b488a47d733ade61327e149ff649e9fe1006b5f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 11 Apr 2024 19:50:51 -0700 Subject: [PATCH 162/382] redocument, update snapshots --- R/autoplot.R | 13 ++++--------- man/arx_class_epi_workflow.Rd | 7 +++++-- man/arx_classifier.Rd | 7 +++++-- man/arx_fcast_epi_workflow.Rd | 9 ++++++--- man/arx_forecaster.Rd | 9 ++++++--- man/autoplot-epipred.Rd | 8 ++++---- tests/testthat/_snaps/snapshots.md | 4 ++-- 7 files changed, 32 insertions(+), 25 deletions(-) diff --git a/R/autoplot.R b/R/autoplot.R index fa3f26269..d36f05463 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -14,22 +14,17 @@ ggplot2::autoplot #' #' @inheritParams epiprocess::autoplot.epi_df #' @param object An `epi_workflow` -#' #' @param predictions A data frame with predictions. If `NULL`, only the #' original data is shown. #' @param .levels A numeric vector of levels to plot for any prediction bands. #' More than 3 levels begins to be difficult to see. #' @param ... Ignored -#' @param .color_by A character string indicating how to color the data. See -#' `epiprocess::autoplot.epi_df()` for more details. -#' @param .facet_by A character string indicating how to facet the data. See -#' `epiprocess::autoplot.epi_df()` for more details. +#' @param .facet_by Similar to `.color_by` except that the default is to +#' display the response. #' @param .base_color If available, prediction bands will be shown with this #' color. -#' @param .point_pred_color If available, point forecasts will be shown with this -#' color. -#' @param .max_facets The maximum number of facets to show. If the number of -#' facets is greater than this value, only the top facets will be shown. +#' @param .point_pred_color If available, point forecasts will be shown with +#' this color. #' #' @name autoplot-epipred #' @examples diff --git a/man/arx_class_epi_workflow.Rd b/man/arx_class_epi_workflow.Rd index e55e14160..bb5ac54ae 100644 --- a/man/arx_class_epi_workflow.Rd +++ b/man/arx_class_epi_workflow.Rd @@ -22,8 +22,11 @@ internally based on the \code{breaks} argument to \code{\link[=arx_class_args_li If discrete classes are already in the \code{epi_df}, it is recommended to code up a classifier from scratch using \code{\link[=epi_recipe]{epi_recipe()}}.} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "classification"}. Typical values are diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index de487ec51..350352ae9 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -22,8 +22,11 @@ internally based on the \code{breaks} argument to \code{\link[=arx_class_args_li If discrete classes are already in the \code{epi_df}, it is recommended to code up a classifier from scratch using \code{\link[=epi_recipe]{epi_recipe()}}.} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "classification"}. Typical values are diff --git a/man/arx_fcast_epi_workflow.Rd b/man/arx_fcast_epi_workflow.Rd index 8c76bcdd7..5db59497b 100644 --- a/man/arx_fcast_epi_workflow.Rd +++ b/man/arx_fcast_epi_workflow.Rd @@ -7,7 +7,7 @@ arx_fcast_epi_workflow( epi_data, outcome, - predictors, + predictors = outcome, trainer = NULL, args_list = arx_args_list() ) @@ -18,8 +18,11 @@ arx_fcast_epi_workflow( \item{outcome}{A character (scalar) specifying the outcome (in the \code{epi_df}).} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "regression"}. May be \code{NULL} (the default).} diff --git a/man/arx_forecaster.Rd b/man/arx_forecaster.Rd index 7a042c65c..af05c0682 100644 --- a/man/arx_forecaster.Rd +++ b/man/arx_forecaster.Rd @@ -7,7 +7,7 @@ arx_forecaster( epi_data, outcome, - predictors, + predictors = outcome, trainer = parsnip::linear_reg(), args_list = arx_args_list() ) @@ -18,8 +18,11 @@ arx_forecaster( \item{outcome}{A character (scalar) specifying the outcome (in the \code{epi_df}).} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "regression"}.} diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 80a552604..18000cd82 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -51,14 +51,14 @@ including the \code{geo_value} \item \code{none} - no coloring aesthetic is applied }} -\item{.facet_by}{Similar to \code{.color_by} except that the default is to display -each numeric variable on a separate facet} +\item{.facet_by}{Similar to \code{.color_by} except that the default is to +display the response.} \item{.base_color}{If available, prediction bands will be shown with this color.} -\item{.point_pred_color}{If available, point forecasts will be shown with this -color.} +\item{.point_pred_color}{If available, point forecasts will be shown with +this color.} \item{.max_facets}{Cut down of the number of facets displayed. Especially useful for testing when there are many \code{geo_value}'s or keys.} diff --git a/tests/testthat/_snaps/snapshots.md b/tests/testthat/_snaps/snapshots.md index 1514afa65..079bfa201 100644 --- a/tests/testthat/_snaps/snapshots.md +++ b/tests/testthat/_snaps/snapshots.md @@ -94,8 +94,8 @@ 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, - 18992), class = "Date"), target_date = structure(c(19000, 19000, - 19000, 19000, 19000, 19000), class = "Date")), row.names = c(NA, + 18992), class = "Date"), target_date = structure(c(18993, 18993, + 18993, 18993, 18993, 18993), class = "Date")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame")) # cdc_baseline_forecaster snapshots From b80f012c3ba36cd26a12c19ec71fce129c482b18 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 10 Apr 2024 16:02:31 -0700 Subject: [PATCH 163/382] refactor: consistent default for trainer arg w w --- R/arx_classifier.R | 10 +++++----- R/arx_forecaster.R | 7 ++++--- man/arx_class_epi_workflow.Rd | 10 +++++----- man/arx_fcast_epi_workflow.Rd | 7 ++++--- man/autoplot-epipred.Rd | 23 +++++++---------------- 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index 829fb1c8c..98ae7949f 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -87,11 +87,11 @@ arx_classifier <- function( #' may alter the returned `epi_workflow` object but can be omitted. #' #' @inheritParams arx_classifier -#' @param trainer A `{parsnip}` model describing the type of estimation. -#' For now, we enforce `mode = "classification"`. Typical values are +#' @param trainer A `{parsnip}` model describing the type of estimation. For +#' now, we enforce `mode = "classification"`. Typical values are #' [parsnip::logistic_reg()] or [parsnip::multinom_reg()]. More complicated -#' trainers like [parsnip::naive_Bayes()] or [parsnip::rand_forest()] can -#' also be used. May be `NULL` (the default). +#' trainers like [parsnip::naive_Bayes()] or [parsnip::rand_forest()] can also +#' be used. May be `NULL` if you'd like to decide later. #' #' @return An unfit `epi_workflow`. #' @export @@ -117,7 +117,7 @@ arx_class_epi_workflow <- function( epi_data, outcome, predictors, - trainer = NULL, + trainer = parsnip::logistic_reg(), args_list = arx_class_args_list()) { validate_forecaster_inputs(epi_data, outcome, predictors) if (!inherits(args_list, c("arx_class", "alist"))) { diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index a911b201e..c41036832 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -83,8 +83,9 @@ arx_forecaster <- function(epi_data, #' use [quantile_reg()]) but can be omitted. #' #' @inheritParams arx_forecaster -#' @param trainer A `{parsnip}` model describing the type of estimation. -#' For now, we enforce `mode = "regression"`. May be `NULL` (the default). +#' @param trainer A `{parsnip}` model describing the type of estimation. For +#' now, we enforce `mode = "regression"`. May be `NULL` if you'd like to +#' decide later. #' #' @return An unfitted `epi_workflow`. #' @export @@ -108,7 +109,7 @@ arx_fcast_epi_workflow <- function( epi_data, outcome, predictors = outcome, - trainer = NULL, + trainer = parsnip::linear_reg(), args_list = arx_args_list()) { # --- validation validate_forecaster_inputs(epi_data, outcome, predictors) diff --git a/man/arx_class_epi_workflow.Rd b/man/arx_class_epi_workflow.Rd index bb5ac54ae..bfce7cdaa 100644 --- a/man/arx_class_epi_workflow.Rd +++ b/man/arx_class_epi_workflow.Rd @@ -8,7 +8,7 @@ arx_class_epi_workflow( epi_data, outcome, predictors, - trainer = NULL, + trainer = parsnip::logistic_reg(), args_list = arx_class_args_list() ) } @@ -28,11 +28,11 @@ specifically mentioned will be used. (The \code{outcome} will not be added.) By default, equals the outcome. If manually specified, does not add the outcome variable, so make sure to specify it.} -\item{trainer}{A \code{{parsnip}} model describing the type of estimation. -For now, we enforce \code{mode = "classification"}. Typical values are +\item{trainer}{A \code{{parsnip}} model describing the type of estimation. For +now, we enforce \code{mode = "classification"}. Typical values are \code{\link[parsnip:logistic_reg]{parsnip::logistic_reg()}} or \code{\link[parsnip:multinom_reg]{parsnip::multinom_reg()}}. More complicated -trainers like \code{\link[parsnip:naive_Bayes]{parsnip::naive_Bayes()}} or \code{\link[parsnip:rand_forest]{parsnip::rand_forest()}} can -also be used. May be \code{NULL} (the default).} +trainers like \code{\link[parsnip:naive_Bayes]{parsnip::naive_Bayes()}} or \code{\link[parsnip:rand_forest]{parsnip::rand_forest()}} can also +be used. May be \code{NULL} if you'd like to decide later.} \item{args_list}{A list of customization arguments to determine the type of forecasting model. See \code{\link[=arx_class_args_list]{arx_class_args_list()}}.} diff --git a/man/arx_fcast_epi_workflow.Rd b/man/arx_fcast_epi_workflow.Rd index 5db59497b..4ed279351 100644 --- a/man/arx_fcast_epi_workflow.Rd +++ b/man/arx_fcast_epi_workflow.Rd @@ -8,7 +8,7 @@ arx_fcast_epi_workflow( epi_data, outcome, predictors = outcome, - trainer = NULL, + trainer = parsnip::linear_reg(), args_list = arx_args_list() ) } @@ -24,8 +24,9 @@ specifically mentioned will be used. (The \code{outcome} will not be added.) By default, equals the outcome. If manually specified, does not add the outcome variable, so make sure to specify it.} -\item{trainer}{A \code{{parsnip}} model describing the type of estimation. -For now, we enforce \code{mode = "regression"}. May be \code{NULL} (the default).} +\item{trainer}{A \code{{parsnip}} model describing the type of estimation. For +now, we enforce \code{mode = "regression"}. May be \code{NULL} if you'd like to +decide later.} \item{args_list}{A list of customization arguments to determine the type of forecasting model. See \code{\link[=arx_args_list]{arx_args_list()}}.} diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 18000cd82..cd56f3c05 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,20 +39,11 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} -\item{.color_by}{Which variables should determine the color(s) used to plot -lines. Options include: -\itemize{ -\item \code{all_keys} - the default uses the interaction of any key variables -including the \code{geo_value} -\item \code{geo_value} - \code{geo_value} only -\item \code{other_keys} - any available keys that are not \code{geo_value} -\item \code{.response} - the numeric variables (same as the y-axis) -\item \code{all} - uses the interaction of all keys and numeric variables -\item \code{none} - no coloring aesthetic is applied -}} - -\item{.facet_by}{Similar to \code{.color_by} except that the default is to -display the response.} +\item{.color_by}{A character string indicating how to color the data. See +\code{epiprocess::autoplot.epi_df()} for more details.} + +\item{.facet_by}{A character string indicating how to facet the data. See +\code{epiprocess::autoplot.epi_df()} for more details.} \item{.base_color}{If available, prediction bands will be shown with this color.} @@ -60,8 +51,8 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} -\item{.max_facets}{Cut down of the number of facets displayed. Especially -useful for testing when there are many \code{geo_value}'s or keys.} +\item{.max_facets}{The maximum number of facets to show. If the number of +facets is greater than this value, only the top facets will be shown.} } \description{ For a fit workflow, the training data will be displayed, the response by From 30c9376d83ed0e71971df91043b1048a8c8010a3 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 12 Apr 2024 15:19:51 -0700 Subject: [PATCH 164/382] doc: document --- man/autoplot-epipred.Rd | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index cd56f3c05..18000cd82 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,11 +39,20 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} -\item{.color_by}{A character string indicating how to color the data. See -\code{epiprocess::autoplot.epi_df()} for more details.} - -\item{.facet_by}{A character string indicating how to facet the data. See -\code{epiprocess::autoplot.epi_df()} for more details.} +\item{.color_by}{Which variables should determine the color(s) used to plot +lines. Options include: +\itemize{ +\item \code{all_keys} - the default uses the interaction of any key variables +including the \code{geo_value} +\item \code{geo_value} - \code{geo_value} only +\item \code{other_keys} - any available keys that are not \code{geo_value} +\item \code{.response} - the numeric variables (same as the y-axis) +\item \code{all} - uses the interaction of all keys and numeric variables +\item \code{none} - no coloring aesthetic is applied +}} + +\item{.facet_by}{Similar to \code{.color_by} except that the default is to +display the response.} \item{.base_color}{If available, prediction bands will be shown with this color.} @@ -51,8 +60,8 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} -\item{.max_facets}{The maximum number of facets to show. If the number of -facets is greater than this value, only the top facets will be shown.} +\item{.max_facets}{Cut down of the number of facets displayed. Especially +useful for testing when there are many \code{geo_value}'s or keys.} } \description{ For a fit workflow, the training data will be displayed, the response by From fe4508448604af39411580eb32d17e2b557decc5 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 10 Apr 2024 16:04:42 -0700 Subject: [PATCH 165/382] doc+repo: news and version bump --- DESCRIPTION | 2 +- NEWS.md | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8dbe7ea7f..4ca559d1d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.12 +Version: 0.0.13 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 9ed94d1a4..3c492e38b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,11 +4,6 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat # epipredict 0.1 -- the `predictor` argument in `arx_forecaster()` now defaults to the value of the `outcome` argument -- `*_args_list()` functions now warn if `forecast_date + ahead != target_date` -- `layer_residual_quantiles()` will now error if any of the residual quantiles are NA -- add `check_enough_train_data()` that will error if training data is too small -- added `check_enough_train_data()` to `arx_forecaster()` - simplify `layer_residual_quantiles()` to avoid timesuck in `utils::methods()` - rename the `dist_quantiles()` to be more descriptive, breaking change - removes previous `pivot_quantiles()` (now `*_wider()`, breaking change) @@ -38,3 +33,10 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - refactor quantile extrapolation (possibly creates different results) - force `target_date` + `forecast_date` handling to match the time_type of the epi_df. allows for annual and weekly data +- add `check_enough_train_data()` that will error if training data is too small +- added `check_enough_train_data()` to `arx_forecaster()` +- `layer_residual_quantiles()` will now error if any of the residual quantiles are NA +- `*_args_list()` functions now warn if `forecast_date + ahead != target_date` +- the `predictor` argument in `arx_forecaster()` now defaults to the value of the `outcome` argument +- `arx_fcast_epi_workflow()` and `arx_class_epi_workflow()` now default to + `trainer = parsnip::logistic_reg()` to match their more canned versions. From a0c9aded07efc7b441d5e1ebf06684c1c4c1170c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:01:52 -0700 Subject: [PATCH 166/382] Temp addition of some WIS stuff --- vignettes/smooth-qr.Rmd | 42 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index be6b80053..6106e5461 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -247,7 +247,7 @@ We can see that the degree that results in the lowest MAE is 3. Hence, we could ## A brief comparison between smoothing and no smoothing -Now, we will briefly compare the results from using smooth quantile regression to those obtained without smoothing. The latter approach amounts to ordinary quantile regression to get predictions for the intended target date. The main drawback is that it ignores the fact that the responses all represent the same signal, just for different ahead values. In contrast, the smooth quantile regression approach utilizes this information about the data structure - the fact that the aheads in are not be independent of each other, but rather they are naturally related over time by a smooth curve. +Now, we will briefly compare the results from using smooth quantile regression to those obtained without smoothing. The latter approach amounts to ordinary quantile regression to get predictions for the intended target date. The main drawback is that it ignores the fact that the responses all represent the same signal, just for different ahead values. In contrast, the smooth quantile regression approach utilizes this information about the data structure - the fact that the aheads in are not be independent of each other, but that they are naturally related over time by a smooth curve. To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. ```{r, warning = FALSE} @@ -296,6 +296,46 @@ mean(smooth_preds_df$mean) The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. This demonstrates the standard conclusion that the farther ahead in time, the more challenging the forecasting. The latter shows that the smooth quantile regression model and baseline models perform very similarly, with the smooth quantile regression model only slightly beating the baseline model in terms of overall MAE. +One other commonly used metric is the WIS score (cite https://arxiv.org/pdf/2005.12881.pdf), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. + +The general formula for the weighted interval is as in [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723): + + +While it is the measure of choice used in the COVID-19 Forecast Hub, one limitation is that it prioritizes sharpness (how wide the interval is) relative to coverage (if the interval contains the truth). + +We can manually implement this as a function that is compatible with the latest version of `epipredict` (adapted from the WIS function in https://github.com/dajmcdon/smoothmpf-epipredict). + +```{r} +wis_dist_quantile <- function(actual, q, quantile_levels) { + 2 * mean(pmax( + quantile_levels * (actual - q), + (1 - quantile_levels) * (q - actual), na.rm = TRUE + )) +} + +# Test row 1 of test df (test = smooth_preds %>% left_join(tedf_sub)) +wis_dist_quantile(test$actual[2], as.numeric(test[2, 4:8]), as.numeric(names(test)[4:8])) + +test %>% rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`), as.numeric(names(test)[4:5]))) + +# Compute mean WIS by ahead (over all states) +test2 = test %>% rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`), as.numeric(names(test)[4:5]))) %>% group_by(ahead) %>% summarise(mean = mean(wis)) + +# Plot over all aheads (do the same as above for the baseline and see which has lower WIS) +ggplot(test2, aes(ahead, mean)) + #, color = type)) + + geom_line() + + xlab("Ahead") + + ylab("Mean WIS") + +``` + +From our `smooth_preds_df`, we will need to extract the `values` and the `quantile_levels`: + + +For each state at each target date (can be same forecast date), we will apply the `wis_dist_quantile` function to get a WIS score. We may then use these to compute the mean WIS across all states for an ahead (assuming same forecast date for all state and all of the aheads). + + + # What we've learned in a nutshell Smooth quantile regression is used in multi-period forecasting for predicting several horizons simultaneously with a single smooth curve. It operates under the key assumption that the future of the response can be approximated well by a smooth curve. From 5d95aad0fc46479eed53ee602632dd9e90bf4d2f Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Wed, 24 Apr 2024 05:36:05 -0700 Subject: [PATCH 167/382] Add WIS stuff --- vignettes/smooth-qr.Rmd | 89 +++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 30 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 6106e5461..bdef99871 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -155,7 +155,8 @@ head(smooth_preds) Most often, we're not going to want to limit ourselves to just predicting the median value as there is uncertainty about the predictions, so let's try to predict several different quantiles in addition to the median: ```{r, warning = FALSE} -smooth_preds <- smooth_fc(edf, quantiles = c(.1, .25, .5, .75, .9), fd = fd) +several_quantiles <- c(.1, .25, .5, .75, .9) +smooth_preds <- smooth_fc(edf, quantiles = several_quantiles, fd = fd) head(smooth_preds) ``` @@ -251,7 +252,7 @@ Now, we will briefly compare the results from using smooth quantile regression t To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. ```{r, warning = FALSE} -baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = c(.1, .25, .5, .75, .9), fd = fd) +baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = several_quantiles, fd = fd) ``` And we can produce the corresponding plot to inspect the predictions obtained under the baseline model: @@ -265,23 +266,24 @@ Unlike for smooth quantile regression, the resulting forecasts are not smooth cu For a more formal comparison between the two approaches, we could compare the test performance in terms of accuracy through calculating either the, MAE or MSE, where the performance measure of choice can be calculated over over all times and locations for each ahead value ```{r, message = FALSE} -baseline_preds_df <- baseline_preds %>% - left_join(tedf_sub) %>% + +baseline_preds_mae_df <- baseline_preds %>% + left_join(tedf_sub) %>% group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "baseline") -smooth_preds_df <- smooth_preds %>% - left_join(tedf_sub) %>% +smooth_preds_mae_df <- smooth_preds %>% + left_join(tedf_sub) %>% group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "smooth") -preds_df <- bind_rows(baseline_preds_df, smooth_preds_df) +preds_mae_df <- bind_rows(baseline_preds_mae_df, smooth_preds_mae_df) -ggplot(preds_df, aes(ahead, mean, color = type)) + +ggplot(preds_mae_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean MAE") @@ -290,51 +292,78 @@ ggplot(preds_df, aes(ahead, mean, color = type)) + or over all aheads, times, and locations for a single numerical summary. ```{r} -mean(baseline_preds_df$mean) -mean(smooth_preds_df$mean) +mean(baseline_preds_mae_df$mean) +mean(smooth_preds_mae_df$mean) ``` -The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. This demonstrates the standard conclusion that the farther ahead in time, the more challenging the forecasting. The latter shows that the smooth quantile regression model and baseline models perform very similarly, with the smooth quantile regression model only slightly beating the baseline model in terms of overall MAE. +The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. The latter shows that the smooth quantile regression model and baseline models perform very similarly overall, with the smooth quantile regression model only slightly beating the baseline model in terms of overall average MAE. -One other commonly used metric is the WIS score (cite https://arxiv.org/pdf/2005.12881.pdf), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. +One other commonly used metric is the WIS score ([ Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. -The general formula for the weighted interval is as in [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723): +Suppose we have $F$ be a forecaster composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for target variable $Y$ is represented as follows ([McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): +$$ +WIS(F, Y) = 2 \sum_{\tau} \phi_{\tau} (Y - q_{\tau}) +$$ +where $\phi_{\tau}(x) = \tau |x|$ for $x \geq 0$ and$\phi_{\tau}(x) = (1 - \tau) |x|$ for $x < 0$. + +This form is general as it can accommodate both symmetric and asymmetric quantile levels. If the quantile levels are symmetric, then we can alternatively express the WIS as a collection of central prediction intervals ($\ell_{\alpha}, u_{\alpha}$) parametrized by the exclusion probability $\alpha$: + +$$ +WIS(F, Y) = \sum_{\alpha} \{ (u_{\alpha} - \ell_{\alpha}) + 2 \cdot \text{dist}(Y, [\ell_{\alpha}, u_{\alpha}]) \} +$$ +where $\text{dist}(a,S)$ is the smallest distance between point $a$ and an element of set $S$. -While it is the measure of choice used in the COVID-19 Forecast Hub, one limitation is that it prioritizes sharpness (how wide the interval is) relative to coverage (if the interval contains the truth). +While we implement the former representation, we mention this form because it shows the that the score can be decomposed into the addition of a sharpness component (first term in the summand) and an under/overprediction component (second term in the summand). This alternative representation is useful because from it, we more easily see the major limitation to the WIS, which is that the score tends to prioritize sharpness (how wide the interval is) relative to coverage (if the interval contains the truth). -We can manually implement this as a function that is compatible with the latest version of `epipredict` (adapted from the WIS function in https://github.com/dajmcdon/smoothmpf-epipredict). +Now, we write a simple function for the first representation of the score that is compatible with the latest version of `epipredict` (adapted from the corresponding function in [smoothmpf-epipredict](https://github.com/dajmcdon/smoothmpf-epipredict)). The inputs for it are the actual and predicted values and the quantile levels. ```{r} -wis_dist_quantile <- function(actual, q, quantile_levels) { +wis_dist_quantile <- function(actual, values, quantile_levels) { 2 * mean(pmax( - quantile_levels * (actual - q), - (1 - quantile_levels) * (q - actual), na.rm = TRUE + quantile_levels * (actual - values), + (1 - quantile_levels) * (values - actual), na.rm = TRUE )) } +``` -# Test row 1 of test df (test = smooth_preds %>% left_join(tedf_sub)) -wis_dist_quantile(test$actual[2], as.numeric(test[2, 4:8]), as.numeric(names(test)[4:8])) +Next, we apply the `wis_dist_quantile` function to get a WIS score for each state on each target date. We then compute the mean WIS for each ahead value over all of the states. The results for each of the smooth and baseline forecasters are shown in a similar style line plot as we chose for MAE: -test %>% rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`), as.numeric(names(test)[4:5]))) +```{r} +smooth_preds_wis_df = smooth_preds %>% + left_join(tedf_sub) %>% + rowwise() %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + group_by(ahead) %>% + summarise(mean = mean(wis)) %>% + mutate(type = "smooth") + +baseline_preds_wis_df = baseline_preds %>% + left_join(tedf_sub) %>% + rowwise() %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + group_by(ahead) %>% + summarise(mean = mean(wis)) %>% + mutate(type = "baseline") -# Compute mean WIS by ahead (over all states) -test2 = test %>% rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`), as.numeric(names(test)[4:5]))) %>% group_by(ahead) %>% summarise(mean = mean(wis)) +preds_wis_df <- bind_rows(smooth_preds_wis_df, baseline_preds_wis_df) -# Plot over all aheads (do the same as above for the baseline and see which has lower WIS) -ggplot(test2, aes(ahead, mean)) + #, color = type)) + +ggplot(preds_wis_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean WIS") - ``` -From our `smooth_preds_df`, we will need to extract the `values` and the `quantile_levels`: - +The results are consistent with what we saw for MAE: The forecasts for the near and distant future tend to be inaccurate for both models. The smooth quantile regression model only slightly outperforms the baseline model. -For each state at each target date (can be same forecast date), we will apply the `wis_dist_quantile` function to get a WIS score. We may then use these to compute the mean WIS across all states for an ahead (assuming same forecast date for all state and all of the aheads). +Though averaging the WIS score over location and time tends to be the primary aggregation scheme used in evaluation and model comparisons (see, for example, [McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)), we can also obtain a single numerical summary by averaging over the aheads, times, and locations: +```{r} +mean(baseline_preds_wis_df$mean) +mean(smooth_preds_wis_df$mean) +``` +Overall, both perspectives agree that the smooth quantile regression model tends to perform only slightly better than the baseline model in terms of average WIS, illustrating the difficulty of this forecasting problem. # What we've learned in a nutshell @@ -342,4 +371,4 @@ Smooth quantile regression is used in multi-period forecasting for predicting se # Attribution -The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). +The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). From ccfd794b629db742a46c253cf3b54bc2befeb884 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Wed, 24 Apr 2024 06:12:23 -0700 Subject: [PATCH 168/382] Styled --- vignettes/smooth-qr.Rmd | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index bdef99871..a979a60ff 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -266,16 +266,15 @@ Unlike for smooth quantile regression, the resulting forecasts are not smooth cu For a more formal comparison between the two approaches, we could compare the test performance in terms of accuracy through calculating either the, MAE or MSE, where the performance measure of choice can be calculated over over all times and locations for each ahead value ```{r, message = FALSE} - baseline_preds_mae_df <- baseline_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub) %>% group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "baseline") smooth_preds_mae_df <- smooth_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub) %>% group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% @@ -322,7 +321,8 @@ Now, we write a simple function for the first representation of the score that i wis_dist_quantile <- function(actual, values, quantile_levels) { 2 * mean(pmax( quantile_levels * (actual - values), - (1 - quantile_levels) * (values - actual), na.rm = TRUE + (1 - quantile_levels) * (values - actual), + na.rm = TRUE )) } ``` @@ -330,19 +330,19 @@ wis_dist_quantile <- function(actual, values, quantile_levels) { Next, we apply the `wis_dist_quantile` function to get a WIS score for each state on each target date. We then compute the mean WIS for each ahead value over all of the states. The results for each of the smooth and baseline forecasters are shown in a similar style line plot as we chose for MAE: ```{r} -smooth_preds_wis_df = smooth_preds %>% - left_join(tedf_sub) %>% +smooth_preds_wis_df <- smooth_preds %>% + left_join(tedf_sub) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% - group_by(ahead) %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "smooth") -baseline_preds_wis_df = baseline_preds %>% - left_join(tedf_sub) %>% +baseline_preds_wis_df <- baseline_preds %>% + left_join(tedf_sub) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% - group_by(ahead) %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "baseline") From e3dc215a0a556ab2cd13807f58ee7c0b4be7bfad Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Wed, 24 Apr 2024 07:07:14 -0700 Subject: [PATCH 169/382] Minor fixes --- vignettes/panel-data.Rmd | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 409253a38..f23edf00c 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -16,7 +16,7 @@ knitr::opts_chunk$set( ) ``` -```{r libraries} +```{r libraries, warning=FALSE, message=FALSE} library(dplyr) library(tidyr) library(parsnip) @@ -113,23 +113,23 @@ employ <- grad_employ_subset sample_n(employ, 6) ``` -In the following sections, we will go over preprocessing the data in the +In the following sections, we will go over pre-processing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. # Simple autoregressive with 3 lags to predict number of graduates in a year -## Preprocessing +## Pre-processing As a simple example, let's work with the `num_graduates` column for now. We will -first pre-process by "standardizing" each numeric column by the total within +first pre-process by standardizing each numeric column by the total within each group of keys. We do this since those raw numeric values will vary greatly from province to province since there are large differences in population. ```{r employ-small, include=T} employ_small <- employ %>% group_by(geo_value, age_group, edu_qual) %>% - # Select groups where there are complete timeseries values + # Select groups where there are complete time series values filter(n() >= 6) %>% mutate( num_graduates_prop = num_graduates / sum(num_graduates), @@ -140,8 +140,9 @@ employ_small <- employ %>% head(employ_small) ``` -Below is a visualization for a sample of the small data. Note that some groups -do not have any time series information since we filtered out all timeseries +Below is a visualization for a sample of the small data for British Columbia and Ontario. +Note that some groups +do not have any time series information since we filtered out all time series with incomplete dates. ```{r employ-small-graph, include=T, eval=T, fig.width=9, fig.height=6} @@ -159,7 +160,7 @@ employ_small %>% theme(legend.position = "bottom") ``` -We will predict the "standardized" number of graduates (a proportion) in the +We will predict the standardized number of graduates (a proportion) in the next year (time $t+1$) using an autoregressive model with three lags (i.e., an AR(3) model). Such a model is represented algebraically like this: @@ -171,7 +172,7 @@ AR(3) model). Such a model is represented algebraically like this: where $x_i$ is the proportion of graduates at time $i$, and the current time is $t$. -In the preprocessing step, we need to create additional columns in `employ` for +In the pre-processing step, we need to create additional columns in `employ` for each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an `epi_recipe`. Note that creating an `epi_recipe` alone doesn't add these outcome and predictor columns; the recipe just stores the instructions for @@ -194,7 +195,7 @@ Let's apply this recipe using `prep` and `bake` to generate and view the `lag` and `ahead` columns. ```{r view-preprocessed, include=T} -# Display a sample of the preprocessed data +# Display a sample of the pre-processed data bake_and_show_sample <- function(recipe, data, n = 5) { recipe %>% prep(data) %>% @@ -221,7 +222,7 @@ Since our goal for now is to fit a simple autoregressive model, we can use engine `lm`, which fits a linear regression using ordinary least squares. We will use `epi_workflow` with the `epi_recipe` we defined in the -preprocessing section along with the `parsnip::linear_reg()` model. Note again +pre-processing section along with the `parsnip::linear_reg()` model. Note that `epi_workflow` is a container and doesn't actually do the fitting. We have to pass the workflow into `fit()` to get our model coefficients $\alpha_i, i=0,...,3$. @@ -269,8 +270,8 @@ augment(wf_linreg, latest) %>% sample_n(5) First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the fitted values ($\hat{y}_{t}$). -```{r lienarreg-resid-plot, include=T, fig.height=8} -par(mfrow = c(2, 2), mar = c(5, 3.5, 1, 1) + .5) +```{r lienarreg-resid-plot, include=T, fig.height = 5, fig.width = 5} +par(mfrow = c(2,2)) plot(extract_fit_engine(wf_linreg)) ``` @@ -310,9 +311,9 @@ where $y_i$ is the 5-year median income (proportion) at time $i$, $x_i$ is the 2-year median income (proportion) at time $i$, and $z_i$ is the number of graduates (proportion) at time $i$. -## Preprocessing +## Pre-processing -Again, we construct an `epi_recipe` detailing the preprocessing steps. +Again, we construct an `epi_recipe` detailing the pre-processing steps. ```{r custom-arx, include=T} rx <- epi_recipe(employ_small) %>% @@ -327,7 +328,7 @@ rx <- epi_recipe(employ_small) %>% bake_and_show_sample(rx, employ_small) ``` -## Model fitting & postprocessing +## Model fitting & post-processing Before fitting our model and making predictions, let's add some post-processing steps using a few [`frosting`]( @@ -396,8 +397,8 @@ predsx %>% # Using canned forecasters We've seen what we can do with non-epidemiological panel data using the -recipes frame, with `epi_recipe` for preprocessing, `epi_workflow` for model -fitting, and `frosting` for postprocessing. +recipes frame, with `epi_recipe` for pre-processing, `epi_workflow` for model +fitting, and `frosting` for post-processing. `epipredict` also comes with canned forecasters that do all of those steps behind the scenes for some simple models. Even though we aren't working with From 1ee300b5203dec8b189bc2c175c4fda72fbe55af Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Wed, 24 Apr 2024 07:07:54 -0700 Subject: [PATCH 170/382] styler --- vignettes/panel-data.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index f23edf00c..434cfebeb 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -271,7 +271,7 @@ First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the fitted values ($\hat{y}_{t}$). ```{r lienarreg-resid-plot, include=T, fig.height = 5, fig.width = 5} -par(mfrow = c(2,2)) +par(mfrow = c(2, 2)) plot(extract_fit_engine(wf_linreg)) ``` From cc988cb5bf46ba4bd1c74c37f7566d3869bec3ea Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 26 Apr 2024 11:15:20 -0700 Subject: [PATCH 171/382] address @rachellobay review, adjust canned printing to handle `other_keys` --- R/canned-epipred.R | 16 ++++-- vignettes/panel-data.Rmd | 109 +++++++++++++++++++++------------------ 2 files changed, 69 insertions(+), 56 deletions(-) diff --git a/R/canned-epipred.R b/R/canned-epipred.R index 802d0f7e4..81f36f4e1 100644 --- a/R/canned-epipred.R +++ b/R/canned-epipred.R @@ -67,11 +67,17 @@ print.canned_epipred <- function(x, name, ...) { ) cli::cli_text("") cli::cli_text("Training data was an {.cls epi_df} with:") - cli::cli_ul(c( - "Geography: {.field {x$metadata$training$geo_type}},", - "Time type: {.field {x$metadata$training$time_type}},", - "Using data up-to-date as of: {.field {format(x$metadata$training$as_of)}}." - )) + fn_meta <- function() { + cli::cli_ul() + cli::cli_li("Geography: {.field {x$metadata$training$geo_type}},") + if (!is.null(x$metadata$training$other_keys)) { + cli::cli_li("Other keys: {.field {x$metadata$training$other_keys}},") + } + cli::cli_li("Time type: {.field {x$metadata$training$time_type}},") + cli::cli_li("Using data up-to-date as of: {.field {format(x$metadata$training$as_of)}}.") + cli::cli_end() + } + fn_meta() cli::cli_text("") cli::cli_rule("Predictions") diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index 434cfebeb..acb3a0d18 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -12,7 +12,8 @@ knitr::opts_chunk$set( echo = TRUE, collapse = TRUE, comment = "#>", - out.width = "100%" + out.width = "90%", + fig.align = "center" ) ``` @@ -117,7 +118,7 @@ In the following sections, we will go over pre-processing the data in the `epi_recipe` framework, and fitting a model and making predictions within the `epipredict` framework and using the package's canned forecasters. -# Simple autoregressive with 3 lags to predict number of graduates in a year +# Autoregressive (AR) model to predict number of graduates in a year ## Pre-processing @@ -165,21 +166,25 @@ next year (time $t+1$) using an autoregressive model with three lags (i.e., an AR(3) model). Such a model is represented algebraically like this: \[ - x_{t+1} = - \alpha_0 + \alpha_1 x_{t} + \alpha_2 x_{t-1} + \alpha_3 x_{t-2} + \epsilon_t + y_{t+1,ijk} = + \alpha_0 + \alpha_1 y_{tijk} + \alpha_2 y_{t-1,ijk} + \alpha_3 y_{t-2,ijk} + \epsilon_{tijk} \] -where $x_i$ is the proportion of graduates at time $i$, and the current time is -$t$. +where $y_{tij}$ is the proportion of graduates at time $t$ in location $i$ and +age group $j$ with education quality $k$. In the pre-processing step, we need to create additional columns in `employ` for -each of $x_{t+1}$, $x_{t}$, $x_{t-1}$, and $x_{t-2}$. We do this via an +each of $y_{t+1,ijk}$, $y_{tijk}$, $y_{t-1,ijk}$, and $y_{t-2,ijk}$. +We do this via an `epi_recipe`. Note that creating an `epi_recipe` alone doesn't add these outcome and predictor columns; the recipe just stores the instructions for adding them. -Our `epi_recipe` should add one `ahead` column representing $x_{t+1}$ and -3 `lag` columns representing $x_{t}$, $x_{t-1}$, and $x_{t-2}$. Also note that +Our `epi_recipe` should add one `ahead` column representing $y_{t+1,ijk}$ and +3 `lag` columns representing $y_{tijk}$, $y_{t-1,ijk}$, and $y_{t-2,ijk}$ +(it's more accurate to think of the 0th "lag" as the "current" value with 2 lags, +but that's not quite how the processing works). +Also note that since we specified our `time_type` to be `year`, our `lag` and `lead` values are both in years. @@ -209,9 +214,9 @@ r %>% bake_and_show_sample(employ_small) We can see that the `prep` and `bake` steps created new columns according to our `epi_recipe`: -- `ahead_1_num_graduates_prop` corresponds to $x_{t+1}$ +- `ahead_1_num_graduates_prop` corresponds to $y_{t+1,ijk}$ - `lag_0_num_graduates_prop`, `lag_1_num_graduates_prop`, and -`lag_2_num_graduates_prop` correspond to $x_{t}$, $x_{t-1}$, and $x_{t-2}$ +`lag_2_num_graduates_prop` correspond to $y_{tijk}$, $y_{t-1,ijk}$, and $y_{t-2,ijk}$ respectively. ## Model fitting and prediction @@ -224,8 +229,8 @@ engine `lm`, which fits a linear regression using ordinary least squares. We will use `epi_workflow` with the `epi_recipe` we defined in the pre-processing section along with the `parsnip::linear_reg()` model. Note that `epi_workflow` is a container and doesn't actually do the fitting. We have -to pass the workflow into `fit()` to get our model coefficients -$\alpha_i, i=0,...,3$. +to pass the workflow into `fit()` to get our estimated model coefficients +$\widehat{\alpha}_i,\ i=0,...,3$. ```{r linearreg-wf, include=T} wf_linreg <- epi_workflow(r, linear_reg()) %>% @@ -234,13 +239,13 @@ summary(extract_fit_engine(wf_linreg)) ``` This output tells us the coefficients of the fitted model; for instance, -the intercept is $\alpha_0 = 0.24804$ and the coefficient for $x_{t}$ is -$\alpha_1 = 0.06648$. The summary also tells us that only the intercept and lags -at 2 years and 3 years ago have coefficients significantly greater than zero. - -Extracting the 95% confidence intervals for the coefficients also leads us to -the same conclusion: all the coefficients except for $\alpha_1$ (lag 0) contain -0. +the estimated intercept is $\widehat{\alpha}_0 =$ `r round(coef(extract_fit_engine(wf_linreg))[1], 3)` and the coefficient for $y_{tijk}$ is +$\widehat\alpha_1 =$ `r round(coef(extract_fit_engine(wf_linreg))[2], 3)`. +The summary also tells us that all estimated coefficients are significantly +different from zero. Extracting the 95% confidence intervals for the +coefficients also leads us to +the same conclusion: all the coefficient estimates are significantly different +from 0. ```{r} confint(extract_fit_engine(wf_linreg)) @@ -258,20 +263,20 @@ preds %>% sample_n(5) ``` We can do this using the `augment` function too. Note that `predict` and -`augment` both still return an `epi_df` with all of the keys that were present -in the original dataset. +`augment` both still return an `epiprocess::epi_df` with all of the keys that +were present in the original dataset. -```{r linearreg-augment, include=T, eval=F} +```{r linearreg-augment} augment(wf_linreg, latest) %>% sample_n(5) ``` ## Model diagnostics -First, we'll plot the residuals (that is, $y_{t} - \hat{y}_{t}$) against the -fitted values ($\hat{y}_{t}$). +First, we'll plot the residuals (that is, $y_{tijk} - \widehat{y}_{tijk}$) +against the fitted values ($\widehat{y}_{tijk}$). ```{r lienarreg-resid-plot, include=T, fig.height = 5, fig.width = 5} -par(mfrow = c(2, 2)) +par(mfrow = c(2, 2), mar = c(5, 3, 1.2, 0)) plot(extract_fit_engine(wf_linreg)) ``` @@ -286,30 +291,33 @@ The Q-Q plot shows us that the residuals have heavier tails than a Normal distribution. So the normality of residuals assumption doesn't hold either. Finally, the residuals vs. leverage plot shows us that we have a few influential -points based on the Cooks distance (those outside the red dotted line). +points based on the Cook's distance (those outside the red dotted line). Since we appear to be violating the linear model assumptions, we might consider transforming our data differently, or considering a non-linear model, or something else. -# Autoregressive model with exogenous inputs +# AR model with exogenous inputs -Now suppose we want to model the 5-year employment income using 3 lags, while +Now suppose we want to model the 1-step-ahead 5-year employment income using +current and two previous values, while also incorporating information from the other two time-series in our dataset: the 2-year employment income and the number of graduates in the previous 2 years. We would do this using an autoregressive model with exogenous inputs, defined as follows: \[ - y_{t+1} = - \alpha_0 + \alpha_1 y_{t} + \alpha_2 y_{t-1} + \alpha_3 y_{t-2} + - \beta_1 x_{t} + \beta_2 x_{t-1} - \gamma_2 z_{t} + \gamma_2 z_{t-1} +\begin{aligned} + y_{t+1,ijk} &= + \alpha_0 + \alpha_1 y_{tijk} + \alpha_2 y_{t-1,ijk} + \alpha_3 y_{t-2,ijk}\\ + &\quad + \beta_1 x_{tijk} + \beta_2 x_{t-1,ijk}\\ + &\quad + \gamma_2 z_{tijk} + \gamma_2 z_{t-1,ijk} + \epsilon_{tijk} +\end{aligned} \] -where $y_i$ is the 5-year median income (proportion) at time $i$, -$x_i$ is the 2-year median income (proportion) at time $i$, and -$z_i$ is the number of graduates (proportion) at time $i$. +where $y_{tijk}$ is the 5-year median income (proportion) at time $t$ (in location $i$, age group $j$ with education quality $k$), +$x_{tijk}$ is the 2-year median income (proportion) at time $t$, and +$z_{tijk}$ is the number of graduates (proportion) at time $t$. ## Pre-processing @@ -318,9 +326,9 @@ Again, we construct an `epi_recipe` detailing the pre-processing steps. ```{r custom-arx, include=T} rx <- epi_recipe(employ_small) %>% step_epi_ahead(med_income_5y_prop, ahead = 1) %>% - # 5-year median income has 3 lags c(0,1,2) - step_epi_lag(med_income_5y_prop, lag = c(0, 1, 2)) %>% - # But the two exogenous variables have 2 lags c(0,1) + # 5-year median income has current, and two lags c(0, 1, 2) + step_epi_lag(med_income_5y_prop, lag = 0:2) %>% + # But the two exogenous variables have current values, and 1 lag c(0, 1) step_epi_lag(med_income_2y_prop, lag = c(0, 1)) %>% step_epi_lag(num_graduates_prop, lag = c(0, 1)) %>% step_epi_naomit() @@ -335,14 +343,15 @@ steps using a few [`frosting`]( https://cmu-delphi.github.io/epipredict/reference/frosting.html) layers to do a few things: -1. Convert our predictions back to income values and number of graduates, -rather than standardized proportions. We do this via the frosting layer -`layer_population_scaling`. -2. Threshold our predictions to 0. We are predicting proportions, which can't +1. Threshold our predictions to 0. We are predicting proportions, which can't be negative. And the transformed values back to dollars and people can't be negative either. -3. Generate prediction intervals based on residual quantiles, allowing us to +1. Generate prediction intervals based on residual quantiles, allowing us to quantify the uncertainty associated with future predicted values. +1. Convert our predictions back to income values and number of graduates, +rather than standardized proportions. We do this via the frosting layer +`layer_population_scaling()`. + ```{r custom-arx-post, include=T} # Create dataframe of the sums we used for standardizing @@ -373,10 +382,8 @@ wfx_linreg <- epi_workflow(rx, parsnip::linear_reg()) %>% summary(extract_fit_engine(wfx_linreg)) ``` -Based on the summary output for this model, only the intercept term, 5-year -median income from 3 years ago, and the 2-year median income from 1 year ago -are significant linear predictors for today's 5-year median income at a 95% -confidence level. Both lags for the number of graduates were insignificant. +Based on the summary output for this model, we can examine confidence intervals +and perform hypothesis tests as usual. Let's take a look at the predictions along with their 90% prediction intervals. @@ -384,7 +391,7 @@ Let's take a look at the predictions along with their 90% prediction intervals. latest <- get_test_data(recipe = rx, x = employ_small) predsx <- predict(wfx_linreg, latest) -# Display values within prediction intervals +# Display predictions along with prediction intervals predsx %>% select( geo_value, time_value, edu_qual, age_group, @@ -419,8 +426,8 @@ by the keys in our `epi_df`. In this first example, we'll use `flatline_forecaster` to make a simple prediction of the 2-year median income for the next year, based on one previous time point. This model is representated algebraically as: -\[y_{t+1} = \alpha_0 + \alpha_0 y_{t}\] -where $y_i$ is the 2-year median income (proportion) at time $i$. +\[y_{t+1,ijk} = y_{tijk} + \epsilon_{tijk}\] +where $y_{tijk}$ is the 2-year median income (proportion) at time $t$. ```{r flatline, include=T, warning=F} out_fl <- flatline_forecaster(employ_small, "med_income_2y_prop", From 55e8166734659ecb864563d82da2f2135d7dbb0d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 26 Apr 2024 11:23:04 -0700 Subject: [PATCH 172/382] add a conclusion --- vignettes/panel-data.Rmd | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index acb3a0d18..f2b4d8d09 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -473,3 +473,10 @@ out_arx_rf <- arx_forecaster( out_arx_rf ``` + +# Conclusion + +While the purpose of `{epipredict}` is to allow `{tidymodels}` to operate on +epidemiology data, it can be easily adapted (both the workflows and the canned +forecasters) to work for generic panel data modelling. + From e76be9c5d0ee2a6d94519bc56b49f7e80246b545 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:44:08 -0700 Subject: [PATCH 173/382] - cache Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 64fa7fd94..e58e0fa7e 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -9,7 +9,7 @@ knitr::opts_chunk$set( comment = "#>", warning = FALSE, message = FALSE, - cache = TRUE +out.width = "100%" ) ``` From 2893035671f450cf6500d1e09cf0fbfc037856e2 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:44:27 -0700 Subject: [PATCH 174/382] Update title header Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index e58e0fa7e..5ed9f7e01 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -1,5 +1,10 @@ --- -title: "arx_classifier" +title: "Auto-regressive classifier" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Auto-regressive classifier} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} From 05467cdf415c14cfb11e92dc0c14fa07dccd2bda Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:44:37 -0700 Subject: [PATCH 175/382] Update vignettes/arx-classifier-vignette.Rmd Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 5ed9f7e01..ceee9e895 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -29,7 +29,7 @@ library(epipredict) ## Introducing the ARX classifier -The `arx_classifier()` function is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. +The `arx_classifier()` is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: From 18b744095cc3131e87f119e5815ac24d53ec9684 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:44:52 -0700 Subject: [PATCH 176/382] Update vignettes/arx-classifier-vignette.Rmd Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index ceee9e895..ecd6dcb58 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -82,7 +82,7 @@ Additional arguments that may be supplied to `arx_class_args_list()` include the ## Example of using the ARX classifier -Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. +Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? #%% Ok to say relative to the present? Also, should I be more precise here and say relative change or best to keep it simple? From 3015abbbb46fb061ec9eaec2799805175c4d48f7 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:45:23 -0700 Subject: [PATCH 177/382] help() instead of question mark Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index ecd6dcb58..888e46f20 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -73,10 +73,7 @@ out_break_0.5 <- arx_classifier(jhu, out_break_0.5$predictions ``` Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). - -```{r} -?arx_class_args_list -``` +See `help(arx_class_args_list)` for other available modifications. Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key as well as `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on these arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. From c27f688492d07b799e6af6d2847ab0544ad098bd Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:45:41 -0700 Subject: [PATCH 178/382] Update vignettes/arx-classifier-vignette.Rmd Co-authored-by: Daniel McDonald --- vignettes/arx-classifier-vignette.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier-vignette.Rmd index 888e46f20..3caef3407 100644 --- a/vignettes/arx-classifier-vignette.Rmd +++ b/vignettes/arx-classifier-vignette.Rmd @@ -126,7 +126,7 @@ Comparing the pre-processing steps for this to those in the other vignette, we c On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. #%% Last sentence correct? -The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for [`epiprocess::growth_rate()`](https://cmu-delphi.github.io/epiprocess/reference/growth_rate.html) and the related [vignette](https://cmu-delphi.github.io/epiprocess/articles/growth_rate.html). +The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for `epiprocess::growth_rate()` and the related `vignette("growth_rate", package = "epiprocess")`. ### Visualizing the results From 0600ac3f9d696a927c970443ce11b30d03058a02 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:49:02 -0700 Subject: [PATCH 179/382] Add purrr to suggests --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 80e7de094..a246317f5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,7 +36,6 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, - purrr, quantreg, recipes (>= 1.0.4), rlang, @@ -56,6 +55,7 @@ Suggests: knitr, lubridate, poissonreg, + purrr, ranger, RcppRoll, rmarkdown, From 45da6d25556bcbe486d7b6b2231b2b83c8cc4533 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:49:46 -0700 Subject: [PATCH 180/382] Rename file to arx-classifier.Rmd --- vignettes/{arx-classifier-vignette.Rmd => arx-classifier.Rmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vignettes/{arx-classifier-vignette.Rmd => arx-classifier.Rmd} (100%) diff --git a/vignettes/arx-classifier-vignette.Rmd b/vignettes/arx-classifier.Rmd similarity index 100% rename from vignettes/arx-classifier-vignette.Rmd rename to vignettes/arx-classifier.Rmd From 40f71b4b4009defabfa1490d22fd4be1f705ae56 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 12:52:28 -0700 Subject: [PATCH 181/382] Update references to vignettes in this package --- vignettes/arx-classifier.Rmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 3caef3407..3dbaf7438 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -81,7 +81,7 @@ Additional arguments that may be supplied to `arx_class_args_list()` include the Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. -To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? #%% Ok to say relative to the present? Also, should I be more precise here and say relative change or best to keep it simple? +To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? To answer this question, we can create a predictive model for upsurges and downsurges of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes @@ -93,7 +93,7 @@ Z_{l,t} = \left\{\begin{matrix} \end{align}$$ where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t- 7} / Y_{l, t- 7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. -The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html): +The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in `vignette("preprocessing-and-models")`: $$\begin{align} \pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ @@ -107,7 +107,7 @@ $$ Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. -Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in the [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). +Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in `vignette("preprocessing-and-models")`. ```{r} log_res <- arx_classifier( @@ -124,7 +124,7 @@ workflows::extract_preprocessor(log_res$epi_workflow) Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). -On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. #%% Last sentence correct? +On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for `epiprocess::growth_rate()` and the related `vignette("growth_rate", package = "epiprocess")`. @@ -160,4 +160,4 @@ While there is a bit of variability near to the beginning, we can clearly see th ## A brief reflection -The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in [Examples of Preprocessing and Models vignette](https://cmu-delphi.github.io/epipredict/articles/preprocessing-and-models.html). #%% takes a complex turn, increases in complexity +The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. From 1a2f48545f1dd96765daf86492ac78a13216874c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:09:52 -0700 Subject: [PATCH 182/382] Remove horizon stuff --- vignettes/arx-classifier.Rmd | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 3dbaf7438..cdafc9d1b 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -14,7 +14,7 @@ knitr::opts_chunk$set( comment = "#>", warning = FALSE, message = FALSE, -out.width = "100%" + out.width = "100%" ) ``` @@ -139,15 +139,12 @@ multi_log_res <- map(1:14, ~ arx_classifier( predictors = "case_rate", args_list = arx_class_args_list( breaks = 0.25 / 7, - ahead = .x, - horizon = .x, + ahead = .x ) )$predictions) %>% list_rbind() ``` -Notice that the ahead and horizon are what we are are changing when we use `map()`. The reason we must also change `horizon` is because that is passed to the `h` argument of `epiprocess::growth_rate()` and determines the amount of data used to calculate the growth rate. So, for nearly all intents and purposes, it should be the same as `ahead`. - -We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting: +We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting to take away: ```{r} ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + From 8092e0a7543ded0ac85199c33b2449e765d802b1 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:16:38 -0700 Subject: [PATCH 183/382] Add a bit about n_training --- vignettes/arx-classifier.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index cdafc9d1b..dba2e99ae 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -75,7 +75,7 @@ out_break_0.5$predictions Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). See `help(arx_class_args_list)` for other available modifications. -Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key as well as `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on these arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. +Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key. If you would like some practice with using this, then remove the filtering command to obtain data within "2021-06-04" and "2021-12-31" and instead set `n_training` to be the number of days between these two dates, inclusive of the end points. The end results should be the same. In addition to `n_training`, there are `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on such arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. ## Example of using the ARX classifier From 5641c954de527dd3d9bdf40c5544ba56631eb427 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:22:18 -0700 Subject: [PATCH 184/382] remove surges --- vignettes/arx-classifier.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index dba2e99ae..45554fa12 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -81,9 +81,9 @@ Additional arguments that may be supplied to `arx_class_args_list()` include the Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. -To motivate this example, a major use of autoregressive classification models is to predict upsurges or downsurges like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? +To motivate this example, a major use of autoregressive classification models is to predict upswings or downswings like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? -To answer this question, we can create a predictive model for upsurges and downsurges of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes +To answer this question, we can create a predictive model for upswings and downswings of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes $$\begin{align} Z_{l,t} = \left\{\begin{matrix} From b73ccac11e5a9175150f8a1407076d87de1ee900 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:26:42 -0700 Subject: [PATCH 185/382] Run use_this(purrr) and edit conclusion --- DESCRIPTION | 2 +- vignettes/arx-classifier.Rmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index a246317f5..80e7de094 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,6 +36,7 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, + purrr, quantreg, recipes (>= 1.0.4), rlang, @@ -55,7 +56,6 @@ Suggests: knitr, lubridate, poissonreg, - purrr, ranger, RcppRoll, rmarkdown, diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 45554fa12..8be96fb4b 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -157,4 +157,4 @@ While there is a bit of variability near to the beginning, we can clearly see th ## A brief reflection -The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose depends on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. +The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose will depend on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. From b3079dde3bd3dd786c2aa74b154c2497290c62c8 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:27:00 -0700 Subject: [PATCH 186/382] translating --- vignettes/arx-classifier.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 8be96fb4b..ff8696db2 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -157,4 +157,4 @@ While there is a bit of variability near to the beginning, we can clearly see th ## A brief reflection -The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose will depend on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider to take this opportunity to translate this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. +The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose will depend on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider translating this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. From 198d39716ebdf9578f3b6b6495b447c9534844a3 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:43:01 -0700 Subject: [PATCH 187/382] scale_colour_brewer() --- vignettes/arx-classifier.Rmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index ff8696db2..0c3d0477a 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -119,7 +119,7 @@ log_res <- arx_classifier( ) ) -workflows::extract_preprocessor(log_res$epi_workflow) +log_res$epi_workflow ``` Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). @@ -149,6 +149,7 @@ We can plot a the heatmap of the results over the aheads to see if there's anyth ```{r} ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + geom_tile() + + scale_colour_brewer() + ylab("State") + xlab("Target date") ``` From f1f80d3909c6bef9d67b3e87526a8f8828bc3f31 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:23:19 -0700 Subject: [PATCH 188/382] Try 10% increase --- vignettes/arx-classifier.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 0c3d0477a..d2dafc077 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -138,7 +138,7 @@ multi_log_res <- map(1:14, ~ arx_classifier( outcome = "case_rate", predictors = "case_rate", args_list = arx_class_args_list( - breaks = 0.25 / 7, + breaks = 0.25/7, ahead = .x ) )$predictions) %>% list_rbind() @@ -149,9 +149,9 @@ We can plot a the heatmap of the results over the aheads to see if there's anyth ```{r} ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + geom_tile() + - scale_colour_brewer() + ylab("State") + - xlab("Target date") + xlab("Target date") + + scale_fill_brewer(palette = "Set1") ``` While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. From 04553a6622af625115ce0feb2b29c31ac4b13a66 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:23:35 -0700 Subject: [PATCH 189/382] see previous --- vignettes/arx-classifier.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index d2dafc077..6152f34bd 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -138,7 +138,7 @@ multi_log_res <- map(1:14, ~ arx_classifier( outcome = "case_rate", predictors = "case_rate", args_list = arx_class_args_list( - breaks = 0.25/7, + breaks = 0.1, ahead = .x ) )$predictions) %>% list_rbind() From a78069ee50c5f57b652e74bb80633ea291b56ed2 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:29:05 -0700 Subject: [PATCH 190/382] description --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 80e7de094..e573bd902 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.12 +Version: 0.0.13 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From fb6ba335411d8034c18c47b5d12a9e6417654f42 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:32:37 -0700 Subject: [PATCH 191/382] Try to pass check --- vignettes/arx-classifier.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 6152f34bd..63cac865f 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -141,7 +141,7 @@ multi_log_res <- map(1:14, ~ arx_classifier( breaks = 0.1, ahead = .x ) -)$predictions) %>% list_rbind() +)$predictions) %>% list_rbind() ``` We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting to take away: From 24ff1e7d26a8aae192e722fdb8f7f210fcc703e8 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:39:33 -0700 Subject: [PATCH 192/382] map over larger window --- vignettes/arx-classifier.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 63cac865f..1cbf316d7 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -133,12 +133,12 @@ The other optional arguments for controlling the growth rate calculation (that c To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: ```{r} -multi_log_res <- map(1:14, ~ arx_classifier( +multi_log_res <- map(1:40, ~ arx_classifier( jhu, outcome = "case_rate", predictors = "case_rate", args_list = arx_class_args_list( - breaks = 0.1, + breaks = 0.25 / 7, # division by 7 gives weekly not daily ahead = .x ) )$predictions) %>% list_rbind() @@ -154,7 +154,7 @@ ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + scale_fill_brewer(palette = "Set1") ``` -While there is a bit of variability near to the beginning, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. +While there is a bit of variability near to the end, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. ## A brief reflection From 29205c3d391d388b69930bb8d0b77bddfd62d92c Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:41:51 -0700 Subject: [PATCH 193/382] description --- DESCRIPTION | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e573bd902..d21127830 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.13 +Version: 0.0.12 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), @@ -23,7 +23,7 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.7.5), + epiprocess (>= 0.6.0), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: @@ -32,11 +32,9 @@ Imports: distributional, dplyr, generics, - ggplot2, glue, hardhat (>= 1.3.0), magrittr, - purrr, quantreg, recipes (>= 1.0.4), rlang, @@ -53,6 +51,7 @@ Suggests: data.table, epidatr (>= 1.0.0), fs, + ggplot2, knitr, lubridate, poissonreg, From dd357e7ec81fb029f9db38aba074969e5f7ccdf0 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:42:23 -0700 Subject: [PATCH 194/382] Add purrr to suggests --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index d21127830..b7795cdfc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -55,6 +55,7 @@ Suggests: knitr, lubridate, poissonreg, + purrr, ranger, RcppRoll, rmarkdown, From 3845afabfab40f0ec19d9de62368f5d2db01c13e Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:44:07 -0700 Subject: [PATCH 195/382] Style file --- vignettes/arx-classifier.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 1cbf316d7..79db765b8 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -141,7 +141,7 @@ multi_log_res <- map(1:40, ~ arx_classifier( breaks = 0.25 / 7, # division by 7 gives weekly not daily ahead = .x ) -)$predictions) %>% list_rbind() +)$predictions) %>% list_rbind() ``` We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting to take away: From ec24435f4b8c9baa2546ff403d0737b4b43bf26f Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:54:48 -0700 Subject: [PATCH 196/382] Moved arx-classifier to articles --- man/arx_class_epi_workflow.Rd | 7 +++++-- man/arx_classifier.Rd | 7 +++++-- man/arx_fcast_epi_workflow.Rd | 9 +++++--- man/arx_forecaster.Rd | 9 +++++--- man/autoplot-epipred.Rd | 23 +++++++-------------- vignettes/{ => articles}/arx-classifier.Rmd | 0 6 files changed, 29 insertions(+), 26 deletions(-) rename vignettes/{ => articles}/arx-classifier.Rmd (100%) diff --git a/man/arx_class_epi_workflow.Rd b/man/arx_class_epi_workflow.Rd index e55e14160..bb5ac54ae 100644 --- a/man/arx_class_epi_workflow.Rd +++ b/man/arx_class_epi_workflow.Rd @@ -22,8 +22,11 @@ internally based on the \code{breaks} argument to \code{\link[=arx_class_args_li If discrete classes are already in the \code{epi_df}, it is recommended to code up a classifier from scratch using \code{\link[=epi_recipe]{epi_recipe()}}.} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "classification"}. Typical values are diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index de487ec51..350352ae9 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -22,8 +22,11 @@ internally based on the \code{breaks} argument to \code{\link[=arx_class_args_li If discrete classes are already in the \code{epi_df}, it is recommended to code up a classifier from scratch using \code{\link[=epi_recipe]{epi_recipe()}}.} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "classification"}. Typical values are diff --git a/man/arx_fcast_epi_workflow.Rd b/man/arx_fcast_epi_workflow.Rd index 8c76bcdd7..5db59497b 100644 --- a/man/arx_fcast_epi_workflow.Rd +++ b/man/arx_fcast_epi_workflow.Rd @@ -7,7 +7,7 @@ arx_fcast_epi_workflow( epi_data, outcome, - predictors, + predictors = outcome, trainer = NULL, args_list = arx_args_list() ) @@ -18,8 +18,11 @@ arx_fcast_epi_workflow( \item{outcome}{A character (scalar) specifying the outcome (in the \code{epi_df}).} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "regression"}. May be \code{NULL} (the default).} diff --git a/man/arx_forecaster.Rd b/man/arx_forecaster.Rd index 7a042c65c..af05c0682 100644 --- a/man/arx_forecaster.Rd +++ b/man/arx_forecaster.Rd @@ -7,7 +7,7 @@ arx_forecaster( epi_data, outcome, - predictors, + predictors = outcome, trainer = parsnip::linear_reg(), args_list = arx_args_list() ) @@ -18,8 +18,11 @@ arx_forecaster( \item{outcome}{A character (scalar) specifying the outcome (in the \code{epi_df}).} -\item{predictors}{A character vector giving column(s) of predictor -variables.} +\item{predictors}{A character vector giving column(s) of predictor variables. +This defaults to the \code{outcome}. However, if manually specified, only those variables +specifically mentioned will be used. (The \code{outcome} will not be added.) +By default, equals the outcome. If manually specified, does not add the +outcome variable, so make sure to specify it.} \item{trainer}{A \code{{parsnip}} model describing the type of estimation. For now, we enforce \code{mode = "regression"}.} diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 80a552604..c8d00e147 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,20 +39,11 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} -\item{.color_by}{Which variables should determine the color(s) used to plot -lines. Options include: -\itemize{ -\item \code{all_keys} - the default uses the interaction of any key variables -including the \code{geo_value} -\item \code{geo_value} - \code{geo_value} only -\item \code{other_keys} - any available keys that are not \code{geo_value} -\item \code{.response} - the numeric variables (same as the y-axis) -\item \code{all} - uses the interaction of all keys and numeric variables -\item \code{none} - no coloring aesthetic is applied -}} - -\item{.facet_by}{Similar to \code{.color_by} except that the default is to display -each numeric variable on a separate facet} +\item{.color_by}{A character string indicating how to color the data. See +\code{epiprocess::autoplot.epi_df()} for more details.} + +\item{.facet_by}{A character string indicating how to facet the data. See +\code{epiprocess::autoplot.epi_df()} for more details.} \item{.base_color}{If available, prediction bands will be shown with this color.} @@ -60,8 +51,8 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} -\item{.max_facets}{Cut down of the number of facets displayed. Especially -useful for testing when there are many \code{geo_value}'s or keys.} +\item{.max_facets}{The maximum number of facets to show. If the number of +facets is greater than this value, only the top facets will be shown.} } \description{ For a fit workflow, the training data will be displayed, the response by diff --git a/vignettes/arx-classifier.Rmd b/vignettes/articles/arx-classifier.Rmd similarity index 100% rename from vignettes/arx-classifier.Rmd rename to vignettes/articles/arx-classifier.Rmd From b1adbd51f9e0b19b210a3d97552240eb3cbc488b Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:04:22 -0700 Subject: [PATCH 197/382] Please work --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index b7795cdfc..fbde4f285 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -32,6 +32,7 @@ Imports: distributional, dplyr, generics, + ggplot2, glue, hardhat (>= 1.3.0), magrittr, @@ -51,7 +52,6 @@ Suggests: data.table, epidatr (>= 1.0.0), fs, - ggplot2, knitr, lubridate, poissonreg, From cdd5a91c1a71e3931e8a5d5736e1759483b9b25f Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:17:37 -0700 Subject: [PATCH 198/382] test --- DESCRIPTION | 4 ++-- man/arx_fcast_epi_workflow.Rd | 2 +- man/autoplot-epipred.Rd | 10 ++-------- vignettes/{articles => }/arx-classifier.Rmd | 0 4 files changed, 5 insertions(+), 11 deletions(-) rename vignettes/{articles => }/arx-classifier.Rmd (100%) diff --git a/DESCRIPTION b/DESCRIPTION index c9c1ee1a7..b7795cdfc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.13 +Version: 0.0.12 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), @@ -32,7 +32,6 @@ Imports: distributional, dplyr, generics, - ggplot2, glue, hardhat (>= 1.3.0), magrittr, @@ -52,6 +51,7 @@ Suggests: data.table, epidatr (>= 1.0.0), fs, + ggplot2, knitr, lubridate, poissonreg, diff --git a/man/arx_fcast_epi_workflow.Rd b/man/arx_fcast_epi_workflow.Rd index 40b4e843b..4ed279351 100644 --- a/man/arx_fcast_epi_workflow.Rd +++ b/man/arx_fcast_epi_workflow.Rd @@ -8,7 +8,7 @@ arx_fcast_epi_workflow( epi_data, outcome, predictors = outcome, - trainer = NULL, + trainer = parsnip::linear_reg(), args_list = arx_args_list() ) } diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index cd56f3c05..3362b9124 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,20 +39,14 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} -\item{.color_by}{A character string indicating how to color the data. See -\code{epiprocess::autoplot.epi_df()} for more details.} - -\item{.facet_by}{A character string indicating how to facet the data. See -\code{epiprocess::autoplot.epi_df()} for more details.} +\item{.facet_by}{Similar to \code{.color_by} except that the default is to +display the response.} \item{.base_color}{If available, prediction bands will be shown with this color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} - -\item{.max_facets}{The maximum number of facets to show. If the number of -facets is greater than this value, only the top facets will be shown.} } \description{ For a fit workflow, the training data will be displayed, the response by diff --git a/vignettes/articles/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd similarity index 100% rename from vignettes/articles/arx-classifier.Rmd rename to vignettes/arx-classifier.Rmd From 3c6a44a25a5cae66f708243f2e8766a33ce9ede3 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:19:06 -0700 Subject: [PATCH 199/382] make sure version is updated --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index b7795cdfc..0de58f6ae 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.12 +Version: 0.0.13 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From fe1db833e9a493180a00eac9701e587bd603ba31 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 15:51:52 -0700 Subject: [PATCH 200/382] Use latest version of description --- DESCRIPTION | 4 ++-- man/autoplot-epipred.Rd | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0de58f6ae..0552d700d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,7 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.6.0), + epiprocess (>= 0.7.5), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: @@ -32,6 +32,7 @@ Imports: distributional, dplyr, generics, + ggplot2, glue, hardhat (>= 1.3.0), magrittr, @@ -51,7 +52,6 @@ Suggests: data.table, epidatr (>= 1.0.0), fs, - ggplot2, knitr, lubridate, poissonreg, diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 3362b9124..18000cd82 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,6 +39,18 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} +\item{.color_by}{Which variables should determine the color(s) used to plot +lines. Options include: +\itemize{ +\item \code{all_keys} - the default uses the interaction of any key variables +including the \code{geo_value} +\item \code{geo_value} - \code{geo_value} only +\item \code{other_keys} - any available keys that are not \code{geo_value} +\item \code{.response} - the numeric variables (same as the y-axis) +\item \code{all} - uses the interaction of all keys and numeric variables +\item \code{none} - no coloring aesthetic is applied +}} + \item{.facet_by}{Similar to \code{.color_by} except that the default is to display the response.} @@ -47,6 +59,9 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} + +\item{.max_facets}{Cut down of the number of facets displayed. Especially +useful for testing when there are many \code{geo_value}'s or keys.} } \description{ For a fit workflow, the training data will be displayed, the response by From 2b25c350943f018b3255bd5727acd5aa8efa5a26 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Fri, 26 Apr 2024 19:25:15 -0700 Subject: [PATCH 201/382] Move update vignette. May be parsnip warning --- vignettes/{ => articles}/update.Rmd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vignettes/{ => articles}/update.Rmd (100%) diff --git a/vignettes/update.Rmd b/vignettes/articles/update.Rmd similarity index 100% rename from vignettes/update.Rmd rename to vignettes/articles/update.Rmd From 4d48f8e99755b0b3ad5e92f8d9a80593f36f6ae4 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 00:16:48 -0700 Subject: [PATCH 202/382] Several manual changes --- vignettes/smooth-qr.Rmd | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index a979a60ff..bcd332d9f 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -1,5 +1,10 @@ --- -title: "Smooth Quantile Regression" +title: "Smooth quantile regression" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Smooth quantile regression} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} @@ -8,15 +13,15 @@ knitr::opts_chunk$set( comment = "#>", warning = FALSE, message = FALSE, - cache = TRUE + out.width = "100%" ) ``` # Introducing smooth quantile regression -Whereas the standard application of time-series forecasting techniques has been to forecast single horizons, in multi-period forecasting, the goal is to forecast several horizons simultaneously. The standard application of these techniques aims to predict the signal for a single forecast horizon (or "ahead"), most often one-step-ahead. This is useful in epidemiological applications where decisions are often based on the trend of a signal. +Whereas the standard application of time-series forecasting techniques has been to forecast a single horizon, in multi-period forecasting, the goal is to forecast several horizons simultaneously. This is useful in epidemiological applications where decisions are based on the trend of a signal. -The idea underlying smooth quantile regression that the future can be approximated by a smooth curve. So this approach enforces smoothness across the horizons for point estimation by regression or interval prediction by quantile regression. Our focus in this chapter is the latter. +The idea underlying smooth quantile regression is that the future can be approximated by a smooth curve. This novel approach from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) enforces smoothness across the horizons and can be applied to point estimation by regression or interval prediction by quantile regression. Our focus in this vignette is the latter. # Built-in function for smooth quantile regression and its parameters @@ -200,7 +205,7 @@ We can see that the predictions are smooth curves for each state, as expected wh ## Varying the degrees parameter -We can test the impact of different degrees by using the `map()` function. Let's try out all degrees from 1 to 7: +We can test the impact of different degrees by using the `map()` function. Noting that this may take some time to run, let's try out all degrees from 1 to 7: ```{r, warning = FALSE} smooth_preds_list <- map(1:7, ~ smooth_fc(edf, @@ -218,9 +223,6 @@ Since the MAE compares the predicted values to the actual values, we will first tedf_sub <- tedf %>% rename(target_date = time_value, actual = death_rate) %>% select(geo_value, target_date, actual) - -smooth_preds_df_deg <- smooth_preds_list %>% - left_join(tedf_sub) ``` And then compute the MAE for each of the degrees: @@ -285,7 +287,8 @@ preds_mae_df <- bind_rows(baseline_preds_mae_df, smooth_preds_mae_df) ggplot(preds_mae_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + - ylab("Mean MAE") + ylab("Mean MAE") + + scale_fill_brewer(palette = "Set1") ``` or over all aheads, times, and locations for a single numerical summary. @@ -351,7 +354,8 @@ preds_wis_df <- bind_rows(smooth_preds_wis_df, baseline_preds_wis_df) ggplot(preds_wis_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + - ylab("Mean WIS") + ylab("Mean WIS") + + scale_fill_brewer(palette = "Set1") ``` The results are consistent with what we saw for MAE: The forecasts for the near and distant future tend to be inaccurate for both models. The smooth quantile regression model only slightly outperforms the baseline model. From a7fca205b4e7acbabbcbc1674cec33b08b9dfea0 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:03:40 -0700 Subject: [PATCH 203/382] purrr to suggests --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 80e7de094..a246317f5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,7 +36,6 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, - purrr, quantreg, recipes (>= 1.0.4), rlang, @@ -56,6 +55,7 @@ Suggests: knitr, lubridate, poissonreg, + purrr, ranger, RcppRoll, rmarkdown, From a3113b7d75bea2ff1acbe4719ae1866c921f1127 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:04:23 -0700 Subject: [PATCH 204/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index bcd332d9f..889be8c6c 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -163,7 +163,7 @@ Most often, we're not going to want to limit ourselves to just predicting the me several_quantiles <- c(.1, .25, .5, .75, .9) smooth_preds <- smooth_fc(edf, quantiles = several_quantiles, fd = fd) -head(smooth_preds) +smooth_preds ``` We can see that we have different columns for the different quantile predictions. From 4bab9f0c16298d32e913486a496500da1c871eea Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:04:44 -0700 Subject: [PATCH 205/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 889be8c6c..91db2d569 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -155,7 +155,7 @@ We now can produce smooth quantile regression predictions for our problem: ```{r, warning = FALSE} smooth_preds <- smooth_fc(edf, fd = fd) -head(smooth_preds) +smooth_preds ``` Most often, we're not going to want to limit ourselves to just predicting the median value as there is uncertainty about the predictions, so let's try to predict several different quantiles in addition to the median: From 63ebc578ff7a084f3f5cac7b6242f35dafaccff4 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:04:58 -0700 Subject: [PATCH 206/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 91db2d569..a3c1ef36d 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -184,8 +184,8 @@ plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { geom_ribbon(aes(target_date, ymin = `0.25`, ymax = `0.75`), fill = "#00488E", alpha = .8 ) + - geom_line(data = train_test_dat, aes(time_value, death_rate), size = 1.5) + - geom_line(aes(target_date, `0.5`), color = "orange", size = 1.5) + + geom_line(data = train_test_dat, aes(time_value, death_rate)) + + geom_line(aes(target_date, `0.5`), color = "orange") + geom_vline(xintercept = fd) + facet_wrap(~geo_value) + theme_bw(16) + From a1b4e2b5b952ff65870b774261529f9cb75c3dbc Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:05:13 -0700 Subject: [PATCH 207/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index a3c1ef36d..dbdfa431d 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -60,6 +60,7 @@ library(epipredict) library(dplyr) library(purrr) library(ggplot2) +theme_set(theme_bw()) ``` We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. From 3a1d2c7212504a2ac2b945af1b3bd3383f43ace5 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:05:55 -0700 Subject: [PATCH 208/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index dbdfa431d..9d48dc167 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -301,7 +301,7 @@ mean(smooth_preds_mae_df$mean) The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. The latter shows that the smooth quantile regression model and baseline models perform very similarly overall, with the smooth quantile regression model only slightly beating the baseline model in terms of overall average MAE. -One other commonly used metric is the WIS score ([ Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. +One other commonly used metric is the Weighted Interval Score (WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. Suppose we have $F$ be a forecaster composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for target variable $Y$ is represented as follows ([McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): From 1501eeac70b17e240c1ae0dfc8b373acd065a802 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:06:10 -0700 Subject: [PATCH 209/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 9d48dc167..9e1109f64 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -39,7 +39,7 @@ smooth_quantile_reg( For smooth quantile regression, the type of model or `mode` is regression. -The only `engine` that is currently supported is `smooth_qr()` from the [`smooth_qr` package](https://dajmcdon.github.io/smoothqr/). +The only `engine` that is currently supported is `smooth_qr()` from the [`smoothqr` package](https://dajmcdon.github.io/smoothqr/). The `outcome_locations` indicate the multiple horizon (ie. ahead) values. These should be specified by the user. From 23084ce4f34ca9fe7635514406497bf7d73302b8 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:06:21 -0700 Subject: [PATCH 210/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 9e1109f64..174293f1b 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -45,7 +45,7 @@ The `outcome_locations` indicate the multiple horizon (ie. ahead) values. These The `quantile_levels` parameter is a vector of values that indicates the quantiles to be estimated. The default is the median (0.5 quantile). -The `degree` parameter indicates the number of polynomials used for smoothing of the response. It should be no more than the number of responses. If the degree is precisely equal to the number of aheads, then there is no smoothing. To better understand this parameter and how it works, we should look to its origins and how it is used in the model. +The `degree` parameter indicates the degree of the polynomials used for smoothing of the response. It should be no more than the number of aheads. If the degree is precisely equal to the number of aheads, then there is no smoothing. To better understand this parameter and how it works, we should look to its origins and how it is used in the model. # Model form From 7645f64c008502b5545a60191113b879dcfd2a3d Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:06:33 -0700 Subject: [PATCH 211/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 1 - 1 file changed, 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 174293f1b..5976cbe2a 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -189,7 +189,6 @@ plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { geom_line(aes(target_date, `0.5`), color = "orange") + geom_vline(xintercept = fd) + facet_wrap(~geo_value) + - theme_bw(16) + scale_x_date(name = "", date_labels = "%b %Y") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + ylab("Deaths per 100K inhabitants") From 2c2a56242d5f95f27d2504207223891203238bf6 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:06:44 -0700 Subject: [PATCH 212/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 5976cbe2a..f93f5e340 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -234,7 +234,7 @@ smooth_preds_df_deg <- smooth_preds_list %>% summarise(mean = mean(error)) # Arrange the MAE from smallest to largest -head(smooth_preds_df_deg %>% arrange(mean)) +smooth_preds_df_deg %>% arrange(mean) ``` Instead of just looking at the raw numbers, let's create a simple line plot to visualize how the MAE changes over degrees for this data: From 9da04fea5182096400330a53797396fdbf2dfc89 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:06:55 -0700 Subject: [PATCH 213/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index f93f5e340..7afb3db5c 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -302,7 +302,7 @@ The former shows that forecasts for the immediate future and for the distant fut One other commonly used metric is the Weighted Interval Score (WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. -Suppose we have $F$ be a forecaster composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for target variable $Y$ is represented as follows ([McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): +Let $F$ be a forecast composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for target variable $Y$ is represented as follows ([McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): $$ WIS(F, Y) = 2 \sum_{\tau} \phi_{\tau} (Y - q_{\tau}) From 33feb879be9a77a54f353331193d281818dab81c Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:07:17 -0700 Subject: [PATCH 214/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 7afb3db5c..19dd2bd03 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -334,7 +334,7 @@ Next, we apply the `wis_dist_quantile` function to get a WIS score for each stat ```{r} smooth_preds_wis_df <- smooth_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% group_by(ahead) %>% From acaf3db1c2dcb2c8ebff665c1729750114294792 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:07:27 -0700 Subject: [PATCH 215/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 19dd2bd03..77d45b5a5 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -189,8 +189,7 @@ plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { geom_line(aes(target_date, `0.5`), color = "orange") + geom_vline(xintercept = fd) + facet_wrap(~geo_value) + - scale_x_date(name = "", date_labels = "%b %Y") + - theme(axis.text.x = element_text(angle = 45, hjust = 1)) + + scale_x_date(name = "", date_labels = "%b %Y", date_breaks = "2 months") + ylab("Deaths per 100K inhabitants") } ``` From 5fd8a7a2b38aa112aca5b566848b6dc307d25873 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:07:40 -0700 Subject: [PATCH 216/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index 77d45b5a5..f39746287 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -268,7 +268,7 @@ For a more formal comparison between the two approaches, we could compare the te ```{r, message = FALSE} baseline_preds_mae_df <- baseline_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% From d1a0be4b75cbdca2180fbf6bd5671bdffafc1567 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:08:45 -0700 Subject: [PATCH 217/382] Update vignettes/smooth-qr.Rmd Co-authored-by: Daniel McDonald --- vignettes/smooth-qr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index f39746287..d0c49188b 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -275,7 +275,7 @@ baseline_preds_mae_df <- baseline_preds %>% mutate(type = "baseline") smooth_preds_mae_df <- smooth_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% From 4b7059e1ceaa0e4c1d790cb959187e5c3238c422 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:11:51 -0700 Subject: [PATCH 218/382] Intro changes & style --- vignettes/smooth-qr.Rmd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index d0c49188b..eedb1536f 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -19,9 +19,9 @@ knitr::opts_chunk$set( # Introducing smooth quantile regression -Whereas the standard application of time-series forecasting techniques has been to forecast a single horizon, in multi-period forecasting, the goal is to forecast several horizons simultaneously. This is useful in epidemiological applications where decisions are based on the trend of a signal. +Whereas other time-series forecasting examples in this package have used (direct) models for single horizons, in multi-period forecasting, the goal is to (directly) forecast several horizons simultaneously. This is useful in epidemiological applications where decisions are based on the trend of a signal. -The idea underlying smooth quantile regression is that the future can be approximated by a smooth curve. This novel approach from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) enforces smoothness across the horizons and can be applied to point estimation by regression or interval prediction by quantile regression. Our focus in this vignette is the latter. +The idea underlying smooth quantile regression is that set forecast targets can be approximated by a smooth curve. This novel approach from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) enforces smoothness across the horizons and can be applied to point estimation by regression or interval prediction by quantile regression. Our focus in this vignette is the latter. # Built-in function for smooth quantile regression and its parameters @@ -269,14 +269,14 @@ For a more formal comparison between the two approaches, we could compare the te ```{r, message = FALSE} baseline_preds_mae_df <- baseline_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) - group_by(ahead) %>% +group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "baseline") smooth_preds_mae_df <- smooth_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) - group_by(ahead) %>% +group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "smooth") @@ -334,7 +334,7 @@ Next, we apply the `wis_dist_quantile` function to get a WIS score for each stat ```{r} smooth_preds_wis_df <- smooth_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) - rowwise() %>% +rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% From c582250d17b3ea4dee41d4e59a4f41664426fd4a Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:20:41 -0700 Subject: [PATCH 219/382] Catch typos --- vignettes/smooth-qr.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/smooth-qr.Rmd index eedb1536f..da2cd3bab 100644 --- a/vignettes/smooth-qr.Rmd +++ b/vignettes/smooth-qr.Rmd @@ -49,9 +49,9 @@ The `degree` parameter indicates the degree of the polynomials used for smoothin # Model form -Smooth quantile regression is linear auto-regressive, with the key feature being a transformation that forces the coefficients to satisfy a constraint. The purpose if this is for each model coefficient to be a smooth function of ahead values, and so each such coefficient is set to be a linear combination of smooth basis functions (such as a spline or a polynomial). +Smooth quantile regression is linear auto-regressive, with the key feature being a transformation that forces the coefficients to satisfy a smoothing constraint. The purpose of this is for each model coefficient to be a smooth function of ahead values, and so each such coefficient is set to be a linear combination of smooth basis functions (such as a spline or a polynomial). -The `degree` parameter controls the number of these polynomials used. It should be no greater than the number of responses. This is a tuning parameter, and so it can be chosen by performing a grid search with cross-validation. Intuitively, $d = 1$ corresponds to the constant model, $d = 2$ gives straight line forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was found to work well in the tested applications (see Section 9 of Tuzhilina et al, 2022), it is the default value. +The `degree` parameter controls the number of these polynomials used. It should be no greater than the number of responses. This is a tuning parameter, and so it can be chosen by performing a grid search with cross-validation. Intuitively, $d = 1$ corresponds to the constant model, $d = 2$ gives straight line forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was found to work well in the tested applications (see Section 9 of [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723)), it is the default value. # Demonstration of smooth quantile regression @@ -227,7 +227,7 @@ tedf_sub <- tedf %>% And then compute the MAE for each of the degrees: ```{r, message = FALSE} smooth_preds_df_deg <- smooth_preds_list %>% - left_join(tedf_sub) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) %>% group_by(degree) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) From d509e768c0f42eabea13f4d9dddd22847968b698 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:21:08 -0700 Subject: [PATCH 220/382] Move to articles --- vignettes/{ => articles}/smooth-qr.Rmd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename vignettes/{ => articles}/smooth-qr.Rmd (100%) diff --git a/vignettes/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd similarity index 100% rename from vignettes/smooth-qr.Rmd rename to vignettes/articles/smooth-qr.Rmd From fb45ed07bab87170fd8f92b1f10777673e4dfa36 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:34:53 -0700 Subject: [PATCH 221/382] Update vignettes/symptom-surveys.Rmd Co-authored-by: Daniel McDonald --- vignettes/symptom-surveys.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index fdd73abd3..cf962de84 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -520,7 +520,7 @@ knitr::kable( "Test period:", min(res_err2$forecast_date), "to", max(res_err2$forecast_date) ), - format = "html", table.attr = "style='width:70%;'" + format = "html", table.attr = "style='width:70%;'", digits = 3 ) ``` $$\\[0.01in]$$ From 6792cec100d3eedf05a13a8424514286d2b68561 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 10:35:05 -0700 Subject: [PATCH 222/382] Update vignettes/symptom-surveys.Rmd Co-authored-by: Daniel McDonald --- vignettes/symptom-surveys.Rmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index cf962de84..2b84b1f50 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -367,7 +367,8 @@ knitr::kable( )$p.val) %>% ungroup() %>% filter(lead == "7 days ahead") %>% rename("Comparison" = model, "Target" = lead, "P-value" = p), - format = "html", table.attr = "style='width:50%;'" + format = "html", table.attr = "style='width:50%;'", + digiits = 3 ) ``` $$\\[0.01in]$$ From b3a33faa52b1ebde55565982a678404a0bb923b6 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 11:09:57 -0700 Subject: [PATCH 223/382] Fix error and style --- vignettes/articles/smooth-qr.Rmd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index da2cd3bab..a04c3981b 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -268,15 +268,15 @@ For a more formal comparison between the two approaches, we could compare the te ```{r, message = FALSE} baseline_preds_mae_df <- baseline_preds %>% - left_join(tedf_sub, by = c("geo_value", "target_date")) -group_by(ahead) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) %>% + group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "baseline") smooth_preds_mae_df <- smooth_preds %>% - left_join(tedf_sub, by = c("geo_value", "target_date")) -group_by(ahead) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) %>% + group_by(ahead) %>% mutate(error = abs(`0.5` - actual)) %>% summarise(mean = mean(error)) %>% mutate(type = "smooth") @@ -333,15 +333,15 @@ Next, we apply the `wis_dist_quantile` function to get a WIS score for each stat ```{r} smooth_preds_wis_df <- smooth_preds %>% - left_join(tedf_sub, by = c("geo_value", "target_date")) -rowwise() %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) %>% + rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "smooth") baseline_preds_wis_df <- baseline_preds %>% - left_join(tedf_sub) %>% + left_join(tedf_sub, by = c("geo_value", "target_date")) %>% rowwise() %>% mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% group_by(ahead) %>% From 0c3cac86d9206c18f9d2d31e1756328f69f70978 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:24:07 -0700 Subject: [PATCH 224/382] Change colours of lines --- vignettes/articles/smooth-qr.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index a04c3981b..8dc34f7dc 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -287,7 +287,7 @@ ggplot(preds_mae_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean MAE") + - scale_fill_brewer(palette = "Set1") + scale_color_manual(values=c('#A69943', '#063970')) ``` or over all aheads, times, and locations for a single numerical summary. @@ -354,7 +354,7 @@ ggplot(preds_wis_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean WIS") + - scale_fill_brewer(palette = "Set1") + scale_color_manual(values=c('#A69943', '#063970')) ``` The results are consistent with what we saw for MAE: The forecasts for the near and distant future tend to be inaccurate for both models. The smooth quantile regression model only slightly outperforms the baseline model. From 4c8b627fc6dd9d4dbfa402b6d29966b7ed864480 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:29:06 -0700 Subject: [PATCH 225/382] Fix some mistakes in preprocessing-and-models class eqns --- vignettes/preprocessing-and-models.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/preprocessing-and-models.Rmd b/vignettes/preprocessing-and-models.Rmd index f1cdb3c87..b228088d6 100644 --- a/vignettes/preprocessing-and-models.Rmd +++ b/vignettes/preprocessing-and-models.Rmd @@ -431,12 +431,12 @@ g_{\text{flat}}(x) &= \log\left(\frac{Pr(Z_{\ell,t}=\text{flat}\mid x)}{Pr(Z_{\e \beta_{10} + \beta_{11} t + \delta_{10} s_{\text{state_1}} + \delta_{11} s_{\text{state_2}} + \cdots \nonumber \\ &\quad + \beta_{12} Y^{\Delta}_{\ell, t} + -\beta_{13} Y^{\Delta}_{\ell, t-7} \\ -g_{\text{flat}}(x) &= \log\left(\frac{Pr(Z_{\ell,t}=\text{up}\mid x)}{Pr(Z_{\ell,t}=\text{down} \mid x)}\right) = +\beta_{13} Y^{\Delta}_{\ell, t-7} + \beta_{14} Y^{\Delta}_{\ell, t-14}\\ +g_{\text{up}}(x) &= \log\left(\frac{Pr(Z_{\ell,t}=\text{up}\mid x)}{Pr(Z_{\ell,t}=\text{down} \mid x)}\right) = \beta_{20} + \beta_{21}t + \delta_{20} s_{\text{state_1}} + \delta_{21} s_{\text{state}\_2} + \cdots \nonumber \\ &\quad + \beta_{22} Y^{\Delta}_{\ell, t} + -\beta_{23} Y^{\Delta}\_{\ell, t-7} +\beta_{23} Y^{\Delta}_{\ell, t-7} + \beta_{24} Y^{\Delta}_{\ell, t-14} \end{aligned} Preprocessing steps are similar to the previous models with an additional step From 282cd96c3dc21ef91bfa1c2f24667dcf35bcf254 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:38:47 -0700 Subject: [PATCH 226/382] Update equation slightly --- vignettes/arx-classifier.Rmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 79db765b8..690844c40 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -79,7 +79,7 @@ Additional arguments that may be supplied to `arx_class_args_list()` include the ## Example of using the ARX classifier -Now, to demonstrate the power and utility of this built-in arx classifier, we will adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. +Now, to demonstrate the power and utility of this built-in arx classifier, we will loosely adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. To motivate this example, a major use of autoregressive classification models is to predict upswings or downswings like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? @@ -91,7 +91,7 @@ Z_{l,t} = \left\{\begin{matrix} \text{not up,} & \text{otherwise} \end{matrix}\right. \end{align}$$ -where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t- 7} / Y_{l, t- 7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. +where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t-7} / Y_{l, t-7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in `vignette("preprocessing-and-models")`: @@ -102,7 +102,7 @@ $$\begin{align} where $$ -g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}t + \delta_{10}s_{state_1} + \delta_{10}s_{state_2} ... + \beta_{12}Y_{l,t}^\Delta + \beta_{13}Y_{l,t-7}^\Delta + \beta_{14}Y_{l,t-14}^\Delta. +g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}Y_{l,t}^\Delta + \beta_{12}Y_{l,t-7}^\Delta + \beta_{13}Y_{l,t-14}^\Delta. $$ Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. From ef3338be4d9df344ab49aacdfc1381e459279da6 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sat, 27 Apr 2024 12:39:32 -0700 Subject: [PATCH 227/382] styler --- vignettes/articles/smooth-qr.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index 8dc34f7dc..95cfe083f 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -287,7 +287,7 @@ ggplot(preds_mae_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean MAE") + - scale_color_manual(values=c('#A69943', '#063970')) + scale_color_manual(values = c("#A69943", "#063970")) ``` or over all aheads, times, and locations for a single numerical summary. @@ -354,7 +354,7 @@ ggplot(preds_wis_df, aes(ahead, mean, color = type)) + geom_line() + xlab("Ahead") + ylab("Mean WIS") + - scale_color_manual(values=c('#A69943', '#063970')) + scale_color_manual(values = c("#A69943", "#063970")) ``` The results are consistent with what we saw for MAE: The forecasts for the near and distant future tend to be inaccurate for both models. The smooth quantile regression model only slightly outperforms the baseline model. From 46f6b09e4996930aff1c6913fa838b5549ac93f4 Mon Sep 17 00:00:00 2001 From: Rachel Lobay <42976509+rachlobay@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:14:49 -0700 Subject: [PATCH 228/382] Update vignettes/symptom-surveys.Rmd Co-authored-by: Daniel McDonald --- vignettes/symptom-surveys.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 2b84b1f50..787137c7f 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -9,7 +9,7 @@ knitr::opts_chunk$set( comment = "#>", warning = FALSE, message = FALSE, - cache = TRUE + out.width = "100%" ) ``` From 98c2305dd8f88137f8be24d5627e28601f5adc89 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sun, 28 Apr 2024 20:02:31 -0700 Subject: [PATCH 229/382] Make changes based on Daniel's feedback and style --- DESCRIPTION | 2 +- vignettes/symptom-surveys.Rmd | 142 ++++++++++++++++++++-------------- 2 files changed, 84 insertions(+), 60 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 80e7de094..a246317f5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,7 +36,6 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, - purrr, quantreg, recipes (>= 1.0.4), rlang, @@ -56,6 +55,7 @@ Suggests: knitr, lubridate, poissonreg, + purrr, ranger, RcppRoll, rmarkdown, diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 787137c7f..84b463a65 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -1,5 +1,10 @@ --- -title: "Can Symptoms Surveys Improve COVID-19 Forecasts?" +title: "Can symptoms surveys improve COVID-19 forecasts?" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Using the update and adjust functions} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} @@ -21,7 +26,9 @@ calculation of a "% CLI-in-community" signal for counties across the US. This is These surveys were valuable tools for monitoring the pandemic because they reported daily and not subject to reporting delays that plague other sources of data. -In this chapter, we will look at whether the % CLI-in-community indicators from the Facebook and Google surveys improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The purpose here is to study and demonstrate the value of the Facebook and Google % CLI-in-community signals to add predictive power beyond what we can achieve with simple time series models trained on case rates alone. +In this vignette, we will look at whether the % CLI-in-community indicators from the Facebook and Google surveys improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The purpose here is to study and demonstrate the value of the Facebook and Google % CLI-in-community signals to add predictive power beyond what we can achieve with simple time series models trained on case rates alone. + +Note that this vignette was adapted from the following [Delphi blog post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), with the necessary modifications to enable the use of `epipredict`. The results may be different from those on the blog post (one reason is that we are exploring the use of a different forecaster and another is that we're using the most recent versions of the datasets). Now, we will delve into the forecasting problem set-up and code followed by a discussion of the results. @@ -66,7 +73,7 @@ There are a number of benefits to using `epipredict` over writing the code from However, there are some trade-offs to bear in mind. For instance, since we are using a canned arx forecaster, we are not able to easily modify and add steps such as that for signal transformations to the pre-processing (this is pre-specified as part of using a canned forecaster). If we were to code-up our own forecaster under the `epipredict` framework, we could easily add steps to re-scale and transform the signals to our `epi_recipe`. This would make the code more succinct and self-contained. ```{r, message = FALSE, warning = FALSE} -library(covidcast) +library(epidatr) library(dplyr) library(purrr) library(epipredict) @@ -74,48 +81,68 @@ library(recipes) case_num <- 200 as_of_date <- "2020-05-14" -geo_values <- covidcast_signal( - "jhu-csse", "confirmed_cumulative_num", - "2020-05-14", "2020-05-14" +geo_values <- pub_covidcast( + source = "jhu-csse", + signals = "confirmed_cumulative_num", + geo_type = "county", + time_type = "day", + geo_values = "*", + time_values = epirange(20200514, 20200514) ) %>% filter(value >= case_num) %>% - pull(geo_value) + pull(geo_value) %>% + unique() # Fetch county-level Google and Facebook % CLI-in-community signals, and JHU # confirmed case incidence proportion start_day <- "2020-04-11" end_day <- "2020-09-01" -g <- covidcast_signal("google-survey", "smoothed_cli") %>% +goog_sm_cli <- pub_covidcast( + source = "google-survey", + signals = "smoothed_cli", + geo_type = "county", + time_type = "day", + geo_values = "*", + time_values = epirange(start_day, end_day) +) %>% filter(geo_value %in% geo_values) %>% - select(geo_value, time_value, value) -f <- covidcast_signal( - "fb-survey", "smoothed_hh_cmnty_cli", - start_day, end_day + select(geo_value, time_value, value) %>% + rename(goog = value) + +fb_survey <- pub_covidcast( + source = "fb-survey", + signals = "smoothed_hh_cmnty_cli", + geo_type = "county", + time_type = "day", + geo_values = "*", + time_values = epirange(start_day, end_day) ) %>% filter(geo_value %in% geo_values) %>% - select(geo_value, time_value, value) -c <- covidcast_signal( - "jhu-csse", "confirmed_7dav_incidence_prop", - start_day, end_day + select(geo_value, time_value, value) %>% + rename(fb = value) + +jhu_7dav_incid <- pub_covidcast( + source = "jhu-csse", + signals = "confirmed_7dav_incidence_prop", + geo_type = "county", + time_type = "day", + geo_values = "*", + time_values = epirange(start_day, end_day) ) %>% filter(geo_value %in% geo_values) %>% - select(geo_value, time_value, value) - -# Rename columns -colnames(g) <- sub("^value", "goog", colnames(g)) -colnames(f) <- sub("^value", "fb", colnames(f)) -colnames(c) <- sub("^value", "case", colnames(c)) + select(geo_value, time_value, value) %>% + rename(case = value) # Find "complete" counties, present in all three data signals at all times geo_values_complete <- intersect( - intersect(g$geo_value, f$geo_value), - c$geo_value + intersect(goog_sm_cli$geo_value, fb_survey$geo_value), + jhu_7dav_incid$geo_value ) # Make one big matrix by joining these three data frames -z <- full_join(full_join(g, f, by = c("geo_value", "time_value")), - c, +z <- full_join(full_join(goog_sm_cli, fb_survey, by = c("geo_value", "time_value")), + jhu_7dav_incid, by = c("geo_value", "time_value") ) %>% filter(geo_value %in% geo_values_complete) %>% @@ -157,7 +184,7 @@ for (k in 1:length(dates)) { if (date %in% c("2020-05-13", "2020-05-14")) leads <- c(7, 14) else leads <- 7 - # Pre-structuring test data for this date + # Pre-structuring test data z_te <- z %>% rename( target_date = time_value, @@ -295,20 +322,14 @@ model_names <- c( # Calculate the scaled errors for each model, that is, the error relative to the strawman's error res_all4 <- out_df %>% drop_na() %>% # Restrict to common time - mutate( - err1 = err1 / err0, err2 = err2 / err0, # Compute relative error - err3 = err3 / err0, err4 = err4 / err0 - ) %>% # to strawman model - mutate( - dif12 = err1 - err2, dif13 = err1 - err3, # Compute differences - dif14 = err1 - err4 - ) %>% # relative to cases model + mutate(across(err1:err4, ~ .x / err0)) %>% # compute relative error to strawman + mutate(across(err2:err4, list(diff = ~ err1 - .x))) %>% # relative to cases model ungroup() %>% select(-err0) # Calculate and print median errors, for all 4 models, and just 7 days ahead res_err4 <- res_all4 %>% - select(-starts_with("dif")) %>% + select(-ends_with("diff")) %>% pivot_longer( names_to = "model", values_to = "err", cols = -c(geo_value, forecast_date, lead) @@ -342,9 +363,9 @@ Are these differences in median scaled errors significant? Some basic hypothesis # Compute p-values using the sign test against a one-sided alternative, for # all models, and just 7 days ahead res_dif4 <- res_all4 %>% - select(-starts_with("err")) %>% + select(-ends_with(as.character(1:4))) %>% pivot_longer( - names_to = "model", values_to = "dif", + names_to = "model", values_to = "diff", cols = -c(geo_value, forecast_date, lead) ) %>% mutate( @@ -362,7 +383,7 @@ knitr::kable( res_dif4 %>% group_by(model, lead) %>% summarize(p = binom.test( - x = sum(dif > 0, na.rm = TRUE), + x = sum(diff > 0, na.rm = TRUE), n = n(), alt = "greater" )$p.val) %>% ungroup() %>% filter(lead == "7 days ahead") %>% @@ -381,7 +402,7 @@ ggplot_colors <- c("#FC4E07", "#00AFBB", "#E7B800") ggplot(res_dif4 %>% group_by(model, lead, forecast_date) %>% summarize(p = binom.test( - x = sum(dif > 0, na.rm = TRUE), + x = sum(diff > 0, na.rm = TRUE), n = n(), alt = "greater" )$p.val) %>% ungroup() %>% filter(lead == "7 days ahead"), aes(p)) + @@ -405,6 +426,7 @@ case_fb_mods <- function(forecast_dates, leads) { for (k in 1:length(forecast_dates)) { date <- forecast_dates[k] + # Pre-structuring test data z_te <- z %>% rename( target_date = time_value, @@ -414,7 +436,9 @@ case_fb_mods <- function(forecast_dates, leads) { # Strawman model out_df0 <- map(leads, ~ flatline_forecaster( - z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case), + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case), outcome = "case", args_list = arx_args_list( lags = lags, @@ -430,7 +454,10 @@ case_fb_mods <- function(forecast_dates, leads) { # Cases model out_df1 <- map(leads, ~ arx_forecaster( - z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case) %>% filter(complete.cases(.)), + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case) %>% + filter(complete.cases(.)), outcome = "case", predictors = "case", trainer = quantile_reg(), @@ -448,7 +475,10 @@ case_fb_mods <- function(forecast_dates, leads) { # Cases and Facebook model out_df2 <- map(leads, ~ arx_forecaster( - z %>% filter(between(time_value, date - .x - max(lags) - n, date)) %>% select(time_value, geo_value, case, fb) %>% filter(complete.cases(.)), + z %>% + filter(between(time_value, date - .x - max(lags) - n, date)) %>% + select(time_value, geo_value, case, fb) %>% + filter(complete.cases(.)), outcome = "case", predictors = c("case", "fb"), trainer = quantile_reg(), @@ -487,8 +517,7 @@ The median scaled errors over the test period are computed and reported below. N # errors, that is, the error relative to the strawman's error res_all2 <- res %>% drop_na() %>% # Restrict to common time - mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error - # to strawman model + mutate(across(err1:err2, ~ .x / err0)) %>% # compute relative error to strawman mutate(dif12 = err1 - err2) %>% # Compute differences # relative to cases model ungroup() %>% @@ -497,7 +526,7 @@ res_all2 <- res %>% # Calculate and print median errors, for just models 1 and 2, and both 7 and 14 # days ahead res_err2 <- res_all2 %>% - select(-starts_with("dif")) %>% + select(-ends_with("diff")) %>% pivot_longer( names_to = "model", values_to = "err", cols = -c(geo_value, forecast_date, lead) @@ -509,7 +538,7 @@ res_err2 <- res_all2 %>% knitr::kable( res_err2 %>% - select(-starts_with("dif")) %>% + select(-ends_with("diff")) %>% group_by(model, lead) %>% summarize(err = median(err), n = length(unique(forecast_date))) %>% arrange(lead) %>% ungroup() %>% @@ -552,9 +581,9 @@ The fact that the lines are non-coincident suggests that the results we’re see # Compute p-values using the sign test against a one-sided alternative, just # for models 1 and 2, and both 7 and 14 days ahead res_dif2 <- res_all2 %>% - select(-starts_with("err")) %>% + select(-ends_with(as.character(1:4))) %>% pivot_longer( - names_to = "model", values_to = "dif", + names_to = "model", values_to = "diff", cols = -c(geo_value, forecast_date, lead) ) %>% mutate( @@ -566,7 +595,7 @@ knitr::kable( res_dif2 %>% group_by(model, lead) %>% summarize(p = binom.test( - x = sum(dif > 0, na.rm = TRUE), + x = sum(diff > 0, na.rm = TRUE), n = n(), alt = "greater" )$p.val) %>% ungroup() %>% @@ -582,7 +611,7 @@ If we stratify and recompute p-values by forecast date, the bulk of p-values are ggplot(res_dif2 %>% group_by(model, lead, forecast_date) %>% summarize(p = binom.test( - x = sum(dif > 0, na.rm = TRUE), + x = sum(diff > 0, na.rm = TRUE), n = n(), alt = "greater" )$p.val) %>% ungroup(), aes(p)) + @@ -615,8 +644,7 @@ We obtain and plot the median scaled errors for the "Cases" and "Cases + Faceboo ```{r} err_by_lead <- res %>% drop_na() %>% # Restrict to common time - mutate(err1 = err1 / err0, err2 = err2 / err0) %>% # Compute relative error - # to strawman model + mutate(across(err1:err2, list(rel = ~ .x / err0))) %>% ungroup() %>% select(-err0) %>% pivot_longer( @@ -654,7 +682,7 @@ But if we look at this from a different angle, by considering the horizontal gap ## Wrap-Up -In this chapter, we've shown that either of the Facebook or Google % CLI-in-community signals can improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The significance of these improvements is more apparent with the Facebook signal, thanks to the much larger test period. With either signal, the magnitude of the improvement offered seems modest but nontrivial, especially because the forecasting problem is so difficult in the first place. +In this vignette, we've shown that either of the Facebook or Google % CLI-in-community signals can improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The significance of these improvements is more apparent with the Facebook signal, thanks to the much larger test period. With either signal, the magnitude of the improvement offered seems modest but nontrivial, especially because the forecasting problem is so difficult in the first place. We reiterate that this was just a demo. Our analysis was fairly simple and lacks a few qualities that we’d expect in a truly comprehensive, realistic forecasting analysis. For reflection, let's discuss three possible areas to improve: @@ -664,10 +692,6 @@ We reiterate that this was just a demo. Our analysis was fairly simple and lacks 3. The way we trained our forecast models does not account for data latency and revisions, which are critical issues. For each (retrospective) forecast date, $t_0$, we constructed forecasts by training on data that we fetched from the API today, "as of" the day of writing this, and not "as of" the forecast date. This matters because nearly all signals are subject to latency and go through multiple revisions. -On the flip side, our example here was not that far away from being realistic. The models we examined are actually not too different from Delphi’s forecasters in production. Also, the way we fit the quantile regression models in the code extends immediately to multiple quantile regression (this just requires changing the parameter `quantile_levels` in the call to `quantile_reg()`). And lastly, it’s fairly easy to change the data acquisition step in the code so that data gets pulled "as of" the forecast date (this requires specifying the parameter `as_of` in the call to `covidcast_signal()` and should change per forecast date). +On the flip side, our example here was not that far away from being realistic. The models we examined are actually not too different from Delphi’s forecasters in production. Also, the way we fit the quantile regression models in the code extends immediately to multiple quantile regression (this just requires changing the parameter `quantile_levels` in the call to `quantile_reg()`). And lastly, it’s fairly easy to change the data acquisition step in the code so that data gets pulled "as of" the forecast date (this requires specifying the parameter `as_of` in the call to `pub_covidcast()` and should change per forecast date). Hopefully these preliminary findings have gotten you excited about the possible uses of this symptom survey data. For further practice, try your hand at implementing the suggested improvements or develop your own novel analytic approach to extract insights from this data. - -## Attribution - -This chapter was adapted from the following [Delphi blog post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), with the necessary modifications to enable the use of `epipredict`. Note that the results may be different from those on the blog post (one reason is that we are exploring the use of a different forecaster and another is that we're using the most recent versions of the datasets). From 50a24c5f236845f0ba854a740b26ca9602c2d751 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sun, 28 Apr 2024 21:09:24 -0700 Subject: [PATCH 230/382] Typo --- vignettes/symptom-surveys.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 84b463a65..88bcbbaff 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -518,7 +518,7 @@ The median scaled errors over the test period are computed and reported below. N res_all2 <- res %>% drop_na() %>% # Restrict to common time mutate(across(err1:err2, ~ .x / err0)) %>% # compute relative error to strawman - mutate(dif12 = err1 - err2) %>% # Compute differences + mutate(err12_diff = err1 - err2) %>% # Compute differences # relative to cases model ungroup() %>% select(-err0) From 148202efe62c48c0483a2b8a71989e54914d61c4 Mon Sep 17 00:00:00 2001 From: rachlobay <42976509+rachlobay@users.noreply.github.com> Date: Sun, 28 Apr 2024 23:01:53 -0700 Subject: [PATCH 231/382] Fix simplification --- vignettes/symptom-surveys.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/symptom-surveys.Rmd index 88bcbbaff..9558b80c5 100644 --- a/vignettes/symptom-surveys.Rmd +++ b/vignettes/symptom-surveys.Rmd @@ -644,7 +644,7 @@ We obtain and plot the median scaled errors for the "Cases" and "Cases + Faceboo ```{r} err_by_lead <- res %>% drop_na() %>% # Restrict to common time - mutate(across(err1:err2, list(rel = ~ .x / err0))) %>% + mutate(across(err1:err2, ~ .x / err0)) %>% ungroup() %>% select(-err0) %>% pivot_longer( From cd3fe2e65a2f6e47d563becc5fb8fb11a6805167 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 30 Apr 2024 11:33:29 -0700 Subject: [PATCH 232/382] feat: pkgdown adjustments to streamline vignettes --- _pkgdown.yml | 18 +++++++++++++++++- vignettes/{ => articles}/symptom-surveys.Rmd | 0 2 files changed, 17 insertions(+), 1 deletion(-) rename vignettes/{ => articles}/symptom-surveys.Rmd (100%) diff --git a/_pkgdown.yml b/_pkgdown.yml index 0081b2290..8fe027a5c 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -21,6 +21,23 @@ navbar: bg: primary type: light +articles: +- title: Get started + navbar: ~ + contents: + - epipredict + - preprocessing-and-models + - arx-classifier + - articles/update + +- title: Advanced methods + contents: + - articles/sliding + - articles/smooth-qr + - articles/symptom-surveys + - panel-data + + repo: url: home: https://github.com/cmu-delphi/epipredict/tree/main/ @@ -42,7 +59,6 @@ home: href: https://cmu-delphi.github.io/covidcast/covidcastR/ - reference: - title: Simple forecasters desc: Complete forecasters that produce reasonable baselines diff --git a/vignettes/symptom-surveys.Rmd b/vignettes/articles/symptom-surveys.Rmd similarity index 100% rename from vignettes/symptom-surveys.Rmd rename to vignettes/articles/symptom-surveys.Rmd From ca9f4503379585d5a8cd24aca9e1ff0e2d621447 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 12 Apr 2024 15:40:20 -0700 Subject: [PATCH 233/382] feat: add forecast method #293 --- NAMESPACE | 1 + R/epi_workflow.R | 43 ++++++++++- _pkgdown.yml | 120 ++++++++++++++--------------- man/forecast.Rd | 35 +++++++++ tests/testthat/test-epi_workflow.R | 40 ++++++++++ 5 files changed, 176 insertions(+), 63 deletions(-) create mode 100644 man/forecast.Rd diff --git a/NAMESPACE b/NAMESPACE index bfc4b696d..7d3056d0d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -152,6 +152,7 @@ export(flatline) export(flatline_args_list) export(flatline_forecaster) export(flusight_hub_formatter) +export(forecast) export(frosting) export(get_test_data) export(grab_names) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index e64e0f7bc..9fa466594 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -197,7 +197,11 @@ update_model.epi_workflow <- function(x, spec, ..., formula = NULL) { #' #' @export fit.epi_workflow <- function(object, data, ..., control = workflows::control_workflow()) { - object$fit$meta <- list(max_time_value = max(data$time_value), as_of = attributes(data)$metadata$as_of) + object$fit$meta <- list( + max_time_value = max(data$time_value), + as_of = attributes(data)$metadata$as_of + ) + object$original_data <- data NextMethod() } @@ -326,3 +330,40 @@ print.epi_workflow <- function(x, ...) { print_postprocessor(x) invisible(x) } + + +#' Produce a forecast from an epi workflow +#' +#' @param epi_workflow An epi workflow +#' @param fill_locf Logical. Should we use locf to fill in missing data? +#' @param n_recent Integer or NULL. If filling missing data with locf = TRUE, +#' how far back are we willing to tolerate missing data? Larger values allow +#' more filling. The default NULL will determine this from the the recipe. For +#' example, suppose n_recent = 3, then if the 3 most recent observations in any +#' geo_value are all NA’s, we won’t be able to fill anything, and an error +#' message will be thrown. (See details.) +#' @param forecast_date By default, this is set to the maximum time_value in x. +#' But if there is data latency such that recent NA's should be filled, this may +#' be after the last available time_value. +#' +#' @return A forecast tibble. +#' +#' @export +forecast <- function(epi_workflow, fill_locf = FALSE, n_recent = NULL, forecast_date = NULL) { + if (!epi_workflow$trained) { + cli_abort(c( + "You cannot `forecast()` a {.cls workflow} that has not been trained.", + i = "Please use `fit()` before forecasting." + )) + } + + test_data <- get_test_data( + hardhat::extract_preprocessor(epi_workflow), + epi_workflow$original_data, + fill_locf = fill_locf, + n_recent = n_recent %||% Inf, + forecast_date = forecast_date %||% max(epi_workflow$original_data$time_value) + ) + + predict(epi_workflow, new_data = test_data) +} diff --git a/_pkgdown.yml b/_pkgdown.yml index 8fe027a5c..b212001d2 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -22,21 +22,20 @@ navbar: type: light articles: -- title: Get started - navbar: ~ - contents: - - epipredict - - preprocessing-and-models - - arx-classifier - - articles/update - -- title: Advanced methods - contents: - - articles/sliding - - articles/smooth-qr - - articles/symptom-surveys - - panel-data + - title: Get started + navbar: ~ + contents: + - epipredict + - preprocessing-and-models + - arx-classifier + - articles/update + - title: Advanced methods + contents: + - articles/sliding + - articles/smooth-qr + - articles/symptom-surveys + - panel-data repo: url: @@ -47,81 +46,78 @@ repo: home: links: - - text: Introduction to Delphi's Tooling Work - href: https://cmu-delphi.github.io/delphi-tooling-book/ - - text: The epiprocess R package - href: https://cmu-delphi.github.io/epiprocess/ - - text: The epidatr R package - href: https://github.com/cmu-delphi/epidatr/ - - text: The epidatasets R package - href: https://cmu-delphi.github.io/epidatasets/ - - text: The covidcast R package - href: https://cmu-delphi.github.io/covidcast/covidcastR/ - + - text: Introduction to Delphi's Tooling Work + href: https://cmu-delphi.github.io/delphi-tooling-book/ + - text: The epiprocess R package + href: https://cmu-delphi.github.io/epiprocess/ + - text: The epidatr R package + href: https://github.com/cmu-delphi/epidatr/ + - text: The epidatasets R package + href: https://cmu-delphi.github.io/epidatasets/ + - text: The covidcast R package + href: https://cmu-delphi.github.io/covidcast/covidcastR/ reference: - title: Simple forecasters desc: Complete forecasters that produce reasonable baselines contents: - - contains("forecaster") - - contains("classifier") + - contains("forecaster") + - contains("classifier") - title: Forecaster modifications desc: Constructors to modify forecaster arguments and utilities to produce `epi_workflow` objects contents: - - contains("args_list") - - contains("_epi_workflow") + - contains("args_list") + - contains("_epi_workflow") - title: Helper functions for Hub submission contents: - - flusight_hub_formatter + - flusight_hub_formatter - title: Parsnip engines desc: Prediction methods not available elsewhere contents: - - quantile_reg - - smooth_quantile_reg + - quantile_reg + - smooth_quantile_reg - title: Custom panel data forecasting workflows contents: - - epi_recipe - - epi_workflow - - add_epi_recipe - - adjust_epi_recipe - - add_model - - predict.epi_workflow - - fit.epi_workflow - - augment.epi_workflow + - epi_recipe + - epi_workflow + - add_epi_recipe + - adjust_epi_recipe + - add_model + - predict.epi_workflow + - fit.epi_workflow + - augment.epi_workflow + - forecast - title: Epi recipe preprocessing steps contents: - - starts_with("step_") - - contains("bake") - - contains("juice") + - starts_with("step_") + - contains("bake") + - contains("juice") - title: Epi recipe verification checks contents: - - check_enough_train_data + - check_enough_train_data - title: Forecast postprocessing desc: Create a series of postprocessing operations contents: - - frosting - - ends_with("_frosting") - - get_test_data - - tidy.frosting + - frosting + - ends_with("_frosting") + - get_test_data + - tidy.frosting - title: Frosting layers contents: - - contains("layer") - - contains("slather") + - contains("layer") + - contains("slather") - title: Automatic forecast visualization contents: - - autoplot.epi_workflow - - autoplot.canned_epipred + - autoplot.epi_workflow + - autoplot.canned_epipred - title: Utilities for quantile distribution processing contents: - - dist_quantiles - - extrapolate_quantiles - - nested_quantiles - - starts_with("pivot_quantiles") + - dist_quantiles + - extrapolate_quantiles + - nested_quantiles + - starts_with("pivot_quantiles") - title: Included datasets contents: - - case_death_rate_subset - - state_census - - grad_employ_subset - - - + - case_death_rate_subset + - state_census + - grad_employ_subset diff --git a/man/forecast.Rd b/man/forecast.Rd new file mode 100644 index 000000000..3ee0b2751 --- /dev/null +++ b/man/forecast.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/epi_workflow.R +\name{forecast} +\alias{forecast} +\title{Produce a forecast from an epi workflow} +\usage{ +forecast( + epi_workflow, + fill_locf = FALSE, + n_recent = NULL, + forecast_date = NULL +) +} +\arguments{ +\item{epi_workflow}{An epi workflow} + +\item{fill_locf}{Logical. Should we use locf to fill in missing data?} + +\item{n_recent}{Integer or NULL. If filling missing data with locf = TRUE, +how far back are we willing to tolerate missing data? Larger values allow +more filling. The default NULL will determine this from the the recipe. For +example, suppose n_recent = 3, then if the 3 most recent observations in any +geo_value are all NA’s, we won’t be able to fill anything, and an error +message will be thrown. (See details.)} + +\item{forecast_date}{By default, this is set to the maximum time_value in x. +But if there is data latency such that recent NA's should be filled, this may +be after the last available time_value.} +} +\value{ +A forecast tibble. +} +\description{ +Produce a forecast from an epi workflow +} diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index c2be0e1cb..6e0a5c2cf 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -62,3 +62,43 @@ test_that("model can be added/updated/removed from epi_workflow", { expect_error(extract_spec_parsnip(wf)) expect_equal(wf$fit$actions$model$spec, NULL) }) + +test_that("forecast method works", { + jhu <- case_death_rate_subset %>% + filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) + r <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) %>% + step_epi_naomit() + wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) + + latest <- get_test_data( + hardhat::extract_preprocessor(wf), + jhu + ) + + expect_equal( + forecast(wf), + predict(wf, new_data = latest) + ) +}) + +test_that("forecast method errors when workflow not fit", { + jhu <- case_death_rate_subset %>% + filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) + r <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) %>% + step_epi_naomit() + wf <- epi_workflow(r, parsnip::linear_reg()) + + latest <- get_test_data( + hardhat::extract_preprocessor(wf), + jhu + ) + + expect_error( + forecast(wf), + regexp = "workflow that has not been fit" + ) +}) From 3ecb78ca0f6db8c7f64ee2ea2e8fcdbe9455434b Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 15 Apr 2024 12:00:41 -0700 Subject: [PATCH 234/382] refactor: replace predict with forecast in vignettes, tests, examples --- R/arx_classifier.R | 14 ++-- R/arx_forecaster.R | 12 ++- R/autoplot.R | 3 +- R/flatline_forecaster.R | 12 +-- R/frosting.R | 3 +- R/layer_add_target_date.R | 7 +- R/layer_cdc_flatline_quantiles.R | 6 +- R/layer_naomit.R | 4 +- R/layer_point_from_distn.R | 6 +- R/layer_population_scaling.R | 12 +-- R/layer_predictive_distn.R | 4 +- R/layer_quantile_distn.R | 4 +- R/layer_residual_quantiles.R | 6 +- R/layer_threshold_preds.R | 4 +- R/step_population_scaling.R | 13 +-- man/autoplot-epipred.Rd | 3 +- man/frosting.Rd | 3 +- man/layer_add_target_date.Rd | 7 +- man/layer_cdc_flatline_quantiles.Rd | 6 +- man/layer_naomit.Rd | 4 +- man/layer_point_from_distn.Rd | 6 +- man/layer_population_scaling.Rd | 12 +-- man/layer_predictive_distn.Rd | 4 +- man/layer_quantile_distn.Rd | 4 +- man/layer_residual_quantiles.Rd | 6 +- man/layer_threshold.Rd | 4 +- man/step_population_scaling.Rd | 13 +-- tests/testthat/test-epi_workflow.R | 10 +-- tests/testthat/test-frosting.R | 4 +- .../testthat/test-layer_residual_quantiles.R | 9 +- tests/testthat/test-population_scaling.R | 62 ++------------ vignettes/articles/update.Rmd | 10 +-- vignettes/epipredict.Rmd | 82 +++++++++---------- vignettes/preprocessing-and-models.Rmd | 10 +-- 34 files changed, 114 insertions(+), 255 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index 98ae7949f..c17d02b89 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -54,14 +54,14 @@ arx_classifier <- function( wf <- arx_class_epi_workflow( epi_data, outcome, predictors, trainer, args_list ) - - latest <- get_test_data( - hardhat::extract_preprocessor(wf), epi_data, TRUE, args_list$nafill_buffer, - args_list$forecast_date %||% max(epi_data$time_value) - ) - wf <- generics::fit(wf, epi_data) - preds <- predict(wf, new_data = latest) %>% + + preds <- forecast( + wf, + fill_locf = TRUE, + n_recent = args_list$nafill_buffer, + forecast_date = args_list$forecast_date %||% max(epi_data$time_value) + ) %>% tibble::as_tibble() %>% dplyr::select(-time_value) diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index c41036832..48330c2cb 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -50,14 +50,18 @@ arx_forecaster <- function(epi_data, wf <- arx_fcast_epi_workflow( epi_data, outcome, predictors, trainer, args_list ) + wf <- generics::fit(wf, epi_data) latest <- get_test_data( - hardhat::extract_preprocessor(wf), epi_data, TRUE, args_list$nafill_buffer, - args_list$forecast_date %||% max(epi_data$time_value) + hardhat::extract_preprocessor(wf), epi_data, ) - wf <- generics::fit(wf, epi_data) - preds <- predict(wf, new_data = latest) %>% + preds <- forecast( + wf, + fill_locf = TRUE, + n_recent = args_list$nafill_buffer, + forecast_date = args_list$forecast_date %||% max(epi_data$time_value) + ) %>% tibble::as_tibble() %>% dplyr::select(-time_value) diff --git a/R/autoplot.R b/R/autoplot.R index d36f05463..77f04dde7 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -61,8 +61,7 @@ ggplot2::autoplot #' step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% #' step_epi_naomit() #' ewf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) -#' td <- get_test_data(r, jhu) -#' predict(ewf, new_data = td) +#' forecast(ewf) #' }) #' #' p <- do.call(rbind, p) diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index 11a967187..fa80dfba5 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -49,11 +49,6 @@ flatline_forecaster <- function( forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) - latest <- get_test_data( - epi_recipe(epi_data), epi_data, TRUE, args_list$nafill_buffer, - forecast_date - ) - f <- frosting() %>% layer_predict() %>% layer_residual_quantiles( @@ -69,7 +64,12 @@ flatline_forecaster <- function( wf <- epi_workflow(r, eng, f) wf <- generics::fit(wf, epi_data) - preds <- suppressWarnings(predict(wf, new_data = latest)) %>% + preds <- suppressWarnings(forecast( + wf, + fill_locf = TRUE, + n_recent = args_list$nafill_buffer, + forecast_date = forecast_date + )) %>% tibble::as_tibble() %>% dplyr::select(-time_value) diff --git a/R/frosting.R b/R/frosting.R index 505fd5bcc..f9c5867a4 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -275,7 +275,6 @@ new_frosting <- function() { #' step_epi_naomit() #' #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) -#' latest <- get_test_data(recipe = r, x = jhu) #' #' f <- frosting() %>% #' layer_predict() %>% @@ -283,7 +282,7 @@ new_frosting <- function() { #' #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' p frosting <- function(layers = NULL, requirements = NULL) { if (!is_null(layers) || !is_null(requirements)) { diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index a50b6042c..0d222eefa 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -28,7 +28,6 @@ #' step_epi_naomit() #' #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) -#' latest <- get_test_data(r, jhu) #' #' # Use ahead + forecast date #' f <- frosting() %>% @@ -38,7 +37,7 @@ #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' p #' #' # Use ahead + max time value from pre, fit, post @@ -49,7 +48,7 @@ #' layer_naomit(.pred) #' wf2 <- wf %>% add_frosting(f2) #' -#' p2 <- predict(wf2, latest) +#' p2 <- forecast(wf2) #' p2 #' #' # Specify own target date @@ -59,7 +58,7 @@ #' layer_naomit(.pred) #' wf3 <- wf %>% add_frosting(f3) #' -#' p3 <- predict(wf3, latest) +#' p3 <- forecast(wf3) #' p3 layer_add_target_date <- function(frosting, target_date = NULL, id = rand_id("add_target_date")) { diff --git a/R/layer_cdc_flatline_quantiles.R b/R/layer_cdc_flatline_quantiles.R index 760fdf068..09e9a68a0 100644 --- a/R/layer_cdc_flatline_quantiles.R +++ b/R/layer_cdc_flatline_quantiles.R @@ -64,10 +64,6 @@ #' #' forecast_date <- max(case_death_rate_subset$time_value) #' -#' latest <- get_test_data( -#' epi_recipe(case_death_rate_subset), case_death_rate_subset -#' ) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_cdc_flatline_quantiles(aheads = c(7, 14, 21, 28), symmetrize = TRUE) @@ -75,7 +71,7 @@ #' eng <- parsnip::linear_reg() %>% parsnip::set_engine("flatline") #' #' wf <- epi_workflow(r, eng, f) %>% fit(case_death_rate_subset) -#' preds <- suppressWarnings(predict(wf, new_data = latest)) %>% +#' preds <- suppressWarnings(forecast(wf)) %>% #' dplyr::select(-time_value) %>% #' dplyr::mutate(forecast_date = forecast_date) #' preds diff --git a/R/layer_naomit.R b/R/layer_naomit.R index 33c93f0ab..ad6c5606c 100644 --- a/R/layer_naomit.R +++ b/R/layer_naomit.R @@ -20,15 +20,13 @@ #' #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) #' -#' latest <- get_test_data(recipe = r, x = jhu) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_naomit(.pred) #' #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' p layer_naomit <- function(frosting, ..., id = rand_id("naomit")) { arg_is_chr_scalar(id) diff --git a/R/layer_point_from_distn.R b/R/layer_point_from_distn.R index d1bc50f62..52ecef3cc 100644 --- a/R/layer_point_from_distn.R +++ b/R/layer_point_from_distn.R @@ -26,8 +26,6 @@ #' #' wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) %>% fit(jhu) #' -#' latest <- get_test_data(recipe = r, x = jhu) -#' #' f1 <- frosting() %>% #' layer_predict() %>% #' layer_quantile_distn() %>% # puts the other quantiles in a different col @@ -35,7 +33,7 @@ #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f1) #' -#' p1 <- predict(wf1, latest) +#' p1 <- forecast(wf1) #' p1 #' #' f2 <- frosting() %>% @@ -44,7 +42,7 @@ #' layer_naomit(.pred) #' wf2 <- wf %>% add_frosting(f2) #' -#' p2 <- predict(wf2, latest) +#' p2 <- forecast(wf2) #' p2 layer_point_from_distn <- function(frosting, ..., diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index f89160794..1d02604e5 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -78,17 +78,7 @@ #' fit(jhu) %>% #' add_frosting(f) #' -#' latest <- get_test_data( -#' recipe = r, -#' x = epiprocess::jhu_csse_daily_subset %>% -#' dplyr::filter( -#' time_value > "2021-11-01", -#' geo_value %in% c("ca", "ny") -#' ) %>% -#' dplyr::select(geo_value, time_value, cases) -#' ) -#' -#' predict(wf, latest) +#' forecast(wf) layer_population_scaling <- function(frosting, ..., df, diff --git a/R/layer_predictive_distn.R b/R/layer_predictive_distn.R index b72be6ec3..652e42368 100644 --- a/R/layer_predictive_distn.R +++ b/R/layer_predictive_distn.R @@ -30,15 +30,13 @@ #' #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) #' -#' latest <- get_test_data(recipe = r, x = jhu) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_predictive_distn() %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' p layer_predictive_distn <- function(frosting, ..., diff --git a/R/layer_quantile_distn.R b/R/layer_quantile_distn.R index a99eed326..d763207a4 100644 --- a/R/layer_quantile_distn.R +++ b/R/layer_quantile_distn.R @@ -28,15 +28,13 @@ #' wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) %>% #' fit(jhu) #' -#' latest <- get_test_data(recipe = r, x = jhu) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_quantile_distn() %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' p layer_quantile_distn <- function(frosting, ..., diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index a6bc93f18..514bddc5f 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -24,15 +24,13 @@ #' #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) #' -#' latest <- get_test_data(recipe = r, x = jhu) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_residual_quantiles(quantile_levels = c(0.0275, 0.975), symmetrize = FALSE) %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' -#' p <- predict(wf1, latest) +#' p <- forecast(wf1) #' #' f2 <- frosting() %>% #' layer_predict() %>% @@ -40,7 +38,7 @@ #' layer_naomit(.pred) #' wf2 <- wf %>% add_frosting(f2) #' -#' p2 <- predict(wf2, latest) +#' p2 <- forecast(wf2) layer_residual_quantiles <- function( frosting, ..., quantile_levels = c(0.05, 0.95), diff --git a/R/layer_threshold_preds.R b/R/layer_threshold_preds.R index 957ac2419..ef1781a3c 100644 --- a/R/layer_threshold_preds.R +++ b/R/layer_threshold_preds.R @@ -32,13 +32,11 @@ #' step_epi_naomit() #' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) #' -#' latest <- get_test_data(r, jhu) -#' #' f <- frosting() %>% #' layer_predict() %>% #' layer_threshold(.pred, lower = 0.180, upper = 0.310) #' wf <- wf %>% add_frosting(f) -#' p <- predict(wf, latest) +#' p <- forecast(wf) #' p layer_threshold <- function(frosting, ..., lower = 0, upper = Inf, id = rand_id("threshold")) { diff --git a/R/step_population_scaling.R b/R/step_population_scaling.R index ce87ea759..7f2d44ab9 100644 --- a/R/step_population_scaling.R +++ b/R/step_population_scaling.R @@ -96,18 +96,7 @@ #' fit(jhu) %>% #' add_frosting(f) #' -#' latest <- get_test_data( -#' recipe = r, -#' epiprocess::jhu_csse_daily_subset %>% -#' dplyr::filter( -#' time_value > "2021-11-01", -#' geo_value %in% c("ca", "ny") -#' ) %>% -#' dplyr::select(geo_value, time_value, cases) -#' ) -#' -#' -#' predict(wf, latest) +#' forecast(wf) step_population_scaling <- function(recipe, ..., diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 18000cd82..dd6b37dcd 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -103,8 +103,7 @@ p <- lapply(c(7, 14, 21, 28), \(h) { step_epi_lag(case_rate, lag = c(0, 7, 14)) \%>\% step_epi_naomit() ewf <- epi_workflow(r, parsnip::linear_reg(), f) \%>\% fit(jhu) - td <- get_test_data(r, jhu) - predict(ewf, new_data = td) + forecast(ewf) }) p <- do.call(rbind, p) diff --git a/man/frosting.Rd b/man/frosting.Rd index 362c40a4f..367d132ec 100644 --- a/man/frosting.Rd +++ b/man/frosting.Rd @@ -37,7 +37,6 @@ r <- epi_recipe(jhu) \%>\% step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) f <- frosting() \%>\% layer_predict() \%>\% @@ -45,6 +44,6 @@ f <- frosting() \%>\% wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) p } diff --git a/man/layer_add_target_date.Rd b/man/layer_add_target_date.Rd index 3c2884e10..a6fd3d8d2 100644 --- a/man/layer_add_target_date.Rd +++ b/man/layer_add_target_date.Rd @@ -45,7 +45,6 @@ r <- epi_recipe(jhu) \%>\% step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(r, jhu) # Use ahead + forecast date f <- frosting() \%>\% @@ -55,7 +54,7 @@ f <- frosting() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) p # Use ahead + max time value from pre, fit, post @@ -66,7 +65,7 @@ f2 <- frosting() \%>\% layer_naomit(.pred) wf2 <- wf \%>\% add_frosting(f2) -p2 <- predict(wf2, latest) +p2 <- forecast(wf2) p2 # Specify own target date @@ -76,6 +75,6 @@ f3 <- frosting() \%>\% layer_naomit(.pred) wf3 <- wf \%>\% add_frosting(f3) -p3 <- predict(wf3, latest) +p3 <- forecast(wf3) p3 } diff --git a/man/layer_cdc_flatline_quantiles.Rd b/man/layer_cdc_flatline_quantiles.Rd index cf11de8eb..a839ee641 100644 --- a/man/layer_cdc_flatline_quantiles.Rd +++ b/man/layer_cdc_flatline_quantiles.Rd @@ -93,10 +93,6 @@ r <- epi_recipe(case_death_rate_subset) \%>\% forecast_date <- max(case_death_rate_subset$time_value) -latest <- get_test_data( - epi_recipe(case_death_rate_subset), case_death_rate_subset -) - f <- frosting() \%>\% layer_predict() \%>\% layer_cdc_flatline_quantiles(aheads = c(7, 14, 21, 28), symmetrize = TRUE) @@ -104,7 +100,7 @@ f <- frosting() \%>\% eng <- parsnip::linear_reg() \%>\% parsnip::set_engine("flatline") wf <- epi_workflow(r, eng, f) \%>\% fit(case_death_rate_subset) -preds <- suppressWarnings(predict(wf, new_data = latest)) \%>\% +preds <- suppressWarnings(forecast(wf)) \%>\% dplyr::select(-time_value) \%>\% dplyr::mutate(forecast_date = forecast_date) preds diff --git a/man/layer_naomit.Rd b/man/layer_naomit.Rd index 74652daab..e3325fe7c 100644 --- a/man/layer_naomit.Rd +++ b/man/layer_naomit.Rd @@ -33,14 +33,12 @@ r <- epi_recipe(jhu) \%>\% wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) - f <- frosting() \%>\% layer_predict() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) p } diff --git a/man/layer_point_from_distn.Rd b/man/layer_point_from_distn.Rd index 7ad69a332..58d8add8b 100644 --- a/man/layer_point_from_distn.Rd +++ b/man/layer_point_from_distn.Rd @@ -44,8 +44,6 @@ r <- epi_recipe(jhu) \%>\% wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) - f1 <- frosting() \%>\% layer_predict() \%>\% layer_quantile_distn() \%>\% # puts the other quantiles in a different col @@ -53,7 +51,7 @@ f1 <- frosting() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f1) -p1 <- predict(wf1, latest) +p1 <- forecast(wf1) p1 f2 <- frosting() \%>\% @@ -62,6 +60,6 @@ f2 <- frosting() \%>\% layer_naomit(.pred) wf2 <- wf \%>\% add_frosting(f2) -p2 <- predict(wf2, latest) +p2 <- forecast(wf2) p2 } diff --git a/man/layer_population_scaling.Rd b/man/layer_population_scaling.Rd index 179d6862c..cf8dfcc1a 100644 --- a/man/layer_population_scaling.Rd +++ b/man/layer_population_scaling.Rd @@ -105,15 +105,5 @@ wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) \%>\% add_frosting(f) -latest <- get_test_data( - recipe = r, - x = epiprocess::jhu_csse_daily_subset \%>\% - dplyr::filter( - time_value > "2021-11-01", - geo_value \%in\% c("ca", "ny") - ) \%>\% - dplyr::select(geo_value, time_value, cases) -) - -predict(wf, latest) +forecast(wf) } diff --git a/man/layer_predictive_distn.Rd b/man/layer_predictive_distn.Rd index 2cd374fdb..7cd4e4efc 100644 --- a/man/layer_predictive_distn.Rd +++ b/man/layer_predictive_distn.Rd @@ -49,14 +49,12 @@ r <- epi_recipe(jhu) \%>\% wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) - f <- frosting() \%>\% layer_predict() \%>\% layer_predictive_distn() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) p } diff --git a/man/layer_quantile_distn.Rd b/man/layer_quantile_distn.Rd index 167282760..695a1d12d 100644 --- a/man/layer_quantile_distn.Rd +++ b/man/layer_quantile_distn.Rd @@ -48,14 +48,12 @@ r <- epi_recipe(jhu) \%>\% wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) - f <- frosting() \%>\% layer_predict() \%>\% layer_quantile_distn() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) p } diff --git a/man/layer_residual_quantiles.Rd b/man/layer_residual_quantiles.Rd index bf0e05be1..dd576aa5e 100644 --- a/man/layer_residual_quantiles.Rd +++ b/man/layer_residual_quantiles.Rd @@ -49,15 +49,13 @@ r <- epi_recipe(jhu) \%>\% wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) - f <- frosting() \%>\% layer_predict() \%>\% layer_residual_quantiles(quantile_levels = c(0.0275, 0.975), symmetrize = FALSE) \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) -p <- predict(wf1, latest) +p <- forecast(wf1) f2 <- frosting() \%>\% layer_predict() \%>\% @@ -65,5 +63,5 @@ f2 <- frosting() \%>\% layer_naomit(.pred) wf2 <- wf \%>\% add_frosting(f2) -p2 <- predict(wf2, latest) +p2 <- forecast(wf2) } diff --git a/man/layer_threshold.Rd b/man/layer_threshold.Rd index 127311ae6..dbd7e6669 100644 --- a/man/layer_threshold.Rd +++ b/man/layer_threshold.Rd @@ -49,12 +49,10 @@ r <- epi_recipe(jhu) \%>\% step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- get_test_data(r, jhu) - f <- frosting() \%>\% layer_predict() \%>\% layer_threshold(.pred, lower = 0.180, upper = 0.310) wf <- wf \%>\% add_frosting(f) -p <- predict(wf, latest) +p <- forecast(wf) p } diff --git a/man/step_population_scaling.Rd b/man/step_population_scaling.Rd index 1a9564563..2af3c245b 100644 --- a/man/step_population_scaling.Rd +++ b/man/step_population_scaling.Rd @@ -131,16 +131,5 @@ wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) \%>\% add_frosting(f) -latest <- get_test_data( - recipe = r, - epiprocess::jhu_csse_daily_subset \%>\% - dplyr::filter( - time_value > "2021-11-01", - geo_value \%in\% c("ca", "ny") - ) \%>\% - dplyr::select(geo_value, time_value, cases) -) - - -predict(wf, latest) +forecast(wf) } diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index 6e0a5c2cf..c626113c6 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -92,13 +92,5 @@ test_that("forecast method errors when workflow not fit", { step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) - latest <- get_test_data( - hardhat::extract_preprocessor(wf), - jhu - ) - - expect_error( - forecast(wf), - regexp = "workflow that has not been fit" - ) + expect_error(forecast(wf)) }) diff --git a/tests/testthat/test-frosting.R b/tests/testthat/test-frosting.R index 9e8a6f90c..8af9f1c39 100644 --- a/tests/testthat/test-frosting.R +++ b/tests/testthat/test-frosting.R @@ -72,8 +72,6 @@ test_that("layer_predict is added by default if missing", { wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) - latest <- get_test_data(recipe = r, x = jhu) - f1 <- frosting() %>% layer_naomit(.pred) %>% layer_residual_quantiles() @@ -86,5 +84,5 @@ test_that("layer_predict is added by default if missing", { wf1 <- wf %>% add_frosting(f1) wf2 <- wf %>% add_frosting(f2) - expect_equal(predict(wf1, latest), predict(wf2, latest)) + expect_equal(forecast(wf1), forecast(wf2)) }) diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index a346c62a3..e3668b249 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -7,7 +7,6 @@ r <- epi_recipe(jhu) %>% step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) test_that("Returns expected number or rows and columns", { @@ -18,7 +17,7 @@ test_that("Returns expected number or rows and columns", { wf1 <- wf %>% add_frosting(f) - expect_silent(p <- predict(wf1, latest)) + expect_silent(p <- forecast(wf1)) expect_equal(ncol(p), 4L) expect_s3_class(p, "epi_df") expect_equal(nrow(p), 3L) @@ -47,7 +46,7 @@ test_that("Errors when used with a classifier", { layer_predict() %>% layer_residual_quantiles() wf <- wf %>% add_frosting(f) - expect_error(predict(wf, tib)) + expect_error(forecast(wf)) }) @@ -57,13 +56,13 @@ test_that("Grouping by keys is supported", { layer_naomit(.pred) %>% layer_residual_quantiles() wf1 <- wf %>% add_frosting(f) - expect_silent(p1 <- predict(wf1, latest)) + expect_silent(p1 <- forecast(wf1)) f2 <- frosting() %>% layer_predict() %>% layer_naomit(.pred) %>% layer_residual_quantiles(by_key = "geo_value") wf2 <- wf %>% add_frosting(f2) - expect_warning(p2 <- predict(wf2, latest)) + expect_warning(p2 <- forecast(wf2)) pivot1 <- pivot_quantiles_wider(p1, .pred_distn) %>% mutate(width = `0.95` - `0.05`) diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index 6951d56e6..30bc7bee6 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -119,17 +119,7 @@ test_that("Postprocessing workflow works and values correct", { fit(jhu) %>% add_frosting(f) - latest <- get_test_data( - recipe = r, - x = epiprocess::jhu_csse_daily_subset %>% - dplyr::filter( - time_value > "2021-11-01", - geo_value %in% c("ca", "ny") - ) %>% - dplyr::select(geo_value, time_value, cases) - ) - - suppressWarnings(p <- predict(wf, latest)) + suppressWarnings(p <- forecast(wf)) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(20000, 30000)) @@ -146,7 +136,7 @@ test_that("Postprocessing workflow works and values correct", { wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) - suppressWarnings(p <- predict(wf, latest)) + suppressWarnings(p <- forecast(wf)) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(2, 3)) @@ -188,18 +178,7 @@ test_that("Postprocessing to get cases from case rate", { fit(jhu) %>% add_frosting(f) - latest <- get_test_data( - recipe = r, - x = case_death_rate_subset %>% - dplyr::filter( - time_value > "2021-11-01", - geo_value %in% c("ca", "ny") - ) %>% - dplyr::select(geo_value, time_value, case_rate) - ) - - - suppressWarnings(p <- predict(wf, latest)) + suppressWarnings(p <- forecast(wf)) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(1 / 20000, 1 / 30000)) @@ -249,21 +228,10 @@ test_that("test joining by default columns", { add_frosting(f) ) - latest <- get_test_data( - recipe = r, - x = case_death_rate_subset %>% - dplyr::filter( - time_value > "2021-11-01", - geo_value %in% c("ca", "ny") - ) %>% - dplyr::select(geo_value, time_value, case_rate) - ) - - suppressMessages(p <- predict(wf, latest)) + suppressMessages(p <- forecast(wf)) }) - test_that("expect error if `by` selector does not match", { jhu <- case_death_rate_subset %>% dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% @@ -324,22 +292,11 @@ test_that("expect error if `by` selector does not match", { df_pop_col = "values" ) - - latest <- get_test_data( - recipe = r, - x = case_death_rate_subset %>% - dplyr::filter( - time_value > "2021-11-01", - geo_value %in% c("ca", "ny") - ) %>% - dplyr::select(geo_value, time_value, case_rate) - ) - wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) - expect_error(predict(wf, latest)) + expect_error(forecast(wf)) }) @@ -407,12 +364,10 @@ test_that("Rate rescaling behaves as expected", { fit(x) %>% add_frosting(f) - latest <- get_test_data(recipe = r, x = x) - # suppress warning: prediction from a rank-deficient fit may be misleading suppressWarnings(expect_equal( - unique(predict(wf, latest)$.pred) * (1 / 1000) / 100, - unique(predict(wf, latest)$.pred_scaled) + unique(forecast(wf)$.pred) * (1 / 1000) / 100, + unique(forecast(wf)$.pred_scaled) )) }) @@ -459,7 +414,6 @@ test_that("Extra Columns are ignored", { wf <- epi_workflow(recip, parsnip::linear_reg()) %>% fit(x) %>% add_frosting(frost) - latest <- get_test_data(recipe = recip, x = x) # suppress warning: prediction from a rank-deficient fit may be misleading - suppressWarnings(expect_equal(ncol(predict(wf, latest)), 4)) + suppressWarnings(expect_equal(ncol(forecast(wf)), 4)) }) diff --git a/vignettes/articles/update.Rmd b/vignettes/articles/update.Rmd index 221e1c37e..fd18d4353 100644 --- a/vignettes/articles/update.Rmd +++ b/vignettes/articles/update.Rmd @@ -181,13 +181,11 @@ predictions. In our initial frosting object, `f`, we simply implement predictions on the fitted `epi_workflow`: ```{r} -latest <- get_test_data(recipe = r2, x = jhu) - f <- frosting() %>% layer_predict() wf1 <- wf %>% add_frosting(f) -p1 <- predict(wf1, latest) +p1 <- forecast(wf1) p1 ``` @@ -207,7 +205,7 @@ f2 <- frosting() %>% layer_add_target_date() wf2 <- wf1 %>% update_frosting(f2) -p2 <- predict(wf2, latest) +p2 <- forecast(wf2) p2 ``` @@ -223,7 +221,7 @@ remove the `frosting` object from the workflow and make predictions as follows: ```{r} wf3 <- wf2 %>% remove_frosting() -p3 <- predict(wf3, latest) +p3 <- forecast(wf3) p3 ``` @@ -285,7 +283,7 @@ Note that when we adjust the `r2` object directly, we are not adjusting the recipe in the `epi_workflow`. That is, if we modify a step in `r2`, the change will not automatically transfer over to `wf`. We would need to modify the recipe in `wf` directly (`adjust_epi_recipe()` on `wf`) or update the recipe in `wf` -with a new `epi_recipe` that has undergone the adjustment +with a new `epi_recipe` that has undergone the adjustment (using `update_epi_recipe()`): ```{r} diff --git a/vignettes/epipredict.Rmd b/vignettes/epipredict.Rmd index fe911ede0..000d1bf42 100644 --- a/vignettes/epipredict.Rmd +++ b/vignettes/epipredict.Rmd @@ -35,12 +35,12 @@ Serving both populations is the main motivation for our efforts, but at the same ## Baseline models -We provide a set of basic, easy-to-use forecasters that work out of the box. +We provide a set of basic, easy-to-use forecasters that work out of the box. You should be able to do a reasonably limited amount of customization on them. Any serious customization happens with the framework discussed below). -For the basic forecasters, we provide: - -* Baseline flat-line forecaster +For the basic forecasters, we provide: + +* Baseline flat-line forecaster * Autoregressive forecaster * Autoregressive classifier @@ -49,12 +49,12 @@ All the forcasters we provide are built on our framework. So we will use these b ## Forecasting framework Our framework for creating custom forecasters views the prediction task as a set of modular components. There are four types of components: - + 1. Preprocessor: make transformations to the data before model training 2. Trainer: train a model on data, resulting in a fitted model object 3. Predictor: make predictions, using a fitted model object and processed test data 4. Postprocessor: manipulate or transform the predictions before returning - + Users familiar with [`{tidymodels}`](https://www.tidymodels.org) and especially the [`{workflows}`](https://workflows.tidymodels.org) package will notice a lot of overlap. This is by design, and is in fact a feature. The truth is that `{epipredict}` is a wrapper around much that is contained in these packages. Therefore, if you want something from this -verse, it should "just work" (we hope). The reason for the overlap is that `{workflows}` _already implements_ the first three steps. And it does this very well. However, it is missing the postprocessing stage and currently has no plans for such an implementation. And this feature is important. The baseline forecaster we provide _requires_ postprocessing. Anything more complicated needs this as well. @@ -68,9 +68,9 @@ jhu <- case_death_rate_subset jhu ``` -This data is built into the package and contains the measured variables `case_rate` and `death_rate` for COVID-19 at the daily level for each US state for the year 2021. The "panel" part is because we have repeated measurements across a number of locations. +This data is built into the package and contains the measured variables `case_rate` and `death_rate` for COVID-19 at the daily level for each US state for the year 2021. The "panel" part is because we have repeated measurements across a number of locations. -The `epi_df` encodes the time stamp as `time_value` and the `key` as `geo_value`. While these 2 names are required, the values don't need to actually represent such objects. Additional `key`'s are also supported (like age group, ethnicity, taxonomy, etc.). +The `epi_df` encodes the time stamp as `time_value` and the `key` as `geo_value`. While these 2 names are required, the values don't need to actually represent such objects. Additional `key`'s are also supported (like age group, ethnicity, taxonomy, etc.). The `epi_df` also contains some metadata that describes the keys as well as the vintage of the data. It's possible that data collected at different times for the _same set_ of `geo_value`'s and `time_value`'s could actually be different. For more details, see [`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/articles/epiprocess.html). @@ -80,7 +80,7 @@ The `epi_df` also contains some metadata that describes the keys as well as the As described above: -* Parts actually DO exist. There's a universe called `{tidymodels}`. It handles +* Parts actually DO exist. There's a universe called `{tidymodels}`. It handles preprocessing, training, and prediction, bound together, through a package called `{workflows}`. We built `{epipredict}` on top of that setup. In this way, you CAN use almost everything they provide. @@ -110,10 +110,10 @@ out <- arx_forecaster( ) ``` -This call produces a warning, which we'll ignore for now. But essentially, it's telling us that our data comes from May 2022 but we're trying to do a forecast for January 2022. The result is likely not an accurate measure of real-time forecast performance, because the data have been revised over time. +This call produces a warning, which we'll ignore for now. But essentially, it's telling us that our data comes from May 2022 but we're trying to do a forecast for January 2022. The result is likely not an accurate measure of real-time forecast performance, because the data have been revised over time. + +The `out` object has two components: -The `out` object has two components: - 1. The predictions which is just another `epi_df`. It contains the predictions for each location along with additional columns. By default, these are a 90% predictive interval, the `forecast_date` (the date on which the forecast was putatively made) and the `target_date` (the date for which the forecast is being made). ```{r} out$predictions @@ -123,7 +123,7 @@ out$predictions out$epi_workflow ``` -Note that the `time_value` in the predictions is not necessarily meaningful, +Note that the `time_value` in the predictions is not necessarily meaningful, but it is a required column in an `epi_df`, so it remains here. By default, the forecaster predicts the outcome (`death_rate`) 1-week ahead, using 3 lags of each predictor (`case_rate` and `death_rate`) at 0 (today), 1 week back and 2 weeks back. The predictors and outcome can be changed directly. The rest of the defaults are encapsulated into a list of arguments. This list is produced by `arx_args_list()`. @@ -192,7 +192,7 @@ arx_args_list( ## Changing the engine So far, our forecasts have been produced using simple linear regression. But this is not the only way to estimate such a model. -The `trainer` argument determines the type of model we want. +The `trainer` argument determines the type of model we want. This takes a [`{parsnip}`](https://parsnip.tidymodels.org) model. The default is linear regression, but we could instead use a random forest with the `{ranger}` package: ```{r ranger, warning = FALSE} @@ -224,32 +224,32 @@ FWIW, this last case (using quantile regression), is not far from what the Delph ## Inner workings -Underneath the hood, this forecaster creates (and returns) an `epi_workflow`. -Essentially, this is a big S3 object that wraps up the 4 modular steps +Underneath the hood, this forecaster creates (and returns) an `epi_workflow`. +Essentially, this is a big S3 object that wraps up the 4 modular steps (preprocessing - postprocessing) described above. ### Preprocessing -Preprocessing is accomplished through a `recipe` (imagine baking a cake) as -provided in the [`{recipes}`](https://recipes.tidymodels.org) package. +Preprocessing is accomplished through a `recipe` (imagine baking a cake) as +provided in the [`{recipes}`](https://recipes.tidymodels.org) package. We've made a few modifications (to handle panel data) as well as added some additional options. The recipe gives a specification of how to handle training data. Think of it like a fancified -`formula` that you would pass to `lm()`: `y ~ x1 + log(x2)`. In general, -there are 2 extensions to the `formula` that `{recipes}` handles: +`formula` that you would pass to `lm()`: `y ~ x1 + log(x2)`. In general, +there are 2 extensions to the `formula` that `{recipes}` handles: - 1. Doing transformations of both training and test data that can always be - applied. These are things like taking the log of a variable, leading or + 1. Doing transformations of both training and test data that can always be + applied. These are things like taking the log of a variable, leading or lagging, filtering out rows, handling dummy variables, etc. - 2. Using statistics from the training data to eventually process test data. + 2. Using statistics from the training data to eventually process test data. This is a major benefit of `{recipes}`. It prevents what the tidy team calls "data leakage". A simple example is centering a predictor by its mean. We need to store the mean of the predictor from the training data and use that value on the test data rather than accidentally calculating the mean of the test predictor for centering. - + A recipe is processed in 2 steps, first it is "prepped". This calculates and -stores any intermediate statistics necessary for use on the test data. +stores any intermediate statistics necessary for use on the test data. Then it is "baked" resulting in training data ready for passing into a statistical model (like `lm`). @@ -263,8 +263,8 @@ extract_recipe(out_gb$epi_workflow) ``` The "Inputs" are the original `epi_df` and the "roles" that these are assigned. -None of these are predictors or outcomes. Those will be created -by the recipe when it is prepped. The "Operations" are the sequence of +None of these are predictors or outcomes. Those will be created +by the recipe when it is prepped. The "Operations" are the sequence of instructions to create the cake (baked training data). Here we create lagged predictors, lead the outcome, and then remove `NA`s. Some models like `lm` internally handle `NA`s, but not everything does, so we @@ -289,7 +289,7 @@ Users with familiarity with the `{parsnip}` package will have no trouble here. Basically, `{parsnip}` unifies the function signature across statistical models. For example, `lm()` "likes" to work with formulas, but `glmnet::glmnet()` uses `x` and `y` for predictors and response. `{parsnip}` is agnostic. Both of these -do "linear regression". Above we switched from `lm()` to `xgboost()` without +do "linear regression". Above we switched from `lm()` to `xgboost()` without any issue despite the fact that these functions couldn't be more different. ```{r, eval = FALSE} @@ -308,7 +308,7 @@ xgboost( ) ``` -`{epipredict}` provides a few engines/modules (the flatline forecaster and +`{epipredict}` provides a few engines/modules (the flatline forecaster and quantile regression), but you should be able to use any available models listed [here](https://www.tidymodels.org/find/parsnip/). @@ -322,8 +322,8 @@ ewf <- epi_workflow(er, linear_reg()) %>% fit(jhu) To stretch the metaphor of preparing a cake to its natural limits, we have created postprocessing functionality called "frosting". Much like the recipe, -each postprocessing operation is a "layer" and we "slather" these onto our -baked cake. To fix ideas, below is the postprocessing `frosting` for +each postprocessing operation is a "layer" and we "slather" these onto our +baked cake. To fix ideas, below is the postprocessing `frosting` for `arx_forecaster()` ```{r} @@ -333,7 +333,7 @@ extract_frosting(out_q$epi_workflow) Here we have 5 layers of frosting. The first generates the forecasts from the test data. The second uses quantiles of the residuals to create distributional forecasts. The next two add columns for the date the forecast was made and the -date for which it is intended to occur. Because we are predicting rates, they +date for which it is intended to occur. Because we are predicting rates, they should be non-negative, so the last layer thresholds both predicted values and intervals at 0. The code to do this (inside the forecaster) is @@ -349,13 +349,12 @@ f <- frosting() %>% layer_threshold(starts_with(".pred")) ``` -At predict time, we add this object onto the `epi_workflow` and call `predict()` +At predict time, we add this object onto the `epi_workflow` and call `forecast()` ```{r, warning=FALSE} -test_data <- get_test_data(er, jhu) ewf %>% add_frosting(f) %>% - predict(test_data) + forecast() ``` The above `get_test_data()` function examines the recipe and ensures that enough @@ -369,9 +368,9 @@ that contained the necessary predictors. ## Conclusion Internally, we provide some simple functions to create reasonable forecasts. -But ideally, a user could create their own forecasters by building up the +But ideally, a user could create their own forecasters by building up the components we provide. In other vignettes, we try to walk through some of these -customizations. +customizations. To illustrate everything above, here is (roughly) the code for the `flatline_forecaster()` applied to the `case_rate`. @@ -381,9 +380,6 @@ r <- epi_recipe(jhu) %>% update_role(case_rate, new_role = "predictor") %>% add_role(all_of(epi_keys(jhu)), new_role = "predictor") -# bit of a weird hack to get the latest values per key -latest <- get_test_data(epi_recipe(jhu), jhu) - f <- frosting() %>% layer_predict() %>% layer_residual_quantiles() %>% @@ -393,11 +389,11 @@ f <- frosting() %>% eng <- linear_reg() %>% set_engine("flatline") wf <- epi_workflow(r, eng, f) %>% fit(jhu) -preds <- predict(wf, latest) +preds <- forecast(wf) ``` -All that really differs from the `arx_forecaster()` is the `recipe`, the -test data, and the engine. The `frosting` is identical, as is the fitting +All that really differs from the `arx_forecaster()` is the `recipe`, the +test data, and the engine. The `frosting` is identical, as is the fitting and predicting procedure. ```{r} diff --git a/vignettes/preprocessing-and-models.Rmd b/vignettes/preprocessing-and-models.Rmd index b228088d6..11171489b 100644 --- a/vignettes/preprocessing-and-models.Rmd +++ b/vignettes/preprocessing-and-models.Rmd @@ -99,7 +99,7 @@ intercept coefficients, we can allow for an intercept shift between states. The model takes the form \begin{aligned} \log\left( \mu_{t+7} \right) &= \beta_0 + \delta_1 s_{\text{state}_1} + -\delta_2 s_{\text{state}_2} + \cdots + \nonumber \\ +\delta_2 s_{\text{state}_2} + \cdots + \nonumber \\ &\quad\beta_1 \text{deaths}_{t} + \beta_2 \text{deaths}_{t-7} + \beta_3 \text{cases}_{t} + \beta_4 \text{cases}_{t-7}, @@ -198,7 +198,7 @@ To model death rates, the Poisson regression would be expressed as: \begin{aligned} \log\left( \mu_{t+7} \right) &= \log(\text{population}) + \beta_0 + \delta_1 s_{\text{state}_1} + -\delta_2 s_{\text{state}_2} + \cdots + \nonumber \\ +\delta_2 s_{\text{state}_2} + \cdots + \nonumber \\ &\quad\beta_1 \text{deaths}_{t} + \beta_2 \text{deaths}_{t-7} + \beta_3 \text{cases}_{t} + \beta_4 \text{cases}_{t-7} @@ -361,8 +361,7 @@ wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.05, .5, .95))) %>% fit(jhu) %>% add_frosting(f) -latest <- get_test_data(recipe = r, x = jhu) -p <- predict(wf, latest) +p <- forecast(wf) p ``` @@ -477,8 +476,7 @@ We will fit the multinomial regression and examine the predictions: wf <- epi_workflow(r, parsnip::multinom_reg()) %>% fit(jhu) -latest <- get_test_data(recipe = r, x = jhu) -predict(wf, latest) %>% filter(!is.na(.pred_class)) +forecast(wf) %>% filter(!is.na(.pred_class)) ``` We can also look at the estimated coefficients and model summary information: From 37be24c198b6e3af375d136c8d90e83b22a4c287 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 30 Apr 2024 15:26:21 -0700 Subject: [PATCH 235/382] recreate add/update/remove model fns --- NAMESPACE | 12 +++-- R/epi_workflow.R | 101 ------------------------------------ R/model-methods.R | 128 ++++++++++++++++++++++++++++++++++++++++++++++ man/add_model.Rd | 46 +++++++++-------- 4 files changed, 163 insertions(+), 124 deletions(-) create mode 100644 R/model-methods.R diff --git a/NAMESPACE b/NAMESPACE index bfc4b696d..fc92bd695 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,8 +1,13 @@ # Generated by roxygen2: do not edit by hand +S3method(Add_model,epi_workflow) +S3method(Add_model,workflow) S3method(Math,dist_quantiles) S3method(Ops,dist_quantiles) -S3method(add_model,epi_workflow) +S3method(Remove_model,epi_workflow) +S3method(Remove_model,workflow) +S3method(Update_model,epi_workflow) +S3method(Update_model,workflow) S3method(adjust_epi_recipe,epi_recipe) S3method(adjust_epi_recipe,epi_workflow) S3method(adjust_frosting,epi_workflow) @@ -91,7 +96,6 @@ S3method(print,step_population_scaling) S3method(print,step_training_window) S3method(quantile,dist_quantiles) S3method(refresh_blueprint,default_epi_recipe_blueprint) -S3method(remove_model,epi_workflow) S3method(residuals,flatline) S3method(run_mold,default_epi_recipe_blueprint) S3method(slather,layer_add_forecast_date) @@ -114,10 +118,12 @@ S3method(tidy,check_enough_train_data) S3method(tidy,frosting) S3method(tidy,layer) S3method(update,layer) -S3method(update_model,epi_workflow) S3method(vec_ptype_abbr,dist_quantiles) S3method(vec_ptype_full,dist_quantiles) export("%>%") +export(Add_model) +export(Remove_model) +export(Update_model) export(add_epi_recipe) export(add_frosting) export(add_layer) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index e64e0f7bc..82af51f87 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -59,107 +59,6 @@ is_epi_workflow <- function(x) { } -#' Add a model to an `epi_workflow` -#' -#' @seealso [workflows::add_model()] -#' - `add_model()` adds a parsnip model to the `epi_workflow`. -#' -#' - `remove_model()` removes the model specification as well as any fitted -#' model object. Any extra formulas are also removed. -#' -#' - `update_model()` first removes the model then adds the new -#' specification to the workflow. -#' -#' @details -#' Has the same behaviour as [workflows::add_model()] but also ensures -#' that the returned object is an `epi_workflow`. -#' -#' @inheritParams workflows::add_model -#' -#' @param x An `epi_workflow`. -#' -#' @param spec A parsnip model specification. -#' -#' @param ... Not used. -#' -#' @return -#' `x`, updated with a new, updated, or removed model. -#' -#' @export -#' @examples -#' jhu <- case_death_rate_subset %>% -#' dplyr::filter( -#' time_value > "2021-11-01", -#' geo_value %in% c("ak", "ca", "ny") -#' ) -#' -#' r <- epi_recipe(jhu) %>% -#' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% -#' step_epi_ahead(death_rate, ahead = 7) -#' -#' rf_model <- rand_forest(mode = "regression") -#' -#' wf <- epi_workflow(r) -#' -#' wf <- wf %>% add_model(rf_model) -#' wf -#' -#' lm_model <- parsnip::linear_reg() -#' -#' wf <- update_model(wf, lm_model) -#' wf -#' -#' wf <- remove_model(wf) -#' wf -#' @export -add_model <- function(x, spec, ..., formula = NULL) { - UseMethod("add_model") -} - -#' @rdname add_model -#' @export -remove_model <- function(x) { - UseMethod("remove_model") -} - -#' @rdname add_model -#' @export -update_model <- function(x, spec, ..., formula = NULL) { - UseMethod("update_model") -} - -#' @rdname add_model -#' @export -add_model.epi_workflow <- function(x, spec, ..., formula = NULL) { - workflows::add_model(x, spec, ..., formula = formula) -} - -#' @rdname add_model -#' @export -remove_model.epi_workflow <- function(x) { - workflows:::validate_is_workflow(x) - - if (!workflows:::has_spec(x)) { - rlang::warn("The workflow has no model to remove.") - } - - new_epi_workflow( - pre = x$pre, - fit = workflows:::new_stage_fit(), - post = x$post, - trained = FALSE - ) -} - -#' @rdname add_model -#' @export -update_model.epi_workflow <- function(x, spec, ..., formula = NULL) { - rlang::check_dots_empty() - x <- remove_model(x) - workflows::add_model(x, spec, ..., formula = formula) -} - - #' Fit an `epi_workflow` object #' #' @description diff --git a/R/model-methods.R b/R/model-methods.R new file mode 100644 index 000000000..619e8747d --- /dev/null +++ b/R/model-methods.R @@ -0,0 +1,128 @@ + +#' Add a model to an `epi_workflow` +#' +#' @seealso [workflows::add_model()] +#' - `Add_model()` adds a parsnip model to the `epi_workflow`. +#' +#' - `Remove_model()` removes the model specification as well as any fitted +#' model object. Any extra formulas are also removed. +#' +#' - `Update_model()` first removes the model then adds the new +#' specification to the workflow. +#' +#' @details +#' Has the same behaviour as [workflows::add_model()] but also ensures +#' that the returned object is an `epi_workflow`. +#' +#' This family is called `Add_*` / `Update_*` / `Remove_*` to avoid +#' masking the related functions in `{workflows}`. We also provide +#' aliases with the lower-case names. However, in the event that +#' `{workflows}` is loaded after `{epipredict}`, these may fail to function +#' properly. +#' +#' @inheritParams workflows::add_model +#' +#' @param x An `epi_workflow`. +#' +#' @param spec A parsnip model specification. +#' +#' @param ... Not used. +#' +#' @return +#' `x`, updated with a new, updated, or removed model. +#' +#' @export +#' @examples +#' jhu <- case_death_rate_subset %>% +#' dplyr::filter( +#' time_value > "2021-11-01", +#' geo_value %in% c("ak", "ca", "ny") +#' ) +#' +#' r <- epi_recipe(jhu) %>% +#' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% +#' step_epi_ahead(death_rate, ahead = 7) +#' +#' rf_model <- rand_forest(mode = "regression") +#' +#' wf <- epi_workflow(r) +#' +#' wf <- wf %>% Add_model(rf_model) +#' wf +#' +#' lm_model <- parsnip::linear_reg() +#' +#' wf <- Update_model(wf, lm_model) +#' wf +#' +#' wf <- Remove_model(wf) +#' wf +#' @export +Add_model <- function(x, spec, ..., formula = NULL) { + UseMethod("Add_model") +} + +#' @rdname Add_model +#' @export +Remove_model <- function(x) { + UseMethod("Remove_model") +} + +#' @rdname Add_model +#' @export +Update_model <- function(x, spec, ..., formula = NULL) { + UseMethod("Update_model") +} + +#' @rdname Add_model +#' @export +Add_model.epi_workflow <- function(x, spec, ..., formula = NULL) { + workflows::add_model(x, spec, ..., formula = formula) +} + +#' @rdname Add_model +#' @export +Remove_model.epi_workflow <- function(x) { + workflows:::validate_is_workflow(x) + + if (!workflows:::has_spec(x)) { + rlang::warn("The workflow has no model to remove.") + } + + new_epi_workflow( + pre = x$pre, + fit = workflows:::new_stage_fit(), + post = x$post, + trained = FALSE + ) +} + +#' @rdname Add_model +#' @export +Update_model.epi_workflow <- function(x, spec, ..., formula = NULL) { + rlang::check_dots_empty() + x <- Remove_model(x) + workflows::add_model(x, spec, ..., formula = formula) +} + + +#' @export +Add_model.workflow <- workflows::remove_model + +#' @export +Remove_model.workflow <- workflows::remove_model + +#' @export +Update_model.workflow <- workflows::update_model + + +# Aliases ----------------------------------------------------------------- + +#' @export +add_model <- Add_model + +#' @export +remove_model <- Remove_model + +#' @export +update_model <- Update_model diff --git a/man/add_model.Rd b/man/add_model.Rd index f1209b95f..dc24f186d 100644 --- a/man/add_model.Rd +++ b/man/add_model.Rd @@ -1,25 +1,25 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/epi_workflow.R -\name{add_model} -\alias{add_model} -\alias{remove_model} -\alias{update_model} -\alias{add_model.epi_workflow} -\alias{remove_model.epi_workflow} -\alias{update_model.epi_workflow} +% Please edit documentation in R/model-methods.R +\name{Add_model} +\alias{Add_model} +\alias{Remove_model} +\alias{Update_model} +\alias{Add_model.epi_workflow} +\alias{Remove_model.epi_workflow} +\alias{Update_model.epi_workflow} \title{Add a model to an \code{epi_workflow}} \usage{ -add_model(x, spec, ..., formula = NULL) +Add_model(x, spec, ..., formula = NULL) -remove_model(x) +Remove_model(x) -update_model(x, spec, ..., formula = NULL) +Update_model(x, spec, ..., formula = NULL) -\method{add_model}{epi_workflow}(x, spec, ..., formula = NULL) +\method{Add_model}{epi_workflow}(x, spec, ..., formula = NULL) -\method{remove_model}{epi_workflow}(x) +\method{Remove_model}{epi_workflow}(x) -\method{update_model}{epi_workflow}(x, spec, ..., formula = NULL) +\method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) } \arguments{ \item{x}{An \code{epi_workflow}.} @@ -45,6 +45,12 @@ Add a model to an \code{epi_workflow} \details{ Has the same behaviour as \code{\link[workflows:add_model]{workflows::add_model()}} but also ensures that the returned object is an \code{epi_workflow}. + +This family is called \verb{Add_*} / \verb{Update_*} / \verb{Remove_*} to avoid +masking the related functions in \code{{workflows}}. We also provide +aliases with the lower-case names. However, in the event that +\code{{workflows}} is loaded after \code{{epipredict}}, these may fail to function +properly. } \examples{ jhu <- case_death_rate_subset \%>\% @@ -61,24 +67,24 @@ rf_model <- rand_forest(mode = "regression") wf <- epi_workflow(r) -wf <- wf \%>\% add_model(rf_model) +wf <- wf \%>\% Add_model(rf_model) wf lm_model <- parsnip::linear_reg() -wf <- update_model(wf, lm_model) +wf <- Update_model(wf, lm_model) wf -wf <- remove_model(wf) +wf <- Remove_model(wf) wf } \seealso{ \code{\link[workflows:add_model]{workflows::add_model()}} \itemize{ -\item \code{add_model()} adds a parsnip model to the \code{epi_workflow}. -\item \code{remove_model()} removes the model specification as well as any fitted +\item \code{Add_model()} adds a parsnip model to the \code{epi_workflow}. +\item \code{Remove_model()} removes the model specification as well as any fitted model object. Any extra formulas are also removed. -\item \code{update_model()} first removes the model then adds the new +\item \code{Update_model()} first removes the model then adds the new specification to the workflow. } } From 70c35c59bfbe1eb77863f4ad0f800489cd86afa3 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 30 Apr 2024 15:33:59 -0700 Subject: [PATCH 236/382] fix: downstream add/update/remove --- _pkgdown.yml | 2 +- vignettes/articles/update.Rmd | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index 8fe027a5c..fa6964022 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -84,7 +84,7 @@ reference: - epi_workflow - add_epi_recipe - adjust_epi_recipe - - add_model + - Add_model - predict.epi_workflow - fit.epi_workflow - augment.epi_workflow diff --git a/vignettes/articles/update.Rmd b/vignettes/articles/update.Rmd index 221e1c37e..54b909072 100644 --- a/vignettes/articles/update.Rmd +++ b/vignettes/articles/update.Rmd @@ -39,8 +39,8 @@ add/remove/update an `epi_recipe` or a step in it. For this, we have `add_epi_recipe()`, `update_epi_recipe()`, and `remove_epi_recipe()` to add/update/remove an entire `epi_recipe` in an `epi_workflow` as well as `adjust_epi_recipe()` to adjust a particular step in an `epi_recipe` or -`epi_workflow` by the step number or name. For a model, one may `add_model()`, -`update_model()`, or `remove_model()` in an `epi_workflow`. For post-processing, +`epi_workflow` by the step number or name. For a model, one may `Add_model()`, +`Update_model()`, or `Remove_model()` in an `epi_workflow`.[^1] For post-processing, where the goal is to update a frosting object or a layer in it, we have `add_frosting()`, `remove_frosting()`, and `update_frosting()` to add/update/remove an entire `frosting` object in an `epi_workflow` as well as @@ -51,9 +51,14 @@ processing step is shown by the following table: | | Add/update/remove functions | adjust functions | |----------------------------|------------------------------------------------------------|---------------------| | Pre-processing | `add_epi_recipe()`, `update_epi_recipe()`, `remove_epi_recipe()` | `adjust_epi_recipe()` | -| Model specification | `add_model()`, `update_model()` `remove_model()` | | +| Model specification | `Add_model()`, `Update_model()` `Remove_model()` | | | Post-processing | `add_frosting()`, `remove_frosting()`, `update_frosting()` | `adjust_frosting()` | +[^1]: We capitalize these names to avoid possible clashes with the `{workflows}` +versions of these functions. The lower-case versions are also available, +however, if you load `{workflows}` after `{epipredict}`, these will be masked +and may not work as expected. + Since adding/removing/updating frosting as well as adjusting a layer in a `frosting` object proceeds in the same way as performing those tasks on an `epi_recipe`, we will focus on implementing those for an `epi_recipe` in this @@ -162,16 +167,16 @@ point - Any operations performed using the old recipe are not updated automatically. So we should be careful to fit the model using the new recipe, `r2`. Similarly, if predictions were made using the old recipe, then they should be re-generated using the version `epi_workflow` that contains the updated -recipe. We can use `update_model()` to replace the model used in `wf`, and then +recipe. We can use `Update_model()` to replace the model used in `wf`, and then fit as before: ```{r} # fit linear model -wf <- update_model(wf, parsnip::linear_reg()) %>% fit(jhu) +wf <- Update_model(wf, parsnip::linear_reg()) %>% fit(jhu) wf ``` -Alternatively, we may use the `remove_model()` followed by `add_model()` +Alternatively, we may use the `Remove_model()` followed by `Add_model()` combination for the same effect. ## Add/update/remove a `frosting` object in an `epi_workflow` From d754409dbc36acbf2601a52f824dc3a79276066b Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 15 Apr 2024 12:22:33 -0700 Subject: [PATCH 237/382] feat: review updates * check postprocessor for forecast_date in forecast.epi_workflow * add test --- NAMESPACE | 2 ++ R/arx_classifier.R | 4 +-- R/arx_forecaster.R | 19 +++++-------- R/epi_workflow.R | 28 ++++++++++++++----- R/layer_add_target_date.R | 2 +- R/layer_cdc_flatline_quantiles.R | 2 +- R/reexports-tidymodels.R | 4 +++ _pkgdown.yml | 2 +- man/{forecast.Rd => forecast.epi_workflow.Rd} | 15 ++++------ man/layer_add_target_date.Rd | 2 +- man/layer_cdc_flatline_quantiles.Rd | 2 +- man/reexports.Rd | 3 +- tests/testthat/test-epi_workflow.R | 23 +++++++++++---- tests/testthat/test-population_scaling.R | 6 ++-- vignettes/epipredict.Rmd | 5 ---- 15 files changed, 68 insertions(+), 51 deletions(-) rename man/{forecast.Rd => forecast.epi_workflow.Rd} (81%) diff --git a/NAMESPACE b/NAMESPACE index 7d3056d0d..103a03c6f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -45,6 +45,7 @@ S3method(extrapolate_quantiles,distribution) S3method(fit,epi_workflow) S3method(flusight_hub_formatter,canned_epipred) S3method(flusight_hub_formatter,data.frame) +S3method(forecast,epi_workflow) S3method(format,dist_quantiles) S3method(is.na,dist_quantiles) S3method(is.na,distribution) @@ -220,6 +221,7 @@ importFrom(dplyr,ungroup) importFrom(epiprocess,growth_rate) importFrom(generics,augment) importFrom(generics,fit) +importFrom(generics,forecast) importFrom(ggplot2,autoplot) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index c17d02b89..de730826c 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -51,9 +51,7 @@ arx_classifier <- function( cli::cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'classification'.") } - wf <- arx_class_epi_workflow( - epi_data, outcome, predictors, trainer, args_list - ) + wf <- arx_class_epi_workflow(epi_data, outcome, predictors, trainer, args_list) wf <- generics::fit(wf, epi_data) preds <- forecast( diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index 48330c2cb..10b2d2bce 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -38,24 +38,19 @@ #' trainer = quantile_reg(), #' args_list = arx_args_list(quantile_levels = 1:9 / 10) #' ) -arx_forecaster <- function(epi_data, - outcome, - predictors = outcome, - trainer = parsnip::linear_reg(), - args_list = arx_args_list()) { +arx_forecaster <- function( + epi_data, + outcome, + predictors = outcome, + trainer = parsnip::linear_reg(), + args_list = arx_args_list()) { if (!is_regression(trainer)) { cli::cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'regression'.") } - wf <- arx_fcast_epi_workflow( - epi_data, outcome, predictors, trainer, args_list - ) + wf <- arx_fcast_epi_workflow(epi_data, outcome, predictors, trainer, args_list) wf <- generics::fit(wf, epi_data) - latest <- get_test_data( - hardhat::extract_preprocessor(wf), epi_data, - ) - preds <- forecast( wf, fill_locf = TRUE, diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 9fa466594..926dc3cfd 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -334,7 +334,8 @@ print.epi_workflow <- function(x, ...) { #' Produce a forecast from an epi workflow #' -#' @param epi_workflow An epi workflow +#' @param object An epi workflow. +#' @param ... Not used. #' @param fill_locf Logical. Should we use locf to fill in missing data? #' @param n_recent Integer or NULL. If filling missing data with locf = TRUE, #' how far back are we willing to tolerate missing data? Larger values allow @@ -349,21 +350,34 @@ print.epi_workflow <- function(x, ...) { #' @return A forecast tibble. #' #' @export -forecast <- function(epi_workflow, fill_locf = FALSE, n_recent = NULL, forecast_date = NULL) { - if (!epi_workflow$trained) { +forecast.epi_workflow <- function(object, ..., fill_locf = FALSE, n_recent = NULL, forecast_date = NULL) { + rlang::check_dots_empty() + + if (!object$trained) { cli_abort(c( "You cannot `forecast()` a {.cls workflow} that has not been trained.", i = "Please use `fit()` before forecasting." )) } + frosting_fd <- NULL + if (has_postprocessor(object) && detect_layer(object, "layer_add_forecast_date")) { + frosting_fd <- extract_argument(object, "layer_add_forecast_date", "forecast_date") + if (!is.null(frosting_fd) && class(frosting_fd) != class(object$original_data$time_value)) { + cli_abort(c( + "Error with layer_add_forecast_date():", + i = "The type of `forecast_date` must match the type of the `time_value` column in the data." + )) + } + } + test_data <- get_test_data( - hardhat::extract_preprocessor(epi_workflow), - epi_workflow$original_data, + hardhat::extract_preprocessor(object), + object$original_data, fill_locf = fill_locf, n_recent = n_recent %||% Inf, - forecast_date = forecast_date %||% max(epi_workflow$original_data$time_value) + forecast_date = forecast_date %||% frosting_fd %||% max(object$original_data$time_value) ) - predict(epi_workflow, new_data = test_data) + predict(object, new_data = test_data) } diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 0d222eefa..f03bd6154 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -32,7 +32,7 @@ #' # Use ahead + forecast date #' f <- frosting() %>% #' layer_predict() %>% -#' layer_add_forecast_date(forecast_date = "2022-05-31") %>% +#' layer_add_forecast_date(forecast_date = as.Date("2022-05-31")) %>% #' layer_add_target_date() %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) diff --git a/R/layer_cdc_flatline_quantiles.R b/R/layer_cdc_flatline_quantiles.R index 09e9a68a0..f54c1da78 100644 --- a/R/layer_cdc_flatline_quantiles.R +++ b/R/layer_cdc_flatline_quantiles.R @@ -71,7 +71,7 @@ #' eng <- parsnip::linear_reg() %>% parsnip::set_engine("flatline") #' #' wf <- epi_workflow(r, eng, f) %>% fit(case_death_rate_subset) -#' preds <- suppressWarnings(forecast(wf)) %>% +#' preds <- forecast(wf) %>% #' dplyr::select(-time_value) %>% #' dplyr::mutate(forecast_date = forecast_date) #' preds diff --git a/R/reexports-tidymodels.R b/R/reexports-tidymodels.R index 250bae962..2c69139a2 100644 --- a/R/reexports-tidymodels.R +++ b/R/reexports-tidymodels.R @@ -2,6 +2,10 @@ #' @export generics::fit +#' @importFrom generics forecast +#' @export +generics::forecast + #' @importFrom recipes prep #' @export recipes::prep diff --git a/_pkgdown.yml b/_pkgdown.yml index b212001d2..20cc8da23 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -86,7 +86,7 @@ reference: - predict.epi_workflow - fit.epi_workflow - augment.epi_workflow - - forecast + - forecast.epi_workflow - title: Epi recipe preprocessing steps contents: - starts_with("step_") diff --git a/man/forecast.Rd b/man/forecast.epi_workflow.Rd similarity index 81% rename from man/forecast.Rd rename to man/forecast.epi_workflow.Rd index 3ee0b2751..b9f6870b8 100644 --- a/man/forecast.Rd +++ b/man/forecast.epi_workflow.Rd @@ -1,18 +1,15 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/epi_workflow.R -\name{forecast} -\alias{forecast} +\name{forecast.epi_workflow} +\alias{forecast.epi_workflow} \title{Produce a forecast from an epi workflow} \usage{ -forecast( - epi_workflow, - fill_locf = FALSE, - n_recent = NULL, - forecast_date = NULL -) +\method{forecast}{epi_workflow}(object, ..., fill_locf = FALSE, n_recent = NULL, forecast_date = NULL) } \arguments{ -\item{epi_workflow}{An epi workflow} +\item{object}{An epi workflow.} + +\item{...}{Not used.} \item{fill_locf}{Logical. Should we use locf to fill in missing data?} diff --git a/man/layer_add_target_date.Rd b/man/layer_add_target_date.Rd index a6fd3d8d2..5b32002d1 100644 --- a/man/layer_add_target_date.Rd +++ b/man/layer_add_target_date.Rd @@ -49,7 +49,7 @@ wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) # Use ahead + forecast date f <- frosting() \%>\% layer_predict() \%>\% - layer_add_forecast_date(forecast_date = "2022-05-31") \%>\% + layer_add_forecast_date(forecast_date = as.Date("2022-05-31")) \%>\% layer_add_target_date() \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) diff --git a/man/layer_cdc_flatline_quantiles.Rd b/man/layer_cdc_flatline_quantiles.Rd index a839ee641..5653f9691 100644 --- a/man/layer_cdc_flatline_quantiles.Rd +++ b/man/layer_cdc_flatline_quantiles.Rd @@ -100,7 +100,7 @@ f <- frosting() \%>\% eng <- parsnip::linear_reg() \%>\% parsnip::set_engine("flatline") wf <- epi_workflow(r, eng, f) \%>\% fit(case_death_rate_subset) -preds <- suppressWarnings(forecast(wf)) \%>\% +preds <- forecast(wf) \%>\% dplyr::select(-time_value) \%>\% dplyr::mutate(forecast_date = forecast_date) preds diff --git a/man/reexports.Rd b/man/reexports.Rd index d376e1281..1ac328b2c 100644 --- a/man/reexports.Rd +++ b/man/reexports.Rd @@ -5,6 +5,7 @@ \alias{reexports} \alias{autoplot} \alias{fit} +\alias{forecast} \alias{prep} \alias{bake} \title{Objects exported from other packages} @@ -14,7 +15,7 @@ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ - \item{generics}{\code{\link[generics]{fit}}} + \item{generics}{\code{\link[generics]{fit}}, \code{\link[generics]{forecast}}} \item{ggplot2}{\code{\link[ggplot2]{autoplot}}} diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index c626113c6..09dd6fe82 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -71,15 +71,26 @@ test_that("forecast method works", { step_epi_ahead(death_rate, ahead = 7) %>% step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) - - latest <- get_test_data( - hardhat::extract_preprocessor(wf), - jhu + expect_equal( + forecast(wf), + predict(wf, new_data = get_test_data( + hardhat::extract_preprocessor(wf), + jhu + )) ) + args <- list( + fill_locf = TRUE, + n_recent = 360 * 3, + forecast_date = as.Date("2024-01-01") + ) expect_equal( - forecast(wf), - predict(wf, new_data = latest) + forecast(wf, !!!args), + predict(wf, new_data = get_test_data( + hardhat::extract_preprocessor(wf), + jhu, + !!!args + )) ) }) diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index 30bc7bee6..b66bb08c3 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -119,7 +119,7 @@ test_that("Postprocessing workflow works and values correct", { fit(jhu) %>% add_frosting(f) - suppressWarnings(p <- forecast(wf)) + p <- forecast(wf) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(20000, 30000)) @@ -136,7 +136,7 @@ test_that("Postprocessing workflow works and values correct", { wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) - suppressWarnings(p <- forecast(wf)) + p <- forecast(wf) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(2, 3)) @@ -178,7 +178,7 @@ test_that("Postprocessing to get cases from case rate", { fit(jhu) %>% add_frosting(f) - suppressWarnings(p <- forecast(wf)) + p <- forecast(wf) expect_equal(nrow(p), 2L) expect_equal(ncol(p), 4L) expect_equal(p$.pred_scaled, p$.pred * c(1 / 20000, 1 / 30000)) diff --git a/vignettes/epipredict.Rmd b/vignettes/epipredict.Rmd index 000d1bf42..1c3808711 100644 --- a/vignettes/epipredict.Rmd +++ b/vignettes/epipredict.Rmd @@ -110,8 +110,6 @@ out <- arx_forecaster( ) ``` -This call produces a warning, which we'll ignore for now. But essentially, it's telling us that our data comes from May 2022 but we're trying to do a forecast for January 2022. The result is likely not an accurate measure of real-time forecast performance, because the data have been revised over time. - The `out` object has two components: 1. The predictions which is just another `epi_df`. It contains the predictions for each location along with additional columns. By default, these are a 90% predictive interval, the `forecast_date` (the date on which the forecast was putatively made) and the `target_date` (the date for which the forecast is being made). @@ -123,9 +121,6 @@ out$predictions out$epi_workflow ``` -Note that the `time_value` in the predictions is not necessarily meaningful, -but it is a required column in an `epi_df`, so it remains here. - By default, the forecaster predicts the outcome (`death_rate`) 1-week ahead, using 3 lags of each predictor (`case_rate` and `death_rate`) at 0 (today), 1 week back and 2 weeks back. The predictors and outcome can be changed directly. The rest of the defaults are encapsulated into a list of arguments. This list is produced by `arx_args_list()`. ## Simple adjustments From 286e467ad8ed7dbc98ba90999d7db7bb6425e7ef Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 30 Apr 2024 15:51:45 -0700 Subject: [PATCH 238/382] pass local checks, move vignette back --- R/model-methods.R | 10 ++++++++-- _pkgdown.yml | 2 +- man/add_model.Rd | 18 ++++++++++++++++++ vignettes/{articles => }/update.Rmd | 0 4 files changed, 27 insertions(+), 3 deletions(-) rename vignettes/{articles => }/update.Rmd (100%) diff --git a/R/model-methods.R b/R/model-methods.R index 619e8747d..d7c1e584c 100644 --- a/R/model-methods.R +++ b/R/model-methods.R @@ -102,27 +102,33 @@ Remove_model.epi_workflow <- function(x) { Update_model.epi_workflow <- function(x, spec, ..., formula = NULL) { rlang::check_dots_empty() x <- Remove_model(x) - workflows::add_model(x, spec, ..., formula = formula) + Add_model(x, spec, ..., formula = formula) } +#' @rdname Add_model #' @export -Add_model.workflow <- workflows::remove_model +Add_model.workflow <- workflows::add_model +#' @rdname Add_model #' @export Remove_model.workflow <- workflows::remove_model +#' @rdname Add_model #' @export Update_model.workflow <- workflows::update_model # Aliases ----------------------------------------------------------------- +#' @rdname Add_model #' @export add_model <- Add_model +#' @rdname Add_model #' @export remove_model <- Remove_model +#' @rdname Add_model #' @export update_model <- Update_model diff --git a/_pkgdown.yml b/_pkgdown.yml index fa6964022..92e92b040 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -28,7 +28,7 @@ articles: - epipredict - preprocessing-and-models - arx-classifier - - articles/update + - update - title: Advanced methods contents: diff --git a/man/add_model.Rd b/man/add_model.Rd index dc24f186d..6bf6b6b02 100644 --- a/man/add_model.Rd +++ b/man/add_model.Rd @@ -7,6 +7,12 @@ \alias{Add_model.epi_workflow} \alias{Remove_model.epi_workflow} \alias{Update_model.epi_workflow} +\alias{Add_model.workflow} +\alias{Remove_model.workflow} +\alias{Update_model.workflow} +\alias{add_model} +\alias{remove_model} +\alias{update_model} \title{Add a model to an \code{epi_workflow}} \usage{ Add_model(x, spec, ..., formula = NULL) @@ -20,6 +26,18 @@ Update_model(x, spec, ..., formula = NULL) \method{Remove_model}{epi_workflow}(x) \method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) + +\method{Add_model}{workflow}(x, spec, ..., formula = NULL) + +\method{Remove_model}{workflow}(x) + +\method{Update_model}{workflow}(x, spec, ..., formula = NULL) + +add_model(x, spec, ..., formula = NULL) + +remove_model(x) + +update_model(x, spec, ..., formula = NULL) } \arguments{ \item{x}{An \code{epi_workflow}.} diff --git a/vignettes/articles/update.Rmd b/vignettes/update.Rmd similarity index 100% rename from vignettes/articles/update.Rmd rename to vignettes/update.Rmd From b46ebb747c9965dfabfb6296d20356aebf365a1a Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 15 Apr 2024 12:07:54 -0700 Subject: [PATCH 239/382] doc: version bump + news --- DESCRIPTION | 2 +- NEWS.md | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0552d700d..aafeb2e42 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.13 +Version: 0.0.14 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 3c492e38b..8cf0b028a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -31,12 +31,15 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Working vignette - use `checkmate` for input validation - refactor quantile extrapolation (possibly creates different results) -- force `target_date` + `forecast_date` handling to match the time_type of - the epi_df. allows for annual and weekly data +- force `target_date` + `forecast_date` handling to match the time_type of the + epi_df. allows for annual and weekly data - add `check_enough_train_data()` that will error if training data is too small - added `check_enough_train_data()` to `arx_forecaster()` -- `layer_residual_quantiles()` will now error if any of the residual quantiles are NA +- `layer_residual_quantiles()` will now error if any of the residual quantiles + are NA - `*_args_list()` functions now warn if `forecast_date + ahead != target_date` -- the `predictor` argument in `arx_forecaster()` now defaults to the value of the `outcome` argument +- the `predictor` argument in `arx_forecaster()` now defaults to the value of + the `outcome` argument - `arx_fcast_epi_workflow()` and `arx_class_epi_workflow()` now default to `trainer = parsnip::logistic_reg()` to match their more canned versions. +- add a `forecast()` method simplify generating forecasts From 173c39f4d10c90581cdb33964f142a4554182577 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 30 Apr 2024 15:58:08 -0700 Subject: [PATCH 240/382] style --- R/model-methods.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/model-methods.R b/R/model-methods.R index d7c1e584c..607b04234 100644 --- a/R/model-methods.R +++ b/R/model-methods.R @@ -1,4 +1,3 @@ - #' Add a model to an `epi_workflow` #' #' @seealso [workflows::add_model()] From f5bddf64c24ee338ba7dd2b38ddc062c7381e215 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Tue, 30 Apr 2024 16:39:44 -0700 Subject: [PATCH 241/382] ci: stop running pkgdown on every commit --- .github/workflows/pkgdown.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 9490acc78..cc940bc8b 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -4,9 +4,7 @@ # Created with usethis + edited to run on PRs to dev, use API key. on: push: - branches: [dev, main] - pull_request: - branches: [dev, main] + branches: [main, dev] release: types: [published] workflow_dispatch: From e045daa44fba823b2bb0917544696d19bb056c89 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 08:25:51 -0700 Subject: [PATCH 242/382] import standalone purrr --- R/compat-purrr.R | 87 ------------- R/epipredict-package.R | 2 +- R/import-standalone-purrr.R | 240 ++++++++++++++++++++++++++++++++++++ 3 files changed, 241 insertions(+), 88 deletions(-) create mode 100644 R/import-standalone-purrr.R diff --git a/R/compat-purrr.R b/R/compat-purrr.R index 712926f73..e06038e44 100644 --- a/R/compat-purrr.R +++ b/R/compat-purrr.R @@ -1,37 +1,8 @@ -# See https://github.com/r-lib/rlang/blob/main/R/compat-purrr.R - - -map <- function(.x, .f, ...) { - .f <- rlang::as_function(.f, env = rlang::global_env()) - lapply(.x, .f, ...) -} - -walk <- function(.x, .f, ...) { - map(.x, .f, ...) - invisible(.x) -} - walk2 <- function(.x, .y, .f, ...) { map2(.x, .y, .f, ...) invisible(.x) } -map_lgl <- function(.x, .f, ...) { - .rlang_purrr_map_mold(.x, .f, logical(1), ...) -} - -map_int <- function(.x, .f, ...) { - .rlang_purrr_map_mold(.x, .f, integer(1), ...) -} - -map_dbl <- function(.x, .f, ...) { - .rlang_purrr_map_mold(.x, .f, double(1), ...) -} - -map_chr <- function(.x, .f, ...) { - .rlang_purrr_map_mold(.x, .f, character(1), ...) -} - map_vec <- function(.x, .f, ...) { out <- map(.x, .f, ...) vctrs::list_unchop(out) @@ -48,61 +19,3 @@ map2_dfr <- function(.x, .y, .f, ..., .id = NULL) { res <- map2(.x, .y, .f, ...) dplyr::bind_rows(res, .id = .id) } - -.rlang_purrr_map_mold <- function(.x, .f, .mold, ...) { - .f <- rlang::as_function(.f, env = rlang::global_env()) - out <- vapply(.x, .f, .mold, ..., USE.NAMES = FALSE) - names(out) <- names(.x) - out -} - -.rlang_purrr_args_recycle <- function(args) { - lengths <- map_int(args, length) - n <- max(lengths) - - stopifnot(all(lengths == 1L | lengths == n)) - to_recycle <- lengths == 1L - args[to_recycle] <- map(args[to_recycle], function(x) rep.int(x, n)) - - args -} - -map2 <- function(.x, .y, .f, ...) { - .f <- rlang::as_function(.f, env = rlang::global_env()) - out <- mapply(.f, .x, .y, MoreArgs = list(...), SIMPLIFY = FALSE) - if (length(out) == length(.x)) { - rlang::set_names(out, names(.x)) - } else { - rlang::set_names(out, NULL) - } -} -map2_lgl <- function(.x, .y, .f, ...) { - as.vector(map2(.x, .y, .f, ...), "logical") -} -map2_int <- function(.x, .y, .f, ...) { - as.vector(map2(.x, .y, .f, ...), "integer") -} -map2_dbl <- function(.x, .y, .f, ...) { - as.vector(map2(.x, .y, .f, ...), "double") -} -map2_chr <- function(.x, .y, .f, ...) { - as.vector(map2(.x, .y, .f, ...), "character") -} -imap <- function(.x, .f, ...) { - map2(.x, names(.x) %||% seq_along(.x), .f, ...) -} - -pmap <- function(.l, .f, ...) { - .f <- as.function(.f) - args <- .rlang_purrr_args_recycle(.l) - do.call("mapply", c( - FUN = list(quote(.f)), - args, MoreArgs = quote(list(...)), - SIMPLIFY = FALSE, USE.NAMES = FALSE - )) -} - -reduce <- function(.x, .f, ..., .init) { - f <- function(x, y) .f(x, y, ...) - Reduce(f, .x, init = .init) -} diff --git a/R/epipredict-package.R b/R/epipredict-package.R index a3c6a208a..b6681f982 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,6 +1,6 @@ ## usethis namespace: start #' @importFrom tibble tibble -#' @importFrom rlang := !! %||% +#' @importFrom rlang := !! %||% as_function global_env set_names #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar diff --git a/R/import-standalone-purrr.R b/R/import-standalone-purrr.R new file mode 100644 index 000000000..623142a0e --- /dev/null +++ b/R/import-standalone-purrr.R @@ -0,0 +1,240 @@ +# Standalone file: do not edit by hand +# Source: +# ---------------------------------------------------------------------- +# +# --- +# repo: r-lib/rlang +# file: standalone-purrr.R +# last-updated: 2023-02-23 +# license: https://unlicense.org +# imports: rlang +# --- +# +# This file provides a minimal shim to provide a purrr-like API on top of +# base R functions. They are not drop-in replacements but allow a similar style +# of programming. +# +# ## Changelog +# +# 2023-02-23: +# * Added `list_c()` +# +# 2022-06-07: +# * `transpose()` is now more consistent with purrr when inner names +# are not congruent (#1346). +# +# 2021-12-15: +# * `transpose()` now supports empty lists. +# +# 2021-05-21: +# * Fixed "object `x` not found" error in `imap()` (@mgirlich) +# +# 2020-04-14: +# * Removed `pluck*()` functions +# * Removed `*_cpl()` functions +# * Used `as_function()` to allow use of `~` +# * Used `.` prefix for helpers +# +# nocov start + +map <- function(.x, .f, ...) { + .f <- as_function(.f, env = global_env()) + lapply(.x, .f, ...) +} +walk <- function(.x, .f, ...) { + map(.x, .f, ...) + invisible(.x) +} + +map_lgl <- function(.x, .f, ...) { + .rlang_purrr_map_mold(.x, .f, logical(1), ...) +} +map_int <- function(.x, .f, ...) { + .rlang_purrr_map_mold(.x, .f, integer(1), ...) +} +map_dbl <- function(.x, .f, ...) { + .rlang_purrr_map_mold(.x, .f, double(1), ...) +} +map_chr <- function(.x, .f, ...) { + .rlang_purrr_map_mold(.x, .f, character(1), ...) +} +.rlang_purrr_map_mold <- function(.x, .f, .mold, ...) { + .f <- as_function(.f, env = global_env()) + out <- vapply(.x, .f, .mold, ..., USE.NAMES = FALSE) + names(out) <- names(.x) + out +} + +map2 <- function(.x, .y, .f, ...) { + .f <- as_function(.f, env = global_env()) + out <- mapply(.f, .x, .y, MoreArgs = list(...), SIMPLIFY = FALSE) + if (length(out) == length(.x)) { + set_names(out, names(.x)) + } else { + set_names(out, NULL) + } +} +map2_lgl <- function(.x, .y, .f, ...) { + as.vector(map2(.x, .y, .f, ...), "logical") +} +map2_int <- function(.x, .y, .f, ...) { + as.vector(map2(.x, .y, .f, ...), "integer") +} +map2_dbl <- function(.x, .y, .f, ...) { + as.vector(map2(.x, .y, .f, ...), "double") +} +map2_chr <- function(.x, .y, .f, ...) { + as.vector(map2(.x, .y, .f, ...), "character") +} +imap <- function(.x, .f, ...) { + map2(.x, names(.x) %||% seq_along(.x), .f, ...) +} + +pmap <- function(.l, .f, ...) { + .f <- as.function(.f) + args <- .rlang_purrr_args_recycle(.l) + do.call("mapply", c( + FUN = list(quote(.f)), + args, MoreArgs = quote(list(...)), + SIMPLIFY = FALSE, USE.NAMES = FALSE + )) +} +.rlang_purrr_args_recycle <- function(args) { + lengths <- map_int(args, length) + n <- max(lengths) + + stopifnot(all(lengths == 1L | lengths == n)) + to_recycle <- lengths == 1L + args[to_recycle] <- map(args[to_recycle], function(x) rep.int(x, n)) + + args +} + +keep <- function(.x, .f, ...) { + .x[.rlang_purrr_probe(.x, .f, ...)] +} +discard <- function(.x, .p, ...) { + sel <- .rlang_purrr_probe(.x, .p, ...) + .x[is.na(sel) | !sel] +} +map_if <- function(.x, .p, .f, ...) { + matches <- .rlang_purrr_probe(.x, .p) + .x[matches] <- map(.x[matches], .f, ...) + .x +} +.rlang_purrr_probe <- function(.x, .p, ...) { + if (is_logical(.p)) { + stopifnot(length(.p) == length(.x)) + .p + } else { + .p <- as_function(.p, env = global_env()) + map_lgl(.x, .p, ...) + } +} + +compact <- function(.x) { + Filter(length, .x) +} + +transpose <- function(.l) { + if (!length(.l)) { + return(.l) + } + + inner_names <- names(.l[[1]]) + + if (is.null(inner_names)) { + fields <- seq_along(.l[[1]]) + } else { + fields <- set_names(inner_names) + .l <- map(.l, function(x) { + if (is.null(names(x))) { + set_names(x, inner_names) + } else { + x + } + }) + } + + # This way missing fields are subsetted as `NULL` instead of causing + # an error + .l <- map(.l, as.list) + + map(fields, function(i) { + map(.l, .subset2, i) + }) +} + +every <- function(.x, .p, ...) { + .p <- as_function(.p, env = global_env()) + + for (i in seq_along(.x)) { + if (!rlang::is_true(.p(.x[[i]], ...))) return(FALSE) + } + TRUE +} +some <- function(.x, .p, ...) { + .p <- as_function(.p, env = global_env()) + + for (i in seq_along(.x)) { + if (rlang::is_true(.p(.x[[i]], ...))) return(TRUE) + } + FALSE +} +negate <- function(.p) { + .p <- as_function(.p, env = global_env()) + function(...) !.p(...) +} + +reduce <- function(.x, .f, ..., .init) { + f <- function(x, y) .f(x, y, ...) + Reduce(f, .x, init = .init) +} +reduce_right <- function(.x, .f, ..., .init) { + f <- function(x, y) .f(y, x, ...) + Reduce(f, .x, init = .init, right = TRUE) +} +accumulate <- function(.x, .f, ..., .init) { + f <- function(x, y) .f(x, y, ...) + Reduce(f, .x, init = .init, accumulate = TRUE) +} +accumulate_right <- function(.x, .f, ..., .init) { + f <- function(x, y) .f(y, x, ...) + Reduce(f, .x, init = .init, right = TRUE, accumulate = TRUE) +} + +detect <- function(.x, .f, ..., .right = FALSE, .p = is_true) { + .p <- as_function(.p, env = global_env()) + .f <- as_function(.f, env = global_env()) + + for (i in .rlang_purrr_index(.x, .right)) { + if (.p(.f(.x[[i]], ...))) { + return(.x[[i]]) + } + } + NULL +} +detect_index <- function(.x, .f, ..., .right = FALSE, .p = is_true) { + .p <- as_function(.p, env = global_env()) + .f <- as_function(.f, env = global_env()) + + for (i in .rlang_purrr_index(.x, .right)) { + if (.p(.f(.x[[i]], ...))) { + return(i) + } + } + 0L +} +.rlang_purrr_index <- function(x, right = FALSE) { + idx <- seq_along(x) + if (right) { + idx <- rev(idx) + } + idx +} + +list_c <- function(x) { + inject(c(!!!x)) +} + +# nocov end From 947984a538a2657f18b9377170eea0260bcacaaa Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 13:43:21 -0700 Subject: [PATCH 243/382] baked data will _not_ be an epi_df --- R/bake.epi_recipe.R | 104 ------------------ R/epi_juice.R | 43 -------- man/bake.Rd | 28 ----- man/epi_juice.Rd | 20 ---- tests/testthat/test-check_enough_train_data.R | 1 - tests/testthat/test-step_training_window.R | 8 +- 6 files changed, 4 insertions(+), 200 deletions(-) delete mode 100644 R/bake.epi_recipe.R delete mode 100644 R/epi_juice.R delete mode 100644 man/bake.Rd delete mode 100644 man/epi_juice.Rd diff --git a/R/bake.epi_recipe.R b/R/bake.epi_recipe.R deleted file mode 100644 index 4a083ee19..000000000 --- a/R/bake.epi_recipe.R +++ /dev/null @@ -1,104 +0,0 @@ -#' Bake an epi_recipe -#' -#' @param object A trained object such as a [recipe()] with at least -#' one preprocessing operation. -#' @param new_data An `epi_df`, data frame or tibble for whom the -#' preprocessing will be applied. If `NULL` is given to `new_data`, -#' the pre-processed _training data_ will be returned. -#' @param ... One or more selector functions to choose which variables will be -#' returned by the function. See [recipes::selections()] for -#' more details. If no selectors are given, the default is to -#' use [tidyselect::everything()]. -#' @return An `epi_df` that may have different columns than the -#' original columns in `new_data`. -#' @importFrom rlang is_empty quos -#' @importFrom tibble is_tibble as_tibble -#' @rdname bake -#' @export -bake.epi_recipe <- function(object, new_data, ...) { - if (rlang::is_missing(new_data)) { - rlang::abort("'new_data' must be either an epi_df or NULL. No value is not allowed.") - } - - if (is.null(new_data)) { - return(epi_juice(object, ...)) - } - - if (!fully_trained(object)) { - rlang::abort("At least one step has not been trained. Please run `prep`.") - } - - terms <- quos(...) - if (is_empty(terms)) { - terms <- quos(tidyselect::everything()) - } - - # In case someone used the deprecated `newdata`: - if (is.null(new_data) || is.null(ncol(new_data))) { - if (any(names(terms) == "newdata")) { - rlang::abort("Please use `new_data` instead of `newdata` with `bake`.") - } else { - rlang::abort("Please pass a data set to `new_data`.") - } - } - - if (!is_tibble(new_data)) { - new_data <- as_tibble(new_data) - } - - recipes:::check_role_requirements(object, new_data) - - recipes:::check_nominal_type(new_data, object$orig_lvls) - - # Drop completely new columns from `new_data` and reorder columns that do - # still exist to match the ordering used when training - original_names <- names(new_data) - original_training_names <- unique(object$var_info$variable) - bakeable_names <- intersect(original_training_names, original_names) - new_data <- new_data[, bakeable_names] - - n_steps <- length(object$steps) - - for (i in seq_len(n_steps)) { - step <- object$steps[[i]] - - if (recipes:::is_skipable(step)) { - next - } - - new_data <- bake(step, new_data = new_data) - - if (!is_tibble(new_data)) { - abort("bake() methods should always return tibbles") - } - } - - # Use `last_term_info`, which maintains info on all columns that got added - # and removed from the training data. This is important for skipped steps - # which might have resulted in columns not being added/removed in the test - # set. - info <- object$last_term_info - - # Now reduce to only user selected columns - out_names <- recipes_eval_select(terms, new_data, info, - check_case_weights = FALSE - ) - new_data <- new_data[, out_names] - - # The levels are not null when no nominal data are present or - # if strings_as_factors = FALSE in `prep` - if (!is.null(object$levels)) { - var_levels <- object$levels - var_levels <- var_levels[out_names] - check_values <- - vapply(var_levels, function(x) { - (!all(is.na(x))) - }, c(all = TRUE)) - var_levels <- var_levels[check_values] - if (length(var_levels) > 0) { - new_data <- recipes:::strings2factors(new_data, var_levels) - } - } - - new_data -} diff --git a/R/epi_juice.R b/R/epi_juice.R deleted file mode 100644 index d9d23df97..000000000 --- a/R/epi_juice.R +++ /dev/null @@ -1,43 +0,0 @@ -#' Extract transformed training set -#' -#' @inheritParams bake.epi_recipe -epi_juice <- function(object, ...) { - if (!fully_trained(object)) { - rlang::abort("At least one step has not been trained. Please run `prep()`.") - } - - if (!isTRUE(object$retained)) { - rlang::abort(paste0( - "Use `retain = TRUE` in `prep()` to be able ", - "to extract the training set" - )) - } - - terms <- quos(...) - if (is_empty(terms)) { - terms <- quos(dplyr::everything()) - } - - # Get user requested columns - new_data <- object$template - out_names <- recipes_eval_select(terms, new_data, object$term_info, - check_case_weights = FALSE - ) - new_data <- new_data[, out_names] - - # Since most models require factors, do the conversion from character - if (!is.null(object$levels)) { - var_levels <- object$levels - var_levels <- var_levels[out_names] - check_values <- - vapply(var_levels, function(x) { - (!all(is.na(x))) - }, c(all = TRUE)) - var_levels <- var_levels[check_values] - if (length(var_levels) > 0) { - new_data <- recipes:::strings2factors(new_data, var_levels) - } - } - - new_data -} diff --git a/man/bake.Rd b/man/bake.Rd deleted file mode 100644 index c1c0137c5..000000000 --- a/man/bake.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bake.epi_recipe.R -\name{bake.epi_recipe} -\alias{bake.epi_recipe} -\title{Bake an epi_recipe} -\usage{ -\method{bake}{epi_recipe}(object, new_data, ...) -} -\arguments{ -\item{object}{A trained object such as a \code{\link[=recipe]{recipe()}} with at least -one preprocessing operation.} - -\item{new_data}{An \code{epi_df}, data frame or tibble for whom the -preprocessing will be applied. If \code{NULL} is given to \code{new_data}, -the pre-processed \emph{training data} will be returned.} - -\item{...}{One or more selector functions to choose which variables will be -returned by the function. See \code{\link[recipes:selections]{recipes::selections()}} for -more details. If no selectors are given, the default is to -use \code{\link[tidyselect:everything]{tidyselect::everything()}}.} -} -\value{ -An \code{epi_df} that may have different columns than the -original columns in \code{new_data}. -} -\description{ -Bake an epi_recipe -} diff --git a/man/epi_juice.Rd b/man/epi_juice.Rd deleted file mode 100644 index 38eccb9a9..000000000 --- a/man/epi_juice.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/epi_juice.R -\name{epi_juice} -\alias{epi_juice} -\title{Extract transformed training set} -\usage{ -epi_juice(object, ...) -} -\arguments{ -\item{object}{A trained object such as a \code{\link[=recipe]{recipe()}} with at least -one preprocessing operation.} - -\item{...}{One or more selector functions to choose which variables will be -returned by the function. See \code{\link[recipes:selections]{recipes::selections()}} for -more details. If no selectors are given, the default is to -use \code{\link[tidyselect:everything]{tidyselect::everything()}}.} -} -\description{ -Extract transformed training set -} diff --git a/tests/testthat/test-check_enough_train_data.R b/tests/testthat/test-check_enough_train_data.R index 5eae01bb2..b162eeb61 100644 --- a/tests/testthat/test-check_enough_train_data.R +++ b/tests/testthat/test-check_enough_train_data.R @@ -74,7 +74,6 @@ test_that("check_enough_train_data outputs the correct recipe values", { expect_equal(nrow(p), 2 * n) expect_equal(ncol(p), 4L) - expect_s3_class(p, "epi_df") expect_named(p, c("time_value", "geo_value", "x", "y")) expect_equal( p$time_value, diff --git a/tests/testthat/test-step_training_window.R b/tests/testthat/test-step_training_window.R index c8a17f43f..006be0936 100644 --- a/tests/testthat/test-step_training_window.R +++ b/tests/testthat/test-step_training_window.R @@ -16,7 +16,7 @@ test_that("step_training_window works with default n_recent", { expect_equal(nrow(p), 100L) expect_equal(ncol(p), 4L) - expect_s3_class(p, "epi_df") + expect_named(p, c("time_value", "geo_value", "x", "y")) expect_equal( p$time_value, @@ -33,7 +33,7 @@ test_that("step_training_window works with specified n_recent", { expect_equal(nrow(p2), 10L) expect_equal(ncol(p2), 4L) - expect_s3_class(p2, "epi_df") + expect_named(p2, c("time_value", "geo_value", "x", "y")) expect_equal( p2$time_value, @@ -53,7 +53,7 @@ test_that("step_training_window does not proceed with specified new_data", { expect_equal(nrow(p3), 10L) expect_equal(ncol(p3), 4L) - expect_s3_class(p3, "epi_df") + # cols will be predictors, outcomes, time_value, geo_value expect_named(p3, c("x", "y", "time_value", "geo_value")) expect_equal( @@ -83,7 +83,7 @@ test_that("step_training_window works with multiple keys", { expect_equal(nrow(p4), 12L) expect_equal(ncol(p4), 5L) - expect_s3_class(p4, "epi_df") + expect_named(p4, c("time_value", "geo_value", "additional_key", "x", "y")) expect_equal( p4$time_value, From ac94e889089068358fc14bf8f491937aa80ac370 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 13:47:13 -0700 Subject: [PATCH 244/382] redocument, pass tests --- NAMESPACE | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 106dfe5b0..e4833d1ab 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,7 +18,6 @@ S3method(augment,epi_workflow) S3method(autoplot,canned_epipred) S3method(autoplot,epi_workflow) S3method(bake,check_enough_train_data) -S3method(bake,epi_recipe) S3method(bake,step_epi_ahead) S3method(bake,step_epi_lag) S3method(bake,step_growth_rate) @@ -240,10 +239,11 @@ importFrom(rlang,"%@%") importFrom(rlang,"%||%") importFrom(rlang,":=") importFrom(rlang,abort) +importFrom(rlang,as_function) importFrom(rlang,caller_env) -importFrom(rlang,is_empty) +importFrom(rlang,global_env) importFrom(rlang,is_null) -importFrom(rlang,quos) +importFrom(rlang,set_names) importFrom(smoothqr,smooth_qr) importFrom(stats,as.formula) importFrom(stats,family) @@ -255,8 +255,6 @@ importFrom(stats,predict) importFrom(stats,qnorm) importFrom(stats,quantile) importFrom(stats,residuals) -importFrom(tibble,as_tibble) -importFrom(tibble,is_tibble) importFrom(tibble,tibble) importFrom(tidyr,drop_na) importFrom(vctrs,as_list_of) From 5f247905c231d13278c8aab3660608c6c77ec2a2 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 13:53:32 -0700 Subject: [PATCH 245/382] bump version --- DESCRIPTION | 2 +- NEWS.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index aafeb2e42..1545c5ccd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.14 +Version: 0.0.15 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 8cf0b028a..5582803e3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -43,3 +43,6 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `arx_fcast_epi_workflow()` and `arx_class_epi_workflow()` now default to `trainer = parsnip::logistic_reg()` to match their more canned versions. - add a `forecast()` method simplify generating forecasts +- remove unnecessary `bake.epi_recipe()` and `epi_juice()`. +- Revise `compat-purrr` to use the r-lang `standalone-*` version (via + `{usethis}`) From 02ed38e1c13db936538b7a410ae576a6c14b3312 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 14:02:36 -0700 Subject: [PATCH 246/382] add lifecycle import --- DESCRIPTION | 2 +- R/{standalone-lifecycle.R => import-standalone-lifecycle.R} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename R/{standalone-lifecycle.R => import-standalone-lifecycle.R} (100%) diff --git a/DESCRIPTION b/DESCRIPTION index 1545c5ccd..12d86602b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -38,7 +38,7 @@ Imports: magrittr, quantreg, recipes (>= 1.0.4), - rlang, + rlang (>= 1.0.0), smoothqr, stats, tibble, diff --git a/R/standalone-lifecycle.R b/R/import-standalone-lifecycle.R similarity index 100% rename from R/standalone-lifecycle.R rename to R/import-standalone-lifecycle.R From f2f30cc12217398a92636a7aff39525be00486f0 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 14:03:04 -0700 Subject: [PATCH 247/382] make import explicit --- R/import-standalone-lifecycle.R | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/R/import-standalone-lifecycle.R b/R/import-standalone-lifecycle.R index e1b812a6d..a1be17134 100644 --- a/R/import-standalone-lifecycle.R +++ b/R/import-standalone-lifecycle.R @@ -1,3 +1,7 @@ +# Standalone file: do not edit by hand +# Source: +# ---------------------------------------------------------------------- +# # --- # repo: r-lib/rlang # file: standalone-lifecycle.R @@ -94,7 +98,8 @@ deprecate_soft <- function(msg, id <- paste(id, collapse = "\n") verbosity <- .rlang_lifecycle_verbosity() - invisible(switch(verbosity, + invisible(switch( + verbosity, quiet = NULL, warning = , default = @@ -121,7 +126,8 @@ deprecate_warn <- function(msg, id <- paste(id, collapse = "\n") verbosity <- .rlang_lifecycle_verbosity() - invisible(switch(verbosity, + invisible(switch( + verbosity, quiet = NULL, warning = , default = { From e4664ef48c21ae9698d985c256f470762051b21e Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 9 May 2024 14:20:26 -0700 Subject: [PATCH 248/382] rm glubort fun --- R/layers.R | 7 ++++--- R/utils-cli.R | 5 ----- man/layer-processors.Rd | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/R/layers.R b/R/layers.R index c93423d32..b59e95cdd 100644 --- a/R/layers.R +++ b/R/layers.R @@ -144,11 +144,12 @@ pull_layer_name <- function(x) { #' @export #' @rdname layer-processors -validate_layer <- function(x, ..., arg = "`x`", call = caller_env()) { +validate_layer <- function(x, ..., arg = rlang::caller_arg(x), + call = caller_env()) { rlang::check_dots_empty() if (!is_layer(x)) { - glubort( - "{arg} must be a frosting layer, not a {class(x)[[1]]}.", + cli::cli_abort( + "{arg} must be a frosting layer, not a {.cls {class(x)[[1]]}}.", .call = call ) } diff --git a/R/utils-cli.R b/R/utils-cli.R index ad43c95eb..3b1555941 100644 --- a/R/utils-cli.R +++ b/R/utils-cli.R @@ -18,11 +18,6 @@ cli_warn <- function(..., .envir = parent.frame()) { } #' @importFrom rlang caller_env -glubort <- - function(..., .sep = "", .envir = caller_env(), .call = .envir) { - rlang::abort(glue::glue(..., .sep = .sep, .envir = .envir), call = .call) - } - cat_line <- function(...) { cat(paste0(..., collapse = "\n"), "\n", sep = "") } diff --git a/man/layer-processors.Rd b/man/layer-processors.Rd index 0c6df8c5c..76e230a7b 100644 --- a/man/layer-processors.Rd +++ b/man/layer-processors.Rd @@ -20,7 +20,7 @@ extract_layers(x, ...) is_layer(x) -validate_layer(x, ..., arg = "`x`", call = caller_env()) +validate_layer(x, ..., arg = rlang::caller_arg(x), call = caller_env()) detect_layer(x, name, ...) From a83dfd7c78c2ed230f3cf48443681d7c9f8c64ec Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 13 May 2024 14:50:01 -0700 Subject: [PATCH 249/382] add back the s3 test, but order cols correctly --- tests/testthat/test-check_enough_train_data.R | 3 ++- tests/testthat/test-step_training_window.R | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/testthat/test-check_enough_train_data.R b/tests/testthat/test-check_enough_train_data.R index b162eeb61..02b9e35e4 100644 --- a/tests/testthat/test-check_enough_train_data.R +++ b/tests/testthat/test-check_enough_train_data.R @@ -74,7 +74,8 @@ test_that("check_enough_train_data outputs the correct recipe values", { expect_equal(nrow(p), 2 * n) expect_equal(ncol(p), 4L) - expect_named(p, c("time_value", "geo_value", "x", "y")) + expect_s3_class(p, "epi_df") + expect_named(p, c("geo_value", "time_value", "x", "y")) # order in epiprocess::new_epi_df expect_equal( p$time_value, rep(seq(as.Date("2020-01-01"), by = 1, length.out = n), times = 2) diff --git a/tests/testthat/test-step_training_window.R b/tests/testthat/test-step_training_window.R index 006be0936..9ec1e5982 100644 --- a/tests/testthat/test-step_training_window.R +++ b/tests/testthat/test-step_training_window.R @@ -16,8 +16,8 @@ test_that("step_training_window works with default n_recent", { expect_equal(nrow(p), 100L) expect_equal(ncol(p), 4L) - - expect_named(p, c("time_value", "geo_value", "x", "y")) + expect_s3_class(p, "epi_df") + expect_named(p, c("geo_value", "time_value", "x", "y")) # order in epiprocess::new_epi_df expect_equal( p$time_value, rep(seq(as.Date("2020-02-20"), as.Date("2020-04-09"), by = 1), times = 2) @@ -33,8 +33,8 @@ test_that("step_training_window works with specified n_recent", { expect_equal(nrow(p2), 10L) expect_equal(ncol(p2), 4L) - - expect_named(p2, c("time_value", "geo_value", "x", "y")) + expect_s3_class(p2, "epi_df") + expect_named(p2, c("geo_value", "time_value", "x", "y")) # order in epiprocess::new_epi_df expect_equal( p2$time_value, rep(seq(as.Date("2020-04-05"), as.Date("2020-04-09"), by = 1), times = 2) @@ -53,9 +53,9 @@ test_that("step_training_window does not proceed with specified new_data", { expect_equal(nrow(p3), 10L) expect_equal(ncol(p3), 4L) - + expect_s3_class(p3, "epi_df") # cols will be predictors, outcomes, time_value, geo_value - expect_named(p3, c("x", "y", "time_value", "geo_value")) + expect_named(p3, c("geo_value", "time_value", "x", "y")) # order in epiprocess::new_epi_df expect_equal( p3$time_value, rep(seq(as.Date("2020-01-01"), as.Date("2020-01-10"), by = 1), times = 1) @@ -83,8 +83,8 @@ test_that("step_training_window works with multiple keys", { expect_equal(nrow(p4), 12L) expect_equal(ncol(p4), 5L) - - expect_named(p4, c("time_value", "geo_value", "additional_key", "x", "y")) + expect_s3_class(p4, "epi_df") + expect_named(p4, c("geo_value", "time_value", "additional_key", "x", "y")) expect_equal( p4$time_value, rep(c( From ad3cb38b2b9cc1e539697c7a09d3ae177bc75f47 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 13 May 2024 14:50:33 -0700 Subject: [PATCH 250/382] export bake, but as a method --- NAMESPACE | 1 + R/epi_recipe.R | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index e4833d1ab..abc7e99d6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,6 +18,7 @@ S3method(augment,epi_workflow) S3method(autoplot,canned_epipred) S3method(autoplot,epi_workflow) S3method(bake,check_enough_train_data) +S3method(bake,epi_recipe) S3method(bake,step_epi_ahead) S3method(bake,step_epi_lag) S3method(bake,step_growth_rate) diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 3e5607dbb..e5182b99b 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -557,6 +557,28 @@ prep.epi_recipe <- function( x } +#' @export +bake.epi_recipe <- function(object, new_data, ..., composition = "epi_df") { + meta <- NULL + if (composition == "epi_df") { + if (is_epi_df(new_data)) { + meta <- attr(new_data, "metadata") + } else if (is_epi_df(object$template)) { + meta <- attr(object$template, "metadata") + } + composition <- "tibble" + } + new_data <- NextMethod("bake") + if (!is.null(meta)) { + new_data <- as_epi_df( + new_data, meta$geo_type, meta$time_type, meta$as_of, + meta$additional_metadata %||% list() + ) + } + new_data +} + + kill_levels <- function(x, keys) { for (i in which(names(x) %in% keys)) x[[i]] <- list(values = NA, ordered = NA) x From 55e0808cc35e5782c512e2a69e6959b9c962ca6b Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 13 May 2024 14:50:44 -0700 Subject: [PATCH 251/382] include a test for bake --- tests/testthat/test-bake-method.R | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/testthat/test-bake-method.R diff --git a/tests/testthat/test-bake-method.R b/tests/testthat/test-bake-method.R new file mode 100644 index 000000000..290893593 --- /dev/null +++ b/tests/testthat/test-bake-method.R @@ -0,0 +1,29 @@ +test_that("bake method works in all cases", { + edf <- case_death_rate_subset %>% + filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) + r <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) + + r2 <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) %>% + step_epi_naomit() + + b_null <- bake(prep(r, edf), NULL) + b_train <- bake(prep(r, edf), edf) + expect_s3_class(b_null, "epi_df") + expect_identical(b_null, b_train) + + b_baked <- bake(prep(r2, edf), edf) # leaves rows with NA in the response + # doesn't (because we "juice", so skip doesn't apply) + b_juiced <- bake(prep(r2, edf), NULL) + expect_equal(nrow(b_juiced), sum(complete.cases(b_train))) + expect_equal(nrow(b_baked), sum(complete.cases(b_train)) + 3 * 7) + + # check that the {recipes} behaves + expect_s3_class(bake(prep(r, edf), NULL, composition = "tibble"), "tbl_df") + expect_s3_class(bake(prep(r, edf), NULL, composition = "data.frame"), "data.frame") + # can't be a matrix because time_value/geo_value aren't numeric + expect_error(bake(prep(r, edf), NULL, composition = "matrix")) +}) From b12d656cf6f7afd4c064829decc59c08a2787d24 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 13 May 2024 14:58:55 -0700 Subject: [PATCH 252/382] pass tests --- tests/testthat/test-bake-method.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-bake-method.R b/tests/testthat/test-bake-method.R index 290893593..0e2746cf2 100644 --- a/tests/testthat/test-bake-method.R +++ b/tests/testthat/test-bake-method.R @@ -1,11 +1,11 @@ test_that("bake method works in all cases", { edf <- case_death_rate_subset %>% filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) - r <- epi_recipe(jhu) %>% + r <- epi_recipe(edf) %>% step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% step_epi_ahead(death_rate, ahead = 7) - r2 <- epi_recipe(jhu) %>% + r2 <- epi_recipe(edf) %>% step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% step_epi_ahead(death_rate, ahead = 7) %>% step_epi_naomit() From a98b354b766fc9de958ded4d3ed95fecb33c8735 Mon Sep 17 00:00:00 2001 From: Daniel McDonald Date: Mon, 13 May 2024 15:20:26 -0700 Subject: [PATCH 253/382] Update NEWS.md --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 5582803e3..c756cb34d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -43,6 +43,6 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `arx_fcast_epi_workflow()` and `arx_class_epi_workflow()` now default to `trainer = parsnip::logistic_reg()` to match their more canned versions. - add a `forecast()` method simplify generating forecasts -- remove unnecessary `bake.epi_recipe()` and `epi_juice()`. +- refactor `bake.epi_recipe()` and remove `epi_juice()`. - Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) From 7aac0da88c8f490bffdd0de954c088819accc4fd Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 13 May 2024 15:25:15 -0700 Subject: [PATCH 254/382] doc: rm juice from the website --- _pkgdown.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index a0edb663e..62f1cc25d 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -92,7 +92,6 @@ reference: contents: - starts_with("step_") - contains("bake") - - contains("juice") - title: Epi recipe verification checks contents: - check_enough_train_data From 6e58c05a063db0aab31395a6528bca6121c31cf5 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 14 Jun 2024 16:12:52 -0500 Subject: [PATCH 255/382] add missing rlang imports --- R/epipredict-package.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index b6681f982..4bd37c519 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,6 +1,7 @@ ## usethis namespace: start #' @importFrom tibble tibble -#' @importFrom rlang := !! %||% as_function global_env set_names +#' @importFrom rlang := !! %||% as_function global_env set_names !!! +#' @importFrom rlang is_logical is_true inject #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar From cb63333df63d07dd2d703be10f520b17cb79757f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 14 Jun 2024 16:32:58 -0500 Subject: [PATCH 256/382] redocument --- NAMESPACE | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index abc7e99d6..708c91e06 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -235,6 +235,7 @@ importFrom(magrittr,"%>%") importFrom(quantreg,rq) importFrom(recipes,bake) importFrom(recipes,prep) +importFrom(rlang,"!!!") importFrom(rlang,"!!") importFrom(rlang,"%@%") importFrom(rlang,"%||%") @@ -243,7 +244,10 @@ importFrom(rlang,abort) importFrom(rlang,as_function) importFrom(rlang,caller_env) importFrom(rlang,global_env) +importFrom(rlang,inject) +importFrom(rlang,is_logical) importFrom(rlang,is_null) +importFrom(rlang,is_true) importFrom(rlang,set_names) importFrom(smoothqr,smooth_qr) importFrom(stats,as.formula) From 38bf81d1b3802b37bc4fbc28ea4ad57c753ca9f1 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 14 Jun 2024 17:09:11 -0500 Subject: [PATCH 257/382] rewrap long vignette lines that annoy me (no need to check these) --- vignettes/articles/sliding.Rmd | 15 +- vignettes/articles/smooth-qr.Rmd | 258 ++++++++++++++++----- vignettes/articles/symptom-surveys.Rmd | 302 ++++++++++++++++++++----- vignettes/arx-classifier.Rmd | 180 ++++++++++++--- vignettes/epipredict.Rmd | 145 +++++++++--- vignettes/panel-data.Rmd | 7 +- vignettes/preprocessing-and-models.Rmd | 30 ++- 7 files changed, 739 insertions(+), 198 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index eaaa95d38..2d0ea3d86 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -27,12 +27,12 @@ library(purrr) A key function from the epiprocess package is `epi_slide()`, which allows the user to apply a function or formula-based computation over variables in an `epi_df` over a running window of `n` time steps (see the following `epiprocess` -vignette to go over the basics of the function: ["Slide a computation over -signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). +vignette to go over the basics of the function: +["Slide a computation over signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). The equivalent sliding method for an `epi_archive` object can be called by using the wrapper function `epix_slide()` (refer to the following vignette for the -basics of the function: ["Work with archive objects and data -revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The +basics of the function: +["Work with archive objects and data revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The key difference from `epi_slide()` is that it performs version-aware computations. That is, the function only uses data that would have been available as of time t for that reference time. @@ -171,7 +171,9 @@ in such forecasting. Including such factors as well as making enhancements such as correcting for outliers are some improvements one could make to this simple model.[^1] -[^1]: Note that, despite the above caveats, simple models like this tend to out-perform many far more complicated models in the online Covid forecasting due to those models high variance predictions. +[^1]: Note that, despite the above caveats, simple models like this tend to +out-perform many far more complicated models in the online Covid forecasting due +to those models high variance predictions. ### Example using case data from Canada @@ -327,7 +329,8 @@ fc <- bind_rows( ) %>% pivot_quantiles_wider(fc_.pred_distn) ``` -Now we can plot the results on top of the latest case rates. As before, we will only display and focus on the results for FL and CA for simplicity. +Now we can plot the results on top of the latest case rates. As before, we will +only display and focus on the results for FL and CA for simplicity. ```{r plot-ar-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index 95cfe083f..047f4f178 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -19,13 +19,23 @@ knitr::opts_chunk$set( # Introducing smooth quantile regression -Whereas other time-series forecasting examples in this package have used (direct) models for single horizons, in multi-period forecasting, the goal is to (directly) forecast several horizons simultaneously. This is useful in epidemiological applications where decisions are based on the trend of a signal. - -The idea underlying smooth quantile regression is that set forecast targets can be approximated by a smooth curve. This novel approach from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) enforces smoothness across the horizons and can be applied to point estimation by regression or interval prediction by quantile regression. Our focus in this vignette is the latter. +Whereas other time-series forecasting examples in this package have used +(direct) models for single horizons, in multi-period forecasting, the goal is to +(directly) forecast several horizons simultaneously. This is useful in +epidemiological applications where decisions are based on the trend of a signal. + +The idea underlying smooth quantile regression is that set forecast targets can +be approximated by a smooth curve. This novel approach from +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) +enforces smoothness across the +horizons and can be applied to point estimation by regression or interval +prediction by quantile regression. Our focus in this vignette is the latter. # Built-in function for smooth quantile regression and its parameters -The built-in smooth quantile regression function, `smooth_quantile_reg()` provides a model specification for smooth quantile regression that works under the tidymodels framework. It has the following parameters and default values: +The built-in smooth quantile regression function, `smooth_quantile_reg()` +provides a model specification for smooth quantile regression that works under +the tidymodels framework. It has the following parameters and default values: ```{r, eval = FALSE} smooth_quantile_reg( @@ -39,19 +49,37 @@ smooth_quantile_reg( For smooth quantile regression, the type of model or `mode` is regression. -The only `engine` that is currently supported is `smooth_qr()` from the [`smoothqr` package](https://dajmcdon.github.io/smoothqr/). +The only `engine` that is currently supported is `smooth_qr()` from the +[`smoothqr` package](https://dajmcdon.github.io/smoothqr/). -The `outcome_locations` indicate the multiple horizon (ie. ahead) values. These should be specified by the user. +The `outcome_locations` indicate the multiple horizon (ie. ahead) values. These +should be specified by the user. -The `quantile_levels` parameter is a vector of values that indicates the quantiles to be estimated. The default is the median (0.5 quantile). +The `quantile_levels` parameter is a vector of values that indicates the +quantiles to be estimated. The default is the median (0.5 quantile). -The `degree` parameter indicates the degree of the polynomials used for smoothing of the response. It should be no more than the number of aheads. If the degree is precisely equal to the number of aheads, then there is no smoothing. To better understand this parameter and how it works, we should look to its origins and how it is used in the model. +The `degree` parameter indicates the degree of the polynomials used for +smoothing of the response. It should be no more than the number of aheads. If +the degree is precisely equal to the number of aheads, then there is no +smoothing. To better understand this parameter and how it works, we should look +to its origins and how it is used in the model. # Model form -Smooth quantile regression is linear auto-regressive, with the key feature being a transformation that forces the coefficients to satisfy a smoothing constraint. The purpose of this is for each model coefficient to be a smooth function of ahead values, and so each such coefficient is set to be a linear combination of smooth basis functions (such as a spline or a polynomial). - -The `degree` parameter controls the number of these polynomials used. It should be no greater than the number of responses. This is a tuning parameter, and so it can be chosen by performing a grid search with cross-validation. Intuitively, $d = 1$ corresponds to the constant model, $d = 2$ gives straight line forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was found to work well in the tested applications (see Section 9 of [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723)), it is the default value. +Smooth quantile regression is linear auto-regressive, with the key feature being +a transformation that forces the coefficients to satisfy a smoothing constraint. +The purpose of this is for each model coefficient to be a smooth function of +ahead values, and so each such coefficient is set to be a linear combination of +smooth basis functions (such as a spline or a polynomial). + +The `degree` parameter controls the number of these polynomials used. It should +be no greater than the number of responses. This is a tuning parameter, and so +it can be chosen by performing a grid search with cross-validation. Intuitively, +$d = 1$ corresponds to the constant model, $d = 2$ gives straight line +forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was +found to work well in the tested applications (see Section 9 of +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723)), +it is the default value. # Demonstration of smooth quantile regression @@ -63,13 +91,18 @@ library(ggplot2) theme_set(theme_bw()) ``` -We will now apply smooth quantile regression on the real data used for COVID-19 forecasting. The built-in dataset we will use is a subset of JHU daily data on state cases and deaths. This sample data ranges from Dec. 31, 2020 to Dec. 31, 2021. +We will now apply smooth quantile regression on the real data used for COVID-19 +forecasting. The built-in dataset we will use is a subset of JHU daily data on +state cases and deaths. This sample data ranges from Dec. 31, 2020 to +Dec. 31, 2021. ```{r} edf <- case_death_rate_subset ``` -We will set the forecast date to be November 30, 2021 so that we can produce forecasts for target dates of 1 to 28 days ahead. We construct our test data, `tedf` from the days beyond this. +We will set the forecast date to be November 30, 2021 so that we can produce +forecasts for target dates of 1 to 28 days ahead. We construct our test data, +`tedf` from the days beyond this. ```{r} fd <- as.Date("2021-11-30") @@ -77,40 +110,64 @@ fd <- as.Date("2021-11-30") tedf <- edf %>% filter(time_value >= fd) ``` -We will use the most recent 3 months worth of data up to the forecast date for training. +We will use the most recent 3 months worth of data up to the forecast date for +training. ```{r} edf <- edf %>% filter(time_value < fd, time_value >= fd - 90L) ``` -And for plotting our focus will be on a subset of two states - California and Utah. +And for plotting our focus will be on a subset of two states - California and +Utah. ```{r} geos <- c("ut", "ca") ``` -Suppose that our goal with this data is to predict COVID-19 death rates at several horizons for each state. On day $t$, we want to predict new deaths $y$ that are $a = 1,\dots, 28$ days ahead at locations $j$ using the death rates from today, 1 week ago, and 2 weeks ago. So for each location, we'll predict the median (0.5 quantile) for each of the target dates by using +Suppose that our goal with this data is to predict COVID-19 death rates at +several horizons for each state. On day $t$, we want to predict new deaths $y$ +that are $a = 1,\dots, 28$ days ahead at locations $j$ using the death rates +from today, 1 week ago, and 2 weeks ago. So for each location, we'll predict the +median (0.5 quantile) for each of the target dates by using $$ \hat{y}_{j}(t+a) = \alpha(a) + \sum_{l = 0}^2 \beta_{l}(a) y_{j}(t - 7l) $$ -where $\beta_{l}(a) = \sum_{i=1}^d \theta_{il} h_i(a)$ is the smoothing constraint where ${h_1(a), \dots, h_d(a)}$ are the set of smooth basis functions and $d$ is a hyperparameter that manages the flexibility of $\beta_{l}(a)$. Remember that the goal is to have each $\beta_{l}(a)$ to be a smooth function of the aheads and that is achieved through imposing the smoothing constraint. - -Note that this model is intended to be simple and straightforward. Our only modification to this model is to add case rates as another predictive feature (we will leave it to the reader to incorporate additional features beyond this and the historical response values). We can update the basic model incorporate the $k = 2$ predictive features of case and death rates for each location j, $x_j(t) = (x_{j1}(t), x_{j2}(t))$ as follows: +where $\beta_{l}(a) = \sum_{i=1}^d \theta_{il} h_i(a)$ is the smoothing +constraint where ${h_1(a), \dots, h_d(a)}$ are the set of smooth basis functions +and $d$ is a hyperparameter that manages the flexibility of $\beta_{l}(a)$. +Remember that the goal is to have each $\beta_{l}(a)$ to be a smooth function of +the aheads and that is achieved through imposing the smoothing constraint. + +Note that this model is intended to be simple and straightforward. Our only +modification to this model is to add case rates as another predictive feature +(we will leave it to the reader to incorporate additional features beyond this +and the historical response values). We can update the basic model incorporate +the $k = 2$ predictive features of case and death rates for each location j, +$x_j(t) = (x_{j1}(t), x_{j2}(t))$ as follows: $$ \hat{y}_{j}(t+a) = \alpha(a) + \sum_{k = 1}^2 \sum_{l = 0}^2 \beta_{kl}(a) x_{jk}(t - 7l) $$ where $\beta_{kl}(a) = \sum_{i=1}^d \theta_{ikl} h_i(a)$. -Now, we will create our own forecaster from scratch by building up an `epi_workflow` (there is no canned forecaster that is currently available). Building our own forecaster allows for customization and control over the pre-processing and post-processing actions we wish to take. +Now, we will create our own forecaster from scratch by building up an +`epi_workflow` (there is no canned forecaster that is currently available). +Building our own forecaster allows for customization and control over the +pre-processing and post-processing actions we wish to take. -The pre-processing steps we take in our `epi_recipe` are simply to lag the predictor (by 0, 7, and 14 days) and lead the response by the multiple aheads specified by the function user. +The pre-processing steps we take in our `epi_recipe` are simply to lag the +predictor (by 0, 7, and 14 days) and lead the response by the multiple aheads +specified by the function user. -The post-processing layers we add to our `frosting` are nearly as simple. We first predict, unnest the prediction list-cols, omit NAs from them, and enforce that they are greater than 0. +The post-processing layers we add to our `frosting` are nearly as simple. We +first predict, unnest the prediction list-cols, omit NAs from them, and enforce +that they are greater than 0. -The third component of an to an `epi_workflow`, the model, is smooth quantile regression, which has three main arguments - the quantiles, aheads, and degree. +The third component of an to an `epi_workflow`, the model, is smooth quantile +regression, which has three main arguments - the quantiles, aheads, and degree. -After creating our `epi_workflow` with these components, we get our test data based on longest lag period and make the predictions. +After creating our `epi_workflow` with these components, we get our test data +based on longest lag period and make the predictions. We input our forecaster into a function for ease of use. @@ -149,7 +206,9 @@ smooth_fc <- function(x, aheads = 1:28, degree = 3L, quantiles = 0.5, fd) { } ``` -Notice that we allow the function user to specify the aheads, degree, and quantile as they may want to change these parameter values. We also allow for input of the forecast date as we fixed that at the onset of this demonstration. +Notice that we allow the function user to specify the aheads, degree, and +quantile as they may want to change these parameter values. We also allow for +input of the forecast date as we fixed that at the onset of this demonstration. We now can produce smooth quantile regression predictions for our problem: @@ -158,7 +217,9 @@ smooth_preds <- smooth_fc(edf, fd = fd) smooth_preds ``` -Most often, we're not going to want to limit ourselves to just predicting the median value as there is uncertainty about the predictions, so let's try to predict several different quantiles in addition to the median: +Most often, we're not going to want to limit ourselves to just predicting the +median value as there is uncertainty about the predictions, so let's try to +predict several different quantiles in addition to the median: ```{r, warning = FALSE} several_quantiles <- c(.1, .25, .5, .75, .9) @@ -167,9 +228,13 @@ smooth_preds <- smooth_fc(edf, quantiles = several_quantiles, fd = fd) smooth_preds ``` -We can see that we have different columns for the different quantile predictions. +We can see that we have different columns for the different quantile +predictions. -Let's visualize these results for the sample of two states. We will create a simple plotting function, under which the median predictions are an orange line and the surrounding quantiles are blue bands around this. For comparison, we will include the actual values over time as a black line. +Let's visualize these results for the sample of two states. We will create a +simple plotting function, under which the median predictions are an orange line +and the surrounding quantiles are blue bands around this. For comparison, we +will include the actual values over time as a black line. ```{r} plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { @@ -194,17 +259,24 @@ plot_preds <- function(preds, geos_to_plot = NULL, train_test_dat, fd) { } ``` -Since we would like to plot the actual death rates for these states over time, we bind the training and testing data together and input this into our plotting function as follows: +Since we would like to plot the actual death rates for these states over time, +we bind the training and testing data together and input this into our plotting +function as follows: ```{r, warning = FALSE} plot_preds(smooth_preds, geos, bind_rows(tedf, edf), fd) ``` -We can see that the predictions are smooth curves for each state, as expected when using smooth quantile regression. In addition while the curvature of the forecasts matches that of the truth, the forecasts do not look remarkably accurate. +We can see that the predictions are smooth curves for each state, as expected +when using smooth quantile regression. In addition while the curvature of the +forecasts matches that of the truth, the forecasts do not look remarkably +accurate. ## Varying the degrees parameter -We can test the impact of different degrees by using the `map()` function. Noting that this may take some time to run, let's try out all degrees from 1 to 7: +We can test the impact of different degrees by using the `map()` function. +Noting that this may take some time to run, let's try out all degrees from 1 +to 7: ```{r, warning = FALSE} smooth_preds_list <- map(1:7, ~ smooth_fc(edf, @@ -215,9 +287,12 @@ smooth_preds_list <- map(1:7, ~ smooth_fc(edf, mutate(degree = .x)) %>% list_rbind() ``` -One way to quantify the impact of these on the forecasting is to look at the mean absolute error (MAE) or mean squared error (MSE) over the degrees. We can select the degree that results in the lowest MAE. +One way to quantify the impact of these on the forecasting is to look at the +mean absolute error (MAE) or mean squared error (MSE) over the degrees. We can +select the degree that results in the lowest MAE. -Since the MAE compares the predicted values to the actual values, we will first join the test data to the predicted data for our comparisons: +Since the MAE compares the predicted values to the actual values, we will first +join the test data to the predicted data for our comparisons: ```{r, message = FALSE} tedf_sub <- tedf %>% rename(target_date = time_value, actual = death_rate) %>% @@ -236,7 +311,8 @@ smooth_preds_df_deg <- smooth_preds_list %>% smooth_preds_df_deg %>% arrange(mean) ``` -Instead of just looking at the raw numbers, let's create a simple line plot to visualize how the MAE changes over degrees for this data: +Instead of just looking at the raw numbers, let's create a simple line plot to +visualize how the MAE changes over degrees for this data: ```{r} ggplot(smooth_preds_df_deg, aes(degree, mean)) + @@ -245,26 +321,42 @@ ggplot(smooth_preds_df_deg, aes(degree, mean)) + ylab("Mean MAE") ``` -We can see that the degree that results in the lowest MAE is 3. Hence, we could pick this degree for future forecasting work on this data. +We can see that the degree that results in the lowest MAE is 3. Hence, we could +pick this degree for future forecasting work on this data. ## A brief comparison between smoothing and no smoothing -Now, we will briefly compare the results from using smooth quantile regression to those obtained without smoothing. The latter approach amounts to ordinary quantile regression to get predictions for the intended target date. The main drawback is that it ignores the fact that the responses all represent the same signal, just for different ahead values. In contrast, the smooth quantile regression approach utilizes this information about the data structure - the fact that the aheads in are not be independent of each other, but that they are naturally related over time by a smooth curve. - -To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. +Now, we will briefly compare the results from using smooth quantile regression +to those obtained without smoothing. The latter approach amounts to ordinary +quantile regression to get predictions for the intended target date. The main +drawback is that it ignores the fact that the responses all represent the same +signal, just for different ahead values. In contrast, the smooth quantile +regression approach utilizes this information about the data structure - the +fact that the aheads in are not be independent of each other, but that they are +naturally related over time by a smooth curve. + +To get the basic quantile regression results we can utilize the forecaster that +we've already built. We can simply set the degree to be the number of ahead +values to re-run the code without smoothing. ```{r, warning = FALSE} -baseline_preds <- smooth_fc(edf, degree = 28L, quantiles = several_quantiles, fd = fd) +baseline_preds <- smooth_fc( + edf, degree = 28L, quantiles = several_quantiles, fd = fd) ``` -And we can produce the corresponding plot to inspect the predictions obtained under the baseline model: +And we can produce the corresponding plot to inspect the predictions obtained +under the baseline model: ```{r, warning = FALSE} plot_preds(baseline_preds, geos, bind_rows(tedf, edf), fd) ``` -Unlike for smooth quantile regression, the resulting forecasts are not smooth curves, but rather jagged and irregular in shape. +Unlike for smooth quantile regression, the resulting forecasts are not smooth +curves, but rather jagged and irregular in shape. -For a more formal comparison between the two approaches, we could compare the test performance in terms of accuracy through calculating either the, MAE or MSE, where the performance measure of choice can be calculated over over all times and locations for each ahead value +For a more formal comparison between the two approaches, we could compare the +test performance in terms of accuracy through calculating either the, MAE or +MSE, where the performance measure of choice can be calculated over over all +times and locations for each ahead value ```{r, message = FALSE} baseline_preds_mae_df <- baseline_preds %>% @@ -297,27 +389,54 @@ mean(baseline_preds_mae_df$mean) mean(smooth_preds_mae_df$mean) ``` -The former shows that forecasts for the immediate future and for the distant future are more inaccurate for both models under consideration. The latter shows that the smooth quantile regression model and baseline models perform very similarly overall, with the smooth quantile regression model only slightly beating the baseline model in terms of overall average MAE. +The former shows that forecasts for the immediate future and for the distant +future are more inaccurate for both models under consideration. The latter shows +that the smooth quantile regression model and baseline models perform very +similarly overall, with the smooth quantile regression model only slightly +beating the baseline model in terms of overall average MAE. -One other commonly used metric is the Weighted Interval Score (WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. +One other commonly used metric is the Weighted Interval Score +(WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), +which a scoring rule that is based on the population quantiles. The point is to +score the interval, whereas MAE only evaluates the accuracy of the point +forecast. -Let $F$ be a forecast composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for target variable $Y$ is represented as follows ([McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): +Let $F$ be a forecast composed of predicted quantiles $q_{\tau}$ for the set of +quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for +target variable $Y$ is represented as follows +([McDonald etal., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): $$ WIS(F, Y) = 2 \sum_{\tau} \phi_{\tau} (Y - q_{\tau}) $$ -where $\phi_{\tau}(x) = \tau |x|$ for $x \geq 0$ and$\phi_{\tau}(x) = (1 - \tau) |x|$ for $x < 0$. +where $\phi_{\tau}(x) = \tau |x|$ for $x \geq 0$ +and$\phi_{\tau}(x) = (1 - \tau) |x|$ for $x < 0$. -This form is general as it can accommodate both symmetric and asymmetric quantile levels. If the quantile levels are symmetric, then we can alternatively express the WIS as a collection of central prediction intervals ($\ell_{\alpha}, u_{\alpha}$) parametrized by the exclusion probability $\alpha$: +This form is general as it can accommodate both symmetric and asymmetric +quantile levels. If the quantile levels are symmetric, then we can alternatively +express the WIS as a collection of central prediction intervals +($\ell_{\alpha}, u_{\alpha}$) parametrized by the exclusion probability +$\alpha$: $$ WIS(F, Y) = \sum_{\alpha} \{ (u_{\alpha} - \ell_{\alpha}) + 2 \cdot \text{dist}(Y, [\ell_{\alpha}, u_{\alpha}]) \} $$ -where $\text{dist}(a,S)$ is the smallest distance between point $a$ and an element of set $S$. - -While we implement the former representation, we mention this form because it shows the that the score can be decomposed into the addition of a sharpness component (first term in the summand) and an under/overprediction component (second term in the summand). This alternative representation is useful because from it, we more easily see the major limitation to the WIS, which is that the score tends to prioritize sharpness (how wide the interval is) relative to coverage (if the interval contains the truth). - -Now, we write a simple function for the first representation of the score that is compatible with the latest version of `epipredict` (adapted from the corresponding function in [smoothmpf-epipredict](https://github.com/dajmcdon/smoothmpf-epipredict)). The inputs for it are the actual and predicted values and the quantile levels. +where $\text{dist}(a,S)$ is the smallest distance between point $a$ and an +element of set $S$. + +While we implement the former representation, we mention this form because it +shows the that the score can be decomposed into the addition of a sharpness +component (first term in the summand) and an under/overprediction component +(second term in the summand). This alternative representation is useful because +from it, we more easily see the major limitation to the WIS, which is that the +score tends to prioritize sharpness (how wide the interval is) relative to +coverage (if the interval contains the truth). + +Now, we write a simple function for the first representation of the score that +is compatible with the latest version of `epipredict` (adapted from the +corresponding function in +[smoothmpf-epipredict](https://github.com/dajmcdon/smoothmpf-epipredict)). The +inputs for it are the actual and predicted values and the quantile levels. ```{r} wis_dist_quantile <- function(actual, values, quantile_levels) { @@ -329,13 +448,18 @@ wis_dist_quantile <- function(actual, values, quantile_levels) { } ``` -Next, we apply the `wis_dist_quantile` function to get a WIS score for each state on each target date. We then compute the mean WIS for each ahead value over all of the states. The results for each of the smooth and baseline forecasters are shown in a similar style line plot as we chose for MAE: +Next, we apply the `wis_dist_quantile` function to get a WIS score for each +state on each target date. We then compute the mean WIS for each ahead value +over all of the states. The results for each of the smooth and baseline +forecasters are shown in a similar style line plot as we chose for MAE: ```{r} smooth_preds_wis_df <- smooth_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), + several_quantiles) + ) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "smooth") @@ -343,7 +467,9 @@ smooth_preds_wis_df <- smooth_preds %>% baseline_preds_wis_df <- baseline_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), several_quantiles)) %>% + mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), + several_quantiles) + ) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "baseline") @@ -357,21 +483,33 @@ ggplot(preds_wis_df, aes(ahead, mean, color = type)) + scale_color_manual(values = c("#A69943", "#063970")) ``` -The results are consistent with what we saw for MAE: The forecasts for the near and distant future tend to be inaccurate for both models. The smooth quantile regression model only slightly outperforms the baseline model. +The results are consistent with what we saw for MAE: The forecasts for the near +and distant future tend to be inaccurate for both models. The smooth quantile +regression model only slightly outperforms the baseline model. -Though averaging the WIS score over location and time tends to be the primary aggregation scheme used in evaluation and model comparisons (see, for example, [McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)), we can also obtain a single numerical summary by averaging over the aheads, times, and locations: +Though averaging the WIS score over location and time tends to be the primary +aggregation scheme used in evaluation and model comparisons (see, for example, +[McDonald et al., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)), +we can also obtain a single numerical summary by averaging over the aheads, +times, and locations: ```{r} mean(baseline_preds_wis_df$mean) mean(smooth_preds_wis_df$mean) ``` -Overall, both perspectives agree that the smooth quantile regression model tends to perform only slightly better than the baseline model in terms of average WIS, illustrating the difficulty of this forecasting problem. +Overall, both perspectives agree that the smooth quantile regression model tends +to perform only slightly better than the baseline model in terms of average WIS, +illustrating the difficulty of this forecasting problem. # What we've learned in a nutshell -Smooth quantile regression is used in multi-period forecasting for predicting several horizons simultaneously with a single smooth curve. It operates under the key assumption that the future of the response can be approximated well by a smooth curve. +Smooth quantile regression is used in multi-period forecasting for predicting +several horizons simultaneously with a single smooth curve. It operates under +the key assumption that the future of the response can be approximated well by a +smooth curve. # Attribution -The information presented on smooth quantile regression is from [Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). +The information presented on smooth quantile regression is from +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). diff --git a/vignettes/articles/symptom-surveys.Rmd b/vignettes/articles/symptom-surveys.Rmd index 9558b80c5..e8d4a8228 100644 --- a/vignettes/articles/symptom-surveys.Rmd +++ b/vignettes/articles/symptom-surveys.Rmd @@ -20,23 +20,48 @@ knitr::opts_chunk$set( # Introduction -During the COVID-19 pandemic, Delphi ran COVID-19 symptom surveys through Facebook and Google. In these surveys, millions of -people in the US were asked whether they or the people that they know are experiencing COVID-like symptoms. This enabled the -calculation of a "% CLI-in-community" signal for counties across the US. This is simply an estimate of the percentage of people who know someone who is presently sick with a COVID-like illness. - -These surveys were valuable tools for monitoring the pandemic because they reported daily and not subject to reporting delays that plague other sources of data. - -In this vignette, we will look at whether the % CLI-in-community indicators from the Facebook and Google surveys improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The purpose here is to study and demonstrate the value of the Facebook and Google % CLI-in-community signals to add predictive power beyond what we can achieve with simple time series models trained on case rates alone. - -Note that this vignette was adapted from the following [Delphi blog post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), with the necessary modifications to enable the use of `epipredict`. The results may be different from those on the blog post (one reason is that we are exploring the use of a different forecaster and another is that we're using the most recent versions of the datasets). - -Now, we will delve into the forecasting problem set-up and code followed by a discussion of the results. +During the COVID-19 pandemic, Delphi ran COVID-19 symptom surveys through +Facebook and Google. In these surveys, millions of people in the US were asked +whether they or the people that they know are experiencing COVID-like symptoms. +This enabled the calculation of a "% CLI-in-community" signal for counties +across the US. This is simply an estimate of the percentage of people who know +someone who is presently sick with a COVID-like illness. + +These surveys were valuable tools for monitoring the pandemic because they +reported daily and not subject to reporting delays that plague other sources of +data. + +In this vignette, we will look at whether the % CLI-in-community indicators from +the Facebook and Google surveys improve the accuracy of short-term forecasts of +county-level COVID-19 case rates. The purpose here is to study and demonstrate +the value of the Facebook and Google % CLI-in-community signals to add +predictive power beyond what we can achieve with simple time series models +trained on case rates alone. + +Note that this vignette was adapted from the following [Delphi blog +post](https://delphi.cmu.edu/blog/2020/09/21/can-symptoms-surveys-improve-covid-19-forecasts/), +with the necessary modifications to enable the use of `epipredict`. The results +may be different from those on the blog post (one reason is that we are +exploring the use of a different forecaster and another is that we're using the +most recent versions of the datasets). + +Now, we will delve into the forecasting problem set-up and code followed by a +discussion of the results. ## Problem Setup -Our goal is to predict county-level COVID-19 case incidence rates for 1 and 2 weeks ahead. For this, we restrict our attention to the 442 counties that had at least 200 confirmed cases by May 14, 2020 (the end of the Google survey data) and in which both the Facebook and Google % CLI-in-community signals are available. +Our goal is to predict county-level COVID-19 case incidence rates for 1 and 2 +weeks ahead. For this, we restrict our attention to the 442 counties that had at +least 200 confirmed cases by May 14, 2020 (the end of the Google survey data) +and in which both the Facebook and Google % CLI-in-community signals are +available. -To set the notation, let $Y_{l,t}$ denote the smoothed COVID-19 case incidence rate for location (county) $l$ and day $t$. Let $F_{l,t}$ and $G_{l,t}$ denote the Facebook and Google % CLI-in-community signals, respectively, for location $l$ and time $t$. Note that we rescale all these signals from their given values in our API so that they are true proportions. We then evaluate the following four models: +To set the notation, let $Y_{l,t}$ denote the smoothed COVID-19 case incidence +rate for location (county) $l$ and day $t$. Let $F_{l,t}$ and $G_{l,t}$ denote +the Facebook and Google % CLI-in-community signals, respectively, for location +$l$ and time $t$. Note that we rescale all these signals from their given values +in our API so that they are true proportions. We then evaluate the following +four models: $$ \begin{align} @@ -46,31 +71,79 @@ h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) + \sum_{j = h(Y_{l,t+d}) &\approx \alpha + \sum_{j = 0}^2 \beta_j h(Y_{l,t-7j}) + \sum_{j = 0}^2 \gamma_j h(F_{l, t-7j}) + \sum_{j = 0}^2 \tau_j h(G_{l, t-7j}) \end{align} $$ -Here $d = 7$ or $d = 14$ depending on the target value, and $h$ is a transformation to be specified later. - -We'll call the first model the "Cases" model because it bases its predictions of future case rates on COVID-19 case rates (from 0, 1 and 2 weeks back). The second model is called "Cases + Facebook" because it additionally incorporates the current Facebook signal, and the Facebook signal from 1 and 2 weeks back. The third model, "Cases + Google", is exactly the same as the second but substitutes the Google signal instead of the Facebook one. The fourth and final model model, "Cases + Facebook + Google", uses both Facebook and Google signals. For each model, we use our canned autoregressive forecaster with quantile regression to forecast at time $t_0$ (and predict case rates at $t_0 + d$). We train over training over all locations, $l$ (all 442 counties), and all time $t$ that are within the most recent 14 days of data available up to and including time $t_0$. In other words, we use 14 trailing days for the training set. - -The forecasts are denoted by $\hat{Y}_{l, t_0 + d}$. To see how accurate these forecasts are, we use the scaled absolute error: +Here $d = 7$ or $d = 14$ depending on the target value, and $h$ is a +transformation to be specified later. + +We'll call the first model the "Cases" model because it bases its predictions of +future case rates on COVID-19 case rates (from 0, 1 and 2 weeks back). The +second model is called "Cases + Facebook" because it additionally incorporates +the current Facebook signal, and the Facebook signal from 1 and 2 weeks back. +The third model, "Cases + Google", is exactly the same as the second but +substitutes the Google signal instead of the Facebook one. The fourth and final +model model, "Cases + Facebook + Google", uses both Facebook and Google signals. +For each model, we use our canned autoregressive forecaster with quantile +regression to forecast at time $t_0$ (and predict case rates at $t_0 + d$). We +train over training over all locations, $l$ (all 442 counties), and all time $t$ +that are within the most recent 14 days of data available up to and including +time $t_0$. In other words, we use 14 trailing days for the training set. + +The forecasts are denoted by $\hat{Y}_{l, t_0 + d}$. To see how accurate these +forecasts are, we use the scaled absolute error: $$ \frac{| \hat{Y}_{l, t_0 + d} - Y_{l, t_0 + d} |} {| Y_{l, t_0} - Y_{l, t_0 + d} |} $$ -where the error in the denominator is the strawman model error. This model simply uses the most recent case rate for future predictions. You may recognize this as an application of the flatline forecaster from `epipredict`. +where the error in the denominator is the strawman model error. This model +simply uses the most recent case rate for future predictions. You may recognize +this as an application of the flatline forecaster from `epipredict`. -We normalize in this manner for two reasons. First, since the scaled error is the fraction improvement over the strawman’s error, we get an interpretable scale, where numebrs like 0.8 or 0.9 are favorable, and numbers like 2 or 5 are increasingly disastrous. Second, in such problems we should expect considerable county-to-county variability in the forecasting difficulty. Normalizing by the strawman's error helps to adjust for this so that the results on aggregate are not dominated by the county-to-county differences. +We normalize in this manner for two reasons. First, since the scaled error is +the fraction improvement over the strawman’s error, we get an interpretable +scale, where numebrs like 0.8 or 0.9 are favorable, and numbers like 2 or 5 are +increasingly disastrous. Second, in such problems we should expect considerable +county-to-county variability in the forecasting difficulty. Normalizing by the +strawman's error helps to adjust for this so that the results on aggregate are +not dominated by the county-to-county differences. ## Transformations -To help stabilize the variance of the case, Facebook and Google data, we chose to use the logit transformation on their proportions. In actuality, we use a "padded" version $h(x) = \log (\frac{x+a}{1-x+a})$ such that the numerator and denominator are pushed away from zero by a small constant, $a = 0.01$. An alternative to the logit transform is using a log transform (as in $h(x) = \log (x+a)$ where $a$ is for padding). Note that such variance-stabilizing transformations are used in the model fitting. When we calculate the errors, we back-transform the values for comparison using the inverse transform $h^{-1}$ so that we may calculate them on the original scale. +To help stabilize the variance of the case, Facebook and Google data, we chose +to use the logit transformation on their proportions. In actuality, we use a +"padded" version $h(x) = \log (\frac{x+a}{1-x+a})$ such that the numerator and +denominator are pushed away from zero by a small constant, $a = 0.01$. An +alternative to the logit transform is using a log transform (as in +$h(x) = \log (x+a)$ where $a$ is for padding). Note that such +variance-stabilizing transformations are used in the model fitting. When we +calculate the errors, we back-transform the values for comparison using the +inverse transform $h^{-1}$ so that we may calculate them on the original scale. ## Forecasting Code -The code below marches the forecast date $t_0$ forward, one day at a time for the nine forecasting dates for which the four models can all be fit (May 6, 2020 to May 14, 2020). Then, it fits the models, makes predictions 7 and 14 days ahead (as permissible by the data), and records the errors. - -There are a number of benefits to using `epipredict` over writing the code from scratch to fit and predict under each of the models. First, we do not have to reformat the data for input into a model or concern ourselves with its unique interface. We instead work under unifying interface to streamline the modelling process. Second, we avoid having to write our own function to append shift values (leads or lags). This is done for us under-the-hood in the `arx_forecaster()` function. You can see this in the forecaster output by inspecting the `step_epi_lag()` and `step_epi_ahead()` pre-processing steps in the `epi_workflow`. Third, we only need one for loop for the forecast dates (and not a second loop for the different aheads) as we can easily use `map()` with the `arx_forecaster()` over the different ahead values, as we’ve done before. - -However, there are some trade-offs to bear in mind. For instance, since we are using a canned arx forecaster, we are not able to easily modify and add steps such as that for signal transformations to the pre-processing (this is pre-specified as part of using a canned forecaster). If we were to code-up our own forecaster under the `epipredict` framework, we could easily add steps to re-scale and transform the signals to our `epi_recipe`. This would make the code more succinct and self-contained. +The code below marches the forecast date $t_0$ forward, one day at a time for +the nine forecasting dates for which the four models can all be fit (May 6, 2020 +to May 14, 2020). Then, it fits the models, makes predictions 7 and 14 days +ahead (as permissible by the data), and records the errors. + +There are a number of benefits to using `epipredict` over writing the code from +scratch to fit and predict under each of the models. First, we do not have to +reformat the data for input into a model or concern ourselves with its unique +interface. We instead work under unifying interface to streamline the modelling +process. Second, we avoid having to write our own function to append shift +values (leads or lags). This is done for us under-the-hood in the +`arx_forecaster()` function. You can see this in the forecaster output by +inspecting the `step_epi_lag()` and `step_epi_ahead()` pre-processing steps in +the `epi_workflow`. Third, we only need one for loop for the forecast dates (and +not a second loop for the different aheads) as we can easily use `map()` with +the `arx_forecaster()` over the different ahead values, as we’ve done before. + +However, there are some trade-offs to bear in mind. For instance, since we are +using a canned arx forecaster, we are not able to easily modify and add steps +such as that for signal transformations to the pre-processing (this is +pre-specified as part of using a canned forecaster). If we were to code-up our +own forecaster under the `epipredict` framework, we could easily add steps to +re-scale and transform the signals to our `epi_recipe`. This would make the code +more succinct and self-contained. ```{r, message = FALSE, warning = FALSE} library(epidatr) @@ -305,9 +378,17 @@ out_df <- do.call(rbind, out_list) ## Results: All Four Models -Since there are only two common forecast dates available for the four models for the 14-day-ahead forecasts (May 13 and May 14, 2020), we skip studying the 14-day-ahead forecast results in this four-way model discussion. +Since there are only two common forecast dates available for the four models for +the 14-day-ahead forecasts (May 13 and May 14, 2020), we skip studying +the 14-day-ahead forecast results in this four-way model discussion. -Below we compute the median scaled errors for each of the four models over the 9-day test period. We can see that adding either or both of the survey signals improves on the median scaled error of the model that uses cases only, with the biggest gain achieved by the "Cases + Google" model. We can also see that the median scaled errors are all close to 1 (with all but that from the "Cases + Google" and "Cases + Facebook + Google" models exceeding 1), which speaks to the difficulty of the forecasting problem. +Below we compute the median scaled errors for each of the four models over +the 9-day test period. We can see that adding either or both of the survey +signals improves on the median scaled error of the model that uses cases only, +with the biggest gain achieved by the "Cases + Google" model. We can also see +that the median scaled errors are all close to 1 (with all but that from the +"Cases + Google" and "Cases + Facebook + Google" models exceeding 1), which +speaks to the difficulty of the forecasting problem. ```{r} library(dplyr) @@ -357,7 +438,16 @@ knitr::kable( ) ``` $$\\[0.01in]$$ -Are these differences in median scaled errors significant? Some basic hypothesis testing suggests that some probably are: Below we conduct a sign test for whether the difference in the "Cases" model’s scaled error and each other model’s scaled error is centered at zero. The sign test is run on the 9 test days x 442 counties = 3978 pairs of scaled errors. The p-value from the "Cases" versus "Cases + Google" test is tiny and well below a cutoff of 0.01. In contrast, the p-values from the "Cases" versus "Cases + Facebook" and the "Cases" versus "Cases + Facebook + Google" tests are much bigger and exceed this cutoff, suggesting that the Facebook survey is not adding as much for this situation (meaning the time and ahead considered, etc.) +Are these differences in median scaled errors significant? Some basic hypothesis +testing suggests that some probably are: Below we conduct a sign test for +whether the difference in the "Cases" model’s scaled error and each other +model’s scaled error is centered at zero. The sign test is run on the 9 test +days x 442 counties = 3978 pairs of scaled errors. The p-value from the "Cases" +versus "Cases + Google" test is tiny and well below a cutoff of 0.01. In +contrast, the p-values from the "Cases" versus "Cases + Facebook" and the +"Cases" versus "Cases + Facebook + Google" tests are much bigger and exceed this +cutoff, suggesting that the Facebook survey is not adding as much for this +situation (meaning the time and ahead considered, etc.) ```{r} # Compute p-values using the sign test against a one-sided alternative, for @@ -393,7 +483,17 @@ knitr::kable( ) ``` $$\\[0.01in]$$ -We should take these test results with a grain of salt because the sign test assumes independence of observations, which clearly cannot be true given the spatiotemporal structure of our forecasting problem. To mitigate the dependence across time (which intuitively seems to matter more than that across space), we recomputed these tests in a stratified way, where for each day we run a sign test on the scaled errors between two models over all 442 counties. The results are plotted as histograms below; the "Cases + Google" and (to a lesser extent) the "Cases + Facebook + Google" models appear to deliver some decently small p-values, but this is not very evident with the "Cases + Facebook" model. Taking a larger sample size (of more than nine test days) would be a natural next step to take to see if these results persist. +We should take these test results with a grain of salt because the sign test +assumes independence of observations, which clearly cannot be true given the +spatiotemporal structure of our forecasting problem. To mitigate the dependence +across time (which intuitively seems to matter more than that across space), we +recomputed these tests in a stratified way, where for each day we run a sign +test on the scaled errors between two models over all 442 counties. The results +are plotted as histograms below; the "Cases + Google" and (to a lesser extent) +the "Cases + Facebook + Google" models appear to deliver some decently small +p-values, but this is not very evident with the "Cases + Facebook" model. Taking +a larger sample size (of more than nine test days) would be a natural next step +to take to see if these results persist. ```{r} # Red, blue (similar to ggplot defaults), then yellow @@ -417,7 +517,14 @@ ggplot(res_dif4 %>% ## Results: First Two Models -One way to get a larger sample size with the current data is to compare a subset of the models. Therefore, next we focus on comparing results between the "Cases" and "Cases + Facebook" models only. Restricting to common forecast dates for these two models yields a much longer test period for the 7 and 14-day-ahead forecasts: May 20 through August 27, 2020. We make the code to compare these two models a simple function so that we have the option to use it over different dates or aheads (in particular, this function will be useful for the next section where we explore several ahead values): +One way to get a larger sample size with the current data is to compare a subset +of the models. Therefore, next we focus on comparing results between the "Cases" +and "Cases + Facebook" models only. Restricting to common forecast dates for +these two models yields a much longer test period for the 7 and 14-day-ahead +forecasts: May 20 through August 27, 2020. We make the code to compare these two +models a simple function so that we have the option to use it over different +dates or aheads (in particular, this function will be useful for the next +section where we explore several ahead values): ```{r} case_fb_mods <- function(forecast_dates, leads) { @@ -510,7 +617,9 @@ leads <- c(7, 14) res <- case_fb_mods(dates, leads) ``` -The median scaled errors over the test period are computed and reported below. Now we see a decent improvement in median scaled error for the "Cases + Facebook" model, which is true for both 7-day-ahead and 14-day-ahead forecasts. +The median scaled errors over the test period are computed and reported below. +Now we see a decent improvement in median scaled error for the "Cases + +Facebook" model, which is true for both 7-day-ahead and 14-day-ahead forecasts. ```{r} # For just models 1 and 2, then calculate the scaled @@ -555,7 +664,19 @@ knitr::kable( ``` $$\\[0.01in]$$ -Thanks to the extended length of the test period, we can also plot the trajectories of the median scaled errors over time, as we do below, with the left plot concerning 7-day-ahead forecasts, and the right 14-day-ahead forecasts. These plots reveal something at once interesting and bothersome: the median scaled errors are quite volatile over time, and for some periods in July, forecasting became much harder, with the scaled errors reaching above 1.5 for 7-day-ahead forecasts, and above 1.8 for 14-day-ahead forecasts. Furthermore, we can see a clear visual difference between the median scaled errors from the "Cases + Facebook" model in red and the "Cases" model in black. The former appears to be below the latter during periods with low median scaled errors and above during periods where forecasting becomes hard and the scaled errors shoot above 1. This suggests that the Facebook signal may be more useful to incorporate during periods of time where forecasting is easier. +Thanks to the extended length of the test period, we can also plot the +trajectories of the median scaled errors over time, as we do below, with the +left plot concerning 7-day-ahead forecasts, and the right 14-day-ahead +forecasts. These plots reveal something at once interesting and bothersome: the +median scaled errors are quite volatile over time, and for some periods in July, +forecasting became much harder, with the scaled errors reaching above 1.5 +for 7-day-ahead forecasts, and above 1.8 for 14-day-ahead forecasts. +Furthermore, we can see a clear visual difference between the median scaled +errors from the "Cases + Facebook" model in red and the "Cases" model in black. +The former appears to be below the latter during periods with low median scaled +errors and above during periods where forecasting becomes hard and the scaled +errors shoot above 1. This suggests that the Facebook signal may be more useful +to incorporate during periods of time where forecasting is easier. ```{r} # Plot median errors as a function of time, for models 1 and 2, and both 7 and @@ -575,7 +696,14 @@ ggplot( theme(legend.position = "bottom", legend.title = element_blank()) ``` -The fact that the lines are non-coincident suggests that the results we’re seeing here are likely to be significantly different, though it’s hard to say definitively given the complicated dependence structure present in the data. Below we perform a sign test for whether the difference in scaled errors from the "Cases" and "Cases + Facebook" models is centered at zero. The p-values are essentially zero, given the large sample sizes: 98 test days in total for the 7-day-ahead forecasts and 91 days for the 14-day-ahead forecasts (times 442 counties for each day). +The fact that the lines are non-coincident suggests that the results we’re +seeing here are likely to be significantly different, though it’s hard to say +definitively given the complicated dependence structure present in the data. +Below we perform a sign test for whether the difference in scaled errors from +the "Cases" and "Cases + Facebook" models is centered at zero. The p-values are +essentially zero, given the large sample sizes: 98 test days in total for +the 7-day-ahead forecasts and 91 days for the 14-day-ahead forecasts (times 442 +counties for each day). ```{r} # Compute p-values using the sign test against a one-sided alternative, just @@ -605,7 +733,8 @@ knitr::kable( ``` $$\\[0.01in]$$ -If we stratify and recompute p-values by forecast date, the bulk of p-values are quite small. +If we stratify and recompute p-values by forecast date, the bulk of p-values are +quite small. ```{r} ggplot(res_dif2 %>% @@ -624,13 +753,30 @@ ggplot(res_dif2 %>% theme(legend.position = "none") ``` -This exploration illustrates an important point: The test period should be chosen so that it is large enough in size to see differences (if there are any) between the models under comparison. While we did not observe significant differences between the "Cases" and "Cases + Facebook" models when the test period was small at 9 days, we did observe a significant difference over this extended test period of nearly 100 days. +This exploration illustrates an important point: The test period should be +chosen so that it is large enough in size to see differences (if there are any) +between the models under comparison. While we did not observe significant +differences between the "Cases" and "Cases + Facebook" models when the test +period was small at 9 days, we did observe a significant difference over this +extended test period of nearly 100 days. ## Varying the Number of Days Ahead -Statistical significance refers to whether an effect exists (as opposed to occurring by chance), while practical significance refers to the magnitude of the effect and whether it is meaningful in the real world. Hypothesis tests, such as the sign tests we conducted above, tell us whether the differences in errors are statistically significant, but not about their practical significance. For example, for 7-day-ahead forecasts, what does an improvement of 0.019 units on the scaled error scale really mean, when comparing the "Cases + Facebook" model to the "Cases" model? Is this a meaningful gain in practice? - -To answer questions such as these, we can look at the way that the median scaled errors behave as a function of the number of days ahead. Previously, we considered forecasting case rates just 7 and 14 days ahead. Now we will systematically examine 5 through 20 days ahead (the key difference in the code being that we use `leads = 5:20`). Note that running the code for this many leads may take a while. +Statistical significance refers to whether an effect exists (as opposed to +occurring by chance), while practical significance refers to the magnitude of +the effect and whether it is meaningful in the real world. Hypothesis tests, +such as the sign tests we conducted above, tell us whether the differences in +errors are statistically significant, but not about their practical +significance. For example, for 7-day-ahead forecasts, what does an improvement +of 0.019 units on the scaled error scale really mean, when comparing the "Cases ++ Facebook" model to the "Cases" model? Is this a meaningful gain in practice? + +To answer questions such as these, we can look at the way that the median scaled +errors behave as a function of the number of days ahead. Previously, we +considered forecasting case rates just 7 and 14 days ahead. Now we will +systematically examine 5 through 20 days ahead (the key difference in the code +being that we use `leads = 5:20`). Note that running the code for this many +leads may take a while. ```{r} # Consider a number of leads @@ -639,7 +785,10 @@ leads <- 5:20 res <- case_fb_mods(dates, leads) ``` -We obtain and plot the median scaled errors for the "Cases" and "Cases + Facebook" models for different number of days ahead for the forecast target. This is done over May 20 through August 27 for the forecast dates that are common to the two models. +We obtain and plot the median scaled errors for the "Cases" and "Cases + +Facebook" models for different number of days ahead for the forecast target. +This is done over May 20 through August 27 for the forecast dates that are +common to the two models. ```{r} err_by_lead <- res %>% @@ -676,22 +825,63 @@ ggplot(err_by_lead, aes(x = lead, y = err)) + theme_bw() # + theme(legend.position = "bottom", legend.title = element_blank()) ``` -A first glance shows that the "Cases + Facebook" model, in red, gives better median scaled errors at all ahead values. Furthermore, the vertical gap between the two curves is consistently in the range of what we were seeing before (for 7 and 14 days ahead), around 0.02 units on the scaled error scale. - -But if we look at this from a different angle, by considering the horizontal gap between the curves, then we can infer something quite a bit more interesting: For 7-day-ahead forecasts, the median scaled error of the "Cases" model (indicated by the horizontal gray line) is comparable to that of 12-day-ahead forecasts from the "Cases + Facebook" model. So using the % CLI-in-community signal from our Facebook survey buys us around 4 extra days of lead time for this forecasting problem, which is striking. As you might imagine, different forecast targets yield different lead times (for 14-day-ahead forecasts, it appears to be around 2 to 3 days of lead time), but the added value of the survey signal is clear throughout. +A first glance shows that the "Cases + Facebook" model, in red, gives better +median scaled errors at all ahead values. Furthermore, the vertical gap between +the two curves is consistently in the range of what we were seeing before (for 7 +and 14 days ahead), around 0.02 units on the scaled error scale. + +But if we look at this from a different angle, by considering the horizontal gap +between the curves, then we can infer something quite a bit more interesting: +For 7-day-ahead forecasts, the median scaled error of the "Cases" model +(indicated by the horizontal gray line) is comparable to that of 12-day-ahead +forecasts from the "Cases + Facebook" model. So using the % CLI-in-community +signal from our Facebook survey buys us around 4 extra days of lead time for +this forecasting problem, which is striking. As you might imagine, different +forecast targets yield different lead times (for 14-day-ahead forecasts, it +appears to be around 2 to 3 days of lead time), but the added value of the +survey signal is clear throughout. ## Wrap-Up -In this vignette, we've shown that either of the Facebook or Google % CLI-in-community signals can improve the accuracy of short-term forecasts of county-level COVID-19 case rates. The significance of these improvements is more apparent with the Facebook signal, thanks to the much larger test period. With either signal, the magnitude of the improvement offered seems modest but nontrivial, especially because the forecasting problem is so difficult in the first place. - -We reiterate that this was just a demo. Our analysis was fairly simple and lacks a few qualities that we’d expect in a truly comprehensive, realistic forecasting analysis. For reflection, let's discuss three possible areas to improve: - -1. The models we considered are simple autoregressive structures from standard time series and could be improved in various ways (including, considering other relevant dimensions like mobility measures, county health metrics, etc.). - -2. The forecasts we produced are point rather than distributional forecasts. That is, we predict a single number, rather than an entire distribution for what happens 7 and 14 days ahead. Distributional forecasts portray uncertainty in a transparent way, which is important in practice. - -3. The way we trained our forecast models does not account for data latency and revisions, which are critical issues. For each (retrospective) forecast date, $t_0$, we constructed forecasts by training on data that we fetched from the API today, "as of" the day of writing this, and not "as of" the forecast date. This matters because nearly all signals are subject to latency and go through multiple revisions. - -On the flip side, our example here was not that far away from being realistic. The models we examined are actually not too different from Delphi’s forecasters in production. Also, the way we fit the quantile regression models in the code extends immediately to multiple quantile regression (this just requires changing the parameter `quantile_levels` in the call to `quantile_reg()`). And lastly, it’s fairly easy to change the data acquisition step in the code so that data gets pulled "as of" the forecast date (this requires specifying the parameter `as_of` in the call to `pub_covidcast()` and should change per forecast date). - -Hopefully these preliminary findings have gotten you excited about the possible uses of this symptom survey data. For further practice, try your hand at implementing the suggested improvements or develop your own novel analytic approach to extract insights from this data. +In this vignette, we've shown that either of the Facebook or Google % +CLI-in-community signals can improve the accuracy of short-term forecasts of +county-level COVID-19 case rates. The significance of these improvements is more +apparent with the Facebook signal, thanks to the much larger test period. With +either signal, the magnitude of the improvement offered seems modest but +nontrivial, especially because the forecasting problem is so difficult in the +first place. + +We reiterate that this was just a demo. Our analysis was fairly simple and lacks +a few qualities that we’d expect in a truly comprehensive, realistic forecasting +analysis. For reflection, let's discuss three possible areas to improve: + +1. The models we considered are simple autoregressive structures from standard + time series and could be improved in various ways (including, considering + other relevant dimensions like mobility measures, county health metrics, + etc.). + +2. The forecasts we produced are point rather than distributional forecasts. + That is, we predict a single number, rather than an entire distribution for + what happens 7 and 14 days ahead. Distributional forecasts portray + uncertainty in a transparent way, which is important in practice. + +3. The way we trained our forecast models does not account for data latency and + revisions, which are critical issues. For each (retrospective) forecast + date, $t_0$, we constructed forecasts by training on data that we fetched + from the API today, "as of" the day of writing this, and not "as of" the + forecast date. This matters because nearly all signals are subject to + latency and go through multiple revisions. + +On the flip side, our example here was not that far away from being realistic. +The models we examined are actually not too different from Delphi’s forecasters +in production. Also, the way we fit the quantile regression models in the code +extends immediately to multiple quantile regression (this just requires changing +the parameter `quantile_levels` in the call to `quantile_reg()`). And lastly, +it’s fairly easy to change the data acquisition step in the code so that data +gets pulled "as of" the forecast date (this requires specifying the parameter +`as_of` in the call to `pub_covidcast()` and should change per forecast date). + +Hopefully these preliminary findings have gotten you excited about the possible +uses of this symptom survey data. For further practice, try your hand at +implementing the suggested improvements or develop your own novel analytic +approach to extract insights from this data. diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 690844c40..089f000df 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -29,9 +29,18 @@ library(epipredict) ## Introducing the ARX classifier -The `arx_classifier()` is an autoregressive classification model for `epi_df` data that is used to predict a discrete class for each case under consideration. It is a direct forecaster in that it estimates the classes at a specific horizon or ahead value. - -To get a sense of how the `arx_classifier()` works, let's consider a simple example with minimal inputs. For this, we will use the built-in `case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take a subset of data for five states over June 4, 2021 to December 31, 2021. Our objective is to predict whether the case rates are increasing when considering the 0, 7 and 14 day case rates: +The `arx_classifier()` is an autoregressive classification model for `epi_df` +data that is used to predict a discrete class for each case under consideration. +It is a direct forecaster in that it estimates the classes at a specific horizon +or ahead value. + +To get a sense of how the `arx_classifier()` works, let's consider a simple +example with minimal inputs. For this, we will use the built-in +`case_death_rate_subset` that contains confirmed COVID-19 cases and deaths from +JHU CSSE for all states over Dec 31, 2020 to Dec 31, 2021. From this, we'll take +a subset of data for five states over June 4, 2021 to December 31, 2021. Our +objective is to predict whether the case rates are increasing when considering +the 0, 7 and 14 day case rates: ```{r} jhu <- case_death_rate_subset %>% @@ -49,17 +58,39 @@ out <- arx_classifier(jhu, out$predictions ``` -The key takeaway from the predictions is that there are two prediction classes: (-Inf, 0.25] and (0.25, Inf). This is because for our goal of classification the classes must be discrete. The discretization of the real-valued outcome is controlled by the `breaks` argument, which defaults to 0.25. Such breaks will be automatically extended to cover the entire real line. For example, the default break of 0.25 is silently extended to breaks = c(-Inf, .25, Inf) and, therefore, results in two classes: [-Inf, 0.25] and (0.25, Inf). These two classes are used to discretize the outcome. The conversion of the outcome to such classes is handled internally. So if discrete classes already exist for the outcome in the `epi_df`, then we recommend to code a classifier from scratch using the `epi_workflow` framework for more control. - -The `trainer` is a `parsnip` model describing the type of estimation such that `mode = "classification"` is enforced. The two typical trainers that are used are `parsnip::logistic_reg()` for two classes or `parsnip::multinom_reg()` for more than two classes. +The key takeaway from the predictions is that there are two prediction classes: +(-Inf, 0.25] and (0.25, Inf). This is because for our goal of classification +the classes must be discrete. The discretization of the real-valued outcome is +controlled by the `breaks` argument, which defaults to 0.25. Such breaks will be +automatically extended to cover the entire real line. For example, the default +break of 0.25 is silently extended to breaks = c(-Inf, .25, Inf) and, therefore, +results in two classes: [-Inf, 0.25] and (0.25, Inf). These two classes are +used to discretize the outcome. The conversion of the outcome to such classes is +handled internally. So if discrete classes already exist for the outcome in the +`epi_df`, then we recommend to code a classifier from scratch using the +`epi_workflow` framework for more control. + +The `trainer` is a `parsnip` model describing the type of estimation such that +`mode = "classification"` is enforced. The two typical trainers that are used +are `parsnip::logistic_reg()` for two classes or `parsnip::multinom_reg()` for +more than two classes. ```{r} workflows::extract_spec_parsnip(out$epi_workflow) ``` -From the parsnip model specification, we can see that the trainer used is logistic regression, which is expected for our binary outcome. More complicated trainers like `parsnip::naive_Bayes()` or `parsnip::rand_forest()` may also be used (however, we will stick to the basics in this gentle introduction to the classifier). +From the parsnip model specification, we can see that the trainer used is +logistic regression, which is expected for our binary outcome. More complicated +trainers like `parsnip::naive_Bayes()` or `parsnip::rand_forest()` may also be +used (however, we will stick to the basics in this gentle introduction to the +classifier). -If you use the default trainer of logistic regression for binary classification and you decide against using the default break of 0.25, then you should only input one break so that there are two classification bins to properly dichotomize the outcome. For example, let's set a break of 0.5 instead of relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: +If you use the default trainer of logistic regression for binary classification +and you decide against using the default break of 0.25, then you should only +input one break so that there are two classification bins to properly +dichotomize the outcome. For example, let's set a break of 0.5 instead of +relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` +argument in `arx_class_args_list()` as follows: ```{r} out_break_0.5 <- arx_classifier(jhu, @@ -72,18 +103,52 @@ out_break_0.5 <- arx_classifier(jhu, out_break_0.5$predictions ``` -Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, Inf). -See `help(arx_class_args_list)` for other available modifications. - -Additional arguments that may be supplied to `arx_class_args_list()` include the expected `lags` and `ahead` arguments for an autoregressive-type model. These have default values of 0, 7, and 14 days for the lags of the predictors and 7 days ahead of the forecast date for predicting the outcome. There is also `n_training` to indicate the upper bound for the number of training rows per key. If you would like some practice with using this, then remove the filtering command to obtain data within "2021-06-04" and "2021-12-31" and instead set `n_training` to be the number of days between these two dates, inclusive of the end points. The end results should be the same. In addition to `n_training`, there are `forecast_date` and `target_date` to specify the date that the forecast is created and intended, respectively. We will not dwell on such arguments here as they are not unique to this classifier or absolutely essential to understanding how it operates. The remaining arguments will be discussed organically, as they are needed to serve our purposes. For information on any remaining arguments that are not discussed here, please see the function documentation for a complete list and their definitions. +Indeed, we can observe that the two `.pred_class` are now (-Inf, 0.5] and (0.5, +Inf). See `help(arx_class_args_list)` for other available modifications. + +Additional arguments that may be supplied to `arx_class_args_list()` include the +expected `lags` and `ahead` arguments for an autoregressive-type model. These +have default values of 0, 7, and 14 days for the lags of the predictors and 7 +days ahead of the forecast date for predicting the outcome. There is also +`n_training` to indicate the upper bound for the number of training rows per +key. If you would like some practice with using this, then remove the filtering +command to obtain data within "2021-06-04" and "2021-12-31" and instead set +`n_training` to be the number of days between these two dates, inclusive of the +end points. The end results should be the same. In addition to `n_training`, +there are `forecast_date` and `target_date` to specify the date that the +forecast is created and intended, respectively. We will not dwell on such +arguments here as they are not unique to this classifier or absolutely essential +to understanding how it operates. The remaining arguments will be discussed +organically, as they are needed to serve our purposes. For information on any +remaining arguments that are not discussed here, please see the function +documentation for a complete list and their definitions. ## Example of using the ARX classifier -Now, to demonstrate the power and utility of this built-in arx classifier, we will loosely adapt the classification example that was written from scratch in `vignette("preprocessing-and-models")`. However, to keep things simple and not merely a direct translation, we will only consider two prediction categories and leave the extension to three as an exercise for the reader. - -To motivate this example, a major use of autoregressive classification models is to predict upswings or downswings like in hotspot prediction models to anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on these). In our case, one simple question that such models can help answer is... Do we expect that the future will have increased case rates or not relative to the present? - -To answer this question, we can create a predictive model for upswings and downswings of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates or not. Following [McDonald, Bien, Green, Hu, et al. (2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at time $t+a$. Using these variables, we define a categorical response variable with two classes +Now, to demonstrate the power and utility of this built-in arx classifier, we +will loosely adapt the classification example that was written from scratch in +`vignette("preprocessing-and-models")`. However, to keep things simple and not +merely a direct translation, we will only consider two prediction categories and +leave the extension to three as an exercise for the reader. + +To motivate this example, a major use of autoregressive classification models is +to predict upswings or downswings like in hotspot prediction models to +anticipate the direction of the outcome (see [McDonald, Bien, Green, Hu, et al. +(2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118) for more on +these). In our case, one simple question that such models can help answer is... +Do we expect that the future will have increased case rates or not relative to +the present? + +To answer this question, we can create a predictive model for upswings and +downswings of case rates rather than the raw case rates themselves. For this +situation, our target is to predict whether there is an increase in case rates +or not. Following +[McDonald, Bien, Green, Hu, et al.(2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), +we look at the +relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case +rate at location $l$ at time $t$ and the latter is the rate for that location at +time $t+a$. Using these variables, we define a categorical response variable +with two classes $$\begin{align} Z_{l,t} = \left\{\begin{matrix} @@ -93,7 +158,9 @@ Z_{l,t} = \left\{\begin{matrix} \end{align}$$ where $Y_{l,t}^\Delta = (Y_{l, t} - Y_{l, t-7} / Y_{l, t-7}$. If $Y_{l,t}^\Delta$ > 0.25, meaning that the number of new cases over the week has increased by over 25\%, then $Z_{l,t}$ is up. This is the criteria for location $l$ to be a hotspot at time $t$. On the other hand, if $Y_{l,t}^\Delta$ \leq 0.25$, then then $Z_{l,t}$ is categorized as not up, meaning that there has not been a >25\% increase in the new cases over the past week. -The logistic regression model we use to predict this binary response can be considered to be a simplification of the multinomial regression model presented in `vignette("preprocessing-and-models")`: +The logistic regression model we use to predict this binary response can be +considered to be a simplification of the multinomial regression model presented +in `vignette("preprocessing-and-models")`: $$\begin{align} \pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ @@ -105,9 +172,15 @@ $$ g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}Y_{l,t}^\Delta + \beta_{12}Y_{l,t-7}^\Delta + \beta_{13}Y_{l,t-14}^\Delta. $$ -Now then, we will operate on the same subset of the `case_death_rate_subset` that we used in our above example. This time, we will use it to investigate whether the number of newly reported cases over the past 7 days has increased by at least 25\% compared to the preceding week for our sample of states. +Now then, we will operate on the same subset of the `case_death_rate_subset` +that we used in our above example. This time, we will use it to investigate +whether the number of newly reported cases over the past 7 days has increased by +at least 25% compared to the preceding week for our sample of states. -Notice that by using the `arx_classifier()` function we've completely eliminated the need to manually categorize the response variable and implement pre-processing steps, which was necessary in `vignette("preprocessing-and-models")`. +Notice that by using the `arx_classifier()` function we've completely eliminated +the need to manually categorize the response variable and implement +pre-processing steps, which was necessary in +`vignette("preprocessing-and-models")`. ```{r} log_res <- arx_classifier( @@ -122,15 +195,47 @@ log_res <- arx_classifier( log_res$epi_workflow ``` -Comparing the pre-processing steps for this to those in the other vignette, we can see that they are not precisely the same, but they cover the same essentials of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), lagging the predictors (`step_epi_lag()`), leading the response (`step_epi_ahead()`), which are both constructed from the growth rates, and constructing the binary classification response variable (`step_mutate()`). - -On this topic, it is important to understand that we are not actually concerned about the case values themselves. Rather we are concerned whether the quantity of cases in the future is a lot larger than that in the present. For this reason, the outcome does not remain as cases, but rather it is transformed by using either growth rates (as the predictors and outcome in our example are) or lagged differences. While the latter is closer to the requirements for the [2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), and it is conceptually easy to understand because it is simply the change of the value for the horizon, it is not the default. The default is `growth_rate`. One reason for this choice is because the growth rate is on a rate scale, not on the absolute scale, so it fosters comparability across locations without any conscious effort (on the other hand, when using the `lag_difference` one would need to take care to operate on rates per 100k and not raw counts). We utilize `epiprocess::growth_rate()` to create the outcome using some of the additional arguments. One important argument for the growth rate calculation is the `method`. Only `rel_change` for relative change should be used as the method because the test data is the only data that is accessible and the other methods require access to the training data. - -The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for `epiprocess::growth_rate()` and the related `vignette("growth_rate", package = "epiprocess")`. +Comparing the pre-processing steps for this to those in the other vignette, we +can see that they are not precisely the same, but they cover the same essentials +of transforming `case_rate` to the growth rate scale (`step_growth_rate()`), +lagging the predictors (`step_epi_lag()`), leading the response +(`step_epi_ahead()`), which are both constructed from the growth rates, and +constructing the binary classification response variable (`step_mutate()`). + +On this topic, it is important to understand that we are not actually concerned +about the case values themselves. Rather we are concerned whether the quantity +of cases in the future is a lot larger than that in the present. For this +reason, the outcome does not remain as cases, but rather it is transformed by +using either growth rates (as the predictors and outcome in our example are) or +lagged differences. While the latter is closer to the requirements for the +[2022-23 CDC Flusight Hospitalization Experimental Target](https://github.com/cdcepi/Flusight-forecast-data/blob/745511c436923e1dc201dea0f4181f21a8217b52/data-experimental/README.md), +and it is conceptually easy to understand because it is simply the change of the +value for the horizon, it is not the default. The default is `growth_rate`. One +reason for this choice is because the growth rate is on a rate scale, not on the +absolute scale, so it fosters comparability across locations without any +conscious effort (on the other hand, when using the `lag_difference` one would +need to take care to operate on rates per 100k and not raw counts). We utilize +`epiprocess::growth_rate()` to create the outcome using some of the additional +arguments. One important argument for the growth rate calculation is the +`method`. Only `rel_change` for relative change should be used as the method +because the test data is the only data that is accessible and the other methods +require access to the training data. + +The other optional arguments for controlling the growth rate calculation (that +can be inputted as `additional_gr_args`) can be found in the documentation for +`epiprocess::growth_rate()` and the related +`vignette("growth_rate", package = "epiprocess")`. ### Visualizing the results -To visualize the prediction classes across the states for the target date, we can plot our results as a heatmap. However, if we were to plot the results for only one target date, like our 7-day ahead predictions, then that would be a pretty sad heatmap (which would look more like a bar chart than a heatmap)... So instead of doing that, let's get predictions for several aheads and plot a heatmap across the target dates. To get the predictions across several ahead values, we will use the map function in the same way that we did in other vignettes: +To visualize the prediction classes across the states for the target date, we +can plot our results as a heatmap. However, if we were to plot the results for +only one target date, like our 7-day ahead predictions, then that would be a +pretty sad heatmap (which would look more like a bar chart than a heatmap)... So +instead of doing that, let's get predictions for several aheads and plot a +heatmap across the target dates. To get the predictions across several ahead +values, we will use the map function in the same way that we did in other +vignettes: ```{r} multi_log_res <- map(1:40, ~ arx_classifier( @@ -144,7 +249,8 @@ multi_log_res <- map(1:40, ~ arx_classifier( )$predictions) %>% list_rbind() ``` -We can plot a the heatmap of the results over the aheads to see if there's anything novel or interesting to take away: +We can plot a the heatmap of the results over the aheads to see if there's +anything novel or interesting to take away: ```{r} ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + @@ -154,8 +260,24 @@ ggplot(multi_log_res, aes(target_date, geo_value, fill = .pred_class)) + scale_fill_brewer(palette = "Set1") ``` -While there is a bit of variability near to the end, we can clearly see that there are upswings for all states starting from the beginning of January 2022, which we can recall was when there was a massive spike in cases for many states. So our results seem to align well with what actually happened at the beginning of January 2022. +While there is a bit of variability near to the end, we can clearly see that +there are upswings for all states starting from the beginning of January 2022, +which we can recall was when there was a massive spike in cases for many states. +So our results seem to align well with what actually happened at the beginning +of January 2022. ## A brief reflection -The most noticeable benefit of using the `arx_classifier()` function is the simplification and reduction of the manual implementation of the classifier from about 30 down to 3 lines. However, as we noted before, the trade-off for simplicity is control over the precise pre-processing, post-processing, and additional features embedded in the coding of a classifier. So the good thing is that `epipredict` provides both - a built-in `arx_classifer()` or the means to implement your own classifier from scratch by using the `epi_workflow` framework. And which you choose will depend on the circumstances. Our advice is to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider translating this binary classification model example to an `epi_workflow`, akin to that in `vignette("preprocessing-and-models")`. +The most noticeable benefit of using the `arx_classifier()` function is the +simplification and reduction of the manual implementation of the classifier from +about 30 down to 3 lines. However, as we noted before, the trade-off for +simplicity is control over the precise pre-processing, post-processing, and +additional features embedded in the coding of a classifier. So the good thing is +that `epipredict` provides both - a built-in `arx_classifer()` or the means to +implement your own classifier from scratch by using the `epi_workflow` +framework. And which you choose will depend on the circumstances. Our advice is +to start with using the built-in classifier for ostensibly simple projects and +begin to implement your own when the modelling project takes a complicated turn. +To get some practice on coding up a classifier by hand, consider translating +this binary classification model example to an `epi_workflow`, akin to that in +`vignette("preprocessing-and-models")`. diff --git a/vignettes/epipredict.Rmd b/vignettes/epipredict.Rmd index 1c3808711..af83dc321 100644 --- a/vignettes/epipredict.Rmd +++ b/vignettes/epipredict.Rmd @@ -28,15 +28,22 @@ library(epipredict) # Goals for the package -At a high level, our goal with `{epipredict}` is to make running simple Machine Learning / Statistical forecasters for epidemiology easy. However, this package is extremely extensible, and that is part of its utility. Our hope is that it is easy for users with epi training and some statistics to fit baseline models while still allowing those with more nuanced statistical understanding to create complicated specializations using the same framework. +At a high level, our goal with `{epipredict}` is to make running simple Machine +Learning / Statistical forecasters for epidemiology easy. However, this package +is extremely extensible, and that is part of its utility. Our hope is that it is +easy for users with epi training and some statistics to fit baseline models +while still allowing those with more nuanced statistical understanding to create +complicated specializations using the same framework. -Serving both populations is the main motivation for our efforts, but at the same time, we have tried hard to make it useful. +Serving both populations is the main motivation for our efforts, but at the same +time, we have tried hard to make it useful. ## Baseline models -We provide a set of basic, easy-to-use forecasters that work out of the box. -You should be able to do a reasonably limited amount of customization on them. Any serious customization happens with the framework discussed below). +We provide a set of basic, easy-to-use forecasters that work out of the box. You +should be able to do a reasonably limited amount of customization on them. Any +serious customization happens with the framework discussed below). For the basic forecasters, we provide: @@ -44,35 +51,64 @@ For the basic forecasters, we provide: * Autoregressive forecaster * Autoregressive classifier -All the forcasters we provide are built on our framework. So we will use these basic models to illustrate its flexibility. +All the forcasters we provide are built on our framework. So we will use these +basic models to illustrate its flexibility. ## Forecasting framework -Our framework for creating custom forecasters views the prediction task as a set of modular components. There are four types of components: +Our framework for creating custom forecasters views the prediction task as a set +of modular components. There are four types of components: 1. Preprocessor: make transformations to the data before model training 2. Trainer: train a model on data, resulting in a fitted model object 3. Predictor: make predictions, using a fitted model object and processed test data 4. Postprocessor: manipulate or transform the predictions before returning -Users familiar with [`{tidymodels}`](https://www.tidymodels.org) and especially the [`{workflows}`](https://workflows.tidymodels.org) package will notice a lot of overlap. This is by design, and is in fact a feature. The truth is that `{epipredict}` is a wrapper around much that is contained in these packages. Therefore, if you want something from this -verse, it should "just work" (we hope). - -The reason for the overlap is that `{workflows}` _already implements_ the first three steps. And it does this very well. However, it is missing the postprocessing stage and currently has no plans for such an implementation. And this feature is important. The baseline forecaster we provide _requires_ postprocessing. Anything more complicated needs this as well. - -The second omission from `{tidymodels}` is support for panel data. Besides epidemiological data, economics, psychology, sociology, and many other areas frequently deal with data of this type. So the framework of behind `{epipredict}` implements this. In principle, this has nothing to do with epidemiology, and one could simply use this package as a solution for the missing functionality in `{tidymodels}`. Again, this should "just work". - -All of the _panel data_ functionality is implemented through the `epi_df` data type in the companion [`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/) package. There is much more to see there, but for the moment, it's enough to look at a simple one: +Users familiar with [`{tidymodels}`](https://www.tidymodels.org) and especially +the [`{workflows}`](https://workflows.tidymodels.org) package will notice a lot +of overlap. This is by design, and is in fact a feature. The truth is that +`{epipredict}` is a wrapper around much that is contained in these packages. +Therefore, if you want something from this -verse, it should "just work" (we +hope). + +The reason for the overlap is that `{workflows}` *already implements* the first +three steps. And it does this very well. However, it is missing the +postprocessing stage and currently has no plans for such an implementation. And +this feature is important. The baseline forecaster we provide *requires* +postprocessing. Anything more complicated needs this as well. + +The second omission from `{tidymodels}` is support for panel data. Besides +epidemiological data, economics, psychology, sociology, and many other areas +frequently deal with data of this type. So the framework of behind +`{epipredict}` implements this. In principle, this has nothing to do with +epidemiology, and one could simply use this package as a solution for the +missing functionality in `{tidymodels}`. Again, this should "just work". + +All of the *panel data* functionality is implemented through the `epi_df` data +type in the companion [`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/) +package. There is much more to see there, but for the moment, it's enough to +look at a simple one: ```{r epidf} jhu <- case_death_rate_subset jhu ``` -This data is built into the package and contains the measured variables `case_rate` and `death_rate` for COVID-19 at the daily level for each US state for the year 2021. The "panel" part is because we have repeated measurements across a number of locations. +This data is built into the package and contains the measured variables +`case_rate` and `death_rate` for COVID-19 at the daily level for each US state +for the year 2021. The "panel" part is because we have repeated measurements +across a number of locations. -The `epi_df` encodes the time stamp as `time_value` and the `key` as `geo_value`. While these 2 names are required, the values don't need to actually represent such objects. Additional `key`'s are also supported (like age group, ethnicity, taxonomy, etc.). +The `epi_df` encodes the time stamp as `time_value` and the `key` as +`geo_value`. While these 2 names are required, the values don't need to actually +represent such objects. Additional `key`'s are also supported (like age group, +ethnicity, taxonomy, etc.). -The `epi_df` also contains some metadata that describes the keys as well as the vintage of the data. It's possible that data collected at different times for the _same set_ of `geo_value`'s and `time_value`'s could actually be different. For more details, see [`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/articles/epiprocess.html). +The `epi_df` also contains some metadata that describes the keys as well as the +vintage of the data. It's possible that data collected at different times for +the *same set* of `geo_value`'s and `time_value`'s could actually be different. +For more details, see +[`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/articles/epiprocess.html). @@ -85,21 +121,32 @@ preprocessing, training, and prediction, bound together, through a package calle `{workflows}`. We built `{epipredict}` on top of that setup. In this way, you CAN use almost everything they provide. -* However, `{workflows}` doesn't do postprocessing. And nothing in the -verse handles _panel data_. +* However, `{workflows}` doesn't do postprocessing. And nothing in the -verse +handles _panel data_. * The tidy-team doesn't have plans to do either of these things. (We checked). * There are two packages that do _time series_ built on `{tidymodels}`, but it's -"basic" time series: 1-step AR models, exponential smoothing, STL decomposition, etc.[^2] Our group has not prioritized these sorts of models for epidemic forecasting, but one could also integrate these methods into our framework. +"basic" time series: 1-step AR models, exponential smoothing, STL decomposition, +etc.[^2] Our group has not prioritized these sorts of models for epidemic +forecasting, but one could also integrate these methods into our framework. -[^2]: These are [`{timetk}`](https://business-science.github.io/timetk/index.html) and [`{modeltime}`](https://business-science.github.io/timetk/index.html). There are _lots_ of useful methods there than can be used to do fairly complex machine learning methodology, though not directly for panel data and not for direct prediction of future targets. +[^2]: These are [`{timetk}`](https://business-science.github.io/timetk/index.html) +and [`{modeltime}`](https://business-science.github.io/timetk/index.html). There +are *lots* of useful methods there than can be used to do fairly complex machine +learning methodology, though not directly for panel data and not for direct +prediction of future targets. # Show me the basics -We start with the `jhu` data displayed above. -One of the "canned" forecasters we provide is an autoregressive forecaster with (or without) covariates that _directly_ trains on the response. This is in contrast to a typical "iterative" AR model that trains to predict one-step-ahead, and then plugs in the predictions to "leverage up" to longer horizons. +We start with the `jhu` data displayed above. One of the "canned" forecasters we +provide is an autoregressive forecaster with (or without) covariates that +*directly* trains on the response. This is in contrast to a typical "iterative" +AR model that trains to predict one-step-ahead, and then plugs in the +predictions to "leverage up" to longer horizons. -We'll estimate the model jointly across all locations using only the most recent 30 days. +We'll estimate the model jointly across all locations using only the most +recent 30 days. ```{r demo-workflow} jhu <- jhu %>% filter(time_value >= max(time_value) - 30) @@ -112,16 +159,25 @@ out <- arx_forecaster( The `out` object has two components: - 1. The predictions which is just another `epi_df`. It contains the predictions for each location along with additional columns. By default, these are a 90% predictive interval, the `forecast_date` (the date on which the forecast was putatively made) and the `target_date` (the date for which the forecast is being made). + 1. The predictions which is just another `epi_df`. It contains the predictions for +each location along with additional columns. By default, these are a 90% +predictive interval, the `forecast_date` (the date on which the forecast was +putatively made) and the `target_date` (the date for which the forecast is being +made). ```{r} out$predictions ``` - 2. A list object of class `epi_workflow`. This object encapsulates all the instructions necessary to create the prediction. More details on this below. + 2. A list object of class `epi_workflow`. This object encapsulates all the +instructions necessary to create the prediction. More details on this below. ```{r} out$epi_workflow ``` -By default, the forecaster predicts the outcome (`death_rate`) 1-week ahead, using 3 lags of each predictor (`case_rate` and `death_rate`) at 0 (today), 1 week back and 2 weeks back. The predictors and outcome can be changed directly. The rest of the defaults are encapsulated into a list of arguments. This list is produced by `arx_args_list()`. +By default, the forecaster predicts the outcome (`death_rate`) 1-week ahead, +using 3 lags of each predictor (`case_rate` and `death_rate`) at 0 (today), 1 +week back and 2 weeks back. The predictors and outcome can be changed directly. +The rest of the defaults are encapsulated into a list of arguments. This list is +produced by `arx_args_list()`. ## Simple adjustments @@ -143,11 +199,19 @@ out2week <- arx_forecaster( ) ``` -Here, we've used different lags on the `case_rate` and are now predicting 2 weeks ahead. This example also illustrates a major difficulty with the "iterative" versions of AR models. This model doesn't produce forecasts for `case_rate`, and so, would not have data to "plug in" for the necessary lags.[^1] +Here, we've used different lags on the `case_rate` and are now predicting 2 +weeks ahead. This example also illustrates a major difficulty with the +"iterative" versions of AR models. This model doesn't produce forecasts for +`case_rate`, and so, would not have data to "plug in" for the necessary +lags.[^1] -[^1]: An obvious fix is to instead use a VAR and predict both, but this would likely increase the variance of the model, and therefore, may lead to less accurate forecasts for the variable of interest. +[^1]: An obvious fix is to instead use a VAR and predict both, but this would +likely increase the variance of the model, and therefore, may lead to less +accurate forecasts for the variable of interest. -Another property of the basic model is the predictive interval. We describe this in more detail in a different vignette, but it is easy to request multiple quantiles. +Another property of the basic model is the predictive interval. We describe this +in more detail in a different vignette, but it is easy to request multiple +quantiles. ```{r differential-levels} out_q <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), @@ -157,7 +221,11 @@ out_q <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), ) ``` -The column `.pred_dstn` in the `predictions` object is actually a "distribution" here parameterized by its quantiles. For this default forecaster, these are created using the quantiles of the residuals of the predictive model (possibly symmetrized). Here, we used 23 quantiles, but one can grab a particular quantile, +The column `.pred_dstn` in the `predictions` object is actually a "distribution" +here parameterized by its quantiles. For this default forecaster, these are +created using the quantiles of the residuals of the predictive model (possibly +symmetrized). Here, we used 23 quantiles, but one can grab a particular +quantile, ```{r q1} head(quantile(out_q$predictions$.pred_distn, p = .4)) @@ -173,7 +241,8 @@ out_q$predictions %>% unnest(.pred_distn) # then unnest it ``` -Additional simple adjustments to the basic forecaster can be made using the function: +Additional simple adjustments to the basic forecaster can be made using the +function: ```{r, eval = FALSE} arx_args_list( @@ -186,9 +255,12 @@ arx_args_list( ## Changing the engine -So far, our forecasts have been produced using simple linear regression. But this is not the only way to estimate such a model. -The `trainer` argument determines the type of model we want. -This takes a [`{parsnip}`](https://parsnip.tidymodels.org) model. The default is linear regression, but we could instead use a random forest with the `{ranger}` package: +So far, our forecasts have been produced using simple linear regression. But +this is not the only way to estimate such a model. The `trainer` argument +determines the type of model we want. This takes a +[`{parsnip}`](https://parsnip.tidymodels.org) model. The default is linear +regression, but we could instead use a random forest with the `{ranger}` +package: ```{r ranger, warning = FALSE} out_rf <- arx_forecaster( @@ -215,7 +287,9 @@ out_qr <- arx_forecaster( ) ``` -FWIW, this last case (using quantile regression), is not far from what the Delphi production forecast team used for its Covid forecasts over the past few years. +FWIW, this last case (using quantile regression), is not far from what the +Delphi production forecast team used for its Covid forecasts over the past few +years. ## Inner workings @@ -367,7 +441,8 @@ But ideally, a user could create their own forecasters by building up the components we provide. In other vignettes, we try to walk through some of these customizations. -To illustrate everything above, here is (roughly) the code for the `flatline_forecaster()` applied to the `case_rate`. +To illustrate everything above, here is (roughly) the code for the +`flatline_forecaster()` applied to the `case_rate`. ```{r} r <- epi_recipe(jhu) %>% diff --git a/vignettes/panel-data.Rmd b/vignettes/panel-data.Rmd index f2b4d8d09..0dea322f2 100644 --- a/vignettes/panel-data.Rmd +++ b/vignettes/panel-data.Rmd @@ -239,7 +239,9 @@ summary(extract_fit_engine(wf_linreg)) ``` This output tells us the coefficients of the fitted model; for instance, -the estimated intercept is $\widehat{\alpha}_0 =$ `r round(coef(extract_fit_engine(wf_linreg))[1], 3)` and the coefficient for $y_{tijk}$ is +the estimated intercept is $\widehat{\alpha}_0 =$ +`r round(coef(extract_fit_engine(wf_linreg))[1], 3)` and the coefficient for +$y_{tijk}$ is $\widehat\alpha_1 =$ `r round(coef(extract_fit_engine(wf_linreg))[2], 3)`. The summary also tells us that all estimated coefficients are significantly different from zero. Extracting the 95% confidence intervals for the @@ -315,7 +317,8 @@ defined as follows: \end{aligned} \] -where $y_{tijk}$ is the 5-year median income (proportion) at time $t$ (in location $i$, age group $j$ with education quality $k$), +where $y_{tijk}$ is the 5-year median income (proportion) at time $t$ (in +location $i$, age group $j$ with education quality $k$), $x_{tijk}$ is the 2-year median income (proportion) at time $t$, and $z_{tijk}$ is the number of graduates (proportion) at time $t$. diff --git a/vignettes/preprocessing-and-models.Rmd b/vignettes/preprocessing-and-models.Rmd index 11171489b..d557ed1f7 100644 --- a/vignettes/preprocessing-and-models.Rmd +++ b/vignettes/preprocessing-and-models.Rmd @@ -58,7 +58,8 @@ and forecasts to characterize the state of an outbreak and its course. They use it to inform public health decision makers on potential consequences of deploying control measures. -One of the outcomes that the CDC forecasts is [death counts from COVID-19](https://www.cdc.gov/coronavirus/2019-ncov/science/forecasting/forecasting-us.html). +One of the outcomes that the CDC forecasts is +[death counts from COVID-19](https://www.cdc.gov/coronavirus/2019-ncov/science/forecasting/forecasting-us.html). Although there are many state-of-the-art models, we choose to use Poisson regression, the textbook example for modeling count data, as an illustration for using the `epipredict` package with other existing tidymodels packages. @@ -109,7 +110,8 @@ Poisson distribution with mean $\mu_{t+7}$; $s_{\text{state}}$ are dummy variables for each state and take values of either 0 or 1. Preprocessing steps will be performed to prepare the -data for model fitting. But before diving into them, it will be helpful to understand what `roles` are in the `recipes` framework. +data for model fitting. But before diving into them, it will be helpful to +understand what `roles` are in the `recipes` framework. --- @@ -235,9 +237,10 @@ using `layer_residual_quantiles()` should be used before population scaling or else the transformation will make the results uninterpretable. -We wish, now, to predict the 7-day ahead death counts with lagged case rates and death -rates, along with some extra behaviourial predictors. Namely, we will use survey data -from [COVID-19 Trends and Impact Survey](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/fb-survey.html#behavior-indicators). +We wish, now, to predict the 7-day ahead death counts with lagged case rates and +death rates, along with some extra behaviourial predictors. Namely, we will use +survey data from +[COVID-19 Trends and Impact Survey](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/fb-survey.html#behavior-indicators). The survey data provides the estimated percentage of people who wore a mask for most or all of the time while in public in the past 7 days and the estimated @@ -413,7 +416,8 @@ We say location $\ell$ is a hotspot at time $t$ when $Z_{\ell,t}$ is `up`, meaning the number of newly reported cases over the past 7 days has increased by at least 25% compared to the preceding week. When $Z_{\ell,t}$ is categorized as `down`, it suggests that there has been at least a 20% -decrease in newly reported cases over the past 7 days (a 20% decrease is the inverse of a 25% increase). Otherwise, we will +decrease in newly reported cases over the past 7 days (a 20% decrease is the +inverse of a 25% increase). Otherwise, we will consider the trend to be `flat`. The expression of the multinomial regression we will use is as follows: @@ -439,7 +443,8 @@ g_{\text{up}}(x) &= \log\left(\frac{Pr(Z_{\ell,t}=\text{up}\mid x)}{Pr(Z_{\ell,t \end{aligned} Preprocessing steps are similar to the previous models with an additional step -of categorizing the response variables. Again, we will use a subset of death rate and case rate data from our built-in dataset +of categorizing the response variables. Again, we will use a subset of death +rate and case rate data from our built-in dataset `case_death_rate_subset`. ```{r} @@ -585,7 +590,12 @@ Sciences 118.51 (2021): e2111453118. [doi:10.1073/pnas.2111453118](https://doi.o ## Attribution -This object contains a modified part of the [COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University](https://github.com/CSSEGISandData/COVID-19) as [republished in the COVIDcast Epidata API.](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/jhu-csse.html) +This object contains a modified part of the +[COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University](https://github.com/CSSEGISandData/COVID-19) +as [republished in the COVIDcast Epidata API.](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/jhu-csse.html) -This data set is licensed under the terms of the [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/) by the Johns Hopkins University -on behalf of its Center for Systems Science in Engineering. Copyright Johns Hopkins University 2020. +This data set is licensed under the terms of the +[Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/) +by the Johns Hopkins +University on behalf of its Center for Systems Science in Engineering. Copyright +Johns Hopkins University 2020. From 12fafa673fa9b726100ed57c8194270ca3920248 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 14 Jun 2024 17:54:57 -0500 Subject: [PATCH 258/382] stylr --- vignettes/articles/smooth-qr.Rmd | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index 047f4f178..07e237181 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -340,7 +340,9 @@ we've already built. We can simply set the degree to be the number of ahead values to re-run the code without smoothing. ```{r, warning = FALSE} baseline_preds <- smooth_fc( - edf, degree = 28L, quantiles = several_quantiles, fd = fd) + edf, + degree = 28L, quantiles = several_quantiles, fd = fd +) ``` And we can produce the corresponding plot to inspect the predictions obtained @@ -457,9 +459,10 @@ forecasters are shown in a similar style line plot as we chose for MAE: smooth_preds_wis_df <- smooth_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), - several_quantiles) - ) %>% + mutate(wis = wis_dist_quantile( + actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), + several_quantiles + )) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "smooth") @@ -467,9 +470,10 @@ smooth_preds_wis_df <- smooth_preds %>% baseline_preds_wis_df <- baseline_preds %>% left_join(tedf_sub, by = c("geo_value", "target_date")) %>% rowwise() %>% - mutate(wis = wis_dist_quantile(actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), - several_quantiles) - ) %>% + mutate(wis = wis_dist_quantile( + actual, c(`0.1`, `0.25`, `0.5`, `0.75`, `0.9`), + several_quantiles + )) %>% group_by(ahead) %>% summarise(mean = mean(wis)) %>% mutate(type = "baseline") From 6795b455c1c75b29769e1e1f901bc3b409b089d6 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 18 Jun 2024 16:55:50 -0700 Subject: [PATCH 259/382] switched out the version-aware and unaware example with a new example --- vignettes/articles/sliding.Rmd | 302 ++++++++++++++++++--------------- 1 file changed, 163 insertions(+), 139 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 2d0ea3d86..73eac2cdf 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -14,6 +14,7 @@ knitr::opts_chunk$set( ```{r pkgs} library(epipredict) +library(epidatr) library(data.table) library(dplyr) library(tidyr) @@ -24,39 +25,15 @@ library(purrr) # Demonstrations of sliding AR and ARX forecasters -A key function from the epiprocess package is `epi_slide()`, which allows the -user to apply a function or formula-based computation over variables in an -`epi_df` over a running window of `n` time steps (see the following `epiprocess` -vignette to go over the basics of the function: -["Slide a computation over signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). -The equivalent sliding method for an `epi_archive` object can be called by using -the wrapper function `epix_slide()` (refer to the following vignette for the -basics of the function: -["Work with archive objects and data revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The -key difference from `epi_slide()` is that it performs version-aware -computations. That is, the function only uses data that would have been -available as of time t for that reference time. - -In this vignette, we use `epi_slide()` and `epix_slide()` for backtesting our -`arx_forecaster` on historical COVID-19 case data from the US and from Canada. -More precisely, we first demonstrate using `epi_slide()` to slide ARX -forecasters over an `epi_df` object and compare the results obtained from using -different forecasting engines. We then compare the results from version-aware -and unaware forecasting, where the former is obtained from applying -`epix_slide()` to the `epi_archive` object, while the latter is obtained from -applying `epi_slide()` to the latest snapshot of the data. +A key function from the epiprocess package is `epi_slide()`, which allows the user to apply a function or formula-based computation over variables in an `epi_df` over a running window of `n` time steps (see the following `epiprocess` vignette to go over the basics of the function: ["Slide a computation over signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). The equivalent sliding method for an `epi_archive` object can be called by using the wrapper function `epix_slide()` (refer to the following vignette for the basics of the function: ["Work with archive objects and data revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The key difference from `epi_slide()` is that it performs version-aware computations. That is, the function only uses data that would have been available as of time t for that reference time. + +In this vignette, we use `epi_slide()` and `epix_slide()` for backtesting our `arx_forecaster` on historical COVID-19 case data from the US and from Canada. More precisely, we first demonstrate using `epi_slide()` to slide ARX forecasters over an `epi_df` object and compare the results obtained from using different forecasting engines. We then compare the results from version-aware and unaware forecasting, where the former is obtained from applying `epix_slide()` to the `epi_archive` object, while the latter is obtained from applying `epi_slide()` to the latest snapshot of the data. ## Comparing different forecasting engines -### Example using CLI and case data from US states +### Example using CLI and case data from US states -First, we download the version history (ie. archive) of the percentage of -doctor’s visits with CLI (COVID-like illness) computed from medical insurance -claims and the number of new confirmed COVID-19 cases per 100,000 population -(daily) for all 50 states from the COVIDcast API. We process as before, with the -modification that we use `sync = locf` in `epix_merge()` so that the last -version of each observation can be carried forward to extrapolate unavailable -versions for the less up-to-date input archive. +First, we download the version history (ie. archive) of the percentage of doctor's visits with CLI (COVID-like illness) computed from medical insurance claims and the number of new confirmed COVID-19 cases per 100,000 population (daily) for all 50 states from the COVIDcast API. We process as before, with the modification that we use `sync = locf` in `epix_merge()` so that the last version of each observation can be carried forward to extrapolate unavailable versions for the less up-to-date input archive. ```{r grab-epi-data} theme_set(theme_bw()) @@ -74,13 +51,9 @@ x <- epix_merge( rm(y) ``` -After obtaining the latest snapshot of the data, we produce forecasts on that -data using the default engine of simple linear regression and compare to a -random forest. +After obtaining the latest snapshot of the data, we produce forecasts on that data using the default engine of simple linear regression and compare to a random forest. -Note that all of the warnings about the forecast date being less than the most -recent update date of the data have been suppressed to avoid cluttering the -output. +Note that all of the warnings about the forecast date being less than the most recent update date of the data have been suppressed to avoid cluttering the output. ```{r make-arx-kweek, warning = FALSE} # Latest snapshot of data, and forecast dates @@ -129,16 +102,9 @@ fc <- bind_rows( pivot_quantiles_wider(fc_.pred_distn) ``` -Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the -target (respecting time stamps and locations) along with lags of the features -(here, the response and doctors visits), estimates a forecasting model using the -specified engine, creates predictions, and non-parametric confidence bands. +Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the target (respecting time stamps and locations) along with lags of the features (here, the response and doctors visits), estimates a forecasting model using the specified engine, creates predictions, and non-parametric confidence bands. -To see how the predictions compare, we plot them on top of the latest case -rates. Note that even though we've fitted the model on all states, -we'll just display the -results for two states, California (CA) and Florida (FL), to get a sense of the -model performance while keeping the graphic simple. +To see how the predictions compare, we plot them on top of the latest case rates. Note that even though we've fitted the model on all states, we'll just display the results for two states, California (CA) and Florida (FL), to get a sense of the model performance while keeping the graphic simple. ```{r plot-arx, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) @@ -160,40 +126,17 @@ ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + theme(legend.position = "none") ``` -For the two states of interest, simple linear regression clearly performs better -than random forest in terms of accuracy of the predictions and does not -result in such in overconfident predictions (overly narrow confidence bands). -Though, in general, neither approach produces amazingly accurate forecasts. -This could be because -the behaviour is rather different across states and the effects of other notable -factors such as age and public health measures may be important to account for -in such forecasting. Including such factors as well as making enhancements such -as correcting for outliers are some improvements one could make to this simple -model.[^1] - -[^1]: Note that, despite the above caveats, simple models like this tend to -out-perform many far more complicated models in the online Covid forecasting due -to those models high variance predictions. +For the two states of interest, simple linear regression clearly performs better than random forest in terms of accuracy of the predictions and does not result in such in overconfident predictions (overly narrow confidence bands). Though, in general, neither approach produces amazingly accurate forecasts. This could be because the behaviour is rather different across states and the effects of other notable factors such as age and public health measures may be important to account for in such forecasting. Including such factors as well as making enhancements such as correcting for outliers are some improvements one could make to this simple model.[^1] + +[^1]: Note that, despite the above caveats, simple models like this tend to out-perform many far more complicated models in the online Covid forecasting due to those models high variance predictions. ### Example using case data from Canada -By leveraging the flexibility of `epiprocess`, we can apply the same techniques -to data from other sources. Since some collaborators are in British Columbia, -Canada, we'll do essentially the same thing for Canada as we did above. +By leveraging the flexibility of `epiprocess`, we can apply the same techniques to data from other sources. Since some collaborators are in British Columbia, Canada, we'll do essentially the same thing for Canada as we did above. -The [COVID-19 Canada Open Data Working Group](https://opencovid.ca/) collects -daily time series data on COVID-19 cases, deaths, recoveries, testing and -vaccinations at the health region and province levels. Data are collected from -publicly available sources such as government datasets and news releases. -Unfortunately, there is no simple versioned source, so we have created our own -from the Github commit history. +The [COVID-19 Canada Open Data Working Group](https://opencovid.ca/) collects daily time series data on COVID-19 cases, deaths, recoveries, testing and vaccinations at the health region and province levels. Data are collected from publicly available sources such as government datasets and news releases. Unfortunately, there is no simple versioned source, so we have created our own from the Github commit history. -First, we load versioned case rates at the provincial level. After converting -these to 7-day averages (due to highly variable provincial reporting -mismatches), we then convert the data to an `epi_archive` object, and extract -the latest version from it. Finally, we run the same forcasting exercise as for -the American data, but here we compare the forecasts produced from using simple -linear regression with those from using boosted regression trees. +First, we load versioned case rates at the provincial level. After converting these to 7-day averages (due to highly variable provincial reporting mismatches), we then convert the data to an `epi_archive` object, and extract the latest version from it. Finally, we run the same forcasting exercise as for the American data, but here we compare the forecasts produced from using simple linear regression with those from using boosted regression trees. ```{r get-can-fc, warning = FALSE} # source("drafts/canada-case-rates.R) @@ -227,7 +170,7 @@ can_fc <- bind_rows( pivot_quantiles_wider(fc_.pred_distn) ``` -The figures below shows the results for all of the provinces. +The figures below shows the results for all of the provinces. ```{r plot-can-fc-lr, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 12} ggplot( @@ -279,87 +222,168 @@ ggplot( theme(legend.position = "none") ``` -Both approaches tend to produce quite volatile forecasts (point predictions) -and/or are overly confident (very narrow bands), particularly when boosted -regression trees are used. But as this is meant to be a simple demonstration of -sliding with different engines in `arx_forecaster`, we may devote another -vignette to work on improving the predictive modelling using the suite of tools -available in epipredict. +Both approaches tend to produce quite volatile forecasts (point predictions) and/or are overly confident (very narrow bands), particularly when boosted regression trees are used. But as this is meant to be a simple demonstration of sliding with different engines in `arx_forecaster`, we may devote another vignette to work on improving the predictive modelling using the suite of tools available in epipredict. ## Version-aware and unaware forecasting -### Example using case data from US states - -We will now employ a forecaster that uses properly-versioned data (that would -have been available in real-time) to forecast future COVID-19 case rates from -current and past COVID-19 case rates for all states. That is, we can make -forecasts on the archive, `x`, and compare those to forecasts on the latest -data, `x_latest` using the same general set-up as above. For version-aware -forecasting, note that `x` is fed into `epix_slide()`, while for version-unaware -forecasting, `x_latest` is fed into `epi_slide()`. - -```{r make-ar-kweek-asof} -k_week_version_aware <- function(ahead = 7, version_aware = TRUE) { - if (version_aware) { - epix_slide( - x, - ~ arx_forecaster( - .x, "case_rate", c("case_rate", "percent_cli"), - args_list = arx_args_list(ahead = ahead) - ) %>% - extract2("predictions"), - before = 120 - 1, - ref_time_values = fc_time_values, - new_col_name = "fc" - ) %>% - mutate(engine_type = "lm", version_aware = version_aware) %>% - rename(geo_value = fc_geo_value) - } else { - k_week_ahead( - x_latest, "case_rate", c("case_rate", "percent_cli"), - ahead, linear_reg() - ) %>% mutate(version_aware = version_aware) - } +### Example using case data from US states + +We will now employ a forecaster that uses properly-versioned data (that would have been available in real-time) to forecast future COVID-19 case rates from current and past COVID-19 case rates for all states. That is, we can make forecasts on the archive, `x`, and compare those to forecasts on the latest data, `x_latest` using the same general set-up as above. For version-aware forecasting, note that `x` is fed into `epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into `epi_slide()`. In this example, we use a geo-pooled approach (from all US states and territories) to train our model. Our goal for the model is to predict the 7 day average of the COVID-19 case rates across four states with using lagged case rates and death rates as the covariates. + +```{r load-data} +# loading in the data +states <- "*" + +confirmed_incidence_num <- pub_covidcast( + source = "jhu-csse", + signals = "confirmed_incidence_num", + time_type = "day", + geo_type = "state", + time_values = epirange(20200301, 20211231), + geo_values = states, + issues = epirange(20000101,20211231) +) %>% + select(geo_value, time_value, version = issue, cases = value) %>% + arrange(geo_value, time_value) %>% + as_epi_archive(compactify = FALSE) + +deaths_incidence_num <- pub_covidcast( + source = "jhu-csse", + signals = "deaths_incidence_num", + time_type = "day", + geo_type = "state", + time_values = epirange(20200301, 20211231), + geo_values = states, + issues = epirange(20000101,20211231) +) %>% + select(geo_value, time_value, version = issue, deaths = value) %>% + arrange(geo_value, time_value) %>% + as_epi_archive(compactify = FALSE) + +confirmed_incidence_prop <- pub_covidcast( + source = "jhu-csse", + signals = "confirmed_incidence_prop", + time_type = "day", + geo_type = "state", + time_values = epirange(20200301, 20211231), + geo_values = states, + issues = epirange(20000101,20211231) +) %>% + select(geo_value, time_value, version = issue, case_rate = value) %>% + arrange(geo_value, time_value) %>% + as_epi_archive(compactify = FALSE) + +deaths_incidence_prop <- pub_covidcast( + source = "jhu-csse", + signals = "deaths_incidence_prop", + time_type = "day", + geo_type = "state", + time_values = epirange(20200301, 20211231), + geo_values = states, + issues = epirange(20000101,20211231) +) %>% + select(geo_value, time_value, version = issue, death_rate = value) %>% + arrange(geo_value, time_value) %>% + as_epi_archive(compactify = FALSE) + +x <- epix_merge( + epix_merge(confirmed_incidence_num, deaths_incidence_num, + sync = "locf", compactify = FALSE), + epix_merge(confirmed_incidence_prop, deaths_incidence_prop, + sync = "locf", compactify = FALSE), + sync = "locf", + compactify = TRUE +) + +fc_time_values <- seq( + from = as.Date("2020-09-01"), + to = as.Date("2021-12-31"), + by = "1 month" +) + +# computing the 7-day average of the rates +x <- x %>% + epix_slide( + before = 365000L, ref_time_values = fc_time_values, + function(x, gk, rtv) { + x %>% + group_by(geo_value) %>% + epi_slide_mean(case_rate, before = 6L) %>% + rename(case_rate_7d_av = slide_value_case_rate) %>% + epi_slide_mean(death_rate, before = 6L) %>% + ungroup() %>% + rename(death_rate_7d_av = slide_value_death_rate) + } + ) %>% + rename(version = time_value) %>% + rename(time_value = slide_value_time_value, + geo_value = slide_value_geo_value, + cases = slide_value_cases, + deaths = slide_value_deaths, + case_rate = slide_value_case_rate, + death_rate = slide_value_death_rate, + case_rate_7d_av = slide_value_case_rate_7d_av, + death_rate_7d_av = slide_value_death_rate_7d_av) %>% as_epi_archive() +``` + +Here we specify the ARX model. + +```{r make-arx-model} +lags <- c(0, 7, 14, 21) +aheads <- c(7, 14, 21) +engine <- quantile_reg() + +forecaster <- function(x, gk, rtv) { + map(aheads, function(ahead) { + arx_forecaster(epi_data = x, + outcome = "death_rate_7d_av", + predictors = c("death_rate_7d_av","case_rate_7d_av"), + trainer = engine, + args_list = arx_args_list(lags = lags, ahead = ahead) + ) %>% + .$predictions + } ) %>% + bind_rows() } +``` -# Generate the forecasts, and bind them together -fc <- bind_rows( - map(aheads, ~ k_week_version_aware(.x, TRUE)) %>% list_rbind(), - map(aheads, ~ k_week_version_aware(.x, FALSE)) %>% list_rbind() -) %>% pivot_quantiles_wider(fc_.pred_distn) +We can now use our forecaster function that we've created and use it in the pipeline for forecasting the predictions. We store the predictions into the `x_result` variable and calculate the most up to date version of the data in the epiarchive and store it as `x_latest`. + +```{r running-arx-forecaster} +x_result <- x %>% + epix_slide(forecaster, before = 120, ref_time_values = fc_time_values, + names_sep = NULL) %>% + mutate(engine_type = engine$engine) %>% + as_epi_df() +x_result$ahead_val <- x_result$target_date - x_result$forecast_date + +x_latest <- epix_as_of(x, max_version = max(x$versions_end)) ``` -Now we can plot the results on top of the latest case rates. As before, we will -only display and focus on the results for FL and CA for simplicity. +Now we plot both the actual and predicted 7 day average of the death rate for the chosen states -```{r plot-ar-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} -fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) -x_latest_cafl <- x_latest %>% filter(geo_value %in% c("ca", "fl")) +```{r plot-arx-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} +keep <- c("ca","ny","mi", "az") +fc_states <- x_result %>% + filter(geo_value %in% keep) %>% + pivot_quantiles_wider(.pred_distn) + +x_latest_states <- x_latest %>% filter(geo_value %in% keep) -ggplot(fc_cafl, aes(x = fc_target_date, group = time_value, fill = version_aware)) + +ggplot(fc_states, aes(target_date, group = time_value, fill = engine_type)) + geom_line( - data = x_latest_cafl, aes(x = time_value, y = case_rate), + data = x_latest_states, aes(x = time_value, y = death_rate_7d_av), inherit.aes = FALSE, color = "gray50" ) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`), alpha = 0.4) + - geom_line(aes(y = fc_.pred)) + - geom_point(aes(y = fc_.pred), size = 0.5) + + geom_line(aes(y = .pred)) + + geom_point(aes(y = .pred), size = 0.5) + geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + - facet_grid(geo_value ~ version_aware, - scales = "free", - labeller = labeller(version_aware = label_both) - ) + + facet_grid(vars(geo_value), vars(engine_type), scales = "free") + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + - labs(x = "Date", y = "Reported COVID-19 case rates") + scale_fill_brewer(palette = "Set1") + + labs(x = "Date", y = "7 day average COVID-19 death rates") + theme(legend.position = "none") ``` -Again, we observe that the results are not great for these two states, but -that's likely due to the simplicity of the model (ex. the omission of key -factors such as age and public health measures) and the quality of the data (ex. -we have not personally corrected for anomalies in the data). - -We shall leave it to the reader to try the above version aware and unaware -forecasting exercise on the Canadian case rate data. The above code for the -American state data should be readily adaptable for this purpose. +We shall leave it to the reader to try the above version aware and unaware forecasting exercise on the Canadian case rate data. The above code for the American state data should be readily adaptable for this purpose. From 480a8862a121460f010e249d3ee9a739f7ab77a2 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 18 Jun 2024 17:14:56 -0700 Subject: [PATCH 260/382] fixing typos --- vignettes/articles/sliding.Rmd | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 73eac2cdf..e4079568d 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -228,7 +228,7 @@ Both approaches tend to produce quite volatile forecasts (point predictions) and ### Example using case data from US states -We will now employ a forecaster that uses properly-versioned data (that would have been available in real-time) to forecast future COVID-19 case rates from current and past COVID-19 case rates for all states. That is, we can make forecasts on the archive, `x`, and compare those to forecasts on the latest data, `x_latest` using the same general set-up as above. For version-aware forecasting, note that `x` is fed into `epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into `epi_slide()`. In this example, we use a geo-pooled approach (from all US states and territories) to train our model. Our goal for the model is to predict the 7 day average of the COVID-19 case rates across four states with using lagged case rates and death rates as the covariates. +We will now employ a forecaster that uses properly-versioned data (that would have been available in real-time) to forecast the 7 day average of future COVID-19 case rates from current and past COVID-19 case rates and death rates for all states. That is, we can make forecasts on the archive, `x`, and compare those to forecasts on the latest data, `x_latest` using the same general set-up as above. For version-aware forecasting, note that `x` is fed into `epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into `epi_slide()`. Note that in this example, we use a geo-pooled approach (using combined data from all US states and territories) to train our model. ```{r load-data} # loading in the data @@ -314,16 +314,17 @@ x <- x %>% ungroup() %>% rename(death_rate_7d_av = slide_value_death_rate) } - ) %>% + ) %>% rename(version = time_value) %>% - rename(time_value = slide_value_time_value, + rename(time_value = slide_value_time_value, geo_value = slide_value_geo_value, cases = slide_value_cases, deaths = slide_value_deaths, case_rate = slide_value_case_rate, death_rate = slide_value_death_rate, case_rate_7d_av = slide_value_case_rate_7d_av, - death_rate_7d_av = slide_value_death_rate_7d_av) %>% as_epi_archive() + death_rate_7d_av = slide_value_death_rate_7d_av) %>% + as_epi_archive(compactify = TRUE) ``` Here we specify the ARX model. From 7e8f61a52ae1d06154fc8a14c963cf26a1267153 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 18 Jun 2024 17:26:52 -0700 Subject: [PATCH 261/382] pull request checklist --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 12d86602b..50bb77ec2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.15 +Version: 0.0.16 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index c756cb34d..6b859fef2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -46,3 +46,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - refactor `bake.epi_recipe()` and remove `epi_juice()`. - Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) +- Replaced old version-faithful example in sliding AR & ARX forecasters vignette \ No newline at end of file From dc9e19a4c2a866d6541eaafde73aefb4230dba2a Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Thu, 20 Jun 2024 12:25:03 -0700 Subject: [PATCH 262/382] style and document changes --- man/add_model.Rd | 108 --------------------------------- vignettes/articles/sliding.Rmd | 77 ++++++++++++----------- 2 files changed, 42 insertions(+), 143 deletions(-) delete mode 100644 man/add_model.Rd diff --git a/man/add_model.Rd b/man/add_model.Rd deleted file mode 100644 index 6bf6b6b02..000000000 --- a/man/add_model.Rd +++ /dev/null @@ -1,108 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/model-methods.R -\name{Add_model} -\alias{Add_model} -\alias{Remove_model} -\alias{Update_model} -\alias{Add_model.epi_workflow} -\alias{Remove_model.epi_workflow} -\alias{Update_model.epi_workflow} -\alias{Add_model.workflow} -\alias{Remove_model.workflow} -\alias{Update_model.workflow} -\alias{add_model} -\alias{remove_model} -\alias{update_model} -\title{Add a model to an \code{epi_workflow}} -\usage{ -Add_model(x, spec, ..., formula = NULL) - -Remove_model(x) - -Update_model(x, spec, ..., formula = NULL) - -\method{Add_model}{epi_workflow}(x, spec, ..., formula = NULL) - -\method{Remove_model}{epi_workflow}(x) - -\method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) - -\method{Add_model}{workflow}(x, spec, ..., formula = NULL) - -\method{Remove_model}{workflow}(x) - -\method{Update_model}{workflow}(x, spec, ..., formula = NULL) - -add_model(x, spec, ..., formula = NULL) - -remove_model(x) - -update_model(x, spec, ..., formula = NULL) -} -\arguments{ -\item{x}{An \code{epi_workflow}.} - -\item{spec}{A parsnip model specification.} - -\item{...}{Not used.} - -\item{formula}{An optional formula override to specify the terms of the -model. Typically, the terms are extracted from the formula or recipe -preprocessing methods. However, some models (like survival and bayesian -models) use the formula not to preprocess, but to specify the structure -of the model. In those cases, a formula specifying the model structure -must be passed unchanged into the model call itself. This argument is -used for those purposes.} -} -\value{ -\code{x}, updated with a new, updated, or removed model. -} -\description{ -Add a model to an \code{epi_workflow} -} -\details{ -Has the same behaviour as \code{\link[workflows:add_model]{workflows::add_model()}} but also ensures -that the returned object is an \code{epi_workflow}. - -This family is called \verb{Add_*} / \verb{Update_*} / \verb{Remove_*} to avoid -masking the related functions in \code{{workflows}}. We also provide -aliases with the lower-case names. However, in the event that -\code{{workflows}} is loaded after \code{{epipredict}}, these may fail to function -properly. -} -\examples{ -jhu <- case_death_rate_subset \%>\% - dplyr::filter( - time_value > "2021-11-01", - geo_value \%in\% c("ak", "ca", "ny") - ) - -r <- epi_recipe(jhu) \%>\% - step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% - step_epi_ahead(death_rate, ahead = 7) - -rf_model <- rand_forest(mode = "regression") - -wf <- epi_workflow(r) - -wf <- wf \%>\% Add_model(rf_model) -wf - -lm_model <- parsnip::linear_reg() - -wf <- Update_model(wf, lm_model) -wf - -wf <- Remove_model(wf) -wf -} -\seealso{ -\code{\link[workflows:add_model]{workflows::add_model()}} -\itemize{ -\item \code{Add_model()} adds a parsnip model to the \code{epi_workflow}. -\item \code{Remove_model()} removes the model specification as well as any fitted -model object. Any extra formulas are also removed. -\item \code{Update_model()} first removes the model then adds the new -specification to the workflow. -} -} diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index e4079568d..66757f74b 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -241,7 +241,7 @@ confirmed_incidence_num <- pub_covidcast( geo_type = "state", time_values = epirange(20200301, 20211231), geo_values = states, - issues = epirange(20000101,20211231) + issues = epirange(20000101, 20211231) ) %>% select(geo_value, time_value, version = issue, cases = value) %>% arrange(geo_value, time_value) %>% @@ -254,7 +254,7 @@ deaths_incidence_num <- pub_covidcast( geo_type = "state", time_values = epirange(20200301, 20211231), geo_values = states, - issues = epirange(20000101,20211231) + issues = epirange(20000101, 20211231) ) %>% select(geo_value, time_value, version = issue, deaths = value) %>% arrange(geo_value, time_value) %>% @@ -267,9 +267,9 @@ confirmed_incidence_prop <- pub_covidcast( geo_type = "state", time_values = epirange(20200301, 20211231), geo_values = states, - issues = epirange(20000101,20211231) + issues = epirange(20000101, 20211231) ) %>% - select(geo_value, time_value, version = issue, case_rate = value) %>% + select(geo_value, time_value, version = issue, case_rate = value) %>% arrange(geo_value, time_value) %>% as_epi_archive(compactify = FALSE) @@ -280,22 +280,24 @@ deaths_incidence_prop <- pub_covidcast( geo_type = "state", time_values = epirange(20200301, 20211231), geo_values = states, - issues = epirange(20000101,20211231) + issues = epirange(20000101, 20211231) ) %>% - select(geo_value, time_value, version = issue, death_rate = value) %>% + select(geo_value, time_value, version = issue, death_rate = value) %>% arrange(geo_value, time_value) %>% as_epi_archive(compactify = FALSE) x <- epix_merge( - epix_merge(confirmed_incidence_num, deaths_incidence_num, - sync = "locf", compactify = FALSE), - epix_merge(confirmed_incidence_prop, deaths_incidence_prop, - sync = "locf", compactify = FALSE), - sync = "locf", - compactify = TRUE + epix_merge(confirmed_incidence_num, deaths_incidence_num, + sync = "locf", compactify = FALSE + ), + epix_merge(confirmed_incidence_prop, deaths_incidence_prop, + sync = "locf", compactify = FALSE + ), + sync = "locf", + compactify = TRUE ) -fc_time_values <- seq( +fc_time_values <- seq( from = as.Date("2020-09-01"), to = as.Date("2021-12-31"), by = "1 month" @@ -314,16 +316,18 @@ x <- x %>% ungroup() %>% rename(death_rate_7d_av = slide_value_death_rate) } - ) %>% + ) %>% rename(version = time_value) %>% - rename(time_value = slide_value_time_value, - geo_value = slide_value_geo_value, - cases = slide_value_cases, - deaths = slide_value_deaths, - case_rate = slide_value_case_rate, - death_rate = slide_value_death_rate, - case_rate_7d_av = slide_value_case_rate_7d_av, - death_rate_7d_av = slide_value_death_rate_7d_av) %>% + rename( + time_value = slide_value_time_value, + geo_value = slide_value_geo_value, + cases = slide_value_cases, + deaths = slide_value_deaths, + case_rate = slide_value_case_rate, + death_rate = slide_value_death_rate, + case_rate_7d_av = slide_value_case_rate_7d_av, + death_rate_7d_av = slide_value_death_rate_7d_av + ) %>% as_epi_archive(compactify = TRUE) ``` @@ -336,14 +340,15 @@ engine <- quantile_reg() forecaster <- function(x, gk, rtv) { map(aheads, function(ahead) { - arx_forecaster(epi_data = x, - outcome = "death_rate_7d_av", - predictors = c("death_rate_7d_av","case_rate_7d_av"), - trainer = engine, - args_list = arx_args_list(lags = lags, ahead = ahead) - ) %>% - .$predictions - } ) %>% + arx_forecaster( + epi_data = x, + outcome = "death_rate_7d_av", + predictors = c("death_rate_7d_av", "case_rate_7d_av"), + trainer = engine, + args_list = arx_args_list(lags = lags, ahead = ahead) + ) %>% + .$predictions + }) %>% bind_rows() } ``` @@ -352,10 +357,12 @@ We can now use our forecaster function that we've created and use it in the pipe ```{r running-arx-forecaster} x_result <- x %>% - epix_slide(forecaster, before = 120, ref_time_values = fc_time_values, - names_sep = NULL) %>% + epix_slide(forecaster, + before = 120, ref_time_values = fc_time_values, + names_sep = NULL + ) %>% mutate(engine_type = engine$engine) %>% - as_epi_df() + as_epi_df() x_result$ahead_val <- x_result$target_date - x_result$forecast_date x_latest <- epix_as_of(x, max_version = max(x$versions_end)) @@ -364,10 +371,10 @@ x_latest <- epix_as_of(x, max_version = max(x$versions_end)) Now we plot both the actual and predicted 7 day average of the death rate for the chosen states ```{r plot-arx-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} -keep <- c("ca","ny","mi", "az") +keep <- c("ca", "ny", "mi", "az") fc_states <- x_result %>% filter(geo_value %in% keep) %>% - pivot_quantiles_wider(.pred_distn) + pivot_quantiles_wider(.pred_distn) x_latest_states <- x_latest %>% filter(geo_value %in% keep) From 9af9373c0dd9a2c2e6e9b9bba330d959a72584c4 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 20 Jun 2024 15:53:11 -0700 Subject: [PATCH 263/382] document: document --- man/Add_model.Rd | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 man/Add_model.Rd diff --git a/man/Add_model.Rd b/man/Add_model.Rd new file mode 100644 index 000000000..6bf6b6b02 --- /dev/null +++ b/man/Add_model.Rd @@ -0,0 +1,108 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/model-methods.R +\name{Add_model} +\alias{Add_model} +\alias{Remove_model} +\alias{Update_model} +\alias{Add_model.epi_workflow} +\alias{Remove_model.epi_workflow} +\alias{Update_model.epi_workflow} +\alias{Add_model.workflow} +\alias{Remove_model.workflow} +\alias{Update_model.workflow} +\alias{add_model} +\alias{remove_model} +\alias{update_model} +\title{Add a model to an \code{epi_workflow}} +\usage{ +Add_model(x, spec, ..., formula = NULL) + +Remove_model(x) + +Update_model(x, spec, ..., formula = NULL) + +\method{Add_model}{epi_workflow}(x, spec, ..., formula = NULL) + +\method{Remove_model}{epi_workflow}(x) + +\method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) + +\method{Add_model}{workflow}(x, spec, ..., formula = NULL) + +\method{Remove_model}{workflow}(x) + +\method{Update_model}{workflow}(x, spec, ..., formula = NULL) + +add_model(x, spec, ..., formula = NULL) + +remove_model(x) + +update_model(x, spec, ..., formula = NULL) +} +\arguments{ +\item{x}{An \code{epi_workflow}.} + +\item{spec}{A parsnip model specification.} + +\item{...}{Not used.} + +\item{formula}{An optional formula override to specify the terms of the +model. Typically, the terms are extracted from the formula or recipe +preprocessing methods. However, some models (like survival and bayesian +models) use the formula not to preprocess, but to specify the structure +of the model. In those cases, a formula specifying the model structure +must be passed unchanged into the model call itself. This argument is +used for those purposes.} +} +\value{ +\code{x}, updated with a new, updated, or removed model. +} +\description{ +Add a model to an \code{epi_workflow} +} +\details{ +Has the same behaviour as \code{\link[workflows:add_model]{workflows::add_model()}} but also ensures +that the returned object is an \code{epi_workflow}. + +This family is called \verb{Add_*} / \verb{Update_*} / \verb{Remove_*} to avoid +masking the related functions in \code{{workflows}}. We also provide +aliases with the lower-case names. However, in the event that +\code{{workflows}} is loaded after \code{{epipredict}}, these may fail to function +properly. +} +\examples{ +jhu <- case_death_rate_subset \%>\% + dplyr::filter( + time_value > "2021-11-01", + geo_value \%in\% c("ak", "ca", "ny") + ) + +r <- epi_recipe(jhu) \%>\% + step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% + step_epi_ahead(death_rate, ahead = 7) + +rf_model <- rand_forest(mode = "regression") + +wf <- epi_workflow(r) + +wf <- wf \%>\% Add_model(rf_model) +wf + +lm_model <- parsnip::linear_reg() + +wf <- Update_model(wf, lm_model) +wf + +wf <- Remove_model(wf) +wf +} +\seealso{ +\code{\link[workflows:add_model]{workflows::add_model()}} +\itemize{ +\item \code{Add_model()} adds a parsnip model to the \code{epi_workflow}. +\item \code{Remove_model()} removes the model specification as well as any fitted +model object. Any extra formulas are also removed. +\item \code{Update_model()} first removes the model then adds the new +specification to the workflow. +} +} From 8aa8cef4d4edba6074e8a18533181ac6a564f68c Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Thu, 20 Jun 2024 16:19:26 -0700 Subject: [PATCH 264/382] removing redundancies --- vignettes/articles/sliding.Rmd | 43 ++++------------------------------ 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 66757f74b..421784db0 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -234,32 +234,6 @@ We will now employ a forecaster that uses properly-versioned data (that would ha # loading in the data states <- "*" -confirmed_incidence_num <- pub_covidcast( - source = "jhu-csse", - signals = "confirmed_incidence_num", - time_type = "day", - geo_type = "state", - time_values = epirange(20200301, 20211231), - geo_values = states, - issues = epirange(20000101, 20211231) -) %>% - select(geo_value, time_value, version = issue, cases = value) %>% - arrange(geo_value, time_value) %>% - as_epi_archive(compactify = FALSE) - -deaths_incidence_num <- pub_covidcast( - source = "jhu-csse", - signals = "deaths_incidence_num", - time_type = "day", - geo_type = "state", - time_values = epirange(20200301, 20211231), - geo_values = states, - issues = epirange(20000101, 20211231) -) %>% - select(geo_value, time_value, version = issue, deaths = value) %>% - arrange(geo_value, time_value) %>% - as_epi_archive(compactify = FALSE) - confirmed_incidence_prop <- pub_covidcast( source = "jhu-csse", signals = "confirmed_incidence_prop", @@ -286,16 +260,6 @@ deaths_incidence_prop <- pub_covidcast( arrange(geo_value, time_value) %>% as_epi_archive(compactify = FALSE) -x <- epix_merge( - epix_merge(confirmed_incidence_num, deaths_incidence_num, - sync = "locf", compactify = FALSE - ), - epix_merge(confirmed_incidence_prop, deaths_incidence_prop, - sync = "locf", compactify = FALSE - ), - sync = "locf", - compactify = TRUE -) fc_time_values <- seq( from = as.Date("2020-09-01"), @@ -303,7 +267,10 @@ fc_time_values <- seq( by = "1 month" ) -# computing the 7-day average of the rates +x <- epix_merge(confirmed_incidence_prop, deaths_incidence_prop, + sync = "locf" +) + x <- x %>% epix_slide( before = 365000L, ref_time_values = fc_time_values, @@ -321,8 +288,6 @@ x <- x %>% rename( time_value = slide_value_time_value, geo_value = slide_value_geo_value, - cases = slide_value_cases, - deaths = slide_value_deaths, case_rate = slide_value_case_rate, death_rate = slide_value_death_rate, case_rate_7d_av = slide_value_case_rate_7d_av, From 637c2d9997b2882c28dd7537c9b37e69fb144abb Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Mon, 24 Jun 2024 14:26:20 -0700 Subject: [PATCH 265/382] fixing whitespacing caused by RStudio (wrapping) --- vignettes/articles/sliding.Rmd | 111 +++++++++++++++++++++++++++------ 1 file changed, 93 insertions(+), 18 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 421784db0..6611d48f3 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -25,15 +25,39 @@ library(purrr) # Demonstrations of sliding AR and ARX forecasters -A key function from the epiprocess package is `epi_slide()`, which allows the user to apply a function or formula-based computation over variables in an `epi_df` over a running window of `n` time steps (see the following `epiprocess` vignette to go over the basics of the function: ["Slide a computation over signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). The equivalent sliding method for an `epi_archive` object can be called by using the wrapper function `epix_slide()` (refer to the following vignette for the basics of the function: ["Work with archive objects and data revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The key difference from `epi_slide()` is that it performs version-aware computations. That is, the function only uses data that would have been available as of time t for that reference time. - -In this vignette, we use `epi_slide()` and `epix_slide()` for backtesting our `arx_forecaster` on historical COVID-19 case data from the US and from Canada. More precisely, we first demonstrate using `epi_slide()` to slide ARX forecasters over an `epi_df` object and compare the results obtained from using different forecasting engines. We then compare the results from version-aware and unaware forecasting, where the former is obtained from applying `epix_slide()` to the `epi_archive` object, while the latter is obtained from applying `epi_slide()` to the latest snapshot of the data. +A key function from the epiprocess package is `epi_slide()`, which allows the +user to apply a function or formula-based computation over variables in an +`epi_df` over a running window of `n` time steps (see the following `epiprocess` +vignette to go over the basics of the function: ["Slide a computation over +signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). +The equivalent sliding method for an `epi_archive` object can be called by using +the wrapper function `epix_slide()` (refer to the following vignette for the +basics of the function: ["Work with archive objects and data +revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The +key difference from `epi_slide()` is that it performs version-aware +computations. That is, the function only uses data that would have been +available as of time t for that reference time. + +In this vignette, we use `epi_slide()` and `epix_slide()` for backtesting our +`arx_forecaster` on historical COVID-19 case data from the US and from Canada. +More precisely, we first demonstrate using `epi_slide()` to slide ARX +forecasters over an `epi_df` object and compare the results obtained from using +different forecasting engines. We then compare the results from version-aware +and unaware forecasting, where the former is obtained from applying +`epix_slide()` to the `epi_archive` object, while the latter is obtained from +applying `epi_slide()` to the latest snapshot of the data. ## Comparing different forecasting engines ### Example using CLI and case data from US states -First, we download the version history (ie. archive) of the percentage of doctor's visits with CLI (COVID-like illness) computed from medical insurance claims and the number of new confirmed COVID-19 cases per 100,000 population (daily) for all 50 states from the COVIDcast API. We process as before, with the modification that we use `sync = locf` in `epix_merge()` so that the last version of each observation can be carried forward to extrapolate unavailable versions for the less up-to-date input archive. +First, we download the version history (ie. archive) of the percentage of +doctor's visits with CLI (COVID-like illness) computed from medical insurance +claims and the number of new confirmed COVID-19 cases per 100,000 population +(daily) for all 50 states from the COVIDcast API. We process as before, with the +modification that we use `sync = locf` in `epix_merge()` so that the last +version of each observation can be carried forward to extrapolate unavailable +versions for the less up-to-date input archive. ```{r grab-epi-data} theme_set(theme_bw()) @@ -51,9 +75,13 @@ x <- epix_merge( rm(y) ``` -After obtaining the latest snapshot of the data, we produce forecasts on that data using the default engine of simple linear regression and compare to a random forest. +After obtaining the latest snapshot of the data, we produce forecasts on that +data using the default engine of simple linear regression and compare to a +random forest. -Note that all of the warnings about the forecast date being less than the most recent update date of the data have been suppressed to avoid cluttering the output. +Note that all of the warnings about the forecast date being less than the most +recent update date of the data have been suppressed to avoid cluttering the +output. ```{r make-arx-kweek, warning = FALSE} # Latest snapshot of data, and forecast dates @@ -102,9 +130,15 @@ fc <- bind_rows( pivot_quantiles_wider(fc_.pred_distn) ``` -Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the target (respecting time stamps and locations) along with lags of the features (here, the response and doctors visits), estimates a forecasting model using the specified engine, creates predictions, and non-parametric confidence bands. +Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the +target (respecting time stamps and locations) along with lags of the features +(here, the response and doctors visits), estimates a forecasting model using the +specified engine, creates predictions, and non-parametric confidence bands. -To see how the predictions compare, we plot them on top of the latest case rates. Note that even though we've fitted the model on all states, we'll just display the results for two states, California (CA) and Florida (FL), to get a sense of the model performance while keeping the graphic simple. +To see how the predictions compare, we plot them on top of the latest case +rates. Note that even though we've fitted the model on all states, we'll just +display the results for two states, California (CA) and Florida (FL), to get a +sense of the model performance while keeping the graphic simple. ```{r plot-arx, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) @@ -126,17 +160,39 @@ ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + theme(legend.position = "none") ``` -For the two states of interest, simple linear regression clearly performs better than random forest in terms of accuracy of the predictions and does not result in such in overconfident predictions (overly narrow confidence bands). Though, in general, neither approach produces amazingly accurate forecasts. This could be because the behaviour is rather different across states and the effects of other notable factors such as age and public health measures may be important to account for in such forecasting. Including such factors as well as making enhancements such as correcting for outliers are some improvements one could make to this simple model.[^1] +For the two states of interest, simple linear regression clearly performs better +than random forest in terms of accuracy of the predictions and does not result +in such in overconfident predictions (overly narrow confidence bands). Though, +in general, neither approach produces amazingly accurate forecasts. This could +be because the behaviour is rather different across states and the effects of +other notable factors such as age and public health measures may be important to +account for in such forecasting. Including such factors as well as making +enhancements such as correcting for outliers are some improvements one could +make to this simple model.[^1] -[^1]: Note that, despite the above caveats, simple models like this tend to out-perform many far more complicated models in the online Covid forecasting due to those models high variance predictions. +[^1]: Note that, despite the above caveats, simple models like this tend to +out-perform many far more complicated models in the online Covid forecasting due +to those models high variance predictions. ### Example using case data from Canada -By leveraging the flexibility of `epiprocess`, we can apply the same techniques to data from other sources. Since some collaborators are in British Columbia, Canada, we'll do essentially the same thing for Canada as we did above. +By leveraging the flexibility of `epiprocess`, we can apply the same techniques +to data from other sources. Since some collaborators are in British Columbia, +Canada, we'll do essentially the same thing for Canada as we did above. -The [COVID-19 Canada Open Data Working Group](https://opencovid.ca/) collects daily time series data on COVID-19 cases, deaths, recoveries, testing and vaccinations at the health region and province levels. Data are collected from publicly available sources such as government datasets and news releases. Unfortunately, there is no simple versioned source, so we have created our own from the Github commit history. +The [COVID-19 Canada Open Data Working Group](https://opencovid.ca/) collects +daily time series data on COVID-19 cases, deaths, recoveries, testing and +vaccinations at the health region and province levels. Data are collected from +publicly available sources such as government datasets and news releases. +Unfortunately, there is no simple versioned source, so we have created our own +from the Github commit history. -First, we load versioned case rates at the provincial level. After converting these to 7-day averages (due to highly variable provincial reporting mismatches), we then convert the data to an `epi_archive` object, and extract the latest version from it. Finally, we run the same forcasting exercise as for the American data, but here we compare the forecasts produced from using simple linear regression with those from using boosted regression trees. +First, we load versioned case rates at the provincial level. After converting +these to 7-day averages (due to highly variable provincial reporting +mismatches), we then convert the data to an `epi_archive` object, and extract +the latest version from it. Finally, we run the same forcasting exercise as for +the American data, but here we compare the forecasts produced from using simple +linear regression with those from using boosted regression trees. ```{r get-can-fc, warning = FALSE} # source("drafts/canada-case-rates.R) @@ -222,13 +278,26 @@ ggplot( theme(legend.position = "none") ``` -Both approaches tend to produce quite volatile forecasts (point predictions) and/or are overly confident (very narrow bands), particularly when boosted regression trees are used. But as this is meant to be a simple demonstration of sliding with different engines in `arx_forecaster`, we may devote another vignette to work on improving the predictive modelling using the suite of tools available in epipredict. +Both approaches tend to produce quite volatile forecasts (point predictions) +and/or are overly confident (very narrow bands), particularly when boosted +regression trees are used. But as this is meant to be a simple demonstration of +sliding with different engines in `arx_forecaster`, we may devote another +vignette to work on improving the predictive modelling using the suite of tools +available in epipredict. ## Version-aware and unaware forecasting ### Example using case data from US states -We will now employ a forecaster that uses properly-versioned data (that would have been available in real-time) to forecast the 7 day average of future COVID-19 case rates from current and past COVID-19 case rates and death rates for all states. That is, we can make forecasts on the archive, `x`, and compare those to forecasts on the latest data, `x_latest` using the same general set-up as above. For version-aware forecasting, note that `x` is fed into `epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into `epi_slide()`. Note that in this example, we use a geo-pooled approach (using combined data from all US states and territories) to train our model. +We will now employ a forecaster that uses properly-versioned data (that would +have been available in real-time) to forecast the 7 day average of future +COVID-19 case rates from current and past COVID-19 case rates and death rates +for all states. That is, we can make forecasts on the archive, `x`, and compare +those to forecasts on the latest data, `x_latest` using the same general set-up +as above. For version-aware forecasting, note that `x` is fed into +`epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into +`epi_slide()`. Note that in this example, we use a geo-pooled approach (using +combined data from all US states and territories) to train our model. ```{r load-data} # loading in the data @@ -318,7 +387,10 @@ forecaster <- function(x, gk, rtv) { } ``` -We can now use our forecaster function that we've created and use it in the pipeline for forecasting the predictions. We store the predictions into the `x_result` variable and calculate the most up to date version of the data in the epiarchive and store it as `x_latest`. +We can now use our forecaster function that we've created and use it in the +pipeline for forecasting the predictions. We store the predictions into the +`x_result` variable and calculate the most up to date version of the data in the +epiarchive and store it as `x_latest`. ```{r running-arx-forecaster} x_result <- x %>% @@ -333,7 +405,8 @@ x_result$ahead_val <- x_result$target_date - x_result$forecast_date x_latest <- epix_as_of(x, max_version = max(x$versions_end)) ``` -Now we plot both the actual and predicted 7 day average of the death rate for the chosen states +Now we plot both the actual and predicted 7 day average of the death rate for +the chosen states ```{r plot-arx-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} keep <- c("ca", "ny", "mi", "az") @@ -359,4 +432,6 @@ ggplot(fc_states, aes(target_date, group = time_value, fill = engine_type)) + theme(legend.position = "none") ``` -We shall leave it to the reader to try the above version aware and unaware forecasting exercise on the Canadian case rate data. The above code for the American state data should be readily adaptable for this purpose. +We shall leave it to the reader to try the above version aware and unaware +forecasting exercise on the Canadian case rate data. The above code for the +American state data should be readily adaptable for this purpose. From 2a2b292da7424a4378ec5fe578ec300576d35912 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 25 Jun 2024 13:50:58 -0700 Subject: [PATCH 266/382] changed unclear variable names and removed unused parameters in forecaster() --- vignettes/articles/sliding.Rmd | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 6611d48f3..f7c4ca331 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -368,18 +368,15 @@ x <- x %>% Here we specify the ARX model. ```{r make-arx-model} -lags <- c(0, 7, 14, 21) aheads <- c(7, 14, 21) -engine <- quantile_reg() - -forecaster <- function(x, gk, rtv) { +forecaster <- function(x) { map(aheads, function(ahead) { arx_forecaster( epi_data = x, outcome = "death_rate_7d_av", predictors = c("death_rate_7d_av", "case_rate_7d_av"), - trainer = engine, - args_list = arx_args_list(lags = lags, ahead = ahead) + trainer = quantile_reg(), + args_list = arx_args_list(lags = c(0, 7, 14, 21), ahead = ahead) ) %>% .$predictions }) %>% @@ -394,11 +391,11 @@ epiarchive and store it as `x_latest`. ```{r running-arx-forecaster} x_result <- x %>% - epix_slide(forecaster, + epix_slide(~forecaster(.x), before = 120, ref_time_values = fc_time_values, names_sep = NULL ) %>% - mutate(engine_type = engine$engine) %>% + mutate(engine_type = quantile_reg()$engine) %>% as_epi_df() x_result$ahead_val <- x_result$target_date - x_result$forecast_date @@ -409,12 +406,12 @@ Now we plot both the actual and predicted 7 day average of the death rate for the chosen states ```{r plot-arx-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} -keep <- c("ca", "ny", "mi", "az") +states_to_show <- c("ca", "ny", "mi", "az") fc_states <- x_result %>% - filter(geo_value %in% keep) %>% + filter(geo_value %in% states_to_show) %>% pivot_quantiles_wider(.pred_distn) -x_latest_states <- x_latest %>% filter(geo_value %in% keep) +x_latest_states <- x_latest %>% filter(geo_value %in% states_to_show) ggplot(fc_states, aes(target_date, group = time_value, fill = engine_type)) + geom_line( From 54385b77b3f95dd30b75da345f9f5b5b6e260a25 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 25 Jun 2024 15:28:37 -0700 Subject: [PATCH 267/382] style check --- vignettes/articles/sliding.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index f7c4ca331..445a2982c 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -391,7 +391,7 @@ epiarchive and store it as `x_latest`. ```{r running-arx-forecaster} x_result <- x %>% - epix_slide(~forecaster(.x), + epix_slide(~ forecaster(.x), before = 120, ref_time_values = fc_time_values, names_sep = NULL ) %>% From ff10f36369c0660a394ff5b3ebdbc7d3fb5ee2e9 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 27 Jun 2024 15:35:24 -0700 Subject: [PATCH 268/382] doc: fix step_lag_difference example --- R/step_lag_difference.R | 5 +++-- man/step_lag_difference.Rd | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index 21878eaa7..9ee3c3567 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -16,11 +16,12 @@ #' @export #' @examples #' r <- epi_recipe(case_death_rate_subset) %>% -#' step_lag_difference(case_rate, death_rate, horizon = c(7, 14)) +#' step_lag_difference(case_rate, death_rate, horizon = c(7, 14)) %>% +#' step_epi_naomit() #' r #' #' r %>% -#' recipes::prep() %>% +#' recipes::prep(case_death_rate_subset) %>% #' recipes::bake(case_death_rate_subset) step_lag_difference <- function(recipe, diff --git a/man/step_lag_difference.Rd b/man/step_lag_difference.Rd index b06abe43c..9f1a5c96d 100644 --- a/man/step_lag_difference.Rd +++ b/man/step_lag_difference.Rd @@ -56,11 +56,12 @@ that will generate one or more new columns of derived data. } \examples{ r <- epi_recipe(case_death_rate_subset) \%>\% - step_lag_difference(case_rate, death_rate, horizon = c(7, 14)) + step_lag_difference(case_rate, death_rate, horizon = c(7, 14)) \%>\% + step_epi_naomit() r r \%>\% - recipes::prep() \%>\% + recipes::prep(case_death_rate_subset) \%>\% recipes::bake(case_death_rate_subset) } \seealso{ From c7ce21441a18d2611377a10e3e37d1f64152cdc9 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 27 Jun 2024 15:46:28 -0700 Subject: [PATCH 269/382] Update R/step_lag_difference.R Co-authored-by: Daniel McDonald --- R/step_lag_difference.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index 9ee3c3567..e954bd9a0 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -21,8 +21,8 @@ #' r #' #' r %>% -#' recipes::prep(case_death_rate_subset) %>% -#' recipes::bake(case_death_rate_subset) +#' prep(case_death_rate_subset) %>% +#' bake(case_death_rate_subset) step_lag_difference <- function(recipe, ..., From ff95a70f4d3f41a07b0d6756c6c181d01085b990 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 27 Jun 2024 15:49:08 -0700 Subject: [PATCH 270/382] doc: lint step_growth_rate example --- R/step_growth_rate.R | 4 ++-- man/step_growth_rate.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index 74cfff284..e5edb18d4 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -39,8 +39,8 @@ #' r #' #' r %>% -#' recipes::prep() %>% -#' recipes::bake(case_death_rate_subset) +#' prep(case_death_rate_subset) %>% +#' bake(case_death_rate_subset) step_growth_rate <- function(recipe, ..., diff --git a/man/step_growth_rate.Rd b/man/step_growth_rate.Rd index b409135b1..46d8b92f6 100644 --- a/man/step_growth_rate.Rd +++ b/man/step_growth_rate.Rd @@ -88,8 +88,8 @@ r <- epi_recipe(case_death_rate_subset) \%>\% r r \%>\% - recipes::prep() \%>\% - recipes::bake(case_death_rate_subset) + prep(case_death_rate_subset) \%>\% + bake(case_death_rate_subset) } \seealso{ Other row operation steps: From 9fd37ca27140177c89a5bd0b8f56210f902fa5c1 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 27 Jun 2024 16:53:30 -0700 Subject: [PATCH 271/382] doc: lint a few more examples --- man/step_lag_difference.Rd | 4 +- tests/testthat/test-check_enough_train_data.R | 44 +++++++++---------- tests/testthat/test-step_training_window.R | 32 +++++++------- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/man/step_lag_difference.Rd b/man/step_lag_difference.Rd index 9f1a5c96d..123265ea6 100644 --- a/man/step_lag_difference.Rd +++ b/man/step_lag_difference.Rd @@ -61,8 +61,8 @@ r <- epi_recipe(case_death_rate_subset) \%>\% r r \%>\% - recipes::prep(case_death_rate_subset) \%>\% - recipes::bake(case_death_rate_subset) + prep(case_death_rate_subset) \%>\% + bake(case_death_rate_subset) } \seealso{ Other row operation steps: diff --git a/tests/testthat/test-check_enough_train_data.R b/tests/testthat/test-check_enough_train_data.R index 02b9e35e4..502ea06f1 100644 --- a/tests/testthat/test-check_enough_train_data.R +++ b/tests/testthat/test-check_enough_train_data.R @@ -19,23 +19,23 @@ test_that("check_enough_train_data works on pooled data", { expect_no_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n, drop_na = FALSE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) # Check both column don't have enough data expect_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n + 1, drop_na = FALSE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL), + prep(toy_epi_df) %>% + bake(new_data = NULL), regexp = "The following columns don't have enough data" ) # Check drop_na works expect_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 1, drop_na = TRUE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) }) @@ -44,23 +44,23 @@ test_that("check_enough_train_data works on unpooled data", { expect_no_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = n, epi_keys = "geo_value", drop_na = FALSE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) # Check one column don't have enough data expect_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = n + 1, epi_keys = "geo_value", drop_na = FALSE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL), + prep(toy_epi_df) %>% + bake(new_data = NULL), regexp = "The following columns don't have enough data" ) # Check drop_na works expect_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 3, epi_keys = "geo_value", drop_na = TRUE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) }) @@ -68,8 +68,8 @@ test_that("check_enough_train_data outputs the correct recipe values", { expect_no_error( p <- epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 2) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) expect_equal(nrow(p), 2 * n) @@ -93,15 +93,15 @@ test_that("check_enough_train_data only checks train data", { expect_no_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = n - 2, epi_keys = "geo_value") %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = toy_test_data) + prep(toy_epi_df) %>% + bake(new_data = toy_test_data) ) # Same thing, but skip = FALSE expect_no_error( epi_recipe(toy_epi_df) %>% check_enough_train_data(y, n = n - 2, epi_keys = "geo_value", skip = FALSE) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = toy_test_data) + prep(toy_epi_df) %>% + bake(new_data = toy_test_data) ) }) @@ -111,14 +111,14 @@ test_that("check_enough_train_data works with all_predictors() downstream of con epi_recipe(toy_epi_df) %>% step_epi_lag(x, lag = c(1, 2)) %>% check_enough_train_data(all_predictors(), y, n = 2 * n - 6) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) expect_error( epi_recipe(toy_epi_df) %>% step_epi_lag(x, lag = c(1, 2)) %>% check_enough_train_data(all_predictors(), y, n = 2 * n - 5) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) ) }) diff --git a/tests/testthat/test-step_training_window.R b/tests/testthat/test-step_training_window.R index 9ec1e5982..f49668a40 100644 --- a/tests/testthat/test-step_training_window.R +++ b/tests/testthat/test-step_training_window.R @@ -11,8 +11,8 @@ toy_epi_df <- tibble::tibble( test_that("step_training_window works with default n_recent", { p <- epi_recipe(y ~ x, data = toy_epi_df) %>% step_training_window() %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) expect_equal(nrow(p), 100L) expect_equal(ncol(p), 4L) @@ -28,8 +28,8 @@ test_that("step_training_window works with default n_recent", { test_that("step_training_window works with specified n_recent", { p2 <- epi_recipe(y ~ x, data = toy_epi_df) %>% step_training_window(n_recent = 5) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df) %>% + bake(new_data = NULL) expect_equal(nrow(p2), 10L) expect_equal(ncol(p2), 4L) @@ -48,8 +48,8 @@ test_that("step_training_window does not proceed with specified new_data", { # testing data. p3 <- epi_recipe(y ~ x, data = toy_epi_df) %>% step_training_window(n_recent = 3) %>% - recipes::prep(toy_epi_df) %>% - recipes::bake(new_data = toy_epi_df[1:10, ]) + prep(toy_epi_df) %>% + bake(new_data = toy_epi_df[1:10, ]) expect_equal(nrow(p3), 10L) expect_equal(ncol(p3), 4L) @@ -78,8 +78,8 @@ test_that("step_training_window works with multiple keys", { p4 <- epi_recipe(y ~ x, data = toy_epi_df2) %>% step_training_window(n_recent = 3) %>% - recipes::prep(toy_epi_df2) %>% - recipes::bake(new_data = NULL) + prep(toy_epi_df2) %>% + bake(new_data = NULL) expect_equal(nrow(p4), 12L) expect_equal(ncol(p4), 5L) @@ -112,20 +112,20 @@ test_that("step_training_window and step_naomit interact", { e1 <- epi_recipe(y ~ x, data = tib) %>% step_training_window(n_recent = 3) %>% - recipes::prep(tib) %>% - recipes::bake(new_data = NULL) + prep(tib) %>% + bake(new_data = NULL) e2 <- epi_recipe(y ~ x, data = tib) %>% - recipes::step_naomit() %>% + step_naomit() %>% step_training_window(n_recent = 3) %>% - recipes::prep(tib) %>% - recipes::bake(new_data = NULL) + prep(tib) %>% + bake(new_data = NULL) e3 <- epi_recipe(y ~ x, data = tib) %>% step_training_window(n_recent = 3) %>% - recipes::step_naomit() %>% - recipes::prep(tib) %>% - recipes::bake(new_data = NULL) + step_naomit() %>% + prep(tib) %>% + bake(new_data = NULL) expect_identical(e1, e2) expect_identical(e2, e3) From 7c888f13828d79af6b961e2923706089cb33c7f1 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Thu, 27 Jun 2024 17:12:34 -0700 Subject: [PATCH 272/382] refactor: epi_recipe warns when given non-epi_df --- R/epi_recipe.R | 20 +++++++++++--------- tests/testthat/test-epi_recipe.R | 21 ++++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/R/epi_recipe.R b/R/epi_recipe.R index e5182b99b..b40d7e510 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -20,6 +20,10 @@ epi_recipe.default <- function(x, ...) { if (is.matrix(x) || is.data.frame(x) || tibble::is_tibble(x)) { x <- x[1, , drop = FALSE] } + cli_warn( + "epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various + step_epi_* functions will not work." + ) recipes::recipe(x, ...) } @@ -147,6 +151,10 @@ epi_recipe.formula <- function(formula, data, ...) { data <- data[1, ] # check for minus: if (!epiprocess::is_epi_df(data)) { + cli_warn( + "epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various + step_epi_* functions will not work." + ) return(recipes::recipe(formula, data, ...)) } @@ -333,15 +341,11 @@ update_epi_recipe <- function(x, recipe, ..., blueprint = default_epi_recipe_blu #' illustrations of the different types of updates. #' #' @param x A `epi_workflow` or `epi_recipe` object -#' #' @param which_step the number or name of the step to adjust -#' #' @param ... Used to input a parameter adjustment -#' #' @param blueprint A hardhat blueprint used for fine tuning the preprocessing. #' -#' @return -#' `x`, updated with the adjustment to the specified `epi_recipe` step. +#' @return `x`, updated with the adjustment to the specified `epi_recipe` step. #' #' @export #' @examples @@ -383,8 +387,7 @@ adjust_epi_recipe <- function(x, which_step, ..., blueprint = default_epi_recipe #' @rdname adjust_epi_recipe #' @export -adjust_epi_recipe.epi_workflow <- function( - x, which_step, ..., blueprint = default_epi_recipe_blueprint()) { +adjust_epi_recipe.epi_workflow <- function(x, which_step, ..., blueprint = default_epi_recipe_blueprint()) { recipe <- adjust_epi_recipe(workflows::extract_preprocessor(x), which_step, ...) update_epi_recipe(x, recipe, blueprint = blueprint) @@ -392,8 +395,7 @@ adjust_epi_recipe.epi_workflow <- function( #' @rdname adjust_epi_recipe #' @export -adjust_epi_recipe.epi_recipe <- function( - x, which_step, ..., blueprint = default_epi_recipe_blueprint()) { +adjust_epi_recipe.epi_recipe <- function(x, which_step, ..., blueprint = default_epi_recipe_blueprint()) { if (!(is.numeric(which_step) || is.character(which_step))) { cli::cli_abort( c("`which_step` must be a number or a character.", diff --git a/tests/testthat/test-epi_recipe.R b/tests/testthat/test-epi_recipe.R index d288ec058..75726652d 100644 --- a/tests/testthat/test-epi_recipe.R +++ b/tests/testthat/test-epi_recipe.R @@ -4,20 +4,23 @@ test_that("epi_recipe produces default recipe", { x = 1:5, y = 1:5, time_value = seq(as.Date("2020-01-01"), by = 1, length.out = 5) ) - rec <- recipes::recipe(tib) - rec$template <- rec$template[1, ] - expect_identical(rec, epi_recipe(tib)) + expected_rec <- recipes::recipe(tib) + expected_rec$template <- expected_rec$template[1, ] + expect_warning(rec <- epi_recipe(tib), regexp = "epi_recipe has been called with a non-epi_df object") + expect_identical(expected_rec, rec) expect_equal(nrow(rec$template), 1L) - rec <- recipes::recipe(y ~ x, tib) - rec$template <- rec$template[1, ] - expect_identical(rec, epi_recipe(y ~ x, tib)) + expected_rec <- recipes::recipe(y ~ x, tib) + expected_rec$template <- expected_rec$template[1, ] + expect_warning(rec <- epi_recipe(y ~ x, tib), regexp = "epi_recipe has been called with a non-epi_df object") + expect_identical(expected_rec, rec) expect_equal(nrow(rec$template), 1L) m <- as.matrix(tib) - rec <- recipes::recipe(m) - rec$template <- rec$template[1, ] - expect_identical(rec, epi_recipe(m)) + expected_rec <- recipes::recipe(m) + expected_rec$template <- expected_rec$template[1, ] + expect_warning(rec <- epi_recipe(m), regexp = "epi_recipe has been called with a non-epi_df object") + expect_identical(expected_rec, rec) expect_equal(nrow(rec$template), 1L) }) From 0f000a4f4d4746b82ad547e2f902a8fe46225da6 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 28 Jun 2024 10:25:49 -0700 Subject: [PATCH 273/382] doc: version and changelog --- DESCRIPTION | 2 +- NEWS.md | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 12d86602b..50bb77ec2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.15 +Version: 0.0.16 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index c756cb34d..bf3f4d9d5 100644 --- a/NEWS.md +++ b/NEWS.md @@ -43,6 +43,7 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `arx_fcast_epi_workflow()` and `arx_class_epi_workflow()` now default to `trainer = parsnip::logistic_reg()` to match their more canned versions. - add a `forecast()` method simplify generating forecasts -- refactor `bake.epi_recipe()` and remove `epi_juice()`. -- Revise `compat-purrr` to use the r-lang `standalone-*` version (via +- refactor `bake.epi_recipe()` and remove `epi_juice()`. +- Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) +- `epi_recipe()` will now warn when given non-`epi_df` data From 488b9d45f45dd343e5157f69b80bdfbe82c2e969 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 4 Jul 2024 16:06:56 -0700 Subject: [PATCH 274/382] bug fixes? --- R/layer_add_forecast_date.R | 6 +++--- R/layer_add_target_date.R | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 5bd6b6918..2174b7330 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -87,11 +87,11 @@ layer_add_forecast_date_new <- function(forecast_date, id) { #' @export slather.layer_add_forecast_date <- function(object, components, workflow, new_data, ...) { if (is.null(object$forecast_date)) { - max_time_value <- max( + max_time_value <- as.Date(max( workflows::extract_preprocessor(workflow)$max_time_value, workflow$fit$meta$max_time_value, max(new_data$time_value) - ) + )) forecast_date <- max_time_value } else { forecast_date <- object$forecast_date @@ -102,7 +102,7 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da )$time_type if (expected_time_type == "week") expected_time_type <- "day" validate_date(forecast_date, expected_time_type, - call = expr(layer_add_forecast_date()) + call = rlang::expr(layer_add_forecast_date()) ) forecast_date <- coerce_time_type(forecast_date, expected_time_type) object$forecast_date <- forecast_date diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index f03bd6154..23aeb4091 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -101,17 +101,17 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data the_frosting, "layer_add_forecast_date", "forecast_date" ))) { validate_date(forecast_date, expected_time_type, - call = expr(layer_add_forecast_date()) + call = rlang::expr(layer_add_forecast_date()) ) forecast_date <- coerce_time_type(forecast_date, expected_time_type) ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") target_date <- forecast_date + ahead } else { - max_time_value <- max( + max_time_value <- as.Date(max( workflows::extract_preprocessor(workflow)$max_time_value, workflow$fit$meta$max_time_value, max(new_data$time_value) - ) + )) ahead <- extract_argument(the_recipe, "step_epi_ahead", "ahead") target_date <- max_time_value + ahead } From 055637d0428bb8c62bc31cd14935e30572ed60fb Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 7 Jul 2024 18:01:19 -0700 Subject: [PATCH 275/382] runs --- NAMESPACE | 1 + R/epipredict-package.R | 2 +- R/make_quantile_rand_forest.R | 116 ++++++++++++++++++++++++++++++++++ R/make_quantile_reg.R | 4 +- R/zzz.R | 1 + 5 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 R/make_quantile_rand_forest.R diff --git a/NAMESPACE b/NAMESPACE index 708c91e06..7fab49a12 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -243,6 +243,7 @@ importFrom(rlang,":=") importFrom(rlang,abort) importFrom(rlang,as_function) importFrom(rlang,caller_env) +importFrom(rlang,expr) importFrom(rlang,global_env) importFrom(rlang,inject) importFrom(rlang,is_logical) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 4bd37c519..959747305 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,7 +1,7 @@ ## usethis namespace: start #' @importFrom tibble tibble #' @importFrom rlang := !! %||% as_function global_env set_names !!! -#' @importFrom rlang is_logical is_true inject +#' @importFrom rlang is_logical is_true inject expr #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar diff --git a/R/make_quantile_rand_forest.R b/R/make_quantile_rand_forest.R new file mode 100644 index 000000000..eeefaf43c --- /dev/null +++ b/R/make_quantile_rand_forest.R @@ -0,0 +1,116 @@ + +make_quantile_random_forest <- function() { + model_env <- get_model_env() + if (!("quantile_reg" %in% model_env$models)) { + parsnip::set_new_model("quantile_reg") + parsnip::set_model_mode("quantile_reg", "regression") + } + parsnip::set_model_engine("quantile_reg", "regression", "grf") + parsnip::set_dependency("quantile_reg", "grf", "grf", mode = "regression") + + + + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "mtry", + original = "mtry", + func = list(pkg = "dials", fun = "mtry"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "trees", + original = "num.trees", + func = list(pkg = "dials", fun = "trees"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "min_n", + original = "min.node.size", + func = list(pkg = "dials", fun = "min_n"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "quantile_levels", + original = "quantiles", + func = list(pkg = "grf", fun = "quantile_forest"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "x", + original = "X", + func = list(pkg = "grf", fun = "quantile_forest"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "grf", + parsnip = "y", + original = "Y", + func = list(pkg = "grf", fun = "quantile_forest"), + has_submodel = FALSE + ) + parsnip::set_fit( + model = "quantile_reg", + eng = "grf", + mode = "regression", + value = list( + interface = "matrix", + protect = c("X", "Y"), + data = c(x = "X", y = "Y"), + func = c(pkg = "grf", fun = "quantile_forest"), + defaults = list( + num.threads = 1, + seed = expr(runif(1, 0, .Machine$integer.max)) + ) + ) + ) + + parsnip::set_encoding( + model = "quantile_reg", + eng = "grf", + mode = "regression", + options = list( + predictor_indicators = "one_hot", + compute_intercept = FALSE, + remove_intercept = FALSE, + allow_sparse_x = FALSE + ) + ) + + process_qrf_preds <- function(x, object) { + quantile_levels <- parsnip::extract_fit_engine(object)$quantiles.orig + x <- x$predictions + out <- lapply(vctrs::vec_chop(x), function(x) sort(drop(x))) + out <- dist_quantiles(out, list(quantile_levels)) + return(dplyr::tibble(.pred = out)) + } + + parsnip::set_pred( + model = "quantile_reg", + eng = "grf", + mode = "regression", + type = "numeric", + value = list( + pre = NULL, + post = process_qrf_preds, + func = c(fun = "predict"), + args = list( + object = quote(object$fit), + newdata = quote(new_data), + seed = expr(sample.int(10 ^ 5, 1)), + verbose = FALSE + ) + ) + ) + + +} diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index 832ef50f8..bec4bb8b6 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -106,7 +106,7 @@ make_quantile_reg <- function() { out <- switch(type, rq = dist_quantiles(unname(as.list(x)), object$quantile_levels), # one quantile rqs = { - x <- lapply(unname(split(x, seq(nrow(x)))), function(q) sort(q)) + x <- lapply(vctrs::vec_chop(x), function(x) sort(drop(x))) dist_quantiles(x, list(object$tau)) }, cli_abort(c( @@ -114,7 +114,7 @@ make_quantile_reg <- function() { i = "See {.fun quantreg::rq}." )) ) - return(data.frame(.pred = out)) + return(dplyr::tibble(.pred = out)) } diff --git a/R/zzz.R b/R/zzz.R index bb7cff9bf..b4a36dfe3 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -8,4 +8,5 @@ make_flatline_reg() make_quantile_reg() make_smooth_quantile_reg() + make_quantile_random_forest() } From e62b20352aba8d5249ef7646bfbc34163df8c6b9 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 7 Jul 2024 19:21:30 -0700 Subject: [PATCH 276/382] don't execute examples conditionally, move engine pkgs to Suggests --- DESCRIPTION | 5 +++-- NAMESPACE | 2 -- R/make_quantile_rand_forest.R | 1 - R/make_quantile_reg.R | 13 ++++++++++--- R/make_smooth_quantile_reg.R | 23 +++++++++++------------ man/quantile_reg.Rd | 11 +++++++++-- man/smooth_quantile_reg.Rd | 22 +++++++++++----------- 7 files changed, 44 insertions(+), 33 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 50bb77ec2..6f09d5707 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,10 +36,8 @@ Imports: glue, hardhat (>= 1.3.0), magrittr, - quantreg, recipes (>= 1.0.4), rlang (>= 1.0.0), - smoothqr, stats, tibble, tidyr, @@ -52,13 +50,16 @@ Suggests: data.table, epidatr (>= 1.0.0), fs, + grf, knitr, lubridate, poissonreg, purrr, + quantreg, ranger, RcppRoll, rmarkdown, + smoothqr, testthat (>= 3.0.0), usethis, xgboost diff --git a/NAMESPACE b/NAMESPACE index 7fab49a12..1cbf6ef5c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -232,7 +232,6 @@ importFrom(ggplot2,autoplot) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(magrittr,"%>%") -importFrom(quantreg,rq) importFrom(recipes,bake) importFrom(recipes,prep) importFrom(rlang,"!!!") @@ -250,7 +249,6 @@ importFrom(rlang,is_logical) importFrom(rlang,is_null) importFrom(rlang,is_true) importFrom(rlang,set_names) -importFrom(smoothqr,smooth_qr) importFrom(stats,as.formula) importFrom(stats,family) importFrom(stats,lm) diff --git a/R/make_quantile_rand_forest.R b/R/make_quantile_rand_forest.R index eeefaf43c..a4e09ca69 100644 --- a/R/make_quantile_rand_forest.R +++ b/R/make_quantile_rand_forest.R @@ -1,4 +1,3 @@ - make_quantile_random_forest <- function() { model_env <- get_model_env() if (!("quantile_reg" %in% model_env$models)) { diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index bec4bb8b6..2b5f45636 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -3,12 +3,13 @@ #' @description #' `quantile_reg()` generates a quantile regression model _specification_ for #' the [tidymodels](https://www.tidymodels.org/) framework. Currently, the -#' only supported engine is "rq" which uses [quantreg::rq()]. +#' only supported engines are "rq", which uses [quantreg::rq()], and "grf", +#' which uses [grf::quantile_forest()]. #' #' @param mode A single character string for the type of model. #' The only possible value for this model is "regression". #' @param engine Character string naming the fitting function. Currently, only -#' "rq" is supported. +#' "rq" and "grf" are supported. #' @param quantile_levels A scalar or vector of values in (0, 1) to determine which #' quantiles to estimate (default is 0.5). #' @@ -16,12 +17,18 @@ #' #' @seealso [fit.model_spec()], [set_engine()] #' -#' @importFrom quantreg rq +#' #' @examples +#' library(quantreg) #' tib <- data.frame(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100)) #' rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) %>% set_engine("rq") #' ff <- rq_spec %>% fit(y ~ ., data = tib) #' predict(ff, new_data = tib) +#' +#' library(grf) +#' grf_spec <- quantile_reg(engine = "grf", quantile_levels = c(.1, .5, .9)) +#' gg <- grf_spec %>% fit(y ~ ., data = tib) +#' predict(gg, new_data = tib) quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0.5) { # Check for correct mode if (mode != "regression") { diff --git a/R/make_smooth_quantile_reg.R b/R/make_smooth_quantile_reg.R index 9ab3a366b..742fed766 100644 --- a/R/make_smooth_quantile_reg.R +++ b/R/make_smooth_quantile_reg.R @@ -21,8 +21,8 @@ #' #' @seealso [fit.model_spec()], [set_engine()] #' -#' @importFrom smoothqr smooth_qr #' @examples +#' library(smoothqr) #' tib <- data.frame( #' y1 = rnorm(100), y2 = rnorm(100), y3 = rnorm(100), #' y4 = rnorm(100), y5 = rnorm(100), y6 = rnorm(100), @@ -62,17 +62,16 @@ #' lines(pl$x, pl$`0.8`, col = "blue") #' lines(pl$x, pl$`0.5`, col = "red") #' -#' if (require("ggplot2")) { -#' ggplot(data.frame(x = x, y = y), aes(x)) + -#' geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + -#' geom_point(aes(y = y), colour = "grey") + # observed data -#' geom_function(fun = sin, colour = "black") + # truth -#' geom_vline(xintercept = fd, linetype = "dashed") + # end of training data -#' geom_line(data = pl, aes(y = `0.5`), colour = "red") + # median prediction -#' theme_bw() + -#' coord_cartesian(xlim = c(0, NA)) + -#' ylab("y") -#' } +#' library(ggplot) +#' ggplot(data.frame(x = x, y = y), aes(x)) + +#' geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + +#' geom_point(aes(y = y), colour = "grey") + # observed data +#' geom_function(fun = sin, colour = "black") + # truth +#' geom_vline(xintercept = fd, linetype = "dashed") + # end of training data +#' geom_line(data = pl, aes(y = `0.5`), colour = "red") + # median prediction +#' theme_bw() + +#' coord_cartesian(xlim = c(0, NA)) + +#' ylab("y") smooth_quantile_reg <- function( mode = "regression", engine = "smoothqr", diff --git a/man/quantile_reg.Rd b/man/quantile_reg.Rd index 8e576ac84..b210a15c9 100644 --- a/man/quantile_reg.Rd +++ b/man/quantile_reg.Rd @@ -11,7 +11,7 @@ quantile_reg(mode = "regression", engine = "rq", quantile_levels = 0.5) The only possible value for this model is "regression".} \item{engine}{Character string naming the fitting function. Currently, only -"rq" is supported.} +"rq" and "grf" are supported.} \item{quantile_levels}{A scalar or vector of values in (0, 1) to determine which quantiles to estimate (default is 0.5).} @@ -19,13 +19,20 @@ quantiles to estimate (default is 0.5).} \description{ \code{quantile_reg()} generates a quantile regression model \emph{specification} for the \href{https://www.tidymodels.org/}{tidymodels} framework. Currently, the -only supported engine is "rq" which uses \code{\link[quantreg:rq]{quantreg::rq()}}. +only supported engines are "rq", which uses \code{\link[quantreg:rq]{quantreg::rq()}}, and "grf", +which uses \code{\link[grf:quantile_forest]{grf::quantile_forest()}}. } \examples{ +library(quantreg) tib <- data.frame(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100)) rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) \%>\% set_engine("rq") ff <- rq_spec \%>\% fit(y ~ ., data = tib) predict(ff, new_data = tib) + +library(grf) +grf_spec <- quantile_reg(engine = "grf", quantile_levels = c(.1, .5, .9)) +gg <- grf_spec \%>\% fit(y ~ ., data = tib) +predict(gg, new_data = tib) } \seealso{ \code{\link[=fit.model_spec]{fit.model_spec()}}, \code{\link[=set_engine]{set_engine()}} diff --git a/man/smooth_quantile_reg.Rd b/man/smooth_quantile_reg.Rd index bd8c012f2..005c98d12 100644 --- a/man/smooth_quantile_reg.Rd +++ b/man/smooth_quantile_reg.Rd @@ -36,6 +36,7 @@ the \href{https://www.tidymodels.org/}{tidymodels} framework. Currently, the only supported engine is \code{\link[smoothqr:smooth_qr]{smoothqr::smooth_qr()}}. } \examples{ +library(smoothqr) tib <- data.frame( y1 = rnorm(100), y2 = rnorm(100), y3 = rnorm(100), y4 = rnorm(100), y5 = rnorm(100), y6 = rnorm(100), @@ -75,17 +76,16 @@ lines(pl$x, pl$`0.2`, col = "blue") lines(pl$x, pl$`0.8`, col = "blue") lines(pl$x, pl$`0.5`, col = "red") -if (require("ggplot2")) { - ggplot(data.frame(x = x, y = y), aes(x)) + - geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + - geom_point(aes(y = y), colour = "grey") + # observed data - geom_function(fun = sin, colour = "black") + # truth - geom_vline(xintercept = fd, linetype = "dashed") + # end of training data - geom_line(data = pl, aes(y = `0.5`), colour = "red") + # median prediction - theme_bw() + - coord_cartesian(xlim = c(0, NA)) + - ylab("y") -} +library(ggplot) +ggplot(data.frame(x = x, y = y), aes(x)) + + geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + + geom_point(aes(y = y), colour = "grey") + # observed data + geom_function(fun = sin, colour = "black") + # truth + geom_vline(xintercept = fd, linetype = "dashed") + # end of training data + geom_line(data = pl, aes(y = `0.5`), colour = "red") + # median prediction + theme_bw() + + coord_cartesian(xlim = c(0, NA)) + + ylab("y") } \seealso{ \code{\link[=fit.model_spec]{fit.model_spec()}}, \code{\link[=set_engine]{set_engine()}} From 585456bd88ef461f4f0779b81cc83f8e8648721b Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 7 Jul 2024 19:26:14 -0700 Subject: [PATCH 277/382] checks pass --- R/make_smooth_quantile_reg.R | 2 +- man/smooth_quantile_reg.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/make_smooth_quantile_reg.R b/R/make_smooth_quantile_reg.R index 742fed766..448ee0fa5 100644 --- a/R/make_smooth_quantile_reg.R +++ b/R/make_smooth_quantile_reg.R @@ -62,7 +62,7 @@ #' lines(pl$x, pl$`0.8`, col = "blue") #' lines(pl$x, pl$`0.5`, col = "red") #' -#' library(ggplot) +#' library(ggplot2) #' ggplot(data.frame(x = x, y = y), aes(x)) + #' geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + #' geom_point(aes(y = y), colour = "grey") + # observed data diff --git a/man/smooth_quantile_reg.Rd b/man/smooth_quantile_reg.Rd index 005c98d12..c6b17dd86 100644 --- a/man/smooth_quantile_reg.Rd +++ b/man/smooth_quantile_reg.Rd @@ -76,7 +76,7 @@ lines(pl$x, pl$`0.2`, col = "blue") lines(pl$x, pl$`0.8`, col = "blue") lines(pl$x, pl$`0.5`, col = "red") -library(ggplot) +library(ggplot2) ggplot(data.frame(x = x, y = y), aes(x)) + geom_ribbon(data = pl, aes(ymin = `0.2`, ymax = `0.8`), fill = "lightblue") + geom_point(aes(y = y), colour = "grey") + # observed data From 3028bb923566f54dabf8af1ef9b792e3b2f71e71 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 8 Jul 2024 11:12:56 -0700 Subject: [PATCH 278/382] draft tests --- tests/testthat/test-quantile_rand_forest.R | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/testthat/test-quantile_rand_forest.R diff --git a/tests/testthat/test-quantile_rand_forest.R b/tests/testthat/test-quantile_rand_forest.R new file mode 100644 index 000000000..c0ecd0573 --- /dev/null +++ b/tests/testthat/test-quantile_rand_forest.R @@ -0,0 +1,49 @@ +set.seed(12345) +tib <- tibble( + y = rnorm(100), x = rnorm(100), z = rnorm(100), + f = factor(sample(letters[1:3], 100, replace = TRUE)) +) + +test_that("quantile_rand_forest defaults work", { + library(grf) + spec <- quantile_reg(engine = "grf") + expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) + pars <- parsnip::extract_fit_engine(out) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = 0.5) + expect_identical(pars$quantiles.orig, manual$quantiles) + expect_identical(pars$`_num_trees`, manual$`_num_trees`) + + fseed <- 12345 + spec_seed <- quantile_reg() %>% set_engine("grf", seed = fseed) + out <- fit(spec_seed, formula = y ~ x + z, data = tib) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = 0.5, + seed = fseed) + p_pars <- predict(out, new_data = tib[1:5, ]) %>% + mutate(.pred = nested_quantiles(.pred)) %>% + unnest(.pred) %>% + dplyr::pull(values) + p_manual <- predict(manual, newdata = as.matrix(tib[1:5, 2:3]))$predictions + + # these should be the same, given the seed, but aren't + # expect_equal(p_pars, p_manual) +}) + +test_that("quantile_rand_forest handles additional quantiles", { + spec <- quantile_reg(engine = "grf", quantile_levels = c(.2, .5, .8)) + expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) + pars <- parsnip::extract_fit_engine(out) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) + expect_identical(pars$quantiles.orig, manual$quantiles) + expect_identical(pars$`_num_trees`, manual$`_num_trees`) +}) + + +test_that("quantile_rand_forest handles allows setting the trees and mtry", { + spec <- quantile_reg(quantile_levels = c(.2, .5, .8)) %>% + set_engine("grf", mtry = 10, trees = 100) + expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) + pars <- parsnip::extract_fit_engine(out) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) + expect_identical(pars$quantiles.orig, manual$quantiles) + expect_identical(pars$`_num_trees`, manual$`_num_trees`) +}) From 4a05e14e2d2d12d60ad866a85263e1ca058be756 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Mon, 8 Jul 2024 13:57:11 -0500 Subject: [PATCH 279/382] patches for recipes 1.0.10->1.1 update --- DESCRIPTION | 2 +- R/epi_recipe.R | 4 +- man/add_model.Rd | 108 ----------------------------------------------- 3 files changed, 3 insertions(+), 111 deletions(-) delete mode 100644 man/add_model.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 12d86602b..0a7b790e1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -72,4 +72,4 @@ Config/testthat/edition: 3 Encoding: UTF-8 LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 diff --git a/R/epi_recipe.R b/R/epi_recipe.R index e5182b99b..923381ba5 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -150,7 +150,7 @@ epi_recipe.formula <- function(formula, data, ...) { return(recipes::recipe(formula, data, ...)) } - f_funcs <- recipes:::fun_calls(formula) + f_funcs <- recipes:::fun_calls(formula, data) if (any(f_funcs == "-")) { abort("`-` is not allowed in a recipe formula. Use `step_rm()` instead.") } @@ -173,7 +173,7 @@ epi_form2args <- function(formula, data, ...) { if (!rlang::is_formula(formula)) formula <- as.formula(formula) ## check for in-line formulas - recipes:::inline_check(formula) + recipes:::inline_check(formula, data) ## use rlang to get both sides of the formula outcomes <- recipes:::get_lhs_vars(formula, data) diff --git a/man/add_model.Rd b/man/add_model.Rd deleted file mode 100644 index 6bf6b6b02..000000000 --- a/man/add_model.Rd +++ /dev/null @@ -1,108 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/model-methods.R -\name{Add_model} -\alias{Add_model} -\alias{Remove_model} -\alias{Update_model} -\alias{Add_model.epi_workflow} -\alias{Remove_model.epi_workflow} -\alias{Update_model.epi_workflow} -\alias{Add_model.workflow} -\alias{Remove_model.workflow} -\alias{Update_model.workflow} -\alias{add_model} -\alias{remove_model} -\alias{update_model} -\title{Add a model to an \code{epi_workflow}} -\usage{ -Add_model(x, spec, ..., formula = NULL) - -Remove_model(x) - -Update_model(x, spec, ..., formula = NULL) - -\method{Add_model}{epi_workflow}(x, spec, ..., formula = NULL) - -\method{Remove_model}{epi_workflow}(x) - -\method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) - -\method{Add_model}{workflow}(x, spec, ..., formula = NULL) - -\method{Remove_model}{workflow}(x) - -\method{Update_model}{workflow}(x, spec, ..., formula = NULL) - -add_model(x, spec, ..., formula = NULL) - -remove_model(x) - -update_model(x, spec, ..., formula = NULL) -} -\arguments{ -\item{x}{An \code{epi_workflow}.} - -\item{spec}{A parsnip model specification.} - -\item{...}{Not used.} - -\item{formula}{An optional formula override to specify the terms of the -model. Typically, the terms are extracted from the formula or recipe -preprocessing methods. However, some models (like survival and bayesian -models) use the formula not to preprocess, but to specify the structure -of the model. In those cases, a formula specifying the model structure -must be passed unchanged into the model call itself. This argument is -used for those purposes.} -} -\value{ -\code{x}, updated with a new, updated, or removed model. -} -\description{ -Add a model to an \code{epi_workflow} -} -\details{ -Has the same behaviour as \code{\link[workflows:add_model]{workflows::add_model()}} but also ensures -that the returned object is an \code{epi_workflow}. - -This family is called \verb{Add_*} / \verb{Update_*} / \verb{Remove_*} to avoid -masking the related functions in \code{{workflows}}. We also provide -aliases with the lower-case names. However, in the event that -\code{{workflows}} is loaded after \code{{epipredict}}, these may fail to function -properly. -} -\examples{ -jhu <- case_death_rate_subset \%>\% - dplyr::filter( - time_value > "2021-11-01", - geo_value \%in\% c("ak", "ca", "ny") - ) - -r <- epi_recipe(jhu) \%>\% - step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% - step_epi_ahead(death_rate, ahead = 7) - -rf_model <- rand_forest(mode = "regression") - -wf <- epi_workflow(r) - -wf <- wf \%>\% Add_model(rf_model) -wf - -lm_model <- parsnip::linear_reg() - -wf <- Update_model(wf, lm_model) -wf - -wf <- Remove_model(wf) -wf -} -\seealso{ -\code{\link[workflows:add_model]{workflows::add_model()}} -\itemize{ -\item \code{Add_model()} adds a parsnip model to the \code{epi_workflow}. -\item \code{Remove_model()} removes the model specification as well as any fitted -model object. Any extra formulas are also removed. -\item \code{Update_model()} first removes the model then adds the new -specification to the workflow. -} -} From 59c776466b38425f7a621820e7a3cd3b8134f4f3 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 8 Jul 2024 12:05:57 -0700 Subject: [PATCH 280/382] found the bug in pivot_quantiles_wider --- R/make_quantile_rand_forest.R | 50 +++++----------------- tests/testthat/test-quantile_rand_forest.R | 16 +++---- 2 files changed, 19 insertions(+), 47 deletions(-) diff --git a/R/make_quantile_rand_forest.R b/R/make_quantile_rand_forest.R index a4e09ca69..e54df3097 100644 --- a/R/make_quantile_rand_forest.R +++ b/R/make_quantile_rand_forest.R @@ -1,16 +1,10 @@ make_quantile_random_forest <- function() { - model_env <- get_model_env() - if (!("quantile_reg" %in% model_env$models)) { - parsnip::set_new_model("quantile_reg") - parsnip::set_model_mode("quantile_reg", "regression") - } - parsnip::set_model_engine("quantile_reg", "regression", "grf") - parsnip::set_dependency("quantile_reg", "grf", "grf", mode = "regression") - + parsnip::set_model_engine("rand_forest", "regression", "grf") + parsnip::set_dependency("rand_forest", "grf", "grf", mode = "regression") parsnip::set_model_arg( - model = "quantile_reg", + model = "rand_forest", eng = "grf", parsnip = "mtry", original = "mtry", @@ -18,7 +12,7 @@ make_quantile_random_forest <- function() { has_submodel = FALSE ) parsnip::set_model_arg( - model = "quantile_reg", + model = "rand_forest", eng = "grf", parsnip = "trees", original = "num.trees", @@ -26,39 +20,16 @@ make_quantile_random_forest <- function() { has_submodel = FALSE ) parsnip::set_model_arg( - model = "quantile_reg", + model = "rand_forest", eng = "grf", parsnip = "min_n", original = "min.node.size", func = list(pkg = "dials", fun = "min_n"), has_submodel = FALSE ) - parsnip::set_model_arg( - model = "quantile_reg", - eng = "grf", - parsnip = "quantile_levels", - original = "quantiles", - func = list(pkg = "grf", fun = "quantile_forest"), - has_submodel = FALSE - ) - parsnip::set_model_arg( - model = "quantile_reg", - eng = "grf", - parsnip = "x", - original = "X", - func = list(pkg = "grf", fun = "quantile_forest"), - has_submodel = FALSE - ) - parsnip::set_model_arg( - model = "quantile_reg", - eng = "grf", - parsnip = "y", - original = "Y", - func = list(pkg = "grf", fun = "quantile_forest"), - has_submodel = FALSE - ) + parsnip::set_fit( - model = "quantile_reg", + model = "rand_forest", eng = "grf", mode = "regression", value = list( @@ -67,14 +38,15 @@ make_quantile_random_forest <- function() { data = c(x = "X", y = "Y"), func = c(pkg = "grf", fun = "quantile_forest"), defaults = list( - num.threads = 1, + quantiles = c(0.1, 0.5, 0.9), + num.threads = 1L, seed = expr(runif(1, 0, .Machine$integer.max)) ) ) ) parsnip::set_encoding( - model = "quantile_reg", + model = "rand_forest", eng = "grf", mode = "regression", options = list( @@ -94,7 +66,7 @@ make_quantile_random_forest <- function() { } parsnip::set_pred( - model = "quantile_reg", + model = "rand_forest", eng = "grf", mode = "regression", type = "numeric", diff --git a/tests/testthat/test-quantile_rand_forest.R b/tests/testthat/test-quantile_rand_forest.R index c0ecd0573..c9468b6fa 100644 --- a/tests/testthat/test-quantile_rand_forest.R +++ b/tests/testthat/test-quantile_rand_forest.R @@ -6,22 +6,22 @@ tib <- tibble( test_that("quantile_rand_forest defaults work", { library(grf) - spec <- quantile_reg(engine = "grf") + spec <- rand_forest(engine = "grf", mode = "regression") expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = 0.5) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9)) expect_identical(pars$quantiles.orig, manual$quantiles) expect_identical(pars$`_num_trees`, manual$`_num_trees`) fseed <- 12345 - spec_seed <- quantile_reg() %>% set_engine("grf", seed = fseed) + spec_seed <- rand_forest(mode = "regression") %>% + set_engine("grf", seed = fseed) out <- fit(spec_seed, formula = y ~ x + z, data = tib) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = 0.5, - seed = fseed) + manual <- quantile_forest( + as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9), seed = fseed + ) p_pars <- predict(out, new_data = tib[1:5, ]) %>% - mutate(.pred = nested_quantiles(.pred)) %>% - unnest(.pred) %>% - dplyr::pull(values) + pivot_quantiles_wider(.pred) p_manual <- predict(manual, newdata = as.matrix(tib[1:5, 2:3]))$predictions # these should be the same, given the seed, but aren't From 56920d1e6122a6b911775deec4f785fb0cf3f4f7 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Mon, 8 Jul 2024 14:03:15 -0500 Subject: [PATCH 281/382] bump patch version, missing man page --- DESCRIPTION | 2 +- man/Add_model.Rd | 108 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 man/Add_model.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 0a7b790e1..1126f8304 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.15 +Version: 0.0.16 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/man/Add_model.Rd b/man/Add_model.Rd new file mode 100644 index 000000000..6bf6b6b02 --- /dev/null +++ b/man/Add_model.Rd @@ -0,0 +1,108 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/model-methods.R +\name{Add_model} +\alias{Add_model} +\alias{Remove_model} +\alias{Update_model} +\alias{Add_model.epi_workflow} +\alias{Remove_model.epi_workflow} +\alias{Update_model.epi_workflow} +\alias{Add_model.workflow} +\alias{Remove_model.workflow} +\alias{Update_model.workflow} +\alias{add_model} +\alias{remove_model} +\alias{update_model} +\title{Add a model to an \code{epi_workflow}} +\usage{ +Add_model(x, spec, ..., formula = NULL) + +Remove_model(x) + +Update_model(x, spec, ..., formula = NULL) + +\method{Add_model}{epi_workflow}(x, spec, ..., formula = NULL) + +\method{Remove_model}{epi_workflow}(x) + +\method{Update_model}{epi_workflow}(x, spec, ..., formula = NULL) + +\method{Add_model}{workflow}(x, spec, ..., formula = NULL) + +\method{Remove_model}{workflow}(x) + +\method{Update_model}{workflow}(x, spec, ..., formula = NULL) + +add_model(x, spec, ..., formula = NULL) + +remove_model(x) + +update_model(x, spec, ..., formula = NULL) +} +\arguments{ +\item{x}{An \code{epi_workflow}.} + +\item{spec}{A parsnip model specification.} + +\item{...}{Not used.} + +\item{formula}{An optional formula override to specify the terms of the +model. Typically, the terms are extracted from the formula or recipe +preprocessing methods. However, some models (like survival and bayesian +models) use the formula not to preprocess, but to specify the structure +of the model. In those cases, a formula specifying the model structure +must be passed unchanged into the model call itself. This argument is +used for those purposes.} +} +\value{ +\code{x}, updated with a new, updated, or removed model. +} +\description{ +Add a model to an \code{epi_workflow} +} +\details{ +Has the same behaviour as \code{\link[workflows:add_model]{workflows::add_model()}} but also ensures +that the returned object is an \code{epi_workflow}. + +This family is called \verb{Add_*} / \verb{Update_*} / \verb{Remove_*} to avoid +masking the related functions in \code{{workflows}}. We also provide +aliases with the lower-case names. However, in the event that +\code{{workflows}} is loaded after \code{{epipredict}}, these may fail to function +properly. +} +\examples{ +jhu <- case_death_rate_subset \%>\% + dplyr::filter( + time_value > "2021-11-01", + geo_value \%in\% c("ak", "ca", "ny") + ) + +r <- epi_recipe(jhu) \%>\% + step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% + step_epi_ahead(death_rate, ahead = 7) + +rf_model <- rand_forest(mode = "regression") + +wf <- epi_workflow(r) + +wf <- wf \%>\% Add_model(rf_model) +wf + +lm_model <- parsnip::linear_reg() + +wf <- Update_model(wf, lm_model) +wf + +wf <- Remove_model(wf) +wf +} +\seealso{ +\code{\link[workflows:add_model]{workflows::add_model()}} +\itemize{ +\item \code{Add_model()} adds a parsnip model to the \code{epi_workflow}. +\item \code{Remove_model()} removes the model specification as well as any fitted +model object. Any extra formulas are also removed. +\item \code{Update_model()} first removes the model then adds the new +specification to the workflow. +} +} From 8179648786fcf8bfeb667da246e60e2e68322d3c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 8 Jul 2024 12:12:26 -0700 Subject: [PATCH 282/382] add a hidden index to avoid the no-duplicates list-col behaviour --- R/pivot_quantiles.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 5436580c0..716e196a0 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -125,6 +125,11 @@ pivot_quantiles_wider <- function(.data, ...) { ) ) } + + # tidyr::pivot_wider can crash if there are duplicates, this generally won't + # happen in our context. To avoid, silently add an index column and remove it + # later + .data <- tibble::add_column(.data, .hidden_index = seq_len(nrow(.data))) if (length(cols) > 1L) { for (col in cols) { .data <- .data %>% @@ -139,7 +144,7 @@ pivot_quantiles_wider <- function(.data, ...) { tidyr::unnest(tidyselect::all_of(cols)) %>% tidyr::pivot_wider(names_from = "quantile_levels", values_from = "values") } - .data + .data[, -".hidden_index"] } pivot_quantiles <- function(.data, ...) { From 4f9dac0b4fb3930f04d4ffed267bc0046dd0abf7 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 8 Jul 2024 12:23:48 -0700 Subject: [PATCH 283/382] add a test that produced the bug previously --- R/pivot_quantiles.R | 5 +++-- tests/testthat/test-pivot_quantiles.R | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 716e196a0..6231b29dd 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -129,7 +129,8 @@ pivot_quantiles_wider <- function(.data, ...) { # tidyr::pivot_wider can crash if there are duplicates, this generally won't # happen in our context. To avoid, silently add an index column and remove it # later - .data <- tibble::add_column(.data, .hidden_index = seq_len(nrow(.data))) + .hidden_index = seq_len(nrow(.data)) + .data <- tibble::add_column(.data, .hidden_index = .hidden_index) if (length(cols) > 1L) { for (col in cols) { .data <- .data %>% @@ -144,7 +145,7 @@ pivot_quantiles_wider <- function(.data, ...) { tidyr::unnest(tidyselect::all_of(cols)) %>% tidyr::pivot_wider(names_from = "quantile_levels", values_from = "values") } - .data[, -".hidden_index"] + dplyr::select(.data, -.hidden_index) } pivot_quantiles <- function(.data, ...) { diff --git a/tests/testthat/test-pivot_quantiles.R b/tests/testthat/test-pivot_quantiles.R index 908a75795..d1f092c0e 100644 --- a/tests/testthat/test-pivot_quantiles.R +++ b/tests/testthat/test-pivot_quantiles.R @@ -25,6 +25,14 @@ test_that("quantile pivotting wider behaves", { expect_length(pivot_quantiles_wider(tib, d2), 5L) }) +test_that("pivotting wider still works if there are duplicates", { + # previously this would produce a warning if pivotted because the + # two rows of the result are identical + tb <- tibble(.pred = dist_quantiles(list(1:3, 1:3), list(c(.1, .5, .9)))) + res <- tibble(`0.1` = c(1, 1), `0.5` = c(2, 2), `0.9` = c(3, 3)) + expect_identical(tb %>% pivot_quantiles_wider(.pred), res) +}) + test_that("quantile pivotting longer behaves", { tib <- tibble::tibble(a = 1:5, b = 6:10) From 2d2a3adec9ac0f75b5137bc5de42ceaf20d3ddc3 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 8 Jul 2024 12:36:23 -0700 Subject: [PATCH 284/382] run styler --- R/pivot_quantiles.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 6231b29dd..70e51da8e 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -129,7 +129,7 @@ pivot_quantiles_wider <- function(.data, ...) { # tidyr::pivot_wider can crash if there are duplicates, this generally won't # happen in our context. To avoid, silently add an index column and remove it # later - .hidden_index = seq_len(nrow(.data)) + .hidden_index <- seq_len(nrow(.data)) .data <- tibble::add_column(.data, .hidden_index = .hidden_index) if (length(cols) > 1L) { for (col in cols) { From 58a3674cc6c4d71aa9aed9617424b3de45c4b9cd Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Tue, 9 Jul 2024 15:00:38 -0700 Subject: [PATCH 285/382] Make `layer_predict` forward stored dots_list to `predict()` --- DESCRIPTION | 2 +- NEWS.md | 2 ++ R/epi_workflow.R | 2 +- R/layer_predict.R | 17 ++++++++--- tests/testthat/test-layer_predict.R | 44 +++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1126f8304..a219637b6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.16 +Version: 0.0.17 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index bf3f4d9d5..cce52cb51 100644 --- a/NEWS.md +++ b/NEWS.md @@ -47,3 +47,5 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) - `epi_recipe()` will now warn when given non-`epi_df` data +- `layer_predict()` will now appropriately forward `...` args intended for + `predict.workflow()` diff --git a/R/epi_workflow.R b/R/epi_workflow.R index c6f1e43a9..1ad916c19 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -123,7 +123,7 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor #' possible. Specifically, the output will have `time_value` and #' `geo_value` columns as well as the prediction. #' -#' @inheritParams parsnip::predict.model_fit +#' @inheritParams workflows::predict.workflow #' #' @param object An epi_workflow that has been fit by #' [workflows::fit.workflow()] diff --git a/R/layer_predict.R b/R/layer_predict.R index b40c24be5..f161f21c3 100644 --- a/R/layer_predict.R +++ b/R/layer_predict.R @@ -45,12 +45,18 @@ layer_predict <- id = rand_id("predict_default")) { arg_is_chr_scalar(id) arg_is_chr_scalar(type, allow_null = TRUE) + dots_list <- rlang::dots_list(..., .homonyms = "error", .check_assign = TRUE) + if (any(rlang::names2(dots_list) == "")) { + cli_abort("All `...` arguments must be named.", + class = "epipredict__layer_predict__unnamed_dot" + ) + } add_layer( frosting, layer_predict_new( type = type, opts = opts, - dots_list = rlang::list2(...), # can't figure how to use this + dots_list = dots_list, id = id ) ) @@ -63,13 +69,16 @@ layer_predict_new <- function(type, opts, dots_list, id) { #' @export slather.layer_predict <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() + the_fit <- workflows::extract_fit_parsnip(workflow) - components$predictions <- predict( + components$predictions <- rlang::inject(predict( the_fit, components$forged$predictors, - type = object$type, opts = object$opts - ) + type = object$type, opts = object$opts, + !!!object$dots_list + )) components$predictions <- dplyr::bind_cols( components$keys, components$predictions ) diff --git a/tests/testthat/test-layer_predict.R b/tests/testthat/test-layer_predict.R index bd10de08c..f3b33f5db 100644 --- a/tests/testthat/test-layer_predict.R +++ b/tests/testthat/test-layer_predict.R @@ -31,3 +31,47 @@ test_that("prediction with interval works", { expect_equal(nrow(p), 108L) expect_named(p, c("geo_value", "time_value", ".pred_lower", ".pred_upper")) }) + +test_that("layer_predict dots validation", { + # We balk at unnamed arguments, though perhaps not with the most helpful error messages: + expect_error( + frosting() %>% layer_predict("pred_int", list(), tibble::tibble(x = 5)), + class = "epipredict__layer_predict__unnamed_dot" + ) + expect_error( + frosting() %>% layer_predict("pred_int", list(), "maybe_meant_to_be_id"), + class = "epipredict__layer_predict__unnamed_dot" + ) + # We allow arguments that might actually work at prediction time: + expect_no_error(frosting() %>% layer_predict(type = "quantile", interval = "confidence")) + + # We don't detect completely-bogus arg names until predict time: + expect_no_error(f_bad_arg <- frosting() %>% layer_predict(bogus_argument = "something")) + wf_bad_arg <- wf %>% add_frosting(f_bad_arg) + expect_error(predict(wf_bad_arg, latest)) + # Some argument names only apply for some prediction `type`s; we don't check for ignored arguments, and neither does workflows: + expect_no_error(frosting() %>% layer_predict(eval_time = "preferably this would error")) + + # ^ (currently with a truly awful error message, due to an extra comma in parsnip::check_pred_type_dots) + # + # Unfortunately, we outright ignore attempts to pass args via `predict.epi_workflow`: + f_predict <- frosting() %>% layer_predict() + wf_predict <- wf %>% add_frosting(f_predict) + expect_no_error(predict(wf_predict, latest, type = "pred_int")) +}) + +test_that("layer_predict dots are forwarded", { + f_lm_int_level <- frosting() %>% + layer_predict(type = "pred_int", level = 0.8) + wf_lm_int_level <- wf %>% add_frosting(f_lm_int_level) + p <- predict(wf, latest) + p_lm_int_level <- predict(wf_lm_int_level, latest) + expect_contains(names(p_lm_int_level), c(".pred_lower", ".pred_upper")) + expect_equal(nrow(na.omit(p)), nrow(na.omit(p_lm_int_level))) + expect_true(cbind(p, p_lm_int_level[c(".pred_lower", ".pred_upper")]) %>% + na.omit() %>% + mutate(sandwiched = .pred_lower <= .pred & .pred <= .pred_upper) %>% + `[[`("sandwiched") %>% + all()) + # There are many possible other valid configurations that aren't tested here. +}) From 615e112c6cadfbe5c7769861e60000353c1a8c3b Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 10 Jul 2024 10:07:16 -0700 Subject: [PATCH 286/382] working, documented implementation --- R/make_grf_quantiles.R | 186 ++++++++++++++++++ R/make_quantile_rand_forest.R | 87 -------- R/zzz.R | 2 +- man/grf_quantiles.Rd | 70 +++++++ ...ile_rand_forest.R => test-grf_quantiles.R} | 19 +- 5 files changed, 267 insertions(+), 97 deletions(-) create mode 100644 R/make_grf_quantiles.R delete mode 100644 R/make_quantile_rand_forest.R create mode 100644 man/grf_quantiles.Rd rename tests/testthat/{test-quantile_rand_forest.R => test-grf_quantiles.R} (74%) diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R new file mode 100644 index 000000000..83ea60a27 --- /dev/null +++ b/R/make_grf_quantiles.R @@ -0,0 +1,186 @@ +#' Random quantile forests via grf +#' +#' [grf::quantile_forest()] fits random forests in a way that makes it easy +#' to calculate _quantile_ forests. Currently, this is the only engine +#' provided here, since quantile regression is the typical use-case. +#' +#' @section Tuning Parameters: +#' +#' This model has 3 tuning parameters: +#' +#' - `mtry`: # Randomly Selected Predictors (type: integer, default: see below) +#' - `trees`: # Trees (type: integer, default: 2000L) +#' - `min_n`: Minimal Node Size (type: integer, default: 5) +#' +#' `mtry` depends on the number of columns in the design matrix. +#' The default in [grf::quantile_forest()] is `min(ceiling(sqrt(ncol(X)) + 20), ncol(X))`. +#' +#' For categorical predictors, a one-hot encoding is always used. This makes +#' splitting efficient, but has implications for the `mtry` choice. A factor +#' with many levels will become a large number of columns in the design matrix +#' which means that some of these may be selected frequently for potential splits. +#' This is different than in other implementations of random forest. For more +#' details, see [the `grf` discussion](https://grf-labs.github.io/grf/articles/categorical_inputs.html). +#' +#' @section Translation from parsnip to the original package: +#' +#' ```{r, translate-engine} +#' rand_forest( +#' mode = "regression", # you must specify the `mode = regression` +#' mtry = integer(1), +#' trees = integer(1), +#' min_n = integer(1) +#' ) %>% +#' set_engine("grf_quantiles") %>% +#' translate() +#' ``` +#' +#' @section Case weights: +#' +#' Case weights are not supported. +#' +#' @examples +#' library(grf) +#' tib <- tibble( +#' y = rnorm(100), x = rnorm(100), z = rnorm(100), +#' f = factor(sample(letters[1:3], 100, replace = TRUE)) +#' ) +#' spec <- rand_forest(engine = "grf_quantiles", mode = "regression") +#' out <- fit(spec, formula = y ~ x + z, data = tib) +#' predict(out, new_data = tib[1:5, ]) %>% +#' pivot_quantiles_wider(.pred) +#' +#' # -- adjusting the desired quantiles +#' +#' spec <- rand_forest(mode = "regression") %>% +#' set_engine(engine = "grf_quantiles", quantiles = c(1:9 / 10)) +#' out <- fit(spec, formula = y ~ x + z, data = tib) +#' predict(out, new_data = tib[1:5, ]) %>% +#' pivot_quantiles_wider(.pred) +#' +#' # -- a more complicated task +#' +#' library(dplyr) +#' dat <- case_death_rate_subset %>% +#' filter(time_value > as.Date("2021-09-01")) +#' rec <- epi_recipe(dat) %>% +#' step_epi_lag(case_rate, death_rate, lag = c(0, 7, 14)) %>% +#' step_epi_ahead(death_rate, ahead = 7) %>% +#' step_epi_naomit() +#' frost <- frosting() %>% +#' layer_predict() %>% +#' layer_threshold(.pred) +#' +#' ewf <- epi_workflow(rec, spec, frost) %>% fit(dat) %>% forecast() +#' ewf +#' +#' @name grf_quantiles +NULL + + + +make_grf_quantiles <- function() { + parsnip::set_model_engine( + model = "rand_forest", mode = "regression", eng = "grf_quantiles" + ) + parsnip::set_dependency( + model = "rand_forest", eng = "grf_quantiles", pkg = "grf", + mode = "regression" + ) + + + # These are the arguments to the parsnip::rand_forest() that must be + # translated from grf::quantile_forest + parsnip::set_model_arg( + model = "rand_forest", + eng = "grf_quantiles", + parsnip = "mtry", + original = "mtry", + func = list(pkg = "dials", fun = "mtry"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "rand_forest", + eng = "grf_quantiles", + parsnip = "trees", + original = "num.trees", + func = list(pkg = "dials", fun = "trees"), + has_submodel = FALSE + ) + parsnip::set_model_arg( + model = "rand_forest", + eng = "grf_quantiles", + parsnip = "min_n", + original = "min.node.size", + func = list(pkg = "dials", fun = "min_n"), + has_submodel = FALSE + ) + + # the `value` list describes how grf::quantile_forest expects to receive + # arguments. In particular, it needs X and Y to be passed in as a matrices. + # But the matrix interface in parsnip calls these x and y. So the data + # slot translates them + # + # protect - prevents the user from passing X and Y arguments themselves + # defaults - engine specific arguments (not model specific) that we allow + # the user to change + parsnip::set_fit( + model = "rand_forest", + eng = "grf_quantiles", + mode = "regression", + value = list( + interface = "matrix", + protect = c("X", "Y"), + data = c(x = "X", y = "Y"), + func = c(pkg = "grf", fun = "quantile_forest"), + defaults = list( + quantiles = c(0.1, 0.5, 0.9), + num.threads = 1L, + seed = expr(runif(1, 0, .Machine$integer.max)) + ) + ) + ) + + parsnip::set_encoding( + model = "rand_forest", + eng = "grf_quantiles", + mode = "regression", + options = list( + # one hot is the closest to typical factor handling in randomForest + # (1 vs all splitting), though since we aren't bagging, + # factors with many levels could be visited frequently + predictor_indicators = "one_hot", + compute_intercept = FALSE, + remove_intercept = FALSE, + allow_sparse_x = FALSE + ) + ) + + # turn the predictions into a tibble with a dist_quantiles column + process_qrf_preds <- function(x, object) { + quantile_levels <- parsnip::extract_fit_engine(object)$quantiles.orig + x <- x$predictions + out <- lapply(vctrs::vec_chop(x), function(x) sort(drop(x))) + out <- dist_quantiles(out, list(quantile_levels)) + return(dplyr::tibble(.pred = out)) + } + + parsnip::set_pred( + model = "rand_forest", + eng = "grf_quantiles", + mode = "regression", + type = "numeric", + value = list( + pre = NULL, + post = process_qrf_preds, + func = c(fun = "predict"), + # map between parsnip::predict args and grf::quantile_forest args + args = list( + object = quote(object$fit), + newdata = quote(new_data), + seed = expr(sample.int(10 ^ 5, 1)), + verbose = FALSE + ) + ) + ) +} diff --git a/R/make_quantile_rand_forest.R b/R/make_quantile_rand_forest.R deleted file mode 100644 index e54df3097..000000000 --- a/R/make_quantile_rand_forest.R +++ /dev/null @@ -1,87 +0,0 @@ -make_quantile_random_forest <- function() { - parsnip::set_model_engine("rand_forest", "regression", "grf") - parsnip::set_dependency("rand_forest", "grf", "grf", mode = "regression") - - - parsnip::set_model_arg( - model = "rand_forest", - eng = "grf", - parsnip = "mtry", - original = "mtry", - func = list(pkg = "dials", fun = "mtry"), - has_submodel = FALSE - ) - parsnip::set_model_arg( - model = "rand_forest", - eng = "grf", - parsnip = "trees", - original = "num.trees", - func = list(pkg = "dials", fun = "trees"), - has_submodel = FALSE - ) - parsnip::set_model_arg( - model = "rand_forest", - eng = "grf", - parsnip = "min_n", - original = "min.node.size", - func = list(pkg = "dials", fun = "min_n"), - has_submodel = FALSE - ) - - parsnip::set_fit( - model = "rand_forest", - eng = "grf", - mode = "regression", - value = list( - interface = "matrix", - protect = c("X", "Y"), - data = c(x = "X", y = "Y"), - func = c(pkg = "grf", fun = "quantile_forest"), - defaults = list( - quantiles = c(0.1, 0.5, 0.9), - num.threads = 1L, - seed = expr(runif(1, 0, .Machine$integer.max)) - ) - ) - ) - - parsnip::set_encoding( - model = "rand_forest", - eng = "grf", - mode = "regression", - options = list( - predictor_indicators = "one_hot", - compute_intercept = FALSE, - remove_intercept = FALSE, - allow_sparse_x = FALSE - ) - ) - - process_qrf_preds <- function(x, object) { - quantile_levels <- parsnip::extract_fit_engine(object)$quantiles.orig - x <- x$predictions - out <- lapply(vctrs::vec_chop(x), function(x) sort(drop(x))) - out <- dist_quantiles(out, list(quantile_levels)) - return(dplyr::tibble(.pred = out)) - } - - parsnip::set_pred( - model = "rand_forest", - eng = "grf", - mode = "regression", - type = "numeric", - value = list( - pre = NULL, - post = process_qrf_preds, - func = c(fun = "predict"), - args = list( - object = quote(object$fit), - newdata = quote(new_data), - seed = expr(sample.int(10 ^ 5, 1)), - verbose = FALSE - ) - ) - ) - - -} diff --git a/R/zzz.R b/R/zzz.R index b4a36dfe3..7e335b67d 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -8,5 +8,5 @@ make_flatline_reg() make_quantile_reg() make_smooth_quantile_reg() - make_quantile_random_forest() + make_grf_quantiles() } diff --git a/man/grf_quantiles.Rd b/man/grf_quantiles.Rd new file mode 100644 index 000000000..e21a8d0bb --- /dev/null +++ b/man/grf_quantiles.Rd @@ -0,0 +1,70 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/make_grf_quantiles.R +\name{grf_quantiles} +\alias{grf_quantiles} +\title{Random quantile forests via grf} +\description{ +\code{\link[grf:quantile_forest]{grf::quantile_forest()}} fits random forests in a way that makes it easy +to calculate \emph{quantile} forests. Currently, this is the only engine +provided here, since quantile regression is the typical use-case. +} +\section{Tuning Parameters}{ + + +This model has 3 tuning parameters: +\itemize{ +\item \code{mtry}: # Randomly Selected Predictors (type: integer, default: see below) +\item \code{trees}: # Trees (type: integer, default: 2000L) +\item \code{min_n}: Minimal Node Size (type: integer, default: 5) +} + +\code{mtry} depends on the number of columns in the design matrix. +The default in \code{\link[grf:quantile_forest]{grf::quantile_forest()}} is \code{min(ceiling(sqrt(ncol(X)) + 20), ncol(X))}. + +For categorical predictors, a one-hot encoding is always used. This makes +splitting efficient, but has implications for the \code{mtry} choice. A factor +with many levels will become a large number of columns in the design matrix +which means that some of these may be selected frequently for potential splits. +This is different than in other implementations of random forest. For more +details, see \href{https://grf-labs.github.io/grf/articles/categorical_inputs.html}{the \code{grf} discussion}. +} + +\section{Translation from parsnip to the original package}{ + + +\if{html}{\out{

    }} +} + +\section{Case weights}{ + + +Case weights are not supported. +} + +\examples{ +y <- 1:3 +x <- 2:4 + +} diff --git a/tests/testthat/test-quantile_rand_forest.R b/tests/testthat/test-grf_quantiles.R similarity index 74% rename from tests/testthat/test-quantile_rand_forest.R rename to tests/testthat/test-grf_quantiles.R index c9468b6fa..3511c3e12 100644 --- a/tests/testthat/test-quantile_rand_forest.R +++ b/tests/testthat/test-grf_quantiles.R @@ -1,12 +1,12 @@ set.seed(12345) +library(grf) tib <- tibble( y = rnorm(100), x = rnorm(100), z = rnorm(100), f = factor(sample(letters[1:3], 100, replace = TRUE)) ) test_that("quantile_rand_forest defaults work", { - library(grf) - spec <- rand_forest(engine = "grf", mode = "regression") + spec <- rand_forest(engine = "grf_quantiles", mode = "regression") expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9)) @@ -15,7 +15,7 @@ test_that("quantile_rand_forest defaults work", { fseed <- 12345 spec_seed <- rand_forest(mode = "regression") %>% - set_engine("grf", seed = fseed) + set_engine("grf_quantiles", seed = fseed) out <- fit(spec_seed, formula = y ~ x + z, data = tib) manual <- quantile_forest( as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9), seed = fseed @@ -23,13 +23,15 @@ test_that("quantile_rand_forest defaults work", { p_pars <- predict(out, new_data = tib[1:5, ]) %>% pivot_quantiles_wider(.pred) p_manual <- predict(manual, newdata = as.matrix(tib[1:5, 2:3]))$predictions - + colnames(p_manual) = c("0.1", "0.5", "0.9") + p_manual <- tibble::as_tibble(p_manual) # these should be the same, given the seed, but aren't # expect_equal(p_pars, p_manual) }) -test_that("quantile_rand_forest handles additional quantiles", { - spec <- quantile_reg(engine = "grf", quantile_levels = c(.2, .5, .8)) +test_that("quantile_rand_forest handles alternative quantiles", { + spec <- rand_forest(mode = "regression") %>% + set_engine("grf_quantiles", quantiles = c(.2, .5, .8)) expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) @@ -39,11 +41,10 @@ test_that("quantile_rand_forest handles additional quantiles", { test_that("quantile_rand_forest handles allows setting the trees and mtry", { - spec <- quantile_reg(quantile_levels = c(.2, .5, .8)) %>% - set_engine("grf", mtry = 10, trees = 100) + spec <- rand_forest(mode = "regression", mtry = 2, trees = 100, engine = "grf_quantiles") expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) + manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, mtry = 2, num.trees = 100) expect_identical(pars$quantiles.orig, manual$quantiles) expect_identical(pars$`_num_trees`, manual$`_num_trees`) }) From 0ba22b81bac1e670c7c36343918cd611fb9d8b22 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 10 Jul 2024 10:14:10 -0700 Subject: [PATCH 287/382] update documentation --- R/layer_quantile_distn.R | 11 +++++++--- R/make_grf_quantiles.R | 9 ++++++-- man/grf_quantiles.Rd | 42 ++++++++++++++++++++++++++++++++++--- man/layer_quantile_distn.Rd | 14 ++++++++++--- 4 files changed, 65 insertions(+), 11 deletions(-) diff --git a/R/layer_quantile_distn.R b/R/layer_quantile_distn.R index d763207a4..dfa6d6107 100644 --- a/R/layer_quantile_distn.R +++ b/R/layer_quantile_distn.R @@ -1,9 +1,14 @@ #' Returns predictive quantiles #' #' This function calculates quantiles when the prediction was _distributional_. -#' Currently, the only distributional engine is `quantile_reg()`. -#' If this engine is used, then this layer will grab out estimated (or extrapolated) -#' quantiles at the requested quantile values. +#' +#' Currently, the only distributional modes/engines are +#' * `quantile_reg()` +#' * `smooth_quantile_reg()` +#' * `rand_forest(mode = "regression") %>% set_engine("grf_quantiles")` +#' +#' If these engines were used, then this layer will grab out estimated +#' (or extrapolated) quantiles at the requested quantile values. #' #' @param frosting a `frosting` postprocessor #' @param ... Unused, include for consistency with other layers. diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R index 83ea60a27..780a0931b 100644 --- a/R/make_grf_quantiles.R +++ b/R/make_grf_quantiles.R @@ -62,7 +62,7 @@ #' #' library(dplyr) #' dat <- case_death_rate_subset %>% -#' filter(time_value > as.Date("2021-09-01")) +#' filter(time_value > as.Date("2021-10-01")) #' rec <- epi_recipe(dat) %>% #' step_epi_lag(case_rate, death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% @@ -70,9 +70,14 @@ #' frost <- frosting() %>% #' layer_predict() %>% #' layer_threshold(.pred) +#' spec <- rand_forest(mode = "regression") %>% +#' set_engine(engine = "grf_quantiles", quantiles = c(.25, .5, .75)) #' #' ewf <- epi_workflow(rec, spec, frost) %>% fit(dat) %>% forecast() -#' ewf +#' ewf %>% +#' rename(forecast_date = time_value) %>% +#' mutate(target_date = forecast_date + 7L) %>% +#' pivot_quantiles_wider(.pred) #' #' @name grf_quantiles NULL diff --git a/man/grf_quantiles.Rd b/man/grf_quantiles.Rd index e21a8d0bb..eec753054 100644 --- a/man/grf_quantiles.Rd +++ b/man/grf_quantiles.Rd @@ -33,7 +33,7 @@ details, see \href{https://grf-labs.github.io/grf/articles/categorical_inputs.ht \if{html}{\out{
    }}\preformatted{rand_forest( - mode = "regression", # you must specify the mode to be regression + mode = "regression", # you must specify the `mode = regression` mtry = integer(1), trees = integer(1), min_n = integer(1) @@ -64,7 +64,43 @@ Case weights are not supported. } \examples{ -y <- 1:3 -x <- 2:4 +library(grf) +tib <- tibble( + y = rnorm(100), x = rnorm(100), z = rnorm(100), + f = factor(sample(letters[1:3], 100, replace = TRUE)) +) +spec <- rand_forest(engine = "grf_quantiles", mode = "regression") +out <- fit(spec, formula = y ~ x + z, data = tib) +predict(out, new_data = tib[1:5, ]) \%>\% + pivot_quantiles_wider(.pred) + +# -- adjusting the desired quantiles + +spec <- rand_forest(mode = "regression") \%>\% + set_engine(engine = "grf_quantiles", quantiles = c(1:9 / 10)) +out <- fit(spec, formula = y ~ x + z, data = tib) +predict(out, new_data = tib[1:5, ]) \%>\% + pivot_quantiles_wider(.pred) + +# -- a more complicated task + +library(dplyr) +dat <- case_death_rate_subset \%>\% + filter(time_value > as.Date("2021-10-01")) +rec <- epi_recipe(dat) \%>\% + step_epi_lag(case_rate, death_rate, lag = c(0, 7, 14)) \%>\% + step_epi_ahead(death_rate, ahead = 7) \%>\% + step_epi_naomit() +frost <- frosting() \%>\% + layer_predict() \%>\% + layer_threshold(.pred) +spec <- rand_forest(mode = "regression") \%>\% + set_engine(engine = "grf_quantiles", quantiles = c(.25, .5, .75)) + +ewf <- epi_workflow(rec, spec, frost) \%>\% fit(dat) \%>\% forecast() +ewf \%>\% + rename(forecast_date = time_value) \%>\% + mutate(target_date = forecast_date + 7L) \%>\% + pivot_quantiles_wider(.pred) } diff --git a/man/layer_quantile_distn.Rd b/man/layer_quantile_distn.Rd index 695a1d12d..f5de4aa19 100644 --- a/man/layer_quantile_distn.Rd +++ b/man/layer_quantile_distn.Rd @@ -32,9 +32,17 @@ quantiles will be added to the predictions. } \description{ This function calculates quantiles when the prediction was \emph{distributional}. -Currently, the only distributional engine is \code{quantile_reg()}. -If this engine is used, then this layer will grab out estimated (or extrapolated) -quantiles at the requested quantile values. +} +\details{ +Currently, the only distributional modes/engines are +\itemize{ +\item \code{quantile_reg()} +\item \code{smooth_quantile_reg()} +\item \code{rand_forest(mode = "regression") \%>\% set_engine("grf_quantiles")} +} + +If these engines were used, then this layer will grab out estimated +(or extrapolated) quantiles at the requested quantile values. } \examples{ jhu <- case_death_rate_subset \%>\% From 68baf079d739c867a426ccea4578fb12f555bdfa Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 12 Jul 2024 13:51:46 -0700 Subject: [PATCH 288/382] slightly adjust test --- tests/testthat/test-grf_quantiles.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test-grf_quantiles.R b/tests/testthat/test-grf_quantiles.R index 3511c3e12..15d3a2589 100644 --- a/tests/testthat/test-grf_quantiles.R +++ b/tests/testthat/test-grf_quantiles.R @@ -14,18 +14,19 @@ test_that("quantile_rand_forest defaults work", { expect_identical(pars$`_num_trees`, manual$`_num_trees`) fseed <- 12345 - spec_seed <- rand_forest(mode = "regression") %>% + spec_seed <- rand_forest(mode = "regression", mtry = 2L, min_n = 10) %>% set_engine("grf_quantiles", seed = fseed) - out <- fit(spec_seed, formula = y ~ x + z, data = tib) + out <- fit(spec_seed, formula = y ~ x + z - 1, data = tib) manual <- quantile_forest( - as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9), seed = fseed + as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9), seed = fseed, + mtry = 2L, min.node.size = 10 ) p_pars <- predict(out, new_data = tib[1:5, ]) %>% pivot_quantiles_wider(.pred) p_manual <- predict(manual, newdata = as.matrix(tib[1:5, 2:3]))$predictions colnames(p_manual) = c("0.1", "0.5", "0.9") p_manual <- tibble::as_tibble(p_manual) - # these should be the same, given the seed, but aren't + # not equal despite the seed, etc # expect_equal(p_pars, p_manual) }) @@ -35,7 +36,7 @@ test_that("quantile_rand_forest handles alternative quantiles", { expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) - expect_identical(pars$quantiles.orig, manual$quantiles) + expect_identical(pars$quantiles.orig, manual$quantiles.orig) expect_identical(pars$`_num_trees`, manual$`_num_trees`) }) @@ -45,6 +46,6 @@ test_that("quantile_rand_forest handles allows setting the trees and mtry", { expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, mtry = 2, num.trees = 100) - expect_identical(pars$quantiles.orig, manual$quantiles) + expect_identical(pars$quantiles.orig, manual$quantiles.orig) expect_identical(pars$`_num_trees`, manual$`_num_trees`) }) From 0d5972813cafa05e4a0991b3cc06e7f5f2d310d4 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 12 Jul 2024 14:27:28 -0700 Subject: [PATCH 289/382] adjustments --- .../articles/case_death_rate_archive.rds | Bin 0 -> 1314556 bytes vignettes/articles/sliding.Rmd | 49 ++++++++++++------ 2 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 vignettes/articles/case_death_rate_archive.rds diff --git a/vignettes/articles/case_death_rate_archive.rds b/vignettes/articles/case_death_rate_archive.rds new file mode 100644 index 0000000000000000000000000000000000000000..b5209fb1d10980cba83ce892b69c870aabc7eab0 GIT binary patch literal 1314556 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%0D1!sd{$$(RC17 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

    AmPe=n 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

    l#JPa<(EVq4`;A#os< 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

    t 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�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 SW!d0HO<39`A>{(>AxGGBbyWG42n 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

    u9Mwx6LUPc1OVqnVkYaFc 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

    ?TkS=ugVVx@nqG5yFae%B+fQA-HUo|q?>1S^ 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

    3XHV zzX7$!r`GU)v4d(?>B8KwDyUKO)uQFQh;cuFx|s0M{#G7np6(6Oi)?|Wt^Ca$`>LV7 zeR0nhr#5JY7;?GfnnUAli0GmTQD_<-<;`=BhDPvA{GrH~P~E>dY@tX5RN18-9oVM@ z)yVT!g|F(NDtsaKvjny7BHw&iY~)AOYg>tNdK2~D5L5%^-Cv;A2UVKCQ|mC+UgKBZ z)li|ATe7sz^mqHW!*bW18lf`U;AYiMtph6~HeRgR3zggewcY}8s194to;|)5>RL-h z?lk&Ab?1%4LzgyaR&@P12xD%kQh9d^)(|7ON_hoKzOydk|05W7Ku6 zxvzOzgKA&1lQ%;Q%b{3aRXJj24*4&e?GuV7zSm*a=L409_aHKm|8OJvP-^}6di`;A zQxK%LZStEoeF^D@S~(%bA`rh;S)BOjEyNe^zH7367sNI#-(phL1aZf8E7!~yg-Ar? zlAZ|=D}}^l z{*fy=+z_L!=SfK9tj-LZdmW-u;ZDm^k|F#uDb$K03rW%obK~|ekbP=6*>a5xX~i4G z&1Y31S-R#ui*+I-FJ98oRA`0Rk%mh{n}ZAys-H<2s6*%t zwQ8Al9zrzxWkIO%RMC>#?hv|dl33a206~|BQ5{l25VTUC5??k2!L?qevQKss?D~(I z|M_|8xp(Rb)keImY5{vydtNcQ6Dn;;AJIa!cGq05%0E2bO^-Nj>JyFBkf zkG<}}VV0eLQ9tWLCZ;oBPJ0hz z4=iBzeP3S~|DOM>ES{wgipJ(WjBVeJdO_P_q!eIO815;+uj=yN;1-p$nKga?Uv%j&Pn;;Of(tdzO?t5g&RLpQV(g%3d@1QcNjZ#CGFg zk0RxPNLncq+f7Q63|g}(5~nB)>?LLATw5v6 z<;4?tq8TWSCRZlL_Qq3QOl!Sjl`5h%JzDDhrn`~ya&>6Y6YXo1m)a6L(?9H?w9F5Y zxiMdk(m}J+Jxa$uvfJ*VXi8VL?$xYqUno8FwpW??4JmJ``Q_5W{3tzF>sqF&f+>CW z@*n1F7g73{*hdx*Nm2&Pt=g+zEu_4AC3#El;tb{8UdJmv2m2^PD`Os~@q1B*SDQtA zvr455+ebyY`#+`(pNqa>JZMV!_^f1O?jVKo@wE1y@FTI5Pwt{mkGk+vK0RJhFvn*< zJv$!F&w4_c8JRlIFc=EDOUz$m8=iu0(`nHUPcKkrDg#b1 z)6EAxm#f+Xe=p2xRVaHncPnO%eN(J4Zvy?3140|@gF%0CE=R@GTre0ttUKnD3dV?) zBmKgYU^IBtGX`@o{O|`birtnWy*L1dH*^C_pR0jEtx+xh>qanMRg>FsbqN^b9~qo! zx⁢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%0Al4YNBzKh3$JSylo1 zQp=^TKP!S>)Zs@VTRNauye0Z+?SAOvdYjvhBaObr-J=^)j7=9-DE+*_1lyG`zl{ z9{CPB+}Hh%y2?-jgxW&#oFdRN5!^AF;4zk!eX{;%M# z36?n5K{p>4wtc0|n12q`Y|Y37ej={SQAVOy`>&kpb+atdtq*`qpvMW0YT4Xk{m8l}HsRzm}%fT+7%* z8bg`fp5^IZs7q(zNs5nY90RzvBzmE?c%apY$R*4qASX2VrWQ z9wr?kpL5c(!=*liN{{z9B8VeuEmMixw2DYuO8F z!=9CO?><19h%>de6v%#}-F1781+u-f{I^0wA(!|?FNpCw1L^0T>IX@Y|))nMJwZBmgXcFAjb-G{gfv=LZ8AiTR%l4aT8#B z?A!^qDRNya8dglwg?cRtuwL)ZRjzad*2H`eCGG?pqW*HR3xw^8D{(zb`e3(c`OYow zm2hCU_|#ov1;<@MXM@+cP}gn7gOuPDtU2co390vrDm|A_JcMr{ZXt z+2K*uH6S0o6z=P?bmi}A!`)rB<6y-OxEr5sFS;iQ_p^`mt+radp zPPz!Zn^G2>CGt9NB7Vhg+YTT7Ug;dUKKMu<8I!lNhtDdjN!m63@FDWz?aGeu(JOW_ zp_7I8cTLAaq8{~8Op}^3Ujy$|$Fq|XZoxZxJjztS0N&L4s0Lod{JOsJGZubKPFdI& zgoV2gX=@oQg6D^;J~?k=;92>`TianZJhwe)+O_KpJpFG@l@sI2Gthaz0}q~`cOaIV;}17-ctehU+HNAwGHr4Q1AWxekD9A<0%2^ zt?-Obot6mcf~OUo+?HRve{V0Oe?YT&U_Ct3FD=xSxd%@biMVd|D0pf+ZkAT|hexLp z0&)}Jsk7BB$yp4ZNAtFEE_e@5fdsbfI6L|UwO_mhr?Y}rGVj>H#l~o5$*rjW*Z=P{A)Y!(>wOh%8My^-3*e4mc~*_$nBDDhQKe^(kXY2G^+^i zw4&TeIkOHcg(#K0y)$0ZeUwUeBkmlT<&<*r^UC#1cO8|=q1+E_IMjJRnR4Hg>Eqz9 zEtD$i@d7AS-3-SaX7VWy$GVG4MN=pbha+mge-Zd=yZS-9SfWn@rTXSe23y^wQ>HZAwhx87g;AQ#870J2vi{ocSlwh)c=Z;gBRG=9N?4ZCKJtR? z@I{wDe$15-=2}eYBai!Ajhvs=Twf`lIbQo|?z{9yy0x1`grg`UYtJoJc)0P8VNH)O z@pe*vkmvowd5!Z(C?91a%-`5=_#S1#K{%47-Yv?{n+rEG$sVWt%;GJm z=q{)HOl4YSxN3+p8_dqTZvj1JmU=&wDYJT}3FQ&jK_f%|etf|z&`{g$BWT!-_&2=q z1&w>?k#~v2d`+>rW*&SMG{(CJ)oe3M03%DFUt3KvX%QIaathbYT?Uh{C|_3&FDW;eTwZE6(w2hN zRG(RRForZ5tXgFbqY6*KyfIGVC-)`Nd@x7cX*&`&2R7<;R**gb+dtO}rbF46*2p{| zeFUa`#^>F;Gr>gd-?^kYV7j=bOLRFg|Hs}qeSV!1sRCHnNrS3FsU}3S%Vc#o=RlZxpL$7qAZ)RgcGw^eV$}ZP zLFxvvkGVprODZ87yY9u=;#Gf)dK{yr*$sKFde%3ptN+NfnR)XGdnnv?R=WDw9|~9P zOl4-4LvcE8q=yB6{5Cjzq`(d;R*$AW$A5x~k-fl{!FH%|^E9{iD?*L_m8WmlH)x7Z z?^9)Ng(m0L811)9p?QmL%c!V7sUI{8Fsr}zF!ad#{g2Yn<6OAn+oF5W)4H8r#862} z)Ne}V#-^t-iTY4XX5`CZ(hTT@Gk3pTI|03CZMz?p$dF1wukvih3Kc&X2*;am8#qIH z8U|c<9G1S?3;nSTarNCPq{-0#QhwpwS7{ige!1Z`7Dc)ShPw_jdzLJRe&z1hd_yjz zMBQ5YVUBlY6!dqP+e(}bBwY;sxI3~hhx?(M;$L+2#39my(A{}HHdXu}baq@yU}_H{ z4S>#;6^1<)Ine6e5m8jwMcM|fH&zbr1}~r;QL%h|&>~VlXon7^6|Y$d^_YYRugD?N zeyE3E#kRg3P>p-hxh1EMvWPpyxO7R%rKfyFF`5{ z4U2XN#*0BC;YZf8@jy~vXvEy;E1+wDI{yT>P`50p7}QzZROp|6gWAAS|17&>r0G!W zdUEI3ry{6KSU)((%>0i`vrzf6Wkbq}(@;L6A?VRIMmh-Pqoa2d)|W#`@M~51&Ti5c zC~+*RIy%b(1;@O;M!~bB*-)U=?JZ-Qgq#`I)`6fH($$dD

    +vgH?u_AIPlMbNPlBrCRrtjh-*d&96JRf-LEhG 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

    XSYoxi!J{QJv<5& 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 z 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

    BhUw({X6SgmCT?s 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 `pU(>9JX9Fl(nk8fG3;G)@AcnNVB{7Iu zk;Qg5(I27(x4mZHeVh0t^sQW`QFK+IzbCP1sJRHD0xnMHjTNBc?bIRukIzn3rR1E` zBcb^xAwq57W@KgqL|Eu@qn2!4tF3j>p z)zrEz3crQ^ktO6j)fa!`bgEvLwvqE&yW{W8gcxGKxracE{p+pscqdZl;~vIQ=h=p5 zu$~#`+73bFaF=U#t|3I8@Y|`=H4Y+Ao%d|+=!1_OmNRF?q)?1{4j&ok+OELISh*$F zq@&@ZUAh5xO%ZhtX>SPlAAgyUo?H+9^2>hhF#k^cYdhPzzfjMYq`>c8M0-FQ7v-M| zNrr&=n+ijFiot)da?+YNUFdhrrpJraKVfJ~QD1=`pMRp;u0ik%+{|xnaD?J9K4$ob zUGJ3YU8hof9!L2JCkK;#Cf)H>Hz<}%BNtHnO1W*gzhsYmi02JVDXyG>6v6$dV-%0@ zBgawuPMYz!|73{N$9?T41{eN%h`fjUABQR0k3({T8}Yju8&Nzdj1>H9zJCjMCF8l| zE5(ABNGEVn4sB225@Rs=#~I`actiY*?rzAJxUYT{X$7uCPJje*7CiqE67uVkBhnV0 zk^MYAS)>$oUf_rjk{9SLAzfyHKPrhUX#E;Q1OpyY}>xNL|cl2U3+DFTB|8yc}}TsNerAFBNYYash^G zBQ>xbAxIzG4<1H#)7$OH*EvVyk>NPLc)%@g@C5gy-T2J$m*-vhJQh5+4DYQvmq&f? zK4b%LxQ1S4JzfNFCM<7l5h{nbJvkyT?}=0Ux%_$HWo+J;Ag4smxzH-YI>G-<;lFSwu=~pWP?z~d2=2lHzhwa!jWMpH&* zbiGLY$<;~B@D#x+Cq=9IkWz5>zB!v6q``Zc6XWhse%~g4NMYDbVUXk%J+S$l3{#I% z=guvNeogrioJZ;91v|<4`@O%Ol;X1{q)D0iUi##M{@oz-bH1m}>t_X^UwDwx^VMFE zx$;!cr43l`}y?SxccL$=pB)sRHw)loHO`I4Oqd^wdh zAUPdOuRP#~6vlTtOPTgS`eO%^X-1Ne$vEfz3({P#gdKdvPRgTKb6$zmf4fkC5Q(o{ zw8WRxmsSz6gxbHqNyGd$LP~o~XNX5Dqz>}(_)Rm!dKY88{8-^gsyw_*CNk{2WyB7# zn6iI6wzn@N5qnfbhxFH$lovf%A9ZZ!Txh|_HzR1 zznESlW#XsadwbeF;-{wDxsfsiX;YX=(Fy`9Tw(P-P`m;R$&L}zN@5WpQ9A225gmYsR>v?>mf5-c8zk~6( zac%dUBj7rQ-@G2T$Xq^Bx&y2+ z{1L`~oX{`$>zNi@=i++F{mF_+`wf@U6}BFRd$-j@T3;`M=QpwzoDd3t$4Q>c6==as zx=ZB0YF4`mZr1_=rysZmPx1XXV^?-QH{B1fkBYEm-q;7vF`ah}A67fh_lI{Xcej0B z?F+6O8V)(ANirFDwtnB)?k)(F$k)3+VhkRt`dlR|RhSIkaB0UCUs?G0)o`y<0KPy$ zzo;MhoG1->eV_zF812FVAuD{tt@~`izd`7!^{w#`d#dO3IK?Cg?>FDmpt1zQJx(0@ zx!ngoddlZ^jp#!BOJ|9qbD|J+eA$nqu3E^w5OOocHrhgJuw1dGZWbi_=3CV!+(2G~&+0c!L2L%3 zVY{Yfnv|bO>wv_8?d?aWX(H9J9tR=4;r&mg(r1vt_t89XSIHmcI|w$D|*f6*_F-T6MErT2_(`5}!K9IFfoby-sd!#oMC{Oj? zu=FnEWZ%2_IG`4Cu>W&;pUD~s|A0(drnkX19i%qoSB%`6zFGwG*~WY-{BaiYr*Mwg zMNWqNHT=gv=-EOxqrZ`fMP7lTn<=OE8JvK8SBXonPK)Dv@yz&ny0-=AP3MH7pKZ?!I)kBL?8?WFEyJK- z@j8Cafgvb3u`Tq=fyq#CNu%FkS`g$ZUK-mz{vH&s`r( zviV%EA>aIq@u!B{x_rf;@XGBnZ^IZUeEMMOkp+jL@RR-Z%Q>Y`$e8EK zOqRSpIm7Lm{eOM0V9%^j%W@;6F_bJK`v{v@<&wR~ZZb2Sl#jNc%#ft_LG@|_6ilD+ z`c0w&awU{<-(H(x!2?AfQWupTQ-Pw`&jwG#8<34q)Lc;LmwpKHg`&5;KjeY*gwne7 z`<(qLP&~0hLqg>h(hZ8|)?B_RV*z;`fwVK~OOVn~ep^jo?OiV@F<-EC!5bP<8MzKh zp9Gpdt%*k_K>5VEbxSz+Ly5-hoR9@f+5-L*d>l zJE~@e5+0K4zJj!dV!F0l$FN73f%@;;_D*l=ueVl*0yXP|UDiq%niWx66iIlT%ni@Onea15vl7r0SOqi{O z+y_PRr4}K|3(5Q^Cz(-B1R_J2a)aJ}v78etk=0P-oOvFGXiz{?*%I^d8S**OiIgYV zeX29^B^0$b*j_tS&WgWF?T)#rB62Nq6%3%!RkQP|4btu0d zK>ktTTCs{uWG*rr3iBSxNf_%Rji6|Au+H~~UYMU2rtgS+j&y<|dA~g??1hmt2#=g9 zv}e9Y>5((2M}(RB` zd~xpC*UDW06e9C*98X40BmMreY`GhzyAk!+Y%F&YQ=ifM`TFGyC8RQGPotejPeR_U zW`hOG*FxU&cE|go!kB*qGK|Q_?ltG4ka18X?!E7(YB=Q2A3wkMO$X^mt=+cCq`vk7 zTaT0e%S#(S9?1h`%~R{xkF7`2^~U&J-#dF1Fh7w$@(mf4e`$8&O~avneL{_QSEL8s-Z?)`vrPhW49}aq^4N;p0y$5tzkJ%7giJ@KK*7nm(NpWBkc%M4 zo8#^y*Cmi8t+R1Rmk&7}vaF3~FZKIH(VqvhJkLM(ShSwlOa7Jle#k(`jjp%7UKnUz~l#|Tb?tffLjN$;eQa`4&prRAc)E=WVWJzex_ z-rm@gkgjr9X4cbLNGV7+di?IOfF5K{je8-pwhGw@pHsa}wk!~2{+@3Cd>-drS4fX~ zZIf|uCsK!LkLJoP@$K~(Mt+CPhYcTJ2@U^YuNFau+^3?8^Y0)ZLxxV0M%(MGKkSHA z%=fAHN=f{F$s7@kpN7nXj2oGmhs5}yfMLg5Agv+$%z4%2*Iq(~Ptn4;y$O&}Sn2W1 zcnn3OU---e89$ol@V2Z+yJ8Vi2D0ZIoaMA>HOAwF&yrm)E+4f)UP0bLUV~g8jUv~A zqey+y{s*jibxAwZ*J=LPe(tPxWY8P=8gl7NptLAyzVt}Zo-||s!Iw2FXkZUlXcm>hu42W+RFLIcy+v)=B9GT^hdmq7HExQsaj|8M5d}ge71(3pwb!48iG{m2+ zUzMzO9OB!4_{@%!M2aI9A?M*btpZsG$^5T(yb7(t_Gy6l=j|biiLa4v$ahE&$Uy%B z#buC~rQG>=nkmFBcYSdq+Jae5iV8>?auv3FKC%pwX6+YVysMDZUu0M@;*a25KOOY$d_<5(a_yOsE^Dy5mh-Jv{ZOF~YoyhH&uRGEk;(nYQ`^9Y~ ze3B&R^iIR4i3C0P78JF%IYeS4fOG2kaAUX7DO`i2RD+P zqR~%$o`~rfGW}2#Z6LNm$by!uhyA;h<$q&vK5`XAsN9`s((ZumwgkBx;xGHIt(}m3FjBGd&3yFd?f=8Sr-?iUQ6cL?x;Mr` zBtvd2AocE<(sz(K{-}IRk;X^^lJEMGp&v|tVJOP)*qNo82NZ)KPDjyU#HNL`4@1vV zyn(zz+WpD#{gavVkMbubVLcWz$8RL+d5Rp^{=YDt$INuYQGdlT{6%+2I*TS~yFvu& zS&B|b`#^wuXEqZ3c`k!1B^hqpYIMlMD!L@sBB)AjWf!Hv<#Br=ZQZkE6Ce||rDSaVg=;6tPfBm{RJ8BlY9 zINoP-1lO-ZDj?;MO3d&GhJQp4X+qlJm5#eV{;v36-;YNBDaCN6{le703|>H*A+4F= z)cA8kdO^b4^o?ttiJ*O>!nAW@aUDcajTs)z*w+X{CS&>iQ2$0E!;vA#7-o39q}k6M z?Agd7NS6285F^bF35@msL!>Pv;5wUPIx>OO*KD8dM5G9@BQo{5b0G1npK{nIv*R4ERhim`O@2BDXrAW8a>HR3vE)U7yOUDX+T#ZzO6ox<0 z2vS~*e7vE#5GjFn<2K|@vTsot5@|&2?=M?9WRcRizo3hDw-|CN*~hT$mo`M256qhWU%>kPz-pu-uH%ew{k9M(0cnhN^APeES;vJu;r)s0x8uko%yk5{{<25f5__*| z;kZ&{HDr|N?!IC42-0?Id764{M5-W_u{<2<;YTGF|wK&p0QH)$NB3DNF_23&i}ONfaHRl+pkuBLk=ScDJrrt!!ywSpeRe` z@oL98WsuC+huDZzK`JA+FvI^Ge`#8-N0#cW9yR|dDj;brx$wvOF_&DX2S=szd%uvP7MaKEN7lV2`;P-` z<8+YP$h}BivQKGo-*z@~8rip_f0d!vBav}rp1%*YnS=RQAuW&>kyl5_ zncw@k6pxYl?$~hDWOO?JrCzD}dj)ijLXeT@ud&DY(a1<5uY0)khbf+5XQhYjN3B<7 zkaFlZIyhQxS{!IRAW@(hOGI0l(S#+`g|G6$pzO>VhvY~ z)0lp)RG}$6%VzFD9zyOV=MWhCI1~?||8bCvzlW9MRwCue_?)0|-3)1syzqzrsRXie zRfRr$JVNyDy?XspWHIsgack8HA!i}!<-+v~#dOG-S*o%=Y#s4G-fT@aM_xdhA+4F= zbbC9pYWh{eP|NbOWS?BGLvA+FmsYu-Mvz0u0pu@cIDKBt0gn`%U-86$Ds|%vKl(>i znSN4=>yVq7;lIGz$4|Y0_KP#q?@7@C{lrzwa}ktX^8gCp-H;k_PGYd-U_a^Ks5VaeJiGWvdAgD} z%7sV%mmz1A_yH%fp0mfICdXU<-CLpn3%V)kUCU5j9w7|%(%Vhs=A-SwMp%!D%=$3p_-?JF+1rbeIp_~I z#{O(%Jb$`aMC7K&jQm-n^bbmJ&!&^h-z*9x;C7NT@b%!Y#D7jnUs7 zi3}(5p{LqS5vhz^4d=MnSI_+#N+;J#?kF}gZ$8{QXp852o)LL>-bnHX>Q!IVw;jj< zWEXkwsnygR=DbTk{Wb2#xF&r6C+q#c>3w6`8!;Q8UF9_Xivs< zqQ%+a|MUAf8yeIi*cTBVa!{Mcd_VECUi8JMjmSD=4YHLPo;T@qb@azigo6R!gh@H} z-rwR+*4rC@MsgzAk!;9u%pKcR#-zxcLimvV!Ur4wwrqmE{3wZ-+gSN(Ko8+{xH zh{;9gi%U4}i`>)}D!yWJ*>5cS4()*WjE_6R6&C)K(_v8y{horRQ;Nu?=;v}Kw0ZLK9_~9Wg7_`vm276g$Uvk&rZbG} z!F{@KIRC97xv1(%-)M)@I0mp|m(-Y?`2B)PwvoR3+LT+NJ6$v^t~Y6nNQ z_K!j$-*f}x%v)oQJOlCDZ1~dT#u4(~5mY1f4|LnQ1IKqXG7=e1m1B?{ z%kvG-u^uCKWBU|8ZIrvc$ZljOa*!EL*}3%bH?V{Kkb)TLpBT-o`N(-l3FH#eUo)q= zm7;&i2=~{r@m#GAQk!|smZC1%Up$?3N&xpY`^Y#gOZ*mv=XFhyCd~7@6fa=DlFa<5 z{X}CN_iLH^cK_ZNT?cV^u7lb~zQTHsvCp~`Df7pEtUT^>)+{fXMlbH)_+ zAP+J9jUjk0j&bgI=CA*=pCObnPP<5XJ=X6%JbHb{;G9wZ$=~l~`0th&|5lT%8#z{5 zd_xW+2Ps;zF~ft=FOhM0%{P-%-MAjzgj7YYM{Z+=2QlXJ9bAWc5qsEuCoDipAtjO0 z%M~&&7_LTuIh#>C?L9kjs#=NJVCNAmcoJ5U%^?q1{=C%wyW26ib=mzw4J7 z){}Z_xd&N~Z3tQ>hg^n~MJf`1SL{3=QwV14v#uw4>uAj)NwWTlTrxojDTthioCcq_ z4avLS(!~7cL$;I6Mc++DBwVDoDh-)}OhRT6|0ZL9=l6O0oCcw1ofkXcbLX_wV^)Dk zf21!m6fzn6Yu)IN&m;E1uTuv$LAHap^3Rw6q#u&5N23FxO;-&v&x2F)bPnX*c{+0* zUl!zCws^&Ew*WaGDTU{sG9bt6+Vu0|PoN!a0{Lsx_dGGIfLyT`#^MF9kS@rVkh|RV z{g=nSN%4m8riR4oFgpY;&N`<2@p5^V< zfow&)F&qja))ejv$tUOJ&U47`MrxAtazUT^2FW?Op7R0EkPf&{_?VoN>v%TnG&#SQ z=FfH)c^i2T@>3Uc8$?SZ7m@wtM*f|7crNn^6ii)H^_p)sIj1gqAUzftjf^AbME48d zK7!OG`8vER*hkJW?h+o8j_1>J{$Lg|7YZ19?kw^QM1}PXJq@zK^PNhp^WhB6M=n9i zFrTCMiEm6>s6x&ke~Bu0BIkKe3G~?`A0r)+PRwWeI5dAbECMBcHtSbM_mT71`ofxW z9nVjjLkX_ODb7I7Vm{O5&X1#d-^e+}PCh$% zC`I{JYOue4@zEM&BeI$K%-C<4zy@E`Z|F5|*$HL#&*csrG=Q?J4ukHlX;9|<>PXBc z8d3$hk@-xW_qz)fQ{%kWtXu`|BA%bAfok1zn?(*dL$%@g z6JJ-KgldMomgcSvp@EYBs(p zgG<6tqv1I`Q@fe$OK{CTbPsAHUoTlbZXDDcdoQ!l*8^%!`)ucaU_E1&7?wm@fwQAHDj8-T9 zwsn2QF;IVaPS`B&ET|jL@%aFcHPlVvY+Kp14eDm`j2B9t4s~ch(AR6bWBX4-y|kd$ zxC!=98{XS~VTUKwCiL^}k~V|d%)y0A`IMoy?Z?d&?_knDEBQ7xLj8;7S@SlVL7n!L zp!P+IP-i@~$D_Ff>MqXUDb|UHy8B|Pk7gVr`#{c9YWG0>$+=OJcC04lDd0BMBjuPB zC(8zPjB~kdSRPyQJx|ux!I@BRP3<$$!w<0y`I3Ah9qDqdj&V+xo8&XmCdHeqcdj~r z@q>mhPi2-j*Ft^R!G}Wcd7-}OX#0na=1|{iARh5t4(h)eu5+~D#_xX)Kx1|7orhCR zprPz}{E4JkXy|lh6Tfy48Yg(}<_m5?wxJyEgckfBq>14tJ`PQFW1bq0;So@ zERohw$XK^*g0>esrp=vp1zN{hJ$=QV3$06U^5{=l1g$&n>u9QmLhC-;OEQvopwRfN zK>UZuoO|d4V?+M&FyydC3~O zoNNrV%!HxC9irE+p9LN1o0f6zx(FSNbF}pE@0y=}mL)(Z*RJyN@Fzrm7;CDng6@xE-bcSz_6KG_S6*;?;oLOn`Vz()$l(Mvmdc4XY~j%3 zvQ6VxQWA7uxAZmnX$RdeuM8%f_k?bD8}6lze9#?mV@YoMQRt4ny?5i0cThQQTsPP0 zanO^YUHx2C4Z5FLmoz#Sk$6kJF7HO}WXA8#zGw64dpA_tuaNw4O&WTI&seN-m<>H# zj-qpWUqjE_m*$anlaYeZv)t8n|5*d*QGT7CJHZbsb5&Pp@9%-$>yO>E3fQ3MLD2J! zd&Ho}GpzaaH7V$MA3j*oYYRQWp9BQ-t)M3{M)3w)0#x0&WSkPg2EDyOiLVZHLC-*1 zqV+9)=oQGGqDS_(ShEHt$EJBGAXlo@yN00(}Bw>&$9Wpyq~3n%Sm#@b&b(^@qJ0 zq3@`0R^M)VJgb>gRWg@A-+eLV$m3_A@45IHu8%&@=P~y_U*%osdnf7W>BI(Ae0!Bc zSA@XVrp<=WFVdi|d&Pn4Qs1EOm%`2AI2wGNy5{rw>qp@0;&tO?mAT>TQe~mk?^aBC z(;t0L#=r46eDytWv0i=#e2qHv>iYE4@U>c>qvDeud}YiNF8DfpYMbl|OQ^^5p942j z&W+9A2K_hgl*MuDLciU;p59CJ=fEd>w$7qKf5x*{E)LqzpX2miK|Kc=<^8svbZmmb zd4q3twaj3E+hf~ie|;DberqzNDisD+_$ILl?t}r&VA0s&A{fvLS+MWp7HDX6Tp=a9 z1qPj`Zx_El6$WhMGK?nI!hn0yaQ2S~7>ND6JyKQ`1}gKsE{V|7sml+VlBWbsvLnv( zg(YEdSia@QoCX*eEdKgtLoN(*m5UgkTLy#Db+-=ZJcq%J%{f7vLSc|`j$sire7r3o zC?^O*=MOwAuVIHl&+oP2W5Z!EmVNeJonaVc%=0!F{LY^xe~}vo2l=8?d0ru1h}>kH zj~Oa7m%YC{7KSEH=Ixey3quR0s>Rth!_dZA?l$L-z|didreBJ-FtlI1F*D$e|oA-8HUGiO!m0T3&XRvvfX(c3d3tOcb`jAgJA^?Rj%E& z$ZBX%)#q^46@lTG!RM-Hd%;l2TDTe(3`0H2Ry!y4V>&!AEU`^sh+P8Hi$X>~eIk@? z{7KI*Demf+0y7w9Q}H_|G@JhWmhV9oX)vt1%fzya{@zjTv^7OuFnnlVc$Pj5sRZ>U zD)rJ2X25Vq<^ze_jB=-2D*Yt+O%UI<6o%FJ*zL{igJI(X&C`M}z_7volJ}|;k^E5a zuUImnbUTbN&Z(?|;brQpjGi07@Rr?|rg*=E;fn`^wQlDhVLIylvyr> z6oiKRmu5Y0TL{C=pZPC4S;MfvrlQHiXJL5$_8AX9Il-{@-gk!v^GN>n8`y3lZy|3$ zlVFd#y43?1+0(H!McfdEZFHw=?pg=KjC~XZ7|uKMb3#15{Tk0Jbf-rkBaz|Iw1XpT zZ|pJ{u^wLAT%-uY9}T_d*wM@J<=o5`*K!!)xAv-&l7JDZYdvzWlwf4>_3v5xf{}sH zFkk2UnXjQRQaWY7*o}2CB7aMy@Y-V-IcR5hR;>m`9y$v<&R7W}zOJYDvPZy3kefw! z)Ka7jG`zbZnXYvYMncAAy2aAtG4#wr7}@pU+^N~@FmluJn_bU77|W=xx>JL-hI&`$N{&h476h=;Zo_Gsx4> zbYxt_lLjgHwpISe`0oQSlIxXS-W3faU;S3{s(QdTk&tJ0%RS-Ss;J?~vwh&(_IQ~& z=T0I|Kx0wW{Y|SHN&hYBF|vZ;Xrq*$#yhb6D`5DSrIpcx3K$W$sY#J3#`d*mwsXVC zOO@~i<6vm$TEvR=WiWJY(bm1?HZb%;_EDh=eI7^1H^$~JCG%?a2aW_7YN8#V^Kv|r z2kOM)v?dzp!O+Zgr?ahiVeneN#T}m<7<@4j%VjbMgOOvV^t`?dg9TjL#>c&3uzCDb z&C`34dx)Kx)~iAfZ;-7Pe!>rf)?bag`}V=0@eFnuiOuSrLy zLM>xGycGt$XJyuN(%)NN@BHTL5Xv`c7~J2%75Cya44U`t|B%f_%6C3!s0vvDHFjja zT!6s~02h#x&8dB!@i4fc_Cl{NU4AMz#ciO^Q!3ph$c0d=ds}S( zl5`jdE4nc)>lO@b`^c|(*ANDdhwm7E<_-fUk%nyX7BFxp_T$b~4lr;%=1qNuGz>h6 z&zGHc90nNQYnDNsM$QSzqc35=InzSOM-B!g-#gzm=Z66$|7z|v3Peu`3)yvIx~?#w z8%DdgK#`G11aS^0b|2RdB$HVw7__0G5>`y@G`Mg z*LEk#zpQUo2MlDm9;Onb>o1Zn+AsgVU_kIJjWO}|qI#;|_zk>SPOX7KtT!fyM zBW?z*ljlww*^5kt^Y=6b!VB z`au1}aW6eLO@!{JKQ0v>I1YVn%hhNcZt!)SqDPVIWPCq^*fU((4@BVW>J2MA%GHrO z;H!%2mSS~!x|=udSBY_lx(BuAwl%DRj+?c~z7qiYwoJO=TEPZ=hlCQeo!yC@HN|A= zO6a>aYx&keKIn6pqx(!n75ZEyE~Z7u5PR$P$_3A$F~0QLIq{Rw`h8aO%gyT0r@*)6 zQ-KCa@6P#0eb8qhQg&b94)mR!HhiMR6%Yc41(W2V;>HMcnZ zsT}ks^mALAUxVJ_VU?8%^N79Z)_8guu@_?#wsS+@6wWUG7j*j$*K2(eGMVZ1B6&r2IP`-=X&(WBvD*jFZ=Mj6=?{e0eK<~$%`j4Aulls!vzb2&IC)khQ!gRYaT`f#ElGG!3;gfr$d|o%l zPlf6ru3M#6(a?Lp4x5GiNr47+!%^!_X#qu=GRJ)E&0*@@lV$8$s%s$a2L^>#Ku zuXbfaZ{S7fwQAhFb=PTt81CvFT4af?l?ay8XvWpm#~(!NyB5(5p~v-r@NQde@ac z{hDKiv_P6e@ihxnnVB;oXv zU6-M!HtDXj^&ygTNre<44w+fvQ1Qah<3I-RXDFZhv3{ z-Mx>Sgk2h-`@226XlfF!58a`M_u2d?A7P{r>EE)%Zz<$^|EQa>0?=jbT2wn#9=hK7 zTnV$yxStsEvf&)Q28!&FFf(SG@yr> zUMXY0!VEgIE(;i~afdFpJI=@ByP<3TW3Fo_wV_MDI8FXEA@0|QV9J=m%&7D(S z30)4}t9R~BBI|8!*%frVW0~%_iJm;H^rr8d)XJv`opbjum|>#~oqLXb6ymXl&KKvd zpAFdwo&FaCi(HpNXM{y=&}BC0OuW=w-`7OS!5xBHWHaAE@>E#dR%kmdMd%cKT#fopxJ~X4a?RF$|%$~a?$ay?TzjE(g8gv|x z?Z5MDDRdlPKIM4DFX*sP*le~mgyd_WIq@3Q@kZ_{++YHwhMuRlZqR_XzWR}Cu8*MY zN7JNWp{vj?)AL4~(-qovzsvvZFCzYq?Xo9Rp#40X5uchpwBH^3ddABw(EgMwZs^i9 zvhHXr9UO!8)rU5mNSphPKd>y?Z_OKwDhd>ATZ6LK}WR z+tyNBr@81ky&MhfGUE-1e=6})xHy!~u+`%E5(=#sp5{*9D*~;rUapn@^#ocOc4-i_ zaRlmJscL~X#`&x=XqyxER!AuT+T=bpWPRU)RD(L9Xid>MBjkPy!H-?p(2_~+4R(YU zhCNzG{6P~1tvQGv=vtYb0n!LsjUETCHD3>{_nf%rzt2FXp?}ege1Grnv*#c*)n#-btIp(@iEhov!MC3lNYd&lMXlyRX8hiK*H1-y?*MJ&wJ2XwKST%>cADZUYn8@sZkMxFo zh8|i14LqkWYbba^!_x=jChUF*4S`RNx%d2n2F86a#nf{zFY)8$#yHs!KOT2xhayse zd_TX!z|0creGgo*d-W3<@H|n&hD!^iUW7t}p3RMDMfy5w@0H^<+DD+_{LRSE_dB8C z%I&d0 z1sdKyQca$`6e)xIP}NY6_wm$+9dwMF(v9f?y}lpHT-9Z;-rmqK&#b(uKm;j(8k zy(l9@{JV_%8Yn;OY^bvll{w^j8tUHZ{XCy@h)&7ZQlX_#7rmgm#_R&}G|~ui_O_XB zU+D(52DMX^*!+p#cnWeY`XF ztGuE1QR{6kK|!eX>;BTS;StofuPQU#yB})%f4v-@<$+&RkgJKGd&Dks9QED7 zFgMhg`<<#kr2;iQsj-jbFGHG^%@28@82dX9Y zz1nrP@O$9*xF52gq$iiWeHv5_+;Xe!H-oBWPnYo0$3fLByPt2=r*~ui6aHJPh zX}@@TSz4KVpVufooB`!$(phefNi#JK&28Pj#Vo2Yk6ZHqi8p z7<>ujn`Jlk3Gym@NuG3IQ;{gdkaJ7N7eN_Ao=t>uzK_oieK&@3xu~(1UZ;_LA6?}O z4{#qS2A`iGuVVh9J$$xj?MpGJ zh17(QqAD|$ALdZvw)Ab+g?=b~bo9`x>LpNGW2R6l!+{h;iXo>VxsmMfanG!vg|V-g z_Z3m;NJDAA`SCSVE0Jx;VPr3|8d)9_uH~wrt60pu&!{AA)m*(kB`BS?`TGmy$;dfK z8RUGVFmh7NbuO-nrS-MU`aFtQg}jVuSxn<=S!hi^df;m!pIp4vmn zF-iW@jowfaEZ68QXN|mvbV5ERt4x=FkP3KDO)1_tWCnE$5)W|r=R?+>V{f8Y#FKKlC)`dW z_sDE@>YzUtjB&phXH4#ovG`sbjtr#E37qK1egB7Ok9>pA$&;ivXxEZ^Wb|)7FNK`J zr;~Kp@*tPDSbuea6*->(F|BFHcs!S|5YIOxL2b6T!W_pI=6xhNTBgctBCW{1GM5J~ zeuJFL;e~};y~w!=hMc6>M)KP$lhTju#`|1kAdB%GZwWcSq5DC9JY>hn@}1<@#d91( z$X2}9?+x-5o?|z`b06_|pPvQf$h@uW+%u2d>lbQz>J0KE-tXsxv}fLD!hD}wcgyZX zdV9=x?)crRiq#kE0Ex3^qNE&h(WHaRNW8@t? zw_b+#-*iy->Kv{>4&yyL!bl#{{|Sa)q>!_i--~@_d^c``_v@Gnv&-?~cSm7(-hTmpZ=i_OBIz#t zwdg0Z9GOS%4T!dL6lcCq#h-=e&ZLoB@cddYe%CPx$paA$A1?M^$ROwISM(Ye<2ih5 z{Elfm(hzwN^RYylLg?I@a=Ur6aU2+t@#M9&dMBRGlR&ORE{7Dx{e>FHO%ODNYva0# zK0H6Yg{1RA^=cp_G3<03q$~0NP5F_JjX=V-304LFC+Hs$p>`H6Fb3 z@O-H|o-bv?^QFCbUU4FxSBwN-&kH+4r#`~(-q+zdNF6)}xdhL5-$h#Cxm#zvUsV;} z9+NcB4iF&Uom-WNjKTN!BQKJ4YQ-vwkf|gcohN%6F`Y-?p3wgwMBa|v%d(%Bdk>Ds zwa9&V&Nvk5jl7BX;4B3<#=X0r$h`wa);13KyEW1Y&m|8cTaYPu&y6X#aP6*sm6l5G zLD(&uSB&SecjEa|33C4Q?#}mDk!O(_)Hze@AK=Pp|4`QZjQf2iO17pdMKcwha6EEV*}L z5ATGj5aZx|MVns_VjLCI1o_qJ@*({DU41DeFU8|2NW5QJUWnYA5t@E=2}JKXRy*z5 z1v&>7=3YC7?Xns>(kRG_%F z7g>$>LZ^^>XMRna%=tgR&$z$ZO%lQwa_c53*K?1BRrLBl++N_=_FwBCT>tV{-&R$s z{djNF^LMu3pS=;)m(vB15nqeRw~J9)uL+81y`H#Bsino}SaRLn#X6z9fyF zAF0R)h<#$6dF)~--Xk%I`CbgeK2XDW-c&qu9*jSN@u%T;7#a}4_zqGT<=Sb8Px$&( zqdN%Cp9>;6A%SroOM)qPsC!+csqa}LvWUEyy>eV7%Gb3hw@gqz+M!%b!FyEv@H-}B zazDfjr4!afKRX1}Rp9qg6H(5~pgh(m_XW}Qi!pxRq{w`a;!Au#8|h1>bFhKj^VHtN z#>sq-`aSxO`~)z5C-c3K>oFa1imIgiXY2EaF#IRRpM~X9M@l0lA^7P7RsA<**d7V^ zy-*sm1@FU{K~Z2B*$w`6565^#C*r*%oOrH2oyb>Lk9jWm9YGG#7wG}sjQUCAxGTf& zbL@%y+&XmN1X3HRfRqLg#(m`1Ac}Dh0x#ajCC?f!jB&CGITa~@_oDkk1On7;~+(_&;6xH86R5k39m zV(0Q6{`Uf-#N_`^h-|d=FA^+zw+uW#G7FhgYhOxw?zoQU9nB zJ$^DH-5wc)`uz9zVPV*RU8CP)#4AMh<994l%zmfrQCV=}R5g{=(?C6X8SnLzL%YKs zc?*&m_rvd_zCUcqfv4o2`m>zWJ#-QM#LhWfa;p&UJCQ^C%A09NQTDqhrH7o@NPSDW z3dHc9bThmsy%6m>HMB4FiT(C+-^)kTef+O>__HO-v@Mkqw5Vd z&5P4a@w+V-Qje0w&I9@JT747RtWDxoP2Xy%vPA|s=Y2m58s25_e9?Nlla8iu@0Raqu20z4~Tkd;J z?lFEBb%?Zw?b*qXQ4bws>Z5lJ?_=xkB+%#k(7h1JCX|Cg_+8WQ`zphc{&e|gS&%NU z9`E6rjCwN?>4tj!HPV^LAvOCP2eg~KQO>F3`wC=zrq~c%j!dKEPt-HA?po^E5X+K} z3_Tx$G(jGu+qZPP`f3t&ub6fr-Vaxc@^uT6lj8kex;;(jy*jj`-lF}o9n%Y?$|cf` ztfc-A#+0?J_otV1;xp>K7pY3Om+!4tJnxM46eQuCuT9)o_9;U?7a=q0_HnF7 z{#<%~P4nzTb#|itk&JeRCEk~{1*uGzdz*B|mkiVM?`uj(Z9%(D9NRky-?vBJgGbkb z#FgY;)5}xa{Uz@NmNSBC?~pmD|EiJ2aPLO$IKPx0dV0^_?6NtC`hpwv#cI?Oa~v|?@b=l?Mb0$^2hVAo`R@ve&1IrjN}7ruD!8M=7LxreH;fGf7pYp@-XD!BsPfI zIM!{4i3XN?H7k9Fe_j{4my&;PJMo@9CDhYaIQ|%Vwv^3+gQ9uQr(zoQ|5&L0e1hwP ze3YM0NIrJkw)!C7{P*~ba_AxV!TTGTz5(Y`=;e52H|X#LOy2+x^iV@j|)!5a*FE z@;NhpgQ#t-K@yzO;_0=e&zv3`tT{2v$(>i)s(c%(ms z9lsg(VCMY)8ZWrviII%25VZ~xY(%-6P1(1e9mq2H$f;j*=G#7E*L!WPenjN0{q#%= z2xZ)V@CltE8fOv{>oQt#MgiG(0N3fa?jh z5_xR+o+qxG_^JO>)8d142LGpO!p3VO@c-FFvhro<<9MV$_~@H_-m4)5K@2~~b_inV zp%C~;^p1E3vJCt-9Y2y_?n>#2L%+*^Z&Z38q|7wWCUcN{>2|+6#vebbzTRBd*Uc5w zhmQ=qEgU{F^vfJ9?_Q)TcqKc&KH#?ze_zFl$IwH?$RzM+T(-;m<{2!1HnScS4Uzlc z4dc6Pm;ajH?|30AdE)9%Omf<;-9#RB7NOJv62~& zUXH)r{w=2Ib_2RWFXQN9Fv3E&d!ww|0kC>%@hGlcM=5T$2T5u zOGAdh!*s5tC16!{SW!O zV%2n#}_{nB&KV_cEj~~ttD|WqWP4i!~>!2sjO9?t3>GSM!?&9;Ye(vwGH524dc^kk? zgF%K|dyIRE%@^2bllp1CKtE02|CF5TeZEQUgKMWE_NNv0vkfiB`GL{YPPzH7Ozl}v zPGAq>>f_ECl<9l9{82QYX=j3Mp)4&Y=>J=C?zSZ!-uiaDwrGh1=U1mX(edNb$yENX z#qw==!(FI;-jnuk|Af2+@3Wn4pDw*a^BMnbCCTioxOJc}{yn@a)IWS?@1-v?aR9NO za$GN0)91N3pcvP=b#$HN?kx_|b(@VdZ2agt&-ufPxSn0c=hxu#-l+Fc8260AIOj5V zt}9=R_6;=t;^McN+_`AF4W1)SLb*2n9_o?EQ8b@B*BpuQdNZUH+1IV{%bbAw!Z^Ag zVE2>Z6LCMZ5cjLcX?@&zRT}PZSE7C3?-dEI#(SAj%)W?}AAtM&N4TGF&)pZ?s3zx? zN|7y&<2gwdcaHPS3eRcC?+5HW`=-uh{5y?n$a#>_r183VpJ>bgdO(H0?L%y8$^G|z zwfjBr_b^Px`_EEt9zGjS?$>wdO@B}Bcdsqd)WZ8%=P$1fx%DW-@|d$$ggLn%PwJaK z7w@lQX+HP+U{xW6d>^zZ2}1kaF43%*-zbjZr{@%|Cy%xFT?;(w`0e_kwzQ$_kl6JfB_XafMzW11&j^`uE zYfAJ%-@-4#?v74w3kG>q7AF!M($NJjd@%a`ErH`D6PQlkZmYhO|(CxT(Di zf9lL2-*aR>eYX?ho%Vd$_Sp@;_lbqbDRb5xm01l5?DwK(kWl+!a?K-oi0B~Gc6PgH zDo?1Fg-G`)Gldp~{nL)k- zOH6b+2BG_RoS3xT1(K2%ZrnLd1(MnC1e74;)zp!emMuuywoA*s_;c)T}$=n2i>$Un-zdlBOuAP}*yYc7L z2SPw_LxAG3{^Yy4B0Gl?{CV*S;5T^R=*$}rAf5c2z{X0*nA71*QmhVq{b9QGN`@I^ z_$!v~&^tuFgKV+-rVMzt3E92IZ6;(q?7wYq-7v_gn{aAV3s-Qp|Dd0IqZ~53Pl>HI z9|f6rRt&6_(gXYGDL*e=(TB{&y&I3L3?ScuuB*P<9sgdaJY+3CtG246DP&Lkkn_p1 zHTw0jpp6S^_W1mmfhezTdcXi zpBm$g-?t`0j$zH)Hy?_*zw`Pj6|(KWP2O-o4RX75?mKQ(`IjgwZr#gDF#gtgv?1h7 z%(BVrF&lp``VzPdeFpzH0{L zjLNv(cG6Mq=h}5^`LzBr>0X0A;&-(Wk~<|kaSXI*8s-fXOr_~V+r`q{(hKO zq`w~ZL*&TskvQB{zJSzcl9F5i@$B~&+e!Q8+s|r&^Kb~}=X2k~O)iD(11=Y&Bzkgx z*G`@N{#bTWu`B*vt|vtQ@j6l~(a)ve_quz@@4*hblx0YMPr%rY`--^VkJ_>xzjyT` z_Xl$ao!5tqh*9llZD8;9tlUN?KnCttUAy)V7_eHMe0N%&sX36Wiz6ORPloi^+Ij5? zTf&E#dyNK;EywRn=a6`1ZrZwRNHcYamz4Vi&s!|5^wAgyY4zV?y{uO=aV)dGrJsT{ z$%j2u%$jj__0E`l2YSc3a0mH47uzjc>cRJfE>D`>bAs>eI=KtKqwGPxQ(Q8y?M#Se z&s)^-J2}>`nYQmb0HWFZkHZl4a<$f)qQ&Iz$rVh@QO4g#a}j_4&0_q{>N&0>WAJ;F z4)nf+yN7YY?=58U?;lLWd)@?c4s%Fp(@gH(_U984&*)f6UBP+Sj@y^*bKve>4)}8G zC9@x9z#2 zl3LJjd#0}MogrX&x=p!8xdqP+ZcFx?eS?Qs?je>lN=?$=&)5m2(^T`&Gv~ny)09qA z6}qP^`D^(n_WhPTH@HSSH8%nWdD-HO5)DfGYMT+d&y~UP$IPV#MYTLb+Im;b4geSD zjs?dHYI)v%Iy*Vn9?RA73~8(Xr0OGY6T`jf$Xr{$o?vO1pgi%gHN-2OZL z>>dABNvu48wF3>FPE+1(p57mP9EY0sE?vU&Vb&;x21{&59nZFB25zX=M15IMGJ2~~ zDf1|({>z-_2G_^y?9PKNJFbg)vi3h3>{!2G&Xe^I`^3r}aQ+J@ z(2qE|xO&93-xlqd68+oXw(~dj&)&DmL#&(|KMkJjI4WX#F;A3pG!rZT+j=ZnJFeo{_RP7Rj6PnndSAeELhmKBNWo3Qp>&6BnB5_rby#fT@XpUYz9+`2xSS=Wi(D>SLE6wFwAHU%?wU4AZ-=IVRG zlZ`iW#L9ou?o*H6_UG%R^^`uU>r4pFUPXFN%;lHMd(lZfD`&hj*Gy_Y0AMC z<*mV)U0+R*rr`W?&zeI;n=r1bLRMou=E#?0X-3P7tKaQh>P4x%N@NwdX^xN{kl>2z zXf03HkHzCUS4YXMcU#2DzXsksU{qSm)7oycj#Z*qxnNxvTKCy_hKpA;gySV9KGEXS zYh0Jf8~)75B0v7UW{=|HHll8c=#K}H)cpv66ZLLn0bt^mt_^H-~92kU!{zwG#(NeA3;7}jva@ldiaL+M)`8j$$s|>u%FdDala6xw4u3Efhhz@kDJ^%dlQ6V z96@QY&ik@kB!unwC}H_yAcQTx8#n!)w@5k^=Q$-C7qy3wR`+&!=Ff%T#QUS3Tr#5R z-^dSi`Snpm9(-@kmLM}XLe`%JZ~LjbRlgWQ)BR#snCcLQ1mu=O=*No8uaPcHyFN73 zEEtRJ8${Zd^LU2=>Ce^A!QZf7wWMDW-x>Q0OKOyRbYmG|kKBq72>YrKeEjY{2xIm` z=T~%ODg9$Hgvt37HthUN+A($Ftu;;BQ$+NAci({rsQ2d>e;*}wWT1Ar9_^_D?Jt0g zL(1U$$v7V6WIVRsxT8kwM{(qhb7)8N(C+2QIBT`)V}avciR0~u<@K=qd|IB_hdszp ze24on6S5zhSn;cd_z#t^v18GXRG}Ykf#OGy3|_t9w7x+Y7YUTw<3kB!^0&eZD~Z-0(X+ zSg1dr#O&wR{2bKY3-@)E%)V|`=CXy}WWK16klBLsW&xQui?23+f&G=m{w~7)DiD7M zjlBZV@0pT)$njtA^vHg+qH6GP+?OuEeJQ)&JwE=@0MxT7(KE9?UBLEuV|%K|K2u8a z#}aJ6CAPncjw9D!Y2p5^^14}oc9Md2QbFy6@kcS$Z|0z1nuq@M0r98jI~i|AzdE1n zGjH1(8Djm-n&@+56Fp9DqCX$>^Yd_DYKDHPlK7>WZp{{;zpo_zpV_B)iljNc&!>9l z^fwRnXWpcKQ!GD^mT#KR+1qopw;Htjxy0^^_Lf-UJS)R_=8tw|jCPd+!M$o#rskJH zQ0dmedTDkLQZ@4F>^x%#@%64-8MhhzKrs4&z35*`(Z4vM|ENL#@dzT=^|c1V^U3*X zlxUibugoBV-5=>ePiy)lcA1FYidC>bE6JJ2&Wv6}Z5_2GWdctLovvVMto$s|IeKAq86-~#CI`V#3 zy%NN*>-7?d4Z3jUwVNEozV1*wr|)Kny}Ra@Z^&YZ-8-woy5CKRWBtoTh+BCixtn|j z#5whHGhY4>;_j)%ed_5%p1*xJE{;6k@U&tWd7u6b?R@e+W*+E6^cl$>b^RJ4dTkG_ zDVA#>D)8oh8D_nUV%N0<(jTXj*CR-OnEki|+yD5WXQcn1&R%~?))T9k^R>91bRvFt zf%nz3#P72E@u;3X0$1Nwgvff$Ei>Z{N&Uwbb$w3iXY6wkL^}?(wb?NMqFMVfC+!&! zWxkuVNBLG`2*k4UdKAP|zim7^AeHnlxLjc!>0iK_Ipq+)`_8VLNi89sjVBI696Nul zAda24{zN~ME^VAo^%HMlU-U9!ImDkm@Y!$1JV<2cZw4gZetI}#YYVKe6{*kvVz-H? zuOigfMTlK7{zSW;Cn0vMZa3F}>7>1_%@?Vn{#KFkVf>08Gd`R@Vfy#HW7qkle^d3s zcZsBv&!wJvoSY8Hnj<>vzB>o$(ryv=HEux~t6yW$^gyj%3&wSYbeZe#gWAYI`sp_L zJ=zsO`Uclmwgz({W2a@00oSY`V}8-KqdlD=y?mAAv!MBq9=-el^llHyE-ik&j~WTd z*K7LdoR^1Gv)D_k-`s>$JP%2&zq=~3cn+kd-HteL(v^~{_YJ9+Szls#ijk)qy%;g* zsv)GG8Tf3)^AMg*+9P1rpt<9Rw>k@1QaSS*mMy2`%Fn}c9VpYjJ%%CrCm`+pD)(De zR+L=(XOea&$Y+{Rru7(Pek~#xQX4B{cWrIWGpVtg|KaD5`c>h3$hPs6O#O4hOV^6j zpO&k5=W0|Iqy@Qu`F>1}G7INbR{upBRZ~qVGZu78_R`IUjFDGv4mH-`xzn;=@Q>?s zoalI|WvyTF&IQs3mD%*Tc91foec^&-A0ilixES7edXiGC+&t**ouy2@mz~aRegBS< z85iZy^20bDVLZjixq4ji`S+BWha!z`EsuoEr588HdOA{O=&SC&6yKHU-%`D9O0#*6 zJZE$w#tZETzmZXk8oe^F3+btpi$; zlm(ks_K+G>1_dg+Pt|1wP!@&kNoi12fg%(C5z81qC}8m{r|R>0523j0#vaM-YVVHf8DMS@Y_Q zzCo!@by|n9(v)R-uY0Fl4TiF930}u9j-o7GnX_i+j0Px$Ri6-t*;7&Y7$#)H(sYKj(f7wmDzt3TdnWh?%^xS!mmJn(<>A{9=o*c zNFF6)|B`37-xIMbW`5P2$g;$Fb&4`CHR-CG^a99pnquG1x&>u+hqS}jR!c)xNw<-% zS%EyGopb!^Vj#tk!44r9;g$4Wx_6N4u&`%I%`{L+Iq4>l5i#4Hqfl$k0d{(S|R z-5vJlj_{|rGi^V(HrHf;44`&Y!qbGV7Dwn6@gE zTpUzN$=!3QQgZ9livML~;=)5uY_|Qc;uP+)&v^nu(8-|1HP=7>FC!O+kN>Yyt-EPO z+~T>`e@k+H$&By5zb1FjapJET#>SI}{+ism+48?8x39PUYkIN!zE^+E%H2WJZy0L) zHM#R{y}u@V{~>$%KTc=%T+HjgO&4-rJF)v;^X9ht%`bl(|7(6A=b-L=|C%q^d&T#E zO%Hbep!C=Lax!SIrSgHl=6}_`gG#r~8fCESuNe`&{AvCb>Az;mlr@c6R(XF-CJvYs zvLyMhnd5V;0$Mu$HS<|JJ^R<>*5$r`&HR*!*ImO8{WXg_-BUJ17>bZPkI{qg?7D44E`pt^y9g6-WAlz@Emlgt@Xt$k+d;BXN=FiQ0e$(X^j@o*6L+m))r#rO`kWH z+qX5TUIWZ(I&2?!B?C;gPnlk$<$t01G~Gll`u=%2qjP28HTH)R z`z2^c)AopybI-TriS>Lg+u?hyz6Z~!z!|=K65%uZ{1VDfSdabnr3H8Ej`7_6vuo?! ziC|~5+90#ehUcy6syi-ci7B7-m-VE>N7OSVtGDvs)w6V)Q#shO_La_)wXc{m=n^wPTPrhoqR`5ah0>so;A}ip-rj)QraW!Dg+R<2~5?DW4S6gIP z3U8!T56!N9fqVv5NjW}ci$dW&YX{oM!Q6T%0{y$Wx?zNUxQBaGrNU%98nh zW%B@8vGs8N(E@3LelqxX^Nz6xSFE=qvK>?Z!Mi`Qtg$}=edLgS_1&cz*hJ5sL~mn< z_I3W7@~oak-%I>hl32a{t^P&zkgN8ppz#m&i?*MOljM<|FkXrlJFmsn|L>Qtk9#lg z^1Jb6$BXm7*ZFl!ez}33SuU0Vu(V}T} zvyn5vVXlKx%jbFEitD~B#wo7sx}Of7xL$i=+~GOx$t|U>+rjJQL0g$q`;q&=%ivS| zpuO=}&Xa$REx)aa+?~ojT3@~`ak>+-Be>@@pVwMC6L4bvNf`ELE^;Q*FZ*&E4M7~$pSMRgj*7+cJ1aDf#LnHD)c=CifAvA5gIGDI z-vnd~qvsL(9({WSZmYVlwye2_ybW$6Z*}SGYlZ!k6Yg&tkCac~jrPY;6TE6V%srZ_ z-9$efP(LByoHjPHyjBOf1Du`B%wu>EX38KGSV zU_Co&Jqcz&__4*ToN+E1U{6~|W>_bKtDKS7c4S=g_7(yuk~Kb?qvKiH~v z78w^$-xDXKA&O9I^(k}kd|RCqnYMzl%X8gUNX7`+=alq|%fi83rIXYr-Rlgwc-5Va z|4oSbJ?Sbj%(GGjs2=|xqt6pS2XYX5oO=w;p3|%rVfb^?xZ|wk~ei6I% zAol%ZV6c_2-;>tq{V(Kl`|g~YKTp{24fCHUu6{2vuP*o`DhSUnJ1q$(;-|EOG+Uv+ z$|3%WS*Ie%c(@#i+9fhBT)zykU+sv$V%D#W-_%e1QUMvKILDIRI9?58ykhP=DfnIa zy<3W1mZp@4a;8@DR0T@ zEree`*>yosPbk*&4eLo~_A|szZsWdY9qx}J$T~VA!Z(-S->~axev|eD(0atlx%%&j z)c+fMVEkb`zBfe;K>(9|R zrEg8rfx_#Yz;1-ru>z6wKi5&IChKs$(72F&qMY!!=Bu`ABa#;CKeOMI61HPz-K`f% z3$=%_Pw6J@krtl!OuSsxWc~ezpJMF3sL48CFX9h*zeC158a#9_OpiEs9XvLre7rek zKhb}MUdu>~TPjKURH=z2q`Xzs<6=^N>6^Z>q&yRU)f0bc9=^$q_(T2UXL3mTt?QU9 zns#OF&kx(n=6|+1dzh|MjNd%jcv+eF&7bG5vhf5ne=d>rfB%Jj3Ft?o(0@jN7i))E z;KkZkBxzrRd$BiZ-{{_TZlr!|_X9o9KiiS~ikP(#V)E_Ddi^Xz{Vv7{(Tu*7C9emT zp}w-4q_aqSkG1+T8QYry-t2ra2k)rBO-DNKgl}nM%bllphi}eip3@UnLBRbfNmEa^ zgn<3mv|l8yf^Sl)w>!EzLIA!`D1TzPav*#=G(j!v7gNu|+2dw-Xh3kj{D*{XYarNN zDO16GE`;}Om@)a)N(h(Haa?8hlsxZtJL(iZ{|!PdWmlc~dIv&JSbpi<*&D(>O5EA8 z?KOlM$aseFhOP4}LJasRj{je3l52^9x-zmiR;DXlPft zca2DXOx==u59hCjnD|vkrCS+7Jp2BW5YN6p7`|_NrQFNf2EI?pvu)XJHYB=_7`A@i zU`Twl?$*tMYw$hFJhQZD9elT*JLbc>E0Chn(LrK`1*Ei|H|JkD6F3vBwRdPpu_mf z1k_)`!r6lg3a>-_U^T^ElU72!5x_3H@|z; z1wuyN(mK^8nAp<^#XW=3o|>jZAUZRyL{;|}MEmRyPk&?tkr#AE=w+UP$nAT5`V4sn zkxqG+b)=U=-A8^u;*hk^WOk=bUZ=&xp zV?VhPef#dv{skG)uZ`YJ&xQ;qMNYg2eYC+193h)V%i&0A3Lp{w0H8QhsF?= zd$#8F>Uj_rHdRvT=Qaq}KK16baV>Ng(juT1J^ z_D}n8{#%pzziLC*VhGc{pmJtbB!sc{o+q5o_=llrKg}5XIVPj;wjP2{_4(Ce;3o)X z*VlLmbRVH&*Q*=?AFX?q>AoHUmyEugnm7Xj6(mOATbK?(tUYT%5W61`P5aoae(EGvi!9OBlPJP7rSBlgo~R3}fgpIC@K`h8|nTSZ>~ef)zt@u^<&=ZQYHAaaZM%aJB#Rv*%uX{Jy{XExU*;|ZL*f%~U=ZoPNzB$i$VpSzxOl_LAjOW~u>aqIh8X^b1r;eP!%u8S4OaxOkKZ%y=L zm~yQd7k}yvmGRtg3%vYzrE|=!!*~w58P5%ul5;SZ_1BJ43d&it=d0T=E?bW0 zHOgci*6aVJ8PT`z_7`=i$9+WK=icth10UA!T%E|~N_ z7SFG0u)RIFINq%tC42r9--SD;D^%s~9dajealP{}QjUpVD$x##F}}^lxHcKjA4)L3 zuA*e)@cFH{^TkWuQBMk#LhonhZv%aftFIX2m}1;7S7Y4r3&*2`=;f7TjSkvPE{Q`j zpI7P-`#brwN|fH)_f`xrt!AFDksqye663gfthXNb{RL#d%B&ZO7>8$3da&&*Va9>9 zFBN=u*H^FgUPJWH=p}`W7t{V69EZ)A&c^sKojVu&(hB409$Z`=-4X4w70nluy0GTLo7WIvJmx&2`c+NUJi zp)|6UNdBMF+Ay^IP{?T=}0z6j<|f1IBR$gwzYhatx_ z=}&7skEle}{xQwXH^ICsN55K(EXR47g%pf`2DJ~)Zpx|s{3*@pWgv1Sj(am?8|-%% zWFMSAa>(x7`9^FTWQRYdxqg--tFfO2$WlCiNBtO- z{`vgz=0VSpFEAd~My|s6`Z4ke#3%==jceTn+3k<%cuU99o<*|A4!GaAf;1reDHF*s z8DuL+J##GE|FkL6jO@qO`mB;bO8zk|h|f7b!1$~avJ2U7T_4x48Kj)BeCs=18j_6* zJc6#y6=6CX&&Wf@XlOBC>LjGy-Dr?s{ETm(t%b$Y7hWPv$!R`(-<3J=J^g6S==?k6 zy-a)+&y$T0qeU6eD0iY|H%L^F=r={T6C`x$y4PEI34E7!{+Y7AHSSxliBQl#roV>{ zSq4L5$c@?dFGC<*e)*Q6ch5rFFE^Qc%)DsIjQKIU3<4S;XUpQn)88JW%y{`1vgbpyydIDmHnrvV?eie*ZS{|s zzA_@rVfS6nAlucef3L1d^!>T)xORsupZ)Q-B+rR3p)7otoO=>PvHQNA|F?e6_uu^o zTI#zu@7ptlr^fW*Z@O;zYx!n2JsCL#HlzFy$`5JGme?Ru0H^l6xMyLuis!LBon6f> z;R2SU)R>Ih3vgcil+&sRyp3RyON_XQ zo=oY^woiuV3AGe`9~tm?6zkIGjTNQWo_ZDKd2&1tXO_oJum8yS0PZ@J}i>BTpBc4VHc?%XygxDuazFIC?lnLX*F7{faz!NO;ZcmMc zgou9q@>(TRes7F(l<#XvnbgY3Cge+3NP2g1$kMT6dCsld^fF!>xdM{3syxFcPJra4 z3!lfnUQC%{_xOUtMF*rEqNWJwzAyr`u&tu8~CVLJe4?*hbjk$K`7C>6} zW{$NJPVuxK+J1FS0x}-bz67Z%bk&9Q+iSkheDQ%Yt!mK4&!?90{F(Ol!PHxj9(qvY zy{`{t225^zF|Cy6oFf+V?pZ;m;?ld5l;SD#-hSLRsY3%#`=y)vKQV`V_plVV4Zf5G zJy+T0e>})@(51|ncOg(XD8YHGT{FtklRlZMEoFJ?{cw^{h=fvy^y@M8-ziH94|*nt z)bXs*`LX5J1t?wo#QsP#4a$-$87DmVzv6k%p{mMiJuNR_(b-6opg~V~8f2O`B)5Pf zkBI#Wa}+7_!zZ@cSna_xac)@j*mqE%wV?eT&s@q3^^MA5$A<9Kc)IAC)+5O9eQ~3I zS~$-M-2(Q>IP;vksJZR5=a5k_t#?Q(AIjteW&NHj%z0+{W?fb938^N(PHuVyl)1ko z4;fb1Q0BGVyyUa$2FQEae3;ql{gh(+A-`@xp|=HP32UGBJU!1UOdPTXO8Z6K{`_(< z&z=ExwzF37>=$)CsYDq{r!3Iz+ip0|fkpXQr*806_^G5`t3<}jt?!<(Jb!8BTzLJQ zvP}B(Io+zcP}YC=&a4fKD1S_PVYkypjpvLBpIWS%3>8Ti-WInWPg%D5OZ~nu7oM9S zb?9U*DC^$Ls z#p>73$7bH;xv9YL+DB8-a$ABTx61qR)R9x}*TNdgf3(jUV{S!R=DuLo4JBEgJ{3v# z`yGd}QCZO?Rt1##(|$NEy0ng`da%){?N*TY>&}@FJqyZww-S>^11+BZHCKN1v4{Mt z8EtcJx=`j;CQaSs;lcCQq}PW|9)jFG9tXR>+eMi-tuedcQd$o ze0sF;5gG}Gb15qx)kXdlAE?PH%=da--TZhf3 z%#vxHsg|AwSxe^D%vk@6GMinm9`iIxD6O)Ship5|2z%SfJTt76CQm!Zvk+`1mJWyP z${mYBW-If&3cWPCZsK|8v$|c?D3Nj*J*^cIHh1OOKSu7Ejss*InG~90=}DPp(=0*3 z)0F4umv?ftZ$Mhy%mMe$o#OdR-7)jiRm$`htriV8d;)2q@+X&i+@egKFk$)Jyeghk z7VLditPLsG?ku*;*P%>aJ@MHtO)H+;j8mIw?SQ1G%2~s%cH>#7-?yhrKc3Ydla{?( z4oRa{!pTf&%H)n+D^ecS@a(ldNFqiZl6tjlT%uY``TKqtL)zingNHuR=GpRiug@tF zJY^HRZ%I3det8|;lq`XXna+%$EzHkcAis5ua)BIG31L+XgVa0e0!`5 z<3}j(D(&2TPLU`3dBIkGQz%Bs%tZMo~{GBD(OEUap}p=dIppct3L&WC7ANu^uV+E z#tjhh_~O09u^TDF*?2C3CmYwDf$&gygE#jzDZ`3dpXoPg1kZ}CqiRm`jx*mEL-6qj=k*c~@f25X)XLK_%H1iy4ZPajDfu1Gkt>Yac}PHj z`za-t-PM%e64t62j>_Yixqq|V=Ndvi&o##=gZ4bwCi7N>=W#f8q_ispX_@@!Yn(tC z*qEN})a4yzP^&FrehZs%Tu?z7U>E&FM|~(y_fwtPdFwJfS+P+*nUdR|81Q8GDUR^% z*u7_tJLmCa`}u+A$Q2GQJFYY3fBdxDbB8C}&wQS2|1Lvdt9Cvv8x1JG?XmKj`FJDG zWA_r}91g)Z_b|^6j!Kk%c6rsW#%b_$3)ODSm?mCB=|j1vaioMPx&>$XyxpRZ9LQW9GtQF9DFqz zJ$lOSUp(1$Z5pMIOzVnA_SPchyxIAvMfsJTm%-ruIDXUh5F4KMoj&z#Ys%C0ct+ZQ z9Pnc2yB$w^#0o>BH{#yYW=C(uOSyh<+G9kWJ}xcduTbnI=4qF8wT$*#JK5dS6TFyC>qb z%Yn~4k4{ln*SL&4LHU(E2e9W!^r|CE-lv=+x0)yGr*89f4gPr7eG;})jgr$xIZswE zQmF4lN>A4R1oQk7q!2N~iRfE1dQv{62Ya63#51jP^0B)6WE@)PmithOEyvbtP3fV2 z*8R;&ZJzADZaH{-IkvXH9GOAM)ia4FTc0Di zwQhecW<(!K*TxWoGYZEjIr${`!uq{PO1HVC$}KX6@?5&`wqDdd_>v_*DQxl!O4mKt zC+xD9<9YnStid-9h`iUC^;3yFiGQ}00B7T|>vpv=@YEHJKbYjo@oOq6uxFs3&jOpjpFqyzoo_ju*rrp}blgNW)Nk8ScbnZgQ z>FpaOr@we^Tt25#a_@8GIZ`5U-N4US-kH*gUH^LUWc#Nl^4{N!$IBkp2f)Q+h|RvA z(v+TTJbZ@It3@lFxJinHOniKs(u3XSpW~_Ub6lTyLkYVaY;l8<^YdmrS-+D<=%ajU zG3D2RK1zGd6?rNyHMr$lPq;g+??#^LE2PKjN%PbwAAZ-%4!$0_b4zvq97^v5bN!6G zQ#{kVUdrra#;i-Wxz_`gDZSWu&XFg(4m=WBKe%;hG*5Otx(r^AFCHCvEtJwT!6CD6 zv?b59-QS|89Rjc6uR_mdf1%{&Z8x55e5Q}{wkM@48>jj6^oY<`yqJQ1;V`Axa%??4 zD8-h0Y7nj;n8h`WYG+wqxfAyL8s}qXX zq8UGGI_6}44$lPjUPWb!e=NteE2L!OBW&L`+CFApXJ};KzVfKf(RP^j_(mTT^oV*d?q#WUGkW(Y^v^TUANzvCh-Kv_#xaykKc{76O~(Ev;rb?tel&^F z{_d6qmww6@ZDkd3 ze4>Bp?L}Wo`vmd_mG|TQjS};GcSX$^j->q5`iweC#?N<3RJRxM_mV9g4~3%t?nvo) zck#QpT`7b=W^K|Y@A{p8Z?(H}`1?UFp)h|=rs^#a`lCT_fYqfO1=6yg`dC!A;f zB(v{bMfp{Ic}-Mkmare+QPeRM{kb`%uljVOi#OZ}Usc^p1m7jkr54XWMD{;3pS|kI z^H-OcD+3o1hK6Kz1wR>k8_S2ugtux+)F_$w`b`XI3dh-t@;e!0T%W;nPj>0W(L)L2 ztJfxxb>(eN*K}k!C9_UuoGW(_UN4#T@df(*O_YqE*DDQch5o(^#%ue~|GH6rQE%>8 z&}lW{of)A^$h@)tx-bUkPcWskdXMf?mh0j8>Y{y&#kjzMl8Xzvph4w9N1{o{j{^AuSXNRf8?pB=3SVG2U)ae3AO3n@(h#hpe#l%fq zoUxwLo4p6<3Emn{`(BQnNA{<>amqs}x&7{Pj3=gJJhO-=8~0eyeJ*!@T23kSerCVd zj@W&hO!@9S*?ry}vd?4BrMUfeBTshz$l!eWjO83CxqX-m(O1JDv%cWDxYR6S&HzfT zfAXY%Ytx2oV%mA4*{yHeD7kn?iSECf&SUO8LK^4caI&A>URf>4vuXa4XPG8ukv!S? z+70KY2F}|+O8Ui#rQ`VRa_b;~U2kM5h0cYT^=}5AYgJHk=O_x?IZE;`@LN(5)|mZ)QmFk*d*i{^ zC{d=S+>z3M;L{^N7fuKN5pNpaURjCfJ1RWw@_tQttc~e8q~1@OFqr2a|9P!XmV@6> z!*Q1PHlm(@lJSf09}V&&`t&KUUykQM$~+TpPqce{64NvAoMJJhuiX#T7r`3f>!zz? z@?s~RM;xZ~-{UqW^>qT#cQftLpOEI10d~>0s>eRzd0Rd*kuq@LnbNFfc4R!5{htO> zjWWp2VKCgSg&>d9r}{qLi(Jn$VQz|{*+2-&>e+Cl&x=bSq`Vp85&%t5=f0tIU4q5V7gON1GeBd7hhT z7PxdQMCgy3xytq`M7)WJmi~T}GW_ntX+M^jLipp6_K{u-Av|q&!iY|aJc}e2_f_wY z-#J`>2#q=C;_atVMy-CX8#bahL~Wj~^JR|@M1}S4=aKn{GWzabJD&{F8Ut z5VN^x{D6LTl#w0ve{3k9gy+vU$+@=Y)_$6lv8&Hzed-wov0G+ToXVREv6ZfqMi{iA zOf)|c;H)$p5^ZAl%+ivC?^>o($M&01rkdx5EOIc0)Hg%r78ve?)SuUrGfh<~)8E!u zOflO6>7VQNmiU=NMvDz&lJ?xCO!wcWrs<_lzCX}jqx2dwhBtT{+`q_kV5s)6fz~8# zJJ!RKe2?(6I^{jrdBXWijdCAE-c_V$aCR0(DJ)g6&J%kGfxC^AY~Js|x!YCPs5W$KoK zO&Rkt@IGfb(Zc|}U4#Aa{Y-_d0q3K&?R}u$8-^?9J&P z!yFD$mJidh@V%=5<)bHms_xkw$|r8o-aPOZPxt9v3_p*7a^HFOK8eqv+;Un&d;gA< z700^3E>9V#IJ5agzipqP;{NQr(+4S0{upyg@48Yt{7`M*%IC>q_%X!&tIy=wl$9M1 zJ&ZL!50yPuD@>oB50#yLS5`gRLRr-|MkDh@9#nPdHFlWRb*SoabyL!7X`WJyTRB({ zRc(IUbXC7i%8hT7ImOfa&C#ry5U2_oS8?IHDO4q2nzFLgh_dG6BAa|!H>h#GyD_UG z2Wq84P8-JOQr7Ho>towb5o(U+_E@!dHPpO~E>wceJhvDX&U-bQDaYM=*SHTJ-(u++ zo*x%|boYLb^=CtE+p6BfMwL@m|7v62GAImcTDILE(|HBd>>TmZ+%cB2I^#w2-qp2G zUHCwMx3wnJ%)He#cyZ8Bf3ts+zhUGq;) zXX-t;Y_@8NR5AVAq8EVYm%`DM74z&a0C#V-4qOAJWB_z@55LC<98-~18gX&j> z(~<}IQdZb^dT*8S5h`4d7u>iJ06#R!2V}1d<~h?lZ+vVZ{8+Glu}|$v_!0FX&DLc- z&!7w$Q`=HZZ-mMnid`l~9HjhltWBGO-524<8OP;AqnUb=;`ICatfH(;=|4+%|3s+F zSs`Nx2cWW1wO5jQJ!KUW-@IS<4XPA>Y4q`7(huhLd)xW}W%bo@MROlMg6g}i6z<7S zgc_+6=9~JsQ&vAHnD#31Bve2D`dmHK8EU%t6{?JNqO7`TBN^6zEL7d-tJl@;I#f#y z_%?cr5oJ}vr3QVS7f_Yay{)-%Kd2smI>_aEAIi#wNk7b6UV+MGiD45D>pay&{|8y&T5-OBDzn{qkOJ5~Z}Ke`)TSk1HU#_N;oKQuty!{-L- zZwEr%3WH89!sL05nYQJsh7r_F?ljDJM|Y@`m(gke{0Yyp32p(|^-x!@b?y3`iBMPc zs7v%+JD$$#&h)vu4(h&cb+A361a&S`<>u`kLs@@tjAiA+u~2{N%u&^OOQC+(D5Z({ z^LR$Pm(D((0QIS3j-ATb1@$h5g{KB<^X%exU#hGn)b}mxV6VZX+nEO1l`i6W)Z3?S z*Jh~K>p1=0v|Om)`ebeQYY{xvW!<(GnL)kQ0=XH-5}{t9yJNNNOiFJ4q~iQJO6Fy! z>O1K?>-Miy>#R=v$&s7`(oEViN~>oL&tao(pB-ZiHDjg)SC2`88a57HPFWqk;?c9G zjNK&6nZA4BJTi}iY#;gX+&Mvc%A0RceV}oFlFU1(X5&&N%BrA{*GmotLRIuyV{hYI zP-Ul?u(?lPo;SkBO?sk4=EI=#?pL8oH%xhV;S0)|+#v<-j{Bgd?3{|>$yD@PWt5D4 z#n#HL=k2XgwTI08Ry+^x`&zTT04jA)u9wZ$A@e*brNwTZ2}a9D%*uct>3de}-k%CT z#+@2(F)5O=!hcP#;cycwLjA^VHt~RpA-i&11Bdh6Fv%fc@dT*Yes2A*SIW3fJ>i)V zo}DWx4dwZ{vz{(~0p;r?(>ABKqh!|Coy9TfxSqy9>9t<#bd-ZAOWq!tCpFy;N*q^Q zH4E2*;%&w`HeY5?7Br@(-nn}Z3R`W7J7kvug=(7C^R8r37F=yR%A&)3C@|b;IQok( z6ciPf$SjPdES#3Q%yQRgD4eIe^xB+6C^Wd`TeUZb=T*tZpZgr4(9nLr%7|nr^f+x4 z45d8Pn_tU*)CUULa|fpU*3v1J?_(*8dd^<@TK5|i4OV(IX>cDXk}&L?8J0s?7(UQS z>&SE{Osu##@pU5<9tR|SbzIZm_y5~OQ9=y5TS`EBYzWfQ0wM^~4Fb|*lM+;7l=LRj zARygL1!0x75eT1fopTAD3=6 z5P#rsCJKB-j+cTarVR|)E^tw%+kZ(gS8+?!_L$6IorU~{I4kP*a_E|OLz-!PLo12C zKXATJ%|2sBzQ%+{;v{3y#vXoROV_(>+GkL2 zt%cSDm14x3y~dW5+!H4bm3f~0t1G8Qi3Y1Lum|%TKac!WU)veaZR8#vR~+!rQS~_} z=+uXi&m*@mCAcx7*lE3uz0qJLa0QZjwA;))27EP&*Ev+`FYxp`L&|D>IGAXi63dc} zle!{msoyty^Jp3ERKy&%AzXsl9vUfa=QQlDfxOK8_e0;A#&Mi3J#>H0f$K~Q-=~Qn z8EQ04KLLBxqSi?HkB$&lK{e?I2SW2YINW<%~d?Vx)JQk3n46Thklq)W0 zCAb_t=$#=Sa`$VI-PtWAv?H|eIie9#+r7EYfldK2LID&;ZRXv3c^tCC*HouTg|ew9 zBx?M82de=dtVV^(D-gam9Xdf+18@0bwM=Z!Ad2-@QJw;ZH(ffWYpW0R52tbn=j3R+ z{tsWX1E<-&=`MDaRdoCRP0n!?1WJd)3h$uf6-~tlza3n&dG>_Zaik;0Z*p3gL~KP-M+oC{0t< zhjm|}YnJr`^AoK!hObehG19hI6qGQV}?;;$YjhO&E7`GUm|yFR!ESn#!tyx& z>C2`k+Gn?SCO(Jn61TWx?GCDIh4Rx&2AJY$ei7%hr8f57O?>;{b&3`36tWN1DbATM z|4-7ZMX;Q10PBD!ueK}l1_1vJsXVWQLOZZUN$hKW+f1jRf(8M`0JY0 z{>0Xb{iTEJl!b@ZS%!5X%jFAWTd|6wcQP5$`w)|xATU)d9SxaZ7}IY^L(yzwppOVn}$C>CJVwpWS zM`Sgkpg`VQV-E zMRL<8uakJy7vrTe$jv{FqDq~OUtEgd=d0(#r!jC-5Jqj<))WWn>@lo?oV^#kM`6zK z|5<3AbG<_|LF(|;;!c(Bo4&wYVK3G};V?(pkTUnb#%GSZdasIVGDdqmmztT~8;n9g z35X;>9Y23y6`#RY?xH^_%KmTad|Xl68gxNibVviPDh%$I-S*z7A2)gxRE6wga z%sl>f^OUb)$CJ2G>@Nc>-Tkl0q^8V~F{E*b0=nbi>5^hI6-PRtCL9x4qi?Ay3nS$j zn6GvUDHoo}$V%tv?~~zlVfas@_O=5)AOwn+FgQZ4$Pro?9pm4{H!lYYstLc*gg4;y zOV>IidJl`%_K9d-w2`7y5UY#GSKa}ky>vjROz75)wO}1VLW&V0;r)GXLi_J>Xf|Go zbqM}SBo;`b(xGd;Pk#9IbZ}co@F_VWx)lb9QHQxyRN%Y7G zFpN6rYY`%`>^PhPRP!5ZISCflU()MZhz$HM{uAF{szAs-6JDkY{?5iAK^OjSt?%R_9Q>9GRO6B#v5Ug9c8LkTPSsHOt94fS<6i%B`~> z3coBB6mZ)BA9|sA*_a5OP&4V+L5CuEwo(2NbM&4Qa7u2rPn}0O&ad`CkjDu%uEFBs z883v5IZ0SnrOQ1?DYsy)gLAVp#d8YWf2c?AIOEP~AnOHw-uJiE8lXnL*?7AjqdkdP zWk?;7stDWHgAb*U^=+c1$~65Z0(Z%W04{2ozu=9^E3SSQL}jJ>@V7=O3rCL}c~~iJn7;k{*MeAH zya@Vn_~p3uw^$6LL5qnm2s4!+CDVm*tj8Mb>|;*5O(4!t+L8<@Za>QJ1@j+5CT@5w z1#h#w7Y7~3Gjp`0ppH+stiv{GQ3_$_&Uf3+yrnIj^2f#i7X2sZRx&occlw`>t+Q0h zh6dv~JGAS4@1xQddi)Q^^41`2(rCu*D}#S z@~%QN7kP8>G&VRhE6Rf$QMc8aOP<8DJa5t&>rE^g604hfRb?OmAUv}Z)kC((S(6rX zAW_9C%nH9*&7hdng-^R{2+Yh_(Hq!}agD(>0lSsPx{gMu5!no_X7ssUC} zqj%F~k|ge1UZj|AKgY;$MsH(AtM>I?@%b#b{gd}~)u=L;0SnyO%G}OQ^Fu)yys8Y_ z5n4!ES*Ct!f{BXR@TRa^@Rp`+`|aNTOrM-Xef#ErLB=)5AZ1E1fg+5kM%~Qaum6L8 z%q4<3d2cj*5q%PP5BF3r?xKj?gUt+PsV&XRKWuvlOY_4PEgZl#iOAtbpai3oz~Pn7 zVdV#L#?if(+_NHxheb2VFdRtLVSOHKEeb$JZxHQ71$j4unT_|8`{(?Sq1If^C4vGr ziFM}6f$3=PSyW%MPn)O{SR(T8STj55kKD(cg`>4K=qLqotTz)}F1DL^!(qMA0_4rT zhQ6`3Mi4b~3y_0%!phSH1u^{=pMw{V6H%1n9cWi&sQ#aw2gY2KDPj)X?DGg(=ZRAf zk(FC%|8hLg5I8GFMRJuhcHQh#Fk}L%gxD#r&A3paNFrFNL?l=3qkUo$4cU0u5>MYY z%h|!9k*g)*PT&d39EuW%rJP)VaELEdW0JtS``=YAs<6%SLwZ79_Y=_b7pp`oP{rR9 z^jRV?hXeCzzGe{J)I$YBXMTZEgP2=wr5_fHwSar?DedC{8S89O4CU`J9QY zgbq^1PT%cJKa|{=OQY-&t=RGf1Uig5o6IcbhaY|ptfy=uD57X*B>U9#f3qLF=q)^3{e|wD$~hm{+EF|T?Z1Vtyu1JS zh1vdlPs8c)X=+t73DpO^6vvJM;;^R|zK+|0#Q)rEc(1B1ieRZq5*Hh#E%&i`O|A^P zN<z-INLt|?0 zP|dOnfTzK&(NAt1Q>-tdra$C)V{|DApk@OYRaVQ5O1*;W*qN4 z4SjwqD62YICEiX+qtdCcs%_s@%=?(vWp!Bvn|t{*G3$Bnrt+JN{|$()EIai3I*s6; z{K7fVoy+p(Ev9l~a&I>m%c_jv^f!*7xt!BXSwE}a(%7~XA6wYg97FMxs3$kbh?S=Y zjCjlc-wdYvNGRb;;S&o5X<7tA|A@43`qLK;A8LqZGZvip7S6kr*znA66-m4#{dvo# z)7in+??Z=Lm-VpAKbn&Zx@S)@xX3v0%nS21{c?#Y*24E(A2@zGH(hWe3ct_@dL$r1 z05|&OMkZXIbP3VD{R^~+!M5p51E%F~;Aa^>azv=?;8cfOequ`7UAO-n^h6X!3BxD@ zU=17No;6WOK1lzhHw@gbyH=rVgK(o4RQDyp}SS*iVAsP65(Nv+H2RZF|9lke>f+hqKhcklWZ zpiPjYr|mUai8U^>moCIwhz

    +Y6wswht#xc)qrLf(12exjdh@t9HFEe%( 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

    mc5vG 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

    -}s{->KtyGX4hCyXg+CtZ0Hp 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 E06JOLDgXcg literal 0 HcmV?d00001 diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 445a2982c..0cb757a57 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -54,7 +54,11 @@ applying `epi_slide()` to the latest snapshot of the data. First, we download the version history (ie. archive) of the percentage of doctor's visits with CLI (COVID-like illness) computed from medical insurance claims and the number of new confirmed COVID-19 cases per 100,000 population -(daily) for all 50 states from the COVIDcast API. We process as before, with the +(daily) for all 50 states from the COVIDcast API. + +

    + +We process as before, with the modification that we use `sync = locf` in `epix_merge()` so that the last version of each observation can be carried forward to extrapolate unavailable versions for the less up-to-date input archive. @@ -75,6 +79,8 @@ x <- epix_merge( rm(y) ``` +
    + After obtaining the latest snapshot of the data, we produce forecasts on that data using the default engine of simple linear regression and compare to a random forest. @@ -174,8 +180,11 @@ make to this simple model.[^1] out-perform many far more complicated models in the online Covid forecasting due to those models high variance predictions. + ### Example using case data from Canada +
    + By leveraging the flexibility of `epiprocess`, we can apply the same techniques to data from other sources. Since some collaborators are in British Columbia, Canada, we'll do essentially the same thing for Canada as we did above. @@ -283,9 +292,11 @@ and/or are overly confident (very narrow bands), particularly when boosted regression trees are used. But as this is meant to be a simple demonstration of sliding with different engines in `arx_forecaster`, we may devote another vignette to work on improving the predictive modelling using the suite of tools -available in epipredict. +available in `{epipredict}`. + +
    -## Version-aware and unaware forecasting +## Version-aware forecasting ### Example using case data from US states @@ -299,7 +310,9 @@ as above. For version-aware forecasting, note that `x` is fed into `epi_slide()`. Note that in this example, we use a geo-pooled approach (using combined data from all US states and territories) to train our model. -```{r load-data} +
    + +```{r load-data, eval=FALSE} # loading in the data states <- "*" @@ -363,8 +376,18 @@ x <- x %>% death_rate_7d_av = slide_value_death_rate_7d_av ) %>% as_epi_archive(compactify = TRUE) + +saveRDS(x$DT, file = "case_death_rate_archive.rds") ``` +```{r load-stored-data, eval=FALSE} +x <- readRDS("case_death_rate_archive.rds") +x <- as_epi_archive(x) +``` + + +
    + Here we specify the ARX model. ```{r make-arx-model} @@ -377,8 +400,7 @@ forecaster <- function(x) { predictors = c("death_rate_7d_av", "case_rate_7d_av"), trainer = quantile_reg(), args_list = arx_args_list(lags = c(0, 7, 14, 21), ahead = ahead) - ) %>% - .$predictions + )$predictions }) %>% bind_rows() } @@ -413,22 +435,19 @@ fc_states <- x_result %>% x_latest_states <- x_latest %>% filter(geo_value %in% states_to_show) -ggplot(fc_states, aes(target_date, group = time_value, fill = engine_type)) + +ggplot(fc_states, aes(target_date, group = time_value)) + + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`, fill = geo_value), alpha = 0.4) + geom_line( data = x_latest_states, aes(x = time_value, y = death_rate_7d_av), inherit.aes = FALSE, color = "gray50" ) + - geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`), alpha = 0.4) + - geom_line(aes(y = .pred)) + - geom_point(aes(y = .pred), size = 0.5) + + geom_line(aes(y = .pred, color = geo_value)) + + geom_point(aes(y = .pred, color = geo_value), size = 0.5) + geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + - facet_grid(vars(geo_value), vars(engine_type), scales = "free") + + facet_wrap(~geo_value, scales = "free_y", ncol = 1L) + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + scale_fill_brewer(palette = "Set1") + + scale_color_brewer(palette = "Set1") + labs(x = "Date", y = "7 day average COVID-19 death rates") + theme(legend.position = "none") ``` - -We shall leave it to the reader to try the above version aware and unaware -forecasting exercise on the Canadian case rate data. The above code for the -American state data should be readily adaptable for this purpose. From e51d47034618549acd05a8429bc11ef985c04db5 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 12 Jul 2024 14:28:51 -0700 Subject: [PATCH 290/382] bump version --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index e61172646..a0e5a4375 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.16 +Version: 0.0.17 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index bf3f4d9d5..baa0bf767 100644 --- a/NEWS.md +++ b/NEWS.md @@ -47,3 +47,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) - `epi_recipe()` will now warn when given non-`epi_df` data +- Add quantile random forests (via `{grf}`) as a parsnip engine From 7eef2f4674d327c41bca2090156c8ea315fb2a21 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 12 Jul 2024 14:30:28 -0700 Subject: [PATCH 291/382] styler --- R/make_grf_quantiles.R | 6 ++++-- tests/testthat/test-grf_quantiles.R | 11 ++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R index 780a0931b..6e958682b 100644 --- a/R/make_grf_quantiles.R +++ b/R/make_grf_quantiles.R @@ -73,7 +73,9 @@ #' spec <- rand_forest(mode = "regression") %>% #' set_engine(engine = "grf_quantiles", quantiles = c(.25, .5, .75)) #' -#' ewf <- epi_workflow(rec, spec, frost) %>% fit(dat) %>% forecast() +#' ewf <- epi_workflow(rec, spec, frost) %>% +#' fit(dat) %>% +#' forecast() #' ewf %>% #' rename(forecast_date = time_value) %>% #' mutate(target_date = forecast_date + 7L) %>% @@ -183,7 +185,7 @@ make_grf_quantiles <- function() { args = list( object = quote(object$fit), newdata = quote(new_data), - seed = expr(sample.int(10 ^ 5, 1)), + seed = expr(sample.int(10^5, 1)), verbose = FALSE ) ) diff --git a/tests/testthat/test-grf_quantiles.R b/tests/testthat/test-grf_quantiles.R index 15d3a2589..2570c247d 100644 --- a/tests/testthat/test-grf_quantiles.R +++ b/tests/testthat/test-grf_quantiles.R @@ -9,7 +9,7 @@ test_that("quantile_rand_forest defaults work", { spec <- rand_forest(engine = "grf_quantiles", mode = "regression") expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9)) + manual <- quantile_forest(as.matrix(tib[, 2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9)) expect_identical(pars$quantiles.orig, manual$quantiles) expect_identical(pars$`_num_trees`, manual$`_num_trees`) @@ -18,13 +18,14 @@ test_that("quantile_rand_forest defaults work", { set_engine("grf_quantiles", seed = fseed) out <- fit(spec_seed, formula = y ~ x + z - 1, data = tib) manual <- quantile_forest( - as.matrix(tib[,2:3]), tib$y, quantiles = c(0.1, 0.5, 0.9), seed = fseed, + as.matrix(tib[, 2:3]), tib$y, + quantiles = c(0.1, 0.5, 0.9), seed = fseed, mtry = 2L, min.node.size = 10 ) p_pars <- predict(out, new_data = tib[1:5, ]) %>% pivot_quantiles_wider(.pred) p_manual <- predict(manual, newdata = as.matrix(tib[1:5, 2:3]))$predictions - colnames(p_manual) = c("0.1", "0.5", "0.9") + colnames(p_manual) <- c("0.1", "0.5", "0.9") p_manual <- tibble::as_tibble(p_manual) # not equal despite the seed, etc # expect_equal(p_pars, p_manual) @@ -35,7 +36,7 @@ test_that("quantile_rand_forest handles alternative quantiles", { set_engine("grf_quantiles", quantiles = c(.2, .5, .8)) expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, quantiles = c(.2, .5, .8)) + manual <- quantile_forest(as.matrix(tib[, 2:3]), tib$y, quantiles = c(.2, .5, .8)) expect_identical(pars$quantiles.orig, manual$quantiles.orig) expect_identical(pars$`_num_trees`, manual$`_num_trees`) }) @@ -45,7 +46,7 @@ test_that("quantile_rand_forest handles allows setting the trees and mtry", { spec <- rand_forest(mode = "regression", mtry = 2, trees = 100, engine = "grf_quantiles") expect_silent(out <- fit(spec, formula = y ~ x + z, data = tib)) pars <- parsnip::extract_fit_engine(out) - manual <- quantile_forest(as.matrix(tib[,2:3]), tib$y, mtry = 2, num.trees = 100) + manual <- quantile_forest(as.matrix(tib[, 2:3]), tib$y, mtry = 2, num.trees = 100) expect_identical(pars$quantiles.orig, manual$quantiles.orig) expect_identical(pars$`_num_trees`, manual$`_num_trees`) }) From f2ce8132a0fa796c3f574653a39fa0d71aeb408d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 12 Jul 2024 15:31:28 -0700 Subject: [PATCH 292/382] simplify, adjust some text --- vignettes/articles/sliding.Rmd | 63 ++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 0cb757a57..3480dfff1 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -58,6 +58,8 @@ claims and the number of new confirmed COVID-19 cases per 100,000 population
    +Load a data archive + We process as before, with the modification that we use `sync = locf` in `epix_merge()` so that the last version of each observation can be carried forward to extrapolate unavailable @@ -89,7 +91,7 @@ Note that all of the warnings about the forecast date being less than the most recent update date of the data have been suppressed to avoid cluttering the output. -```{r make-arx-kweek, warning = FALSE} +```{r arx-kweek-preliminaries, warning = FALSE} # Latest snapshot of data, and forecast dates x_latest <- epix_as_of(x, max_version = max(x$versions_end)) fc_time_values <- seq( @@ -105,8 +107,7 @@ k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { ~ arx_forecaster( .x, outcome, predictors, engine, args_list = arx_args_list(ahead = ahead) - ) %>% - extract2("predictions") %>% + )$predictions %>% select(-geo_value), before = 120 - 1, ref_time_values = fc_time_values, @@ -115,7 +116,9 @@ k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { select(geo_value, time_value, starts_with("fc")) %>% mutate(engine_type = engine$engine) } +``` +```{r make-arx-kweek} # Generate the forecasts and bind them together fc <- bind_rows( map( @@ -146,11 +149,14 @@ rates. Note that even though we've fitted the model on all states, we'll just display the results for two states, California (CA) and Florida (FL), to get a sense of the model performance while keeping the graphic simple. -```{r plot-arx, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} +
    + +Code for plotting +```{r plot-arx, message = FALSE, warning = FALSE} fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) x_latest_cafl <- x_latest %>% filter(geo_value %in% c("ca", "fl")) -ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + +p1 <- ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + geom_line( data = x_latest_cafl, aes(x = time_value, y = case_rate), inherit.aes = FALSE, color = "gray50" @@ -165,6 +171,11 @@ ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + labs(x = "Date", y = "Reported COVID-19 case rates") + theme(legend.position = "none") ``` +
    + +```{r show-plot1, fig.width = 9, fig.height = 6, echo=FALSE} +p1 +``` For the two states of interest, simple linear regression clearly performs better than random forest in terms of accuracy of the predictions and does not result @@ -185,6 +196,8 @@ to those models high variance predictions.
    +Data and forecasts. Similar to the above. + By leveraging the flexibility of `epiprocess`, we can apply the same techniques to data from other sources. Since some collaborators are in British Columbia, Canada, we'll do essentially the same thing for Canada as we did above. @@ -312,6 +325,7 @@ combined data from all US states and territories) to train our model.
    +Download data using `{epidatr}` ```{r load-data, eval=FALSE} # loading in the data states <- "*" @@ -343,12 +357,6 @@ deaths_incidence_prop <- pub_covidcast( as_epi_archive(compactify = FALSE) -fc_time_values <- seq( - from = as.Date("2020-09-01"), - to = as.Date("2021-12-31"), - by = "1 month" -) - x <- epix_merge(confirmed_incidence_prop, deaths_incidence_prop, sync = "locf" ) @@ -380,18 +388,21 @@ x <- x %>% saveRDS(x$DT, file = "case_death_rate_archive.rds") ``` -```{r load-stored-data, eval=FALSE} +```{r load-stored-data} x <- readRDS("case_death_rate_archive.rds") x <- as_epi_archive(x) ``` - -
    Here we specify the ARX model. ```{r make-arx-model} aheads <- c(7, 14, 21) +fc_time_values <- seq( + from = as.Date("2020-09-01"), + to = as.Date("2021-12-31"), + by = "1 month" +) forecaster <- function(x) { map(aheads, function(ahead) { arx_forecaster( @@ -408,18 +419,18 @@ forecaster <- function(x) { We can now use our forecaster function that we've created and use it in the pipeline for forecasting the predictions. We store the predictions into the -`x_result` variable and calculate the most up to date version of the data in the -epiarchive and store it as `x_latest`. +`arx_preds` variable and calculate the most up to date version of the data in the +epi archive and store it as `x_latest`. ```{r running-arx-forecaster} -x_result <- x %>% +arx_preds <- x %>% epix_slide(~ forecaster(.x), before = 120, ref_time_values = fc_time_values, names_sep = NULL ) %>% mutate(engine_type = quantile_reg()$engine) %>% - as_epi_df() -x_result$ahead_val <- x_result$target_date - x_result$forecast_date + as_epi_df() %>% + mutate(ahead_val = target_date - forecast_date) x_latest <- epix_as_of(x, max_version = max(x$versions_end)) ``` @@ -427,15 +438,18 @@ x_latest <- epix_as_of(x, max_version = max(x$versions_end)) Now we plot both the actual and predicted 7 day average of the death rate for the chosen states -```{r plot-arx-asof, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 6} +
    + +Code for the plot +```{r plot-arx-asof, message = FALSE, warning = FALSE} states_to_show <- c("ca", "ny", "mi", "az") -fc_states <- x_result %>% +fc_states <- arx_preds %>% filter(geo_value %in% states_to_show) %>% pivot_quantiles_wider(.pred_distn) x_latest_states <- x_latest %>% filter(geo_value %in% states_to_show) -ggplot(fc_states, aes(target_date, group = time_value)) + +p2 <- ggplot(fc_states, aes(target_date, group = time_value)) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`, fill = geo_value), alpha = 0.4) + geom_line( data = x_latest_states, aes(x = time_value, y = death_rate_7d_av), @@ -451,3 +465,8 @@ ggplot(fc_states, aes(target_date, group = time_value)) + labs(x = "Date", y = "7 day average COVID-19 death rates") + theme(legend.position = "none") ``` +
    + +```{r show-plot2, fig.width = 9, fig.height = 6, echo = FALSE} +p2 +``` From 2abbe35d3bd3903cdb5a1377fca55e9dd8f92b08 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 14 Jul 2024 11:15:06 -0700 Subject: [PATCH 293/382] no tibble in examples --- R/make_grf_quantiles.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R index 6e958682b..9796e581e 100644 --- a/R/make_grf_quantiles.R +++ b/R/make_grf_quantiles.R @@ -41,7 +41,7 @@ #' #' @examples #' library(grf) -#' tib <- tibble( +#' tib <- data.frame( #' y = rnorm(100), x = rnorm(100), z = rnorm(100), #' f = factor(sample(letters[1:3], 100, replace = TRUE)) #' ) From a6f9ceebf7799117c1f290ef37147d2ed6f6bbba Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 14 Jul 2024 11:15:06 -0700 Subject: [PATCH 294/382] no tibble in examples --- NAMESPACE | 1 + R/epipredict-package.R | 2 +- R/make_grf_quantiles.R | 2 +- R/make_quantile_reg.R | 5 ----- man/grf_quantiles.Rd | 6 ++++-- man/quantile_reg.Rd | 5 ----- 6 files changed, 7 insertions(+), 14 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 1cbf6ef5c..47199e20e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -259,6 +259,7 @@ importFrom(stats,predict) importFrom(stats,qnorm) importFrom(stats,quantile) importFrom(stats,residuals) +importFrom(stats,runif) importFrom(tibble,tibble) importFrom(tidyr,drop_na) importFrom(vctrs,as_list_of) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 959747305..01c7d5885 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -2,7 +2,7 @@ #' @importFrom tibble tibble #' @importFrom rlang := !! %||% as_function global_env set_names !!! #' @importFrom rlang is_logical is_true inject expr -#' @importFrom stats poly predict lm residuals quantile +#' @importFrom stats poly predict lm residuals quantile runif #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R index 6e958682b..9796e581e 100644 --- a/R/make_grf_quantiles.R +++ b/R/make_grf_quantiles.R @@ -41,7 +41,7 @@ #' #' @examples #' library(grf) -#' tib <- tibble( +#' tib <- data.frame( #' y = rnorm(100), x = rnorm(100), z = rnorm(100), #' f = factor(sample(letters[1:3], 100, replace = TRUE)) #' ) diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index 2b5f45636..93fc2c87c 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -24,11 +24,6 @@ #' rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) %>% set_engine("rq") #' ff <- rq_spec %>% fit(y ~ ., data = tib) #' predict(ff, new_data = tib) -#' -#' library(grf) -#' grf_spec <- quantile_reg(engine = "grf", quantile_levels = c(.1, .5, .9)) -#' gg <- grf_spec %>% fit(y ~ ., data = tib) -#' predict(gg, new_data = tib) quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0.5) { # Check for correct mode if (mode != "regression") { diff --git a/man/grf_quantiles.Rd b/man/grf_quantiles.Rd index eec753054..ece589011 100644 --- a/man/grf_quantiles.Rd +++ b/man/grf_quantiles.Rd @@ -65,7 +65,7 @@ Case weights are not supported. \examples{ library(grf) -tib <- tibble( +tib <- data.frame( y = rnorm(100), x = rnorm(100), z = rnorm(100), f = factor(sample(letters[1:3], 100, replace = TRUE)) ) @@ -97,7 +97,9 @@ frost <- frosting() \%>\% spec <- rand_forest(mode = "regression") \%>\% set_engine(engine = "grf_quantiles", quantiles = c(.25, .5, .75)) -ewf <- epi_workflow(rec, spec, frost) \%>\% fit(dat) \%>\% forecast() +ewf <- epi_workflow(rec, spec, frost) \%>\% + fit(dat) \%>\% + forecast() ewf \%>\% rename(forecast_date = time_value) \%>\% mutate(target_date = forecast_date + 7L) \%>\% diff --git a/man/quantile_reg.Rd b/man/quantile_reg.Rd index b210a15c9..26af2d8eb 100644 --- a/man/quantile_reg.Rd +++ b/man/quantile_reg.Rd @@ -28,11 +28,6 @@ tib <- data.frame(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100)) rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) \%>\% set_engine("rq") ff <- rq_spec \%>\% fit(y ~ ., data = tib) predict(ff, new_data = tib) - -library(grf) -grf_spec <- quantile_reg(engine = "grf", quantile_levels = c(.1, .5, .9)) -gg <- grf_spec \%>\% fit(y ~ ., data = tib) -predict(gg, new_data = tib) } \seealso{ \code{\link[=fit.model_spec]{fit.model_spec()}}, \code{\link[=set_engine]{set_engine()}} From 8c3cf4d7a6b9a6ca2a6dc97c9c1dac82e3563f14 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Sun, 14 Jul 2024 15:38:20 -0700 Subject: [PATCH 295/382] doc: add a link and revise quantile_reg --- R/make_quantile_reg.R | 5 +++-- man/quantile_reg.Rd | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index 93fc2c87c..865e169e9 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -3,8 +3,9 @@ #' @description #' `quantile_reg()` generates a quantile regression model _specification_ for #' the [tidymodels](https://www.tidymodels.org/) framework. Currently, the -#' only supported engines are "rq", which uses [quantreg::rq()], and "grf", -#' which uses [grf::quantile_forest()]. +#' only supported engines are "rq", which uses [quantreg::rq()]. +#' Quantile regression is also possible by combining [parsnip::rand_forest()] +#' with the `grf` engine. See [grf_quantiles]. #' #' @param mode A single character string for the type of model. #' The only possible value for this model is "regression". diff --git a/man/quantile_reg.Rd b/man/quantile_reg.Rd index 26af2d8eb..981918fbe 100644 --- a/man/quantile_reg.Rd +++ b/man/quantile_reg.Rd @@ -19,8 +19,9 @@ quantiles to estimate (default is 0.5).} \description{ \code{quantile_reg()} generates a quantile regression model \emph{specification} for the \href{https://www.tidymodels.org/}{tidymodels} framework. Currently, the -only supported engines are "rq", which uses \code{\link[quantreg:rq]{quantreg::rq()}}, and "grf", -which uses \code{\link[grf:quantile_forest]{grf::quantile_forest()}}. +only supported engines are "rq", which uses \code{\link[quantreg:rq]{quantreg::rq()}}. +Quantile regression is also possible by combining \code{\link[parsnip:rand_forest]{parsnip::rand_forest()}} +with the \code{grf} engine. See \link{grf_quantiles}. } \examples{ library(quantreg) From 1c9b30856340affc0498b6c19478d7ac730512ef Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 18 Jul 2024 11:16:23 -0700 Subject: [PATCH 296/382] Sometimes allow passing type, opts, ... via predict.epi_workflow() --- NAMESPACE | 1 + R/epi_workflow.R | 4 +-- R/epipredict-package.R | 2 +- R/frosting.R | 22 +++++++++++++-- R/layer_add_forecast_date.R | 1 + R/layer_naomit.R | 1 + R/layer_point_from_distn.R | 4 +-- R/layer_population_scaling.R | 2 +- R/layer_predict.R | 15 ++++++---- R/layer_predictive_distn.R | 1 + R/layer_quantile_distn.R | 2 ++ R/layer_residual_quantiles.R | 2 ++ R/layer_threshold_preds.R | 1 + R/layer_unnest.R | 1 + inst/templates/layer.R | 1 + man/apply_frosting.Rd | 2 +- man/predict-epi_workflow.Rd | 12 +++++++- tests/testthat/test-frosting.R | 43 +++++++++++++++++++++++++++++ tests/testthat/test-layer_predict.R | 36 +++++++++++++++++------- 19 files changed, 127 insertions(+), 26 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 708c91e06..941ea1542 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -208,6 +208,7 @@ import(parsnip) import(recipes) importFrom(checkmate,assert) importFrom(checkmate,assert_character) +importFrom(checkmate,assert_class) importFrom(checkmate,assert_date) importFrom(checkmate,assert_function) importFrom(checkmate,assert_int) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 1ad916c19..7e1c95f88 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -152,7 +152,7 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor #' #' preds <- predict(wf, latest) #' preds -predict.epi_workflow <- function(object, new_data, ...) { +predict.epi_workflow <- function(object, new_data, type = NULL, opts = list(), ...) { if (!workflows::is_trained_workflow(object)) { cli::cli_abort(c( "Can't predict on an untrained epi_workflow.", @@ -168,7 +168,7 @@ predict.epi_workflow <- function(object, new_data, ...) { components$forged, components$mold, new_data ) - components <- apply_frosting(object, components, new_data, ...) + components <- apply_frosting(object, components, new_data, type = type, opts = opts, ...) components$predictions } diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 4bd37c519..7746281ba 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -6,7 +6,7 @@ #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer -#' assert_integerish assert_date assert_function +#' assert_integerish assert_date assert_function assert_class #' @import epiprocess parsnip ## usethis namespace: end NULL diff --git a/R/frosting.R b/R/frosting.R index f9c5867a4..f293314fb 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -357,7 +357,7 @@ apply_frosting.default <- function(workflow, components, ...) { #' @importFrom rlang abort #' @export apply_frosting.epi_workflow <- - function(workflow, components, new_data, ...) { + function(workflow, components, new_data, type = NULL, opts = list(), ...) { the_fit <- workflows::extract_fit_parsnip(workflow) if (!has_postprocessor(workflow)) { @@ -397,10 +397,28 @@ apply_frosting.epi_workflow <- layers ) } + if (length(layers) > 1L && + (!is.null(type) || !identical(opts, list()) || rlang::dots_n(...) > 0L)) { + cli_abort(" + Passing `type`, `opts`, or `...` into `predict.epi_workflow()` is not + supported if you have frosting layers other than `layer_predict`. Please + provide these arguments earlier (i.e. while constructing the frosting + object) by passing them into an explicit call to `layer_predict(), and + adjust the remaining layers to account for resulting differences in + output format from these settings. + ", class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers") + } for (l in seq_along(layers)) { la <- layers[[l]] - components <- slather(la, components, workflow, new_data) + if (inherits(la, "layer_predict")) { + components <- slather(la, components, workflow, new_data, type = type, opts = opts, ...) + } else { + # The check above should ensure we have default `type` and `opts` and + # empty `...`; don't forward these default `type` and `opts`, to avoid + # upsetting some slather method validation. + components <- slather(la, components, workflow, new_data) + } } return(components) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 2174b7330..c4bb7d483 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -86,6 +86,7 @@ layer_add_forecast_date_new <- function(forecast_date, id) { #' @export slather.layer_add_forecast_date <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() if (is.null(object$forecast_date)) { max_time_value <- as.Date(max( workflows::extract_preprocessor(workflow)$max_time_value, diff --git a/R/layer_naomit.R b/R/layer_naomit.R index ad6c5606c..85842bfdf 100644 --- a/R/layer_naomit.R +++ b/R/layer_naomit.R @@ -45,6 +45,7 @@ layer_naomit_new <- function(terms, id) { #' @export slather.layer_naomit <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() exprs <- rlang::expr(c(!!!object$terms)) pos <- tidyselect::eval_select(exprs, components$predictions) col_names <- names(pos) diff --git a/R/layer_point_from_distn.R b/R/layer_point_from_distn.R index 52ecef3cc..8f5ed2c33 100644 --- a/R/layer_point_from_distn.R +++ b/R/layer_point_from_distn.R @@ -76,16 +76,16 @@ layer_point_from_distn_new <- function(type, name, id) { #' @export slather.layer_point_from_distn <- function(object, components, workflow, new_data, ...) { - rlang::check_dots_empty() dstn <- components$predictions$.pred if (!inherits(dstn, "distribution")) { rlang::warn( c("`layer_point_from_distn` requires distributional predictions.", i = "These are of class {class(dstn)}. Ignoring this layer." - ) + ) ) return(components) } + rlang::check_dots_empty() dstn <- match.fun(object$type)(dstn) if (is.null(object$name)) { diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 1d02604e5..33183198d 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -128,11 +128,11 @@ layer_population_scaling_new <- #' @export slather.layer_population_scaling <- function(object, components, workflow, new_data, ...) { - rlang::check_dots_empty() stopifnot( "Only one population column allowed for scaling" = length(object$df_pop_col) == 1 ) + rlang::check_dots_empty() if (is.null(object$by)) { object$by <- intersect( diff --git a/R/layer_predict.R b/R/layer_predict.R index f161f21c3..ecc76408a 100644 --- a/R/layer_predict.R +++ b/R/layer_predict.R @@ -45,11 +45,12 @@ layer_predict <- id = rand_id("predict_default")) { arg_is_chr_scalar(id) arg_is_chr_scalar(type, allow_null = TRUE) + assert_class(opts, "list") dots_list <- rlang::dots_list(..., .homonyms = "error", .check_assign = TRUE) if (any(rlang::names2(dots_list) == "")) { cli_abort("All `...` arguments must be named.", - class = "epipredict__layer_predict__unnamed_dot" - ) + class = "epipredict__layer_predict__unnamed_dot" + ) } add_layer( frosting, @@ -68,16 +69,18 @@ layer_predict_new <- function(type, opts, dots_list, id) { } #' @export -slather.layer_predict <- function(object, components, workflow, new_data, ...) { - rlang::check_dots_empty() +slather.layer_predict <- function(object, components, workflow, new_data, type = NULL, opts = list(), ...) { + arg_is_chr_scalar(type, allow_null = TRUE) + assert_class(opts, "list") the_fit <- workflows::extract_fit_parsnip(workflow) components$predictions <- rlang::inject(predict( the_fit, components$forged$predictors, - type = object$type, opts = object$opts, - !!!object$dots_list + type = object$type %||% type, + opts = c(object$opts, opts), + !!!object$dots_list, ... )) components$predictions <- dplyr::bind_cols( components$keys, components$predictions diff --git a/R/layer_predictive_distn.R b/R/layer_predictive_distn.R index 652e42368..9b1a160e1 100644 --- a/R/layer_predictive_distn.R +++ b/R/layer_predictive_distn.R @@ -73,6 +73,7 @@ layer_predictive_distn_new <- function(dist_type, truncate, name, id) { slather.layer_predictive_distn <- function(object, components, workflow, new_data, ...) { the_fit <- workflows::extract_fit_parsnip(workflow) + rlang::check_dots_empty() m <- components$predictions$.pred r <- grab_residuals(the_fit, components) diff --git a/R/layer_quantile_distn.R b/R/layer_quantile_distn.R index d763207a4..734ccec9e 100644 --- a/R/layer_quantile_distn.R +++ b/R/layer_quantile_distn.R @@ -79,6 +79,8 @@ slather.layer_quantile_distn <- "These are of class {.cls {class(dstn)}}." )) } + rlang::check_dots_empty() + dstn <- dist_quantiles( quantile(dstn, object$quantile_levels), object$quantile_levels diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index 514bddc5f..85c1c6ed0 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -75,6 +75,8 @@ layer_residual_quantiles_new <- function( #' @export slather.layer_residual_quantiles <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() + the_fit <- workflows::extract_fit_parsnip(workflow) if (is.null(object$quantile_levels)) { diff --git a/R/layer_threshold_preds.R b/R/layer_threshold_preds.R index ef1781a3c..8b2b56d1e 100644 --- a/R/layer_threshold_preds.R +++ b/R/layer_threshold_preds.R @@ -98,6 +98,7 @@ snap.dist_quantiles <- function(x, lower, upper, ...) { #' @export slather.layer_threshold <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() exprs <- rlang::expr(c(!!!object$terms)) pos <- tidyselect::eval_select(exprs, components$predictions) col_names <- names(pos) diff --git a/R/layer_unnest.R b/R/layer_unnest.R index 64b17a306..dfc391942 100644 --- a/R/layer_unnest.R +++ b/R/layer_unnest.R @@ -28,6 +28,7 @@ layer_unnest_new <- function(terms, id) { #' @export slather.layer_unnest <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() exprs <- rlang::expr(c(!!!object$terms)) pos <- tidyselect::eval_select(exprs, components$predictions) col_names <- names(pos) diff --git a/inst/templates/layer.R b/inst/templates/layer.R index 3fecb3c33..59556db5f 100644 --- a/inst/templates/layer.R +++ b/inst/templates/layer.R @@ -29,6 +29,7 @@ layer_{{{ name }}}_new <- function(terms, args, more_args, id) { #' @export slather.layer_{{{ name }}} <- function(object, components, workflow, new_data, ...) { + rlang::check_dots_empty() # if layer_ used ... in tidyselect, we need to evaluate it now exprs <- rlang::expr(c(!!!object$terms)) diff --git a/man/apply_frosting.Rd b/man/apply_frosting.Rd index fc01a3461..345f14b19 100644 --- a/man/apply_frosting.Rd +++ b/man/apply_frosting.Rd @@ -11,7 +11,7 @@ apply_frosting(workflow, ...) \method{apply_frosting}{default}(workflow, components, ...) -\method{apply_frosting}{epi_workflow}(workflow, components, new_data, ...) +\method{apply_frosting}{epi_workflow}(workflow, components, new_data, type = NULL, opts = list(), ...) } \arguments{ \item{workflow}{An object of class workflow} diff --git a/man/predict-epi_workflow.Rd b/man/predict-epi_workflow.Rd index d92fd8ca9..130279249 100644 --- a/man/predict-epi_workflow.Rd +++ b/man/predict-epi_workflow.Rd @@ -5,7 +5,7 @@ \alias{predict.epi_workflow} \title{Predict from an epi_workflow} \usage{ -\method{predict}{epi_workflow}(object, new_data, ...) +\method{predict}{epi_workflow}(object, new_data, type = NULL, opts = list(), ...) } \arguments{ \item{object}{An epi_workflow that has been fit by @@ -14,6 +14,16 @@ \item{new_data}{A data frame containing the new predictors to preprocess and predict on} +\item{type}{A single character value or \code{NULL}. Possible values +are \code{"numeric"}, \code{"class"}, \code{"prob"}, \code{"conf_int"}, \code{"pred_int"}, +\code{"quantile"}, \code{"time"}, \code{"hazard"}, \code{"survival"}, or \code{"raw"}. When \code{NULL}, +\code{predict()} will choose an appropriate value based on the model's mode.} + +\item{opts}{A list of optional arguments to the underlying +predict function that will be used when \code{type = "raw"}. The +list should not include options for the model object or the +new data being predicted.} + \item{...}{Additional \code{parsnip}-related options, depending on the value of \code{type}. Arguments to the underlying model's prediction function cannot be passed here (use the \code{opts} argument instead). diff --git a/tests/testthat/test-frosting.R b/tests/testthat/test-frosting.R index 8af9f1c39..9bdce3197 100644 --- a/tests/testthat/test-frosting.R +++ b/tests/testthat/test-frosting.R @@ -86,3 +86,46 @@ test_that("layer_predict is added by default if missing", { expect_equal(forecast(wf1), forecast(wf2)) }) + + +test_that("parsnip settings can be passed through predict.epi_workflow", { + jhu <- case_death_rate_subset %>% + dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) + + r <- epi_recipe(jhu) %>% + step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% + step_epi_ahead(death_rate, ahead = 7) %>% + step_epi_naomit() + + wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) + + latest <- get_test_data(r, jhu) + + f1 <- frosting() %>% layer_predict() + f2 <- frosting() %>% layer_predict(type = "pred_int") + f3 <- frosting() %>% layer_predict(type = "pred_int", level = 0.6) + + pred2 <- wf %>% add_frosting(f2) %>% predict(latest) + pred3 <- wf %>% add_frosting(f3) %>% predict(latest) + + pred2_re <- wf %>% add_frosting(f1) %>% predict(latest, type = "pred_int") + pred3_re <- wf %>% add_frosting(f1) %>% predict(latest, type = "pred_int", level = 0.6) + + expect_identical(pred2, pred2_re) + expect_identical(pred3, pred3_re) + + f4 <- frosting() %>% + layer_predict() %>% + layer_threshold(.pred, lower = 0) + + expect_error(wf %>% add_frosting(f4) %>% predict(latest, type = "pred_int"), + class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers") + + # We also refuse to continue when just passing the level, which might not be ideal: + f5 <- frosting() %>% + layer_predict(type = "pred_int") %>% + layer_threshold(.pred_lower, .pred_upper, lower = 0) + + expect_error(wf %>% add_frosting(f5) %>% predict(latest, level = 0.6), + class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers") +}) diff --git a/tests/testthat/test-layer_predict.R b/tests/testthat/test-layer_predict.R index f3b33f5db..f8efe7ea3 100644 --- a/tests/testthat/test-layer_predict.R +++ b/tests/testthat/test-layer_predict.R @@ -61,17 +61,33 @@ test_that("layer_predict dots validation", { }) test_that("layer_predict dots are forwarded", { - f_lm_int_level <- frosting() %>% + f_lm_int_level_95 <- frosting() %>% + layer_predict(type = "pred_int") + f_lm_int_level_80 <- frosting() %>% layer_predict(type = "pred_int", level = 0.8) - wf_lm_int_level <- wf %>% add_frosting(f_lm_int_level) + wf_lm_int_level_95 <- wf %>% add_frosting(f_lm_int_level_95) + wf_lm_int_level_80 <- wf %>% add_frosting(f_lm_int_level_80) p <- predict(wf, latest) - p_lm_int_level <- predict(wf_lm_int_level, latest) - expect_contains(names(p_lm_int_level), c(".pred_lower", ".pred_upper")) - expect_equal(nrow(na.omit(p)), nrow(na.omit(p_lm_int_level))) - expect_true(cbind(p, p_lm_int_level[c(".pred_lower", ".pred_upper")]) %>% - na.omit() %>% - mutate(sandwiched = .pred_lower <= .pred & .pred <= .pred_upper) %>% - `[[`("sandwiched") %>% - all()) + p_lm_int_level_95 <- predict(wf_lm_int_level_95, latest) + p_lm_int_level_80 <- predict(wf_lm_int_level_80, latest) + expect_contains(names(p_lm_int_level_95), c(".pred_lower", ".pred_upper")) + expect_contains(names(p_lm_int_level_80), c(".pred_lower", ".pred_upper")) + expect_equal(nrow(na.omit(p)), nrow(na.omit(p_lm_int_level_95))) + expect_equal(nrow(na.omit(p)), nrow(na.omit(p_lm_int_level_80))) + expect_true( + cbind( + p, + p_lm_int_level_95 %>% dplyr::select(.pred_lower_95 = .pred_lower, .pred_upper_95 = .pred_upper), + p_lm_int_level_80 %>% dplyr::select(.pred_lower_80 = .pred_lower, .pred_upper_80 = .pred_upper) + ) %>% + na.omit() %>% + mutate(sandwiched = + .pred_lower_95 <= .pred_lower_80 & + .pred_lower_80 <= .pred & + .pred <= .pred_upper_80 & + .pred_upper_80 <= .pred_upper_95) %>% + `[[`("sandwiched") %>% + all() + ) # There are many possible other valid configurations that aren't tested here. }) From ecf2c73e3f573b942a5f490795f578f507aab212 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 18 Jul 2024 11:27:05 -0700 Subject: [PATCH 297/382] Detect conflicting `type` settings in frosting construction&slather --- R/layer_predict.R | 8 ++++++++ tests/testthat/test-frosting.R | 3 +++ 2 files changed, 11 insertions(+) diff --git a/R/layer_predict.R b/R/layer_predict.R index ecc76408a..5e6f0ace1 100644 --- a/R/layer_predict.R +++ b/R/layer_predict.R @@ -71,6 +71,14 @@ layer_predict_new <- function(type, opts, dots_list, id) { #' @export slather.layer_predict <- function(object, components, workflow, new_data, type = NULL, opts = list(), ...) { arg_is_chr_scalar(type, allow_null = TRUE) + if (!is.null(object$type) && !is.null(type) && !identical(object$type, type)) { + cli_abort(" + Conflicting `type` settings were specified during frosting construction + (in call to `layer_predict()`) and while slathering (in call to + `slather()`/ `predict()`/etc.): {object$type} vs. {type}. Please remove + one of these `type` settings. + ", class = "epipredict__layer_predict__conflicting_type_settings") + } assert_class(opts, "list") the_fit <- workflows::extract_fit_parsnip(workflow) diff --git a/tests/testthat/test-frosting.R b/tests/testthat/test-frosting.R index 9bdce3197..ccebbf1f2 100644 --- a/tests/testthat/test-frosting.R +++ b/tests/testthat/test-frosting.R @@ -114,6 +114,9 @@ test_that("parsnip settings can be passed through predict.epi_workflow", { expect_identical(pred2, pred2_re) expect_identical(pred3, pred3_re) + expect_error(wf %>% add_frosting(f2) %>% predict(latest, type = "raw"), + class = "epipredict__layer_predict__conflicting_type_settings") + f4 <- frosting() %>% layer_predict() %>% layer_threshold(.pred, lower = 0) From 482e4a6311d152e9942877ab29c96328c88a990e Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 18 Jul 2024 13:05:50 -0700 Subject: [PATCH 298/382] @inheritParams directly from predict.model_fit again We were missing `type` and `opts` in documentation because they weren't in the signature of `predict.epi_workflow`, not because of an issue with `predict.model_fit` docs, and it seems like the latter method is the one we'd be directly using. --- R/epi_workflow.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 7e1c95f88..6a81dfd40 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -123,14 +123,14 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor #' possible. Specifically, the output will have `time_value` and #' `geo_value` columns as well as the prediction. #' -#' @inheritParams workflows::predict.workflow -#' #' @param object An epi_workflow that has been fit by #' [workflows::fit.workflow()] #' #' @param new_data A data frame containing the new predictors to preprocess #' and predict on #' +#' @inheritParams parsnip::predict.model_fit +#' #' @return #' A data frame of model predictions, with as many rows as `new_data` has. #' If `new_data` is an `epi_df` or a data frame with `time_value` or From 249954d20dab92f13a813c7fed2472092d3577c0 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 19 Jul 2024 16:44:48 -0700 Subject: [PATCH 299/382] Also forward type & opts when frosting isn't detected --- R/frosting.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/frosting.R b/R/frosting.R index f293314fb..1548c492e 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -376,7 +376,7 @@ apply_frosting.epi_workflow <- "Returning unpostprocessed predictions." )) components$predictions <- predict( - the_fit, components$forged$predictors, ... + the_fit, components$forged$predictors, type, opts, ... ) components$predictions <- dplyr::bind_cols( components$keys, components$predictions From bff7c3323df3e9e9d90f8096d8d377d3de788f85 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 19 Jul 2024 16:48:08 -0700 Subject: [PATCH 300/382] Add missing param docs for apply_frosting.epi_workflow; style, doc --- R/frosting.R | 6 ++++-- R/layer_point_from_distn.R | 2 +- R/layer_predict.R | 4 ++-- man/apply_frosting.Rd | 3 +++ tests/testthat/test-frosting.R | 27 +++++++++++++++++++-------- tests/testthat/test-layer_predict.R | 12 +++++++----- 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/R/frosting.R b/R/frosting.R index 1548c492e..af72f29f0 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -355,6 +355,8 @@ apply_frosting.default <- function(workflow, components, ...) { #' @rdname apply_frosting #' @importFrom rlang is_null #' @importFrom rlang abort +#' @param type,opts,... forwarded to [`predict.model_fit()`] and [`slather()`] +#' for supported layers #' @export apply_frosting.epi_workflow <- function(workflow, components, new_data, type = NULL, opts = list(), ...) { @@ -398,7 +400,7 @@ apply_frosting.epi_workflow <- ) } if (length(layers) > 1L && - (!is.null(type) || !identical(opts, list()) || rlang::dots_n(...) > 0L)) { + (!is.null(type) || !identical(opts, list()) || rlang::dots_n(...) > 0L)) { cli_abort(" Passing `type`, `opts`, or `...` into `predict.epi_workflow()` is not supported if you have frosting layers other than `layer_predict`. Please @@ -414,7 +416,7 @@ apply_frosting.epi_workflow <- if (inherits(la, "layer_predict")) { components <- slather(la, components, workflow, new_data, type = type, opts = opts, ...) } else { - # The check above should ensure we have default `type` and `opts` and + # The check above should ensure we have default `type` and `opts`, and # empty `...`; don't forward these default `type` and `opts`, to avoid # upsetting some slather method validation. components <- slather(la, components, workflow, new_data) diff --git a/R/layer_point_from_distn.R b/R/layer_point_from_distn.R index 8f5ed2c33..f415e7bd4 100644 --- a/R/layer_point_from_distn.R +++ b/R/layer_point_from_distn.R @@ -81,7 +81,7 @@ slather.layer_point_from_distn <- rlang::warn( c("`layer_point_from_distn` requires distributional predictions.", i = "These are of class {class(dstn)}. Ignoring this layer." - ) + ) ) return(components) } diff --git a/R/layer_predict.R b/R/layer_predict.R index 5e6f0ace1..46d81be18 100644 --- a/R/layer_predict.R +++ b/R/layer_predict.R @@ -49,8 +49,8 @@ layer_predict <- dots_list <- rlang::dots_list(..., .homonyms = "error", .check_assign = TRUE) if (any(rlang::names2(dots_list) == "")) { cli_abort("All `...` arguments must be named.", - class = "epipredict__layer_predict__unnamed_dot" - ) + class = "epipredict__layer_predict__unnamed_dot" + ) } add_layer( frosting, diff --git a/man/apply_frosting.Rd b/man/apply_frosting.Rd index 345f14b19..a3b627b8a 100644 --- a/man/apply_frosting.Rd +++ b/man/apply_frosting.Rd @@ -34,6 +34,9 @@ here for ease. \item{new_data}{a data frame containing the new predictors to preprocess and predict on} + +\item{type, opts, ...}{forwarded to \code{\link[=predict.model_fit]{predict.model_fit()}} and \code{\link[=slather]{slather()}} +for supported layers} } \description{ This function is intended for internal use. It implements postprocessing diff --git a/tests/testthat/test-frosting.R b/tests/testthat/test-frosting.R index ccebbf1f2..5cab9c494 100644 --- a/tests/testthat/test-frosting.R +++ b/tests/testthat/test-frosting.R @@ -105,24 +105,34 @@ test_that("parsnip settings can be passed through predict.epi_workflow", { f2 <- frosting() %>% layer_predict(type = "pred_int") f3 <- frosting() %>% layer_predict(type = "pred_int", level = 0.6) - pred2 <- wf %>% add_frosting(f2) %>% predict(latest) - pred3 <- wf %>% add_frosting(f3) %>% predict(latest) - - pred2_re <- wf %>% add_frosting(f1) %>% predict(latest, type = "pred_int") - pred3_re <- wf %>% add_frosting(f1) %>% predict(latest, type = "pred_int", level = 0.6) + pred2 <- wf %>% + add_frosting(f2) %>% + predict(latest) + pred3 <- wf %>% + add_frosting(f3) %>% + predict(latest) + + pred2_re <- wf %>% + add_frosting(f1) %>% + predict(latest, type = "pred_int") + pred3_re <- wf %>% + add_frosting(f1) %>% + predict(latest, type = "pred_int", level = 0.6) expect_identical(pred2, pred2_re) expect_identical(pred3, pred3_re) expect_error(wf %>% add_frosting(f2) %>% predict(latest, type = "raw"), - class = "epipredict__layer_predict__conflicting_type_settings") + class = "epipredict__layer_predict__conflicting_type_settings" + ) f4 <- frosting() %>% layer_predict() %>% layer_threshold(.pred, lower = 0) expect_error(wf %>% add_frosting(f4) %>% predict(latest, type = "pred_int"), - class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers") + class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers" + ) # We also refuse to continue when just passing the level, which might not be ideal: f5 <- frosting() %>% @@ -130,5 +140,6 @@ test_that("parsnip settings can be passed through predict.epi_workflow", { layer_threshold(.pred_lower, .pred_upper, lower = 0) expect_error(wf %>% add_frosting(f5) %>% predict(latest, level = 0.6), - class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers") + class = "epipredict__apply_frosting__predict_settings_with_unsupported_layers" + ) }) diff --git a/tests/testthat/test-layer_predict.R b/tests/testthat/test-layer_predict.R index f8efe7ea3..d01544ad1 100644 --- a/tests/testthat/test-layer_predict.R +++ b/tests/testthat/test-layer_predict.R @@ -81,11 +81,13 @@ test_that("layer_predict dots are forwarded", { p_lm_int_level_80 %>% dplyr::select(.pred_lower_80 = .pred_lower, .pred_upper_80 = .pred_upper) ) %>% na.omit() %>% - mutate(sandwiched = - .pred_lower_95 <= .pred_lower_80 & - .pred_lower_80 <= .pred & - .pred <= .pred_upper_80 & - .pred_upper_80 <= .pred_upper_95) %>% + mutate( + sandwiched = + .pred_lower_95 <= .pred_lower_80 & + .pred_lower_80 <= .pred & + .pred <= .pred_upper_80 & + .pred_upper_80 <= .pred_upper_95 + ) %>% `[[`("sandwiched") %>% all() ) From 1cc124789b8b62ca0a67f7e39800804ad1d6e8b0 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Fri, 19 Jul 2024 17:01:44 -0700 Subject: [PATCH 301/382] Use wording tricks to avoid double-doc parm in generic+methods topic --- R/frosting.R | 4 ++-- man/apply_frosting.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/frosting.R b/R/frosting.R index af72f29f0..4fc0caec3 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -355,8 +355,8 @@ apply_frosting.default <- function(workflow, components, ...) { #' @rdname apply_frosting #' @importFrom rlang is_null #' @importFrom rlang abort -#' @param type,opts,... forwarded to [`predict.model_fit()`] and [`slather()`] -#' for supported layers +#' @param type,opts forwarded (along with `...`) to [`predict.model_fit()`] and +#' [`slather()`] for supported layers #' @export apply_frosting.epi_workflow <- function(workflow, components, new_data, type = NULL, opts = list(), ...) { diff --git a/man/apply_frosting.Rd b/man/apply_frosting.Rd index a3b627b8a..ef18796cc 100644 --- a/man/apply_frosting.Rd +++ b/man/apply_frosting.Rd @@ -35,8 +35,8 @@ here for ease. \item{new_data}{a data frame containing the new predictors to preprocess and predict on} -\item{type, opts, ...}{forwarded to \code{\link[=predict.model_fit]{predict.model_fit()}} and \code{\link[=slather]{slather()}} -for supported layers} +\item{type, opts}{forwarded (along with \code{...}) to \code{\link[=predict.model_fit]{predict.model_fit()}} and +\code{\link[=slather]{slather()}} for supported layers} } \description{ This function is intended for internal use. It implements postprocessing From 2ca6ee80993e86d6c459e25b7c627345e54389e4 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 25 Jul 2024 16:06:03 -0700 Subject: [PATCH 302/382] Update tests & commentary given predict() arg forwarding --- tests/testthat/test-layer_predict.R | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-layer_predict.R b/tests/testthat/test-layer_predict.R index d01544ad1..041516b29 100644 --- a/tests/testthat/test-layer_predict.R +++ b/tests/testthat/test-layer_predict.R @@ -49,15 +49,13 @@ test_that("layer_predict dots validation", { expect_no_error(f_bad_arg <- frosting() %>% layer_predict(bogus_argument = "something")) wf_bad_arg <- wf %>% add_frosting(f_bad_arg) expect_error(predict(wf_bad_arg, latest)) - # Some argument names only apply for some prediction `type`s; we don't check for ignored arguments, and neither does workflows: - expect_no_error(frosting() %>% layer_predict(eval_time = "preferably this would error")) + # ^ (currently with a awful error message, due to an extra comma in parsnip::check_pred_type_dots) - # ^ (currently with a truly awful error message, due to an extra comma in parsnip::check_pred_type_dots) - # - # Unfortunately, we outright ignore attempts to pass args via `predict.epi_workflow`: - f_predict <- frosting() %>% layer_predict() - wf_predict <- wf %>% add_frosting(f_predict) - expect_no_error(predict(wf_predict, latest, type = "pred_int")) + # Some argument names only apply for some prediction `type`s; we don't check + # for invalid pairings, nor does {parsnip}, so we end up producing a forecast + # that silently ignores some arguments some of the time. ({workflows} doesn't + # check for these either.) + expect_no_error(frosting() %>% layer_predict(eval_time = "preferably this would error")) }) test_that("layer_predict dots are forwarded", { From 49484bf7ed7328fc5363127ff0d81b9b02ff1209 Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 25 Jul 2024 16:09:51 -0700 Subject: [PATCH 303/382] Update&correct NEWS.md with predict.epi_workflow() arg forwarding --- NEWS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index cce52cb51..9cb78770c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -47,5 +47,5 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Revise `compat-purrr` to use the r-lang `standalone-*` version (via `{usethis}`) - `epi_recipe()` will now warn when given non-`epi_df` data -- `layer_predict()` will now appropriately forward `...` args intended for - `predict.workflow()` +- `layer_predict()` and `predict.epi_workflow()` will now appropriately forward + `...` args intended for `predict.model_fit()` From be15821390e0bd8fa530b7d45620ee302447ecdb Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 25 Jul 2024 18:28:46 -0700 Subject: [PATCH 304/382] Recalc geo&time type after bake, avoid warning spam from as_epi_df Since epiprocess#472, as_epi_df. will ignore the geo and time type args and re-infer them, plus emit a warning if these args were provided. We could `dplyr_reconstruct` to go back to trusting `meta` instead of re-inferring, but since baking could plausibly (but likely rarely) change them, don't. - Pre-epiprocess#472, this should be a bugfix in any such rare cases. - Post-epiprocess#472, this should remove warning spam. --- NEWS.md | 2 ++ R/epi_recipe.R | 8 ++++++-- tests/testthat/test-pad_to_end.R | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 9cb78770c..4e21f8191 100644 --- a/NEWS.md +++ b/NEWS.md @@ -49,3 +49,5 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `epi_recipe()` will now warn when given non-`epi_df` data - `layer_predict()` and `predict.epi_workflow()` will now appropriately forward `...` args intended for `predict.model_fit()` +- `bake.epi_recipe()` will now re-infer the geo and time type in case baking the + steps has changed the appropriate values diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 1a1cd1455..f9c4cb4b2 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -572,9 +572,13 @@ bake.epi_recipe <- function(object, new_data, ..., composition = "epi_df") { } new_data <- NextMethod("bake") if (!is.null(meta)) { + # Baking should have dropped epi_df-ness and metadata. Re-infer some + # metadata and assume others remain the same as the object/template: new_data <- as_epi_df( - new_data, meta$geo_type, meta$time_type, meta$as_of, - meta$additional_metadata %||% list() + new_data, + as_of = meta$as_of, + # avoid NULL if meta is from saved older epi_df: + additional_metadata = meta$additional_metadata %||% list() ) } new_data diff --git a/tests/testthat/test-pad_to_end.R b/tests/testthat/test-pad_to_end.R index 474b9001b..0ea6244b0 100644 --- a/tests/testthat/test-pad_to_end.R +++ b/tests/testthat/test-pad_to_end.R @@ -32,6 +32,6 @@ test_that("test set padding works", { # make sure it maintains the epi_df dat <- dat %>% dplyr::rename(geo_value = gr1) %>% - as_epi_df(dat) + as_epi_df() expect_s3_class(pad_to_end(dat, "geo_value", 2), "epi_df") }) From 7fd40945b966c1b4e30406d1962b9a4ac0913cfb Mon Sep 17 00:00:00 2001 From: "Logan C. Brooks" Date: Thu, 25 Jul 2024 20:01:41 -0700 Subject: [PATCH 305/382] Fix document() and check() warnings regarding [epiprocess::]epi_df Workaround for epiprocess#493. --- R/arx_classifier.R | 2 +- R/arx_forecaster.R | 2 +- R/cdc_baseline_forecaster.R | 4 ++-- R/data.R | 2 +- R/epi_recipe.R | 2 +- R/epi_workflow.R | 2 +- R/flatline_forecaster.R | 4 ++-- R/get_test_data.R | 2 +- man/get_test_data.Rd | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index de730826c..44acb9b30 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -1,7 +1,7 @@ #' Direct autoregressive classifier with covariates #' #' This is an autoregressive classification model for -#' [epiprocess::epi_df] data. It does "direct" forecasting, meaning +#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It does "direct" forecasting, meaning #' that it estimates a class at a particular target horizon. #' #' @inheritParams arx_forecaster diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index 10b2d2bce..1b9e3d503 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -1,7 +1,7 @@ #' Direct autoregressive forecaster with covariates #' #' This is an autoregressive forecasting model for -#' [epiprocess::epi_df] data. It does "direct" forecasting, meaning +#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It does "direct" forecasting, meaning #' that it estimates a model for a particular target horizon. #' #' diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index 4af6d6f3f..d5b74a9c3 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -1,7 +1,7 @@ #' Predict the future with the most recent value #' #' This is a simple forecasting model for -#' [epiprocess::epi_df] data. It uses the most recent observation as the +#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It uses the most recent observation as the #' forecast for any future date, and produces intervals by shuffling the quantiles #' of the residuals of such a "flatline" forecast and incrementing these #' forward over all available training data. @@ -12,7 +12,7 @@ #' This forecaster is meant to produce exactly the CDC Baseline used for #' [COVID19ForecastHub](https://covid19forecasthub.org) #' -#' @param epi_data An [`epiprocess::epi_df`] +#' @param epi_data An [`epiprocess::epi_df`][epiprocess::as_epi_df] #' @param outcome A scalar character for the column name we wish to predict. #' @param args_list A list of additional arguments as created by the #' [cdc_baseline_args_list()] constructor function. diff --git a/R/data.R b/R/data.R index 6641abf44..71e5bdcd3 100644 --- a/R/data.R +++ b/R/data.R @@ -59,7 +59,7 @@ #' Subset of Statistics Canada median employment income for postsecondary graduates #' -#' @format An [epiprocess::epi_df] with 10193 rows and 8 variables: +#' @format An [epiprocess::epi_df][epiprocess::as_epi_df] with 10193 rows and 8 variables: #' \describe{ #' \item{geo_value}{The province in Canada associated with each #' row of measurements.} diff --git a/R/epi_recipe.R b/R/epi_recipe.R index f9c4cb4b2..6d01d718f 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -245,7 +245,7 @@ is_epi_recipe <- function(x) { #' @details #' `add_epi_recipe` has the same behaviour as #' [workflows::add_recipe()] but sets a different -#' default blueprint to automatically handle [epiprocess::epi_df] data. +#' default blueprint to automatically handle [epiprocess::epi_df][epiprocess::as_epi_df] data. #' #' @param x A `workflow` or `epi_workflow` #' diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 6a81dfd40..0bdeece4f 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -119,7 +119,7 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor #' - Call [parsnip::predict.model_fit()] for you using the underlying fit #' parsnip model. #' -#' - Ensure that the returned object is an [epiprocess::epi_df] where +#' - Ensure that the returned object is an [epiprocess::epi_df][epiprocess::as_epi_df] where #' possible. Specifically, the output will have `time_value` and #' `geo_value` columns as well as the prediction. #' diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index fa80dfba5..e14e44a96 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -1,7 +1,7 @@ #' Predict the future with today's value #' #' This is a simple forecasting model for -#' [epiprocess::epi_df] data. It uses the most recent observation as the +#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It uses the most recent observation as the #' forcast for any future date, and produces intervals based on the quantiles #' of the residuals of such a "flatline" forecast over all available training #' data. @@ -13,7 +13,7 @@ #' This forecaster is very similar to that used by the #' [COVID19ForecastHub](https://covid19forecasthub.org) #' -#' @param epi_data An [epiprocess::epi_df] +#' @param epi_data An [epiprocess::epi_df][epiprocess::as_epi_df] #' @param outcome A scalar character for the column name we wish to predict. #' @param args_list A list of dditional arguments as created by the #' [flatline_args_list()] constructor function. diff --git a/R/get_test_data.R b/R/get_test_data.R index e76715daf..2a2484749 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -1,7 +1,7 @@ #' Get test data for prediction based on longest lag period #' #' Based on the longest lag period in the recipe, -#' `get_test_data()` creates an [epi_df] +#' `get_test_data()` creates an [epi_df][epiprocess::as_epi_df] #' with columns `geo_value`, `time_value` #' and other variables in the original dataset, #' which will be used to create features necessary to produce forecasts. diff --git a/man/get_test_data.Rd b/man/get_test_data.Rd index 392d1dce2..b18685d89 100644 --- a/man/get_test_data.Rd +++ b/man/get_test_data.Rd @@ -37,7 +37,7 @@ keys, as well other variables in the original dataset. } \description{ Based on the longest lag period in the recipe, -\code{get_test_data()} creates an \link{epi_df} +\code{get_test_data()} creates an \link[epiprocess:epi_df]{epi_df} with columns \code{geo_value}, \code{time_value} and other variables in the original dataset, which will be used to create features necessary to produce forecasts. From 974d1d92cbaf19d3dd3ec4591e4164aa3cb9ae6d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 29 Jul 2024 14:39:29 -0700 Subject: [PATCH 306/382] produce empty distribution when necessary --- R/dist_quantiles.R | 2 ++ tests/testthat/test-dist_quantiles.R | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index f20ebe3dc..48bdefe5b 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -5,6 +5,7 @@ new_quantiles <- function(values = double(), quantile_levels = double()) { vec_cast(values, double()) vec_cast(quantile_levels, double()) stopifnot(length(values) == length(quantile_levels)) + if (length(values) == 0L) return(distributional::dist_degenerate(double())) stopifnot(!vctrs::vec_duplicate_any(quantile_levels)) if (is.unsorted(quantile_levels)) { o <- vctrs::vec_order(quantile_levels) @@ -60,6 +61,7 @@ dist_quantiles <- function(values, quantile_levels) { values <- as_list_of(values, .ptype = double()) quantile_levels <- as_list_of(quantile_levels, .ptype = double()) args <- vec_recycle_common(values = values, quantile_levels = quantile_levels) + if (length(args$values) == 0L) return(distributional::dist_degenerate(double())) qntls <- as_list_of(map2(args$values, args$quantile_levels, new_quantiles)) new_vctr(qntls, class = "distribution") } diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index ec885063b..9845cb787 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -24,6 +24,13 @@ test_that("single dist_quantiles works, quantiles are accessible", { extrapolate_quantiles(z, c(.3, .7), middle = "linear"), new_quantiles(values = c(1, 1.5, 2, 3, 4, 4.5, 5), quantile_levels = 2:8 / 10) ) + # empty values slot results in a length zero distribution + # see issue #361 + expect_length(dist_quantiles(list(), c(.1, .9)), 0L) + expect_identical( + dist_quantiles(list(), c(.1, .9)), + distributional::dist_degenerate(double()) + ) }) From 5b5ad7dadb42d2680ca38e97719d836d95203d8c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 29 Jul 2024 14:41:06 -0700 Subject: [PATCH 307/382] version and news --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index a219637b6..3e8db4117 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.17 +Version: 0.0.18 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 2b722fb59..b7e45e8b5 100644 --- a/NEWS.md +++ b/NEWS.md @@ -52,3 +52,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat `...` args intended for `predict.model_fit()` - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values +- produce length 0 `dist_quantiles()` From c575018d10fab685658be02058abe8e836806ddf Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 29 Jul 2024 14:45:50 -0700 Subject: [PATCH 308/382] ugly required styles --- R/dist_quantiles.R | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 48bdefe5b..86d34db64 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -5,7 +5,9 @@ new_quantiles <- function(values = double(), quantile_levels = double()) { vec_cast(values, double()) vec_cast(quantile_levels, double()) stopifnot(length(values) == length(quantile_levels)) - if (length(values) == 0L) return(distributional::dist_degenerate(double())) + if (length(values) == 0L) { + return(distributional::dist_degenerate(double())) + } stopifnot(!vctrs::vec_duplicate_any(quantile_levels)) if (is.unsorted(quantile_levels)) { o <- vctrs::vec_order(quantile_levels) @@ -61,7 +63,9 @@ dist_quantiles <- function(values, quantile_levels) { values <- as_list_of(values, .ptype = double()) quantile_levels <- as_list_of(quantile_levels, .ptype = double()) args <- vec_recycle_common(values = values, quantile_levels = quantile_levels) - if (length(args$values) == 0L) return(distributional::dist_degenerate(double())) + if (length(args$values) == 0L) { + return(distributional::dist_degenerate(double())) + } qntls <- as_list_of(map2(args$values, args$quantile_levels, new_quantiles)) new_vctr(qntls, class = "distribution") } From 546fc70681da3226c2817ef1738bf248c552a108 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 19 Jul 2024 14:22:05 -0400 Subject: [PATCH 309/382] basic implementation --- DESCRIPTION | 1 + NAMESPACE | 6 + R/epipredict-package.R | 2 +- R/step_epi_slide.R | 219 +++++++++++++++++++++++++++ man/step_epi_slide.Rd | 90 +++++++++++ tests/testthat/test-step_epi_slide.R | 3 + 6 files changed, 320 insertions(+), 1 deletion(-) create mode 100644 R/step_epi_slide.R create mode 100644 man/step_epi_slide.Rd create mode 100644 tests/testthat/test-step_epi_slide.R diff --git a/DESCRIPTION b/DESCRIPTION index a219637b6..b009366ff 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -39,6 +39,7 @@ Imports: quantreg, recipes (>= 1.0.4), rlang (>= 1.0.0), + slider, smoothqr, stats, tibble, diff --git a/NAMESPACE b/NAMESPACE index 941ea1542..5ce19f981 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,6 +21,7 @@ S3method(bake,check_enough_train_data) S3method(bake,epi_recipe) S3method(bake,step_epi_ahead) S3method(bake,step_epi_lag) +S3method(bake,step_epi_slide) S3method(bake,step_growth_rate) S3method(bake,step_lag_difference) S3method(bake,step_population_scaling) @@ -62,6 +63,7 @@ S3method(prep,check_enough_train_data) S3method(prep,epi_recipe) S3method(prep,step_epi_ahead) S3method(prep,step_epi_lag) +S3method(prep,step_epi_slide) S3method(prep,step_growth_rate) S3method(prep,step_lag_difference) S3method(prep,step_population_scaling) @@ -90,6 +92,7 @@ S3method(print,layer_threshold) S3method(print,layer_unnest) S3method(print,step_epi_ahead) S3method(print,step_epi_lag) +S3method(print,step_epi_slide) S3method(print,step_growth_rate) S3method(print,step_lag_difference) S3method(print,step_naomit) @@ -194,6 +197,7 @@ export(smooth_quantile_reg) export(step_epi_ahead) export(step_epi_lag) export(step_epi_naomit) +export(step_epi_slide) export(step_growth_rate) export(step_lag_difference) export(step_population_scaling) @@ -244,6 +248,8 @@ importFrom(rlang,":=") importFrom(rlang,abort) importFrom(rlang,as_function) importFrom(rlang,caller_env) +importFrom(rlang,enquo) +importFrom(rlang,enquos) importFrom(rlang,global_env) importFrom(rlang,inject) importFrom(rlang,is_logical) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 7746281ba..554374533 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,7 +1,7 @@ ## usethis namespace: start #' @importFrom tibble tibble #' @importFrom rlang := !! %||% as_function global_env set_names !!! -#' @importFrom rlang is_logical is_true inject +#' @importFrom rlang is_logical is_true inject enquo enquos #' @importFrom stats poly predict lm residuals quantile #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R new file mode 100644 index 000000000..3ef739553 --- /dev/null +++ b/R/step_epi_slide.R @@ -0,0 +1,219 @@ +#' Calculate a rolling window transformation +#' +#' `step_epi_slide()` creates a *specification* of a recipe step +#' that will generate one or more new columns of derived data by "sliding" +#' a computation along existing data. +#' +#' +#' @inheritParams step_epi_lag +#' @inheritParams epiprocess::epi_slide +#' @param .f A function in one of the following formats: +#' 1. An unquoted function name with no arguments, e.g., `mean` +#' 2. A base `R` lambda function, e.g., `function(x) mean(x, na.rm = TRUE)` +#' 3. A new-style base `R` lambda function, e.g., `\(x) mean(x, na.rm = TRUE)` +#' 4. A one-sided formula like `~ mean(.x, na.rm = TRUE)`. +#' +#' Note that in cases 2 and 3, `x` can be any variable name you like (for +#' example `\(dog) mean(dog, na.rm = TRUE)` will work). But in case 4, the +#' argument must be named `.x`. A common, though very difficult to debug +#' error is using something like `function(x) mean`. This will not work. +#' @param before,after non-negative integers. +#' How far `before` and `after` each `time_value` should +#' the sliding window extend? Any value provided for either +#' argument must be a single, non-`NA`, non-negative, +#' [integer-compatible][vctrs::vec_cast] number of time steps. Endpoints of +#' the window are inclusive. Common settings: +#' * For trailing/right-aligned windows from `time_value - time_step(k)` to +#' `time_value`, use `before=k, after=0`. This is the most likely use case +#' for the purposes of forecasting. +#' * For center-aligned windows from `time_value - time_step(k)` to +#' `time_value + time_step(k)`, use `before=k, after=k`. +#' * For leading/left-aligned windows from `time_value` to +#' `time_value + time_step(k)`, use `after=k, after=0`. +#' +#' You may also pass a [lubridate::period], like `lubridate::weeks(1)`. +#' @template step-return +#' +#' @export +#' @examples +#' library(dplyr) +#' jhu <- case_death_rate_subset %>% +#' filter(time_value >= as.Date("2021-01-01"), geo_value %in% c("ca", "ny")) +#' rec <- epi_recipe(jhu) %>% +#' step_epi_slide(case_rate, death_rate, +#' .f = ~ mean(.x, na.rm = TRUE), +#' before = 6L +#' ) +#' bake(prep(rec, jhu), new_data = NULL) +step_epi_slide <- + function(recipe, + ..., + .f, + before, + after = 0L, + role = "predictor", + prefix = "epi_slide_", + skip = FALSE, + id = rand_id("epi_slide")) { + if (!is_epi_recipe(recipe)) { + rlang::abort("This recipe step can only operate on an `epi_recipe`.") + } + if (rlang::quo(.f) %>% rlang::quo_is_missing()) { + cli_abort("In, `step_epi_slide()`, `.f` may not be missing.") + } + if (rlang::is_formula(.f)) { + if (!is.null(rlang::f_lhs(.f))) { + cli_abort("In, `step_epi_slide()`, `.f` must be a one-sided formula.") + } + f_name <- rlang::f_name(.f) + } else if (rlang::is_character(.f)) { + f_name <- paste0(.f, "(.x)") + .f <- rlang::as_function(.f) + } else if (rlang::is_function(.f)) { + f_name <- as.character(rlang::fn_body(.f))[2] + } else { + cli_abort("In, `step_epi_slide()`, `.f` must be a function.") + } + if (nchar(f_name) > 20L) f_name <- paste0(substr(f_name, 1L, 17L), "...") + + if (is.numeric(before)) { + arg_is_nonneg_int(before) + } else { + checkmate::assert_class(before, "Period") + } + if (is.numeric(after)) { + arg_is_nonneg_int(after) + } else { + checkmate::assert_class(after, "Period") + } + arg_is_chr(role) + arg_is_chr_scalar(prefix, id) + arg_is_lgl_scalar(skip) + + add_step( + recipe, + step_epi_slide_new( + terms = enquos(...), + before = enquo(before), + after = enquo(after), + .f = .f, + f_name = f_name, + role = role, + trained = FALSE, + prefix = prefix, + keys = epi_keys(recipe), + columns = NULL, + skip = skip, + id = id + ) + ) + } + + +step_epi_slide_new <- + function(terms, + before, + after, + .f, + f_name, + role, + trained, + prefix, + keys, + columns, + skip, + id) { + step( + subclass = "epi_slide", + terms = terms, + before = before, + after = after, + .f = .f, + f_name = f_name, + role = role, + trained = trained, + prefix = prefix, + keys = keys, + columns = columns, + skip = skip, + id = id + ) + } + + + +#' @export +prep.step_epi_slide <- function(x, training, info = NULL, ...) { + + col_names <- recipes::recipes_eval_select(x$terms, data = training, info = info) + + check_type(training[, col_names], types = c("double", "integer")) + + step_epi_slide_new( + terms = x$terms, + before = x$before, + after = x$after, + .f = x$.f, + f_name = x$f_name, + role = x$role, + trained = TRUE, + prefix = x$prefix, + keys = x$keys, + columns = col_names, + skip = x$skip, + id = x$id + ) +} + + + +#' @export +bake.step_epi_slide <- function(object, new_data, ...) { + + recipes::check_new_data(names(object$columns), object, new_data) + col_names <- object$columns + name_prefix <- paste0(object$prefix, object$f_name, "_") + newnames <- glue::glue("{name_prefix}{col_names}") + ## ensure no name clashes + new_data_names <- colnames(new_data) + intersection <- new_data_names %in% newnames + if (any(intersection)) { + nms <- new_data_names[intersection] + cli_abort( + c("Name collision occured. The following variable names already exist:", + `*` = "{.var {nms}}"), + call = caller_env() + ) + } + + ok <- object$keys + names(col_names) <- newnames + gr <- new_data %>% + dplyr::select(dplyr::all_of(c(ok, object$columns))) %>% + group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% + dplyr::arrange(time_value) %>% + dplyr::mutate( + dplyr::across( + dplyr::all_of(object$columns), + ~ slider::slide_index_vec( + .x, .i = time_value, + object$.f, .before = !!object$before, .after = !!object$after + ) + ) + ) %>% + dplyr::rename(dplyr::all_of(col_names)) %>% + dplyr::ungroup() + + dplyr::left_join(new_data, gr, by = ok) +} + + +#' @export +print.step_epi_slide <- function(x, width = max(20, options()$width - 30), ...) { + print_epi_step( + x$columns, x$terms, x$trained, + title = "Calculating epi_slide for ", + conjunction = "with", extra_text = x$f_name + ) + invisible(x) +} diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd new file mode 100644 index 000000000..91d04ff0f --- /dev/null +++ b/man/step_epi_slide.Rd @@ -0,0 +1,90 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/step_epi_slide.R +\name{step_epi_slide} +\alias{step_epi_slide} +\title{Calculate a rolling window transformation} +\usage{ +step_epi_slide( + recipe, + ..., + .f, + before, + after = 0L, + role = "predictor", + prefix = "epi_slide_", + skip = FALSE, + id = rand_id("epi_slide") +) +} +\arguments{ +\item{recipe}{A recipe object. The step will be added to the +sequence of operations for this recipe.} + +\item{...}{One or more selector functions to choose variables +for this step. See \code{\link[recipes:selections]{recipes::selections()}} for more details.} + +\item{.f}{A function in one of the following formats: +\enumerate{ +\item An unquoted function name with no arguments, e.g., \code{mean} +\item A base \code{R} lambda function, e.g., \code{function(x) mean(x, na.rm = TRUE)} +\item A new-style base \code{R} lambda function, e.g., \verb{\\(x) mean(x, na.rm = TRUE)} +\item A one-sided formula like \code{~ mean(.x, na.rm = TRUE)}. +} + +Note that in cases 2 and 3, \code{x} can be any variable name you like (for +example \verb{\\(dog) mean(dog, na.rm = TRUE)} will work). But in case 4, the +argument must be named \code{.x}. A common, though very difficult to debug +error is using something like \code{function(x) mean}. This will not work.} + +\item{before, after}{non-negative integers. +How far \code{before} and \code{after} each \code{time_value} should +the sliding window extend? Any value provided for either +argument must be a single, non-\code{NA}, non-negative, +\link[vctrs:vec_cast]{integer-compatible} number of time steps. Endpoints of +the window are inclusive. Common settings: +\itemize{ +\item For trailing/right-aligned windows from \code{time_value - time_step(k)} to +\code{time_value}, use \verb{before=k, after=0}. This is the most likely use case +for the purposes of forecasting. +\item For center-aligned windows from \code{time_value - time_step(k)} to +\code{time_value + time_step(k)}, use \verb{before=k, after=k}. +\item For leading/left-aligned windows from \code{time_value} to +\code{time_value + time_step(k)}, use \verb{after=k, after=0}. +} + +You may also pass a \link[lubridate:period]{lubridate::period}, like \code{lubridate::weeks(1)}.} + +\item{role}{For model terms created by this step, what analysis role should +they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} + +\item{prefix}{A prefix to indicate what type of variable this is} + +\item{skip}{A logical. Should the step be skipped when the +recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked +when \code{\link[=prep]{prep()}} is run, some operations may not be able to be +conducted on new data (e.g. processing the outcome variable(s)). +Care should be taken when using \code{skip = TRUE} as it may affect +the computations for subsequent operations.} + +\item{id}{A unique identifier for the step} +} +\value{ +An updated version of \code{recipe} with the new step added to the +sequence of any existing operations. +} +\description{ +\code{step_epi_slide()} creates a \emph{specification} of a recipe step +that will generate one or more new columns of derived data by "sliding" +a computation along existing data. +} +\examples{ +library(dplyr) +jhu <- case_death_rate_subset \%>\% + filter(time_value >= as.Date("2021-01-01"), geo_value \%in\% c("ca", "ny")) +rec <- epi_recipe(jhu) \%>\% + step_epi_slide(case_rate, death_rate, + .f = ~ mean(.x, na.rm = TRUE), + before = 6L + ) +bake(prep(rec, jhu), new_data = NULL) +} diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R new file mode 100644 index 000000000..8849056e2 --- /dev/null +++ b/tests/testthat/test-step_epi_slide.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) From 6e3472f16fe24c987a18197481c99d6e7d1ca5c8 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 24 Jul 2024 15:02:07 -0700 Subject: [PATCH 310/382] add tests, redocument --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/get_test_data.R | 10 +- R/step_epi_slide.R | 135 ++++++++++++++++++++------- man/clean_f_name.Rd | 28 ++++++ man/step_epi_slide.Rd | 19 +++- tests/testthat/test-step_epi_slide.R | 122 +++++++++++++++++++++++- 7 files changed, 271 insertions(+), 46 deletions(-) create mode 100644 man/clean_f_name.Rd diff --git a/DESCRIPTION b/DESCRIPTION index b009366ff..c16aff98e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,6 +35,7 @@ Imports: ggplot2, glue, hardhat (>= 1.3.0), + lubridate, magrittr, quantreg, recipes (>= 1.0.4), @@ -54,7 +55,6 @@ Suggests: epidatr (>= 1.0.0), fs, knitr, - lubridate, poissonreg, purrr, ranger, diff --git a/NAMESPACE b/NAMESPACE index 5ce19f981..f7f880501 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -146,6 +146,7 @@ export(bake) export(cdc_baseline_args_list) export(cdc_baseline_forecaster) export(check_enough_train_data) +export(clean_f_name) export(default_epi_recipe_blueprint) export(detect_layer) export(dist_quantiles) diff --git a/R/get_test_data.R b/R/get_test_data.R index 2a2484749..5f6d11b09 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -65,12 +65,9 @@ get_test_data <- function( i = "The following required columns are missing: {check$missing_names}" )) } - if (class(forecast_date) != class(x$time_value)) { cli::cli_abort("`forecast_date` must be the same class as `x$time_value`.") } - - if (forecast_date < max(x$time_value)) { cli::cli_abort("`forecast_date` must be no earlier than `max(x$time_value)`") } @@ -78,7 +75,8 @@ get_test_data <- function( min_lags <- min(map_dbl(recipe$steps, ~ min(.x$lag %||% Inf)), Inf) max_lags <- max(map_dbl(recipe$steps, ~ max(.x$lag %||% 0)), 0) max_horizon <- max(map_dbl(recipe$steps, ~ max(.x$horizon %||% 0)), 0) - min_required <- max_lags + max_horizon + max_slide <- max(map_dbl(recipe$steps, ~ max(.x$before %||% 0)), 0) + min_required <- max_lags + max_horizon + max_slide if (is.null(n_recent)) n_recent <- min_required + 1 # one extra for filling if (n_recent <= min_required) n_recent <- min_required + n_recent @@ -164,8 +162,6 @@ pad_to_end <- function(x, groups, end_date) { } Seq <- function(from, to, by) { - if (from > to) { - return(NULL) - } + if (from > to) return(NULL) seq(from = from, to = to, by = by) } diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 3ef739553..144dbb971 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -6,17 +6,23 @@ #' #' #' @inheritParams step_epi_lag -#' @inheritParams epiprocess::epi_slide #' @param .f A function in one of the following formats: #' 1. An unquoted function name with no arguments, e.g., `mean` -#' 2. A base `R` lambda function, e.g., `function(x) mean(x, na.rm = TRUE)` -#' 3. A new-style base `R` lambda function, e.g., `\(x) mean(x, na.rm = TRUE)` -#' 4. A one-sided formula like `~ mean(.x, na.rm = TRUE)`. +#' 2. A character string name of a function, e.g., `"mean"`. Note that this +#' can be difficult to examine for mistakes (so the misspelling `"maen"` +#' won't produce an error until you try to actually fit the model) +#' 3. A base `R` lambda function, e.g., `function(x) mean(x, na.rm = TRUE)` +#' 4. A new-style base `R` lambda function, e.g., `\(x) mean(x, na.rm = TRUE)` +#' 5. A one-sided formula like `~ mean(.x, na.rm = TRUE)`. #' -#' Note that in cases 2 and 3, `x` can be any variable name you like (for -#' example `\(dog) mean(dog, na.rm = TRUE)` will work). But in case 4, the +#' Note that in cases 3 and 4, `x` can be any variable name you like (for +#' example `\(dog) mean(dog, na.rm = TRUE)` will work). But in case 5, the #' argument must be named `.x`. A common, though very difficult to debug #' error is using something like `function(x) mean`. This will not work. +#' @param f_name a character string of at most 20 characters that describes +#' the function. This will be combined with `prefix` and the columns in `...` +#' to name the result using `{prefix}{f_name}_{column}`. It will be determined +#' automatically using `clean_f_name()`. #' @param before,after non-negative integers. #' How far `before` and `after` each `time_value` should #' the sliding window extend? Any value provided for either @@ -31,7 +37,9 @@ #' * For leading/left-aligned windows from `time_value` to #' `time_value + time_step(k)`, use `after=k, after=0`. #' -#' You may also pass a [lubridate::period], like `lubridate::weeks(1)`. +#' You may also pass a [lubridate::period], like `lubridate::weeks(1)` or a +#' character string that is coercible to a [lubridate::period], like +#' `"2 weeks"`. #' @template step-return #' #' @export @@ -49,53 +57,40 @@ step_epi_slide <- function(recipe, ..., .f, - before, + before = 0L, after = 0L, role = "predictor", prefix = "epi_slide_", + f_name = clean_f_name(.f), skip = FALSE, id = rand_id("epi_slide")) { if (!is_epi_recipe(recipe)) { rlang::abort("This recipe step can only operate on an `epi_recipe`.") } - if (rlang::quo(.f) %>% rlang::quo_is_missing()) { - cli_abort("In, `step_epi_slide()`, `.f` may not be missing.") - } - if (rlang::is_formula(.f)) { - if (!is.null(rlang::f_lhs(.f))) { - cli_abort("In, `step_epi_slide()`, `.f` must be a one-sided formula.") - } - f_name <- rlang::f_name(.f) - } else if (rlang::is_character(.f)) { - f_name <- paste0(.f, "(.x)") - .f <- rlang::as_function(.f) - } else if (rlang::is_function(.f)) { - f_name <- as.character(rlang::fn_body(.f))[2] - } else { - cli_abort("In, `step_epi_slide()`, `.f` must be a function.") - } - if (nchar(f_name) > 20L) f_name <- paste0(substr(f_name, 1L, 17L), "...") + .f <- validate_slide_fun(.f) + arg_is_scalar(before, after) + before <- try_period(before) + after <- try_period(after) if (is.numeric(before)) { arg_is_nonneg_int(before) } else { - checkmate::assert_class(before, "Period") + before <- try_period(before) } if (is.numeric(after)) { arg_is_nonneg_int(after) } else { - checkmate::assert_class(after, "Period") + after <- try_period(after) } - arg_is_chr(role) - arg_is_chr_scalar(prefix, id) + arg_is_chr_scalar(role, prefix, id) arg_is_lgl_scalar(skip) add_step( recipe, step_epi_slide_new( terms = enquos(...), - before = enquo(before), - after = enquo(after), + before = before, + after = after, .f = .f, f_name = f_name, role = role, @@ -197,7 +192,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { dplyr::all_of(object$columns), ~ slider::slide_index_vec( .x, .i = time_value, - object$.f, .before = !!object$before, .after = !!object$after + object$.f, .before = object$before, .after = object$after ) ) ) %>% @@ -217,3 +212,79 @@ print.step_epi_slide <- function(x, width = max(20, options()$width - 30), ...) ) invisible(x) } + +#' Create short function names +#' +#' @param .f a function, character string, or lambda. For example, `mean`, +#' `"mean"`, `~ mean(.x)` or `\(x) mean(x, na.rm = TRUE)`. +#' @param max_length integer determining how long names can be +#' +#' @return a character string of length at most `max_length` that +#' (partially) describes the function. +#' @export +#' +#' @examples +#' clean_f_name(mean) +#' clean_f_name("mean") +#' clean_f_name(~ mean(.x, na.rm = TRUE)) +#' clean_f_name(\(x) mean(x, na.rm = TRUE)) +#' clean_f_name(function(x) mean(x, na.rm = TRUE, trim = 0.2357862)) +clean_f_name <- function(.f, max_length = 20L) { + if (rlang::is_formula(.f, scoped = TRUE)) { + f_name <- rlang::f_name(.f) + } else if (rlang::is_character(.f)) { + f_name <- .f + } else if (rlang::is_function(.f)) { + f_name <- as.character(substitute(.f)) + if (length(f_name) > 1L) { + f_name <- f_name[3] + if (nchar(f_name) > max_length - 5L) { + f_name <- paste0(substr(f_name, 1L, max(max_length - 8L, 5L)), "...") + } + f_name <- paste0("[ ]{", f_name, "}") + } + } + if (nchar(f_name) > max_length) { + f_name <- paste0(substr(f_name, 1L, max_length - 3L), "...") + } + f_name +} + + +validate_slide_fun <- function(.f) { + if (rlang::quo(.f) %>% rlang::quo_is_missing()) { + cli_abort("In, `step_epi_slide()`, `.f` may not be missing.") + } + if (rlang::is_formula(.f, scoped = TRUE)) { + if (!is.null(rlang::f_lhs(.f))) { + cli_abort("In, `step_epi_slide()`, `.f` must be a one-sided formula.") + } + } else if (rlang::is_character(.f)) { + .f <- rlang::as_function(.f) + } else if (!rlang::is_function(.f)) { + cli_abort("In, `step_epi_slide()`, `.f` must be a function.") + } + .f +} + +try_period <- function(x) { + err <- is.na(x) + if (!err) { + if (is.numeric(x) ) { + err <- !rlang::is_integerish(x) || x < 0 + } else { + x <- lubridate::as.period(x) + err <- is.na(x) + } + } + if (err) { + cli_abort(paste( + 'The value supplied to `before` or `after` must be a non-negative integer', + 'a {.cls lubridate::period} or a character scalar that can be coerced', + 'as a {.cls lubridate::period}, e.g., `"1 week"`.' + ), + ) + } + x +} + diff --git a/man/clean_f_name.Rd b/man/clean_f_name.Rd new file mode 100644 index 000000000..20ed921df --- /dev/null +++ b/man/clean_f_name.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/step_epi_slide.R +\name{clean_f_name} +\alias{clean_f_name} +\title{Create short function names} +\usage{ +clean_f_name(.f, max_length = 20L) +} +\arguments{ +\item{.f}{a function, character string, or lambda. For example, \code{mean}, +\code{"mean"}, \code{~ mean(.x)} or \verb{\\(x) mean(x, na.rm = TRUE)}.} + +\item{max_length}{integer determining how long names can be} +} +\value{ +a character string of length at most \code{max_length} that +(partially) describes the function. +} +\description{ +Create short function names +} +\examples{ +clean_f_name(mean) +clean_f_name("mean") +clean_f_name(~ mean(.x, na.rm = TRUE)) +clean_f_name(\(x) mean(x, na.rm = TRUE)) +clean_f_name(function(x) mean(x, na.rm = TRUE, trim = 0.2357862)) +} diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd index 91d04ff0f..3baefbc3a 100644 --- a/man/step_epi_slide.Rd +++ b/man/step_epi_slide.Rd @@ -8,10 +8,11 @@ step_epi_slide( recipe, ..., .f, - before, + before = 0L, after = 0L, role = "predictor", prefix = "epi_slide_", + f_name = clean_f_name(.f), skip = FALSE, id = rand_id("epi_slide") ) @@ -26,13 +27,16 @@ for this step. See \code{\link[recipes:selections]{recipes::selections()}} for m \item{.f}{A function in one of the following formats: \enumerate{ \item An unquoted function name with no arguments, e.g., \code{mean} +\item A character string name of a function, e.g., \code{"mean"}. Note that this +can be difficult to examine for mistakes (so the misspelling \code{"maen"} +won't produce an error until you try to actually fit the model) \item A base \code{R} lambda function, e.g., \code{function(x) mean(x, na.rm = TRUE)} \item A new-style base \code{R} lambda function, e.g., \verb{\\(x) mean(x, na.rm = TRUE)} \item A one-sided formula like \code{~ mean(.x, na.rm = TRUE)}. } -Note that in cases 2 and 3, \code{x} can be any variable name you like (for -example \verb{\\(dog) mean(dog, na.rm = TRUE)} will work). But in case 4, the +Note that in cases 3 and 4, \code{x} can be any variable name you like (for +example \verb{\\(dog) mean(dog, na.rm = TRUE)} will work). But in case 5, the argument must be named \code{.x}. A common, though very difficult to debug error is using something like \code{function(x) mean}. This will not work.} @@ -52,13 +56,20 @@ for the purposes of forecasting. \code{time_value + time_step(k)}, use \verb{after=k, after=0}. } -You may also pass a \link[lubridate:period]{lubridate::period}, like \code{lubridate::weeks(1)}.} +You may also pass a \link[lubridate:period]{lubridate::period}, like \code{lubridate::weeks(1)} or a +character string that is coercible to a \link[lubridate:period]{lubridate::period}, like +\code{"2 weeks"}.} \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} \item{prefix}{A prefix to indicate what type of variable this is} +\item{f_name}{a character string of at most 20 characters that describes +the function. This will be combined with \code{prefix} and the columns in \code{...} +to name the result using \verb{\{prefix\}\{f_name\}_\{column\}}. It will be determined +automatically using \code{clean_f_name()}.} + \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked when \code{\link[=prep]{prep()}} is run, some operations may not be able to be diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 8849056e2..a99d96369 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -1,3 +1,121 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) +tt <- seq(as.Date("2022-01-01"), by = "1 day", length.out = 20) +edf <- data.frame( + time_value = c(tt, tt), + geo_value = rep(c("ca", "ny"), each = 20L), + value = c(2:21, 3:22) +) %>% + as_epi_df() + +r <- epi_recipe(edf) + +test_that("try_period works", { + expect_error(try_period("1 jeff")) + expect_error(try_period(lubridate::period("1 jeff"))) + expect_error(try_period(NA)) + expect_error(try_period(1.5)) + res <- lubridate::weeks(1) + expect_identical(try_period("1 week"), res) + expect_identical(try_period(lubridate::period("1 week")), res) + expect_identical(try_period(1L), 1L) +}) + + +test_that("epi_slide errors when needed", { + # not an epi_recipe + expect_error(recipe(edf) %>% step_epi_slide(value, .f = mean, before = 6L)) + + # non-scalar args + expect_error(r %>% step_epi_slide(value, .f = mean, before = c(3L, 6L))) + expect_error(r %>% step_epi_slide(value, .f = mean, after = c(3L, 6L))) + expect_error(r %>% step_epi_slide(value, .f = mean, skip = c(TRUE, FALSE))) + expect_error(r %>% step_epi_slide(value, .f = mean, role = letters[1:2])) + expect_error(r %>% step_epi_slide(value, .f = mean, prefix = letters[1:2])) + expect_error(r %>% step_epi_slide(value, .f = mean, id = letters[1:2])) + # wrong types + expect_error(r %>% step_epi_slide(value, .f = mean, before = 1.5)) + expect_error(r %>% step_epi_slide(value, .f = mean, after = 1.5)) + expect_error(r %>% step_epi_slide(value, .f = mean, skip = "a")) + expect_error(r %>% step_epi_slide(value, .f = mean, role = 1)) + expect_error(r %>% step_epi_slide(value, .f = mean, prefix = 1)) + expect_error(r %>% step_epi_slide(value, .f = mean, id = 1)) + # function problems + expect_error(r %>% step_epi_slide(value)) + expect_error(r %>% step_epi_slide(value, .f = 1)) +}) + +library(dplyr) +rolled_before <- edf %>% + group_by(geo_value) %>% + epi_slide(value = mean(value), before = 3L) %>% + pull(value) +rolled_after <- edf %>% + group_by(geo_value) %>% + epi_slide(value = mean(value), after = 3L) %>% + pull(value) + + +test_that("epi_slide handles classed before/after", { + + baseline <- r %>% + step_epi_slide(value, .f = mean, before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + expect_equal(baseline[[4]], rolled_before) + + pbefore <- r %>% + step_epi_slide(value, .f = mean, before = lubridate::period("3 days")) %>% + prep(edf) %>% + bake(new_data = NULL) + cbefore <- r %>% + step_epi_slide(value, .f = mean, before = "3 days") %>% + prep(edf) %>% + bake(new_data = NULL) + expect_equal(baseline, pbefore) + expect_equal(baseline, cbefore) + + baseline <- r %>% + step_epi_slide(value, .f = mean, after = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + expect_equal(baseline[[4]], rolled_after) + pafter <- r %>% + step_epi_slide(value, .f = mean, after = lubridate::period("3 days")) %>% + prep(edf) %>% + bake(new_data = NULL) + cafter <- r %>% + step_epi_slide(value, .f = mean, after = "3 days") %>% + prep(edf) %>% + bake(new_data = NULL) + expect_equal(baseline, pafter) + expect_equal(baseline, cafter) +}) + + +test_that("epi_slide handles different function specs", { + cfun <- r %>% + step_epi_slide(value, .f = "mean", before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + ffun <- r %>% + step_epi_slide(value, .f = mean, before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + lfun <- r %>% + step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + blfun <- r %>% + step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + nblfun <- r %>% + step_epi_slide(value, .f = \(x) mean(x, na.rm = TRUE), before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + + expect_equal(cfun[[4]], rolled_before) + expect_equal(ffun[[4]], rolled_before) + expect_equal(lfun[[4]], rolled_before) + expect_equal(blfun[[4]], rolled_before) + expect_equal(nblfun[[4]], rolled_before) }) From a878ff974cfe55a5baf0bf96236592e547cbc746 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 24 Jul 2024 15:04:03 -0700 Subject: [PATCH 311/382] bump version --- _pkgdown.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index 62f1cc25d..308d984c2 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -116,6 +116,9 @@ reference: - extrapolate_quantiles - nested_quantiles - starts_with("pivot_quantiles") + - title: Other utilities + contents: + - clean_f_name - title: Included datasets contents: - case_death_rate_subset From 233e0a929a206bcafb1e829ac6e526c2e220fad1 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 24 Jul 2024 15:22:42 -0700 Subject: [PATCH 312/382] add news --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 2b722fb59..4cb3e092a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -52,3 +52,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat `...` args intended for `predict.model_fit()` - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values +- Add a step to produce generic sliding computations over an `epi_df` From d8c08d8e8767f46736acb0fd8d4a0dafd3f1997a Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 24 Jul 2024 15:25:00 -0700 Subject: [PATCH 313/382] styler --- R/get_test_data.R | 4 +++- R/step_epi_slide.R | 18 ++++++++---------- tests/testthat/test-step_epi_slide.R | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/R/get_test_data.R b/R/get_test_data.R index 5f6d11b09..0a7d0dc2a 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -162,6 +162,8 @@ pad_to_end <- function(x, groups, end_date) { } Seq <- function(from, to, by) { - if (from > to) return(NULL) + if (from > to) { + return(NULL) + } seq(from = from, to = to, by = by) } diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 144dbb971..75570ac8a 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -139,7 +139,6 @@ step_epi_slide_new <- #' @export prep.step_epi_slide <- function(x, training, info = NULL, ...) { - col_names <- recipes::recipes_eval_select(x$terms, data = training, info = info) check_type(training[, col_names], types = c("double", "integer")) @@ -164,7 +163,6 @@ prep.step_epi_slide <- function(x, training, info = NULL, ...) { #' @export bake.step_epi_slide <- function(object, new_data, ...) { - recipes::check_new_data(names(object$columns), object, new_data) col_names <- object$columns name_prefix <- paste0(object$prefix, object$f_name, "_") @@ -176,7 +174,8 @@ bake.step_epi_slide <- function(object, new_data, ...) { nms <- new_data_names[intersection] cli_abort( c("Name collision occured. The following variable names already exist:", - `*` = "{.var {nms}}"), + `*` = "{.var {nms}}" + ), call = caller_env() ) } @@ -191,7 +190,8 @@ bake.step_epi_slide <- function(object, new_data, ...) { dplyr::across( dplyr::all_of(object$columns), ~ slider::slide_index_vec( - .x, .i = time_value, + .x, + .i = time_value, object$.f, .before = object$before, .after = object$after ) ) @@ -270,7 +270,7 @@ validate_slide_fun <- function(.f) { try_period <- function(x) { err <- is.na(x) if (!err) { - if (is.numeric(x) ) { + if (is.numeric(x)) { err <- !rlang::is_integerish(x) || x < 0 } else { x <- lubridate::as.period(x) @@ -279,12 +279,10 @@ try_period <- function(x) { } if (err) { cli_abort(paste( - 'The value supplied to `before` or `after` must be a non-negative integer', - 'a {.cls lubridate::period} or a character scalar that can be coerced', + "The value supplied to `before` or `after` must be a non-negative integer", + "a {.cls lubridate::period} or a character scalar that can be coerced", 'as a {.cls lubridate::period}, e.g., `"1 week"`.' - ), - ) + ), ) } x } - diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index a99d96369..0f92be588 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -55,7 +55,6 @@ rolled_after <- edf %>% test_that("epi_slide handles classed before/after", { - baseline <- r %>% step_epi_slide(value, .f = mean, before = 3L) %>% prep(edf) %>% From 8408b252604c5ac8b2e59b19705efe5280ab4bd8 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 24 Jul 2024 15:26:40 -0700 Subject: [PATCH 314/382] remove some extraneous code --- R/step_epi_slide.R | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 75570ac8a..7f1cd3ef6 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -71,17 +71,6 @@ step_epi_slide <- arg_is_scalar(before, after) before <- try_period(before) after <- try_period(after) - - if (is.numeric(before)) { - arg_is_nonneg_int(before) - } else { - before <- try_period(before) - } - if (is.numeric(after)) { - arg_is_nonneg_int(after) - } else { - after <- try_period(after) - } arg_is_chr_scalar(role, prefix, id) arg_is_lgl_scalar(skip) From 3fec57f05d61a7583ba7213623e4b71b04eedc97 Mon Sep 17 00:00:00 2001 From: Daniel McDonald Date: Thu, 25 Jul 2024 09:19:36 -0700 Subject: [PATCH 315/382] Apply suggestions from code review Co-authored-by: David Weber --- R/step_epi_slide.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 7f1cd3ef6..48f322561 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -18,10 +18,11 @@ #' Note that in cases 3 and 4, `x` can be any variable name you like (for #' example `\(dog) mean(dog, na.rm = TRUE)` will work). But in case 5, the #' argument must be named `.x`. A common, though very difficult to debug -#' error is using something like `function(x) mean`. This will not work. +#' error is using something like `function(x) mean`. This will not work +#' because it returns the function mean, rather than `mean(x)` #' @param f_name a character string of at most 20 characters that describes #' the function. This will be combined with `prefix` and the columns in `...` -#' to name the result using `{prefix}{f_name}_{column}`. It will be determined +#' to name the result using `{prefix}{f_name}_{column}`. By default it will be determined #' automatically using `clean_f_name()`. #' @param before,after non-negative integers. #' How far `before` and `after` each `time_value` should @@ -162,7 +163,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { if (any(intersection)) { nms <- new_data_names[intersection] cli_abort( - c("Name collision occured. The following variable names already exist:", + c("In `step_epi_slide()` a name collision occurred. The following variable names already exist:", `*` = "{.var {nms}}" ), call = caller_env() From 7d22ef829fc9c0b4d16bd67c6ddf0c0fe74f21d0 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 31 Jul 2024 13:44:13 -0500 Subject: [PATCH 316/382] first draft of epi_slide in step_epi_slide --- NAMESPACE | 3 + R/step_epi_slide.R | 83 +++++++++++++++++++++------- man/epi_slide_wrapper.Rd | 28 ++++++++++ man/step_epi_slide.Rd | 5 +- tests/testthat/test-step_epi_slide.R | 79 ++++++++++++++++---------- 5 files changed, 146 insertions(+), 52 deletions(-) create mode 100644 man/epi_slide_wrapper.Rd diff --git a/NAMESPACE b/NAMESPACE index f7f880501..5d045ec8f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -226,10 +226,12 @@ importFrom(checkmate,assert_scalar) importFrom(cli,cli_abort) importFrom(dplyr,across) importFrom(dplyr,all_of) +importFrom(dplyr,bind_cols) importFrom(dplyr,group_by) importFrom(dplyr,n) importFrom(dplyr,summarise) importFrom(dplyr,ungroup) +importFrom(epiprocess,epi_slide) importFrom(epiprocess,growth_rate) importFrom(generics,augment) importFrom(generics,fit) @@ -269,6 +271,7 @@ importFrom(stats,qnorm) importFrom(stats,quantile) importFrom(stats,residuals) importFrom(tibble,tibble) +importFrom(tidyr,crossing) importFrom(tidyr,drop_na) importFrom(vctrs,as_list_of) importFrom(vctrs,field) diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 48f322561..64cd5370f 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -166,30 +166,71 @@ bake.step_epi_slide <- function(object, new_data, ...) { c("In `step_epi_slide()` a name collision occurred. The following variable names already exist:", `*` = "{.var {nms}}" ), - call = caller_env() + call = caller_env(), + class = "epipredict__step__name_collision_error" ) } - - ok <- object$keys - names(col_names) <- newnames - gr <- new_data %>% - dplyr::select(dplyr::all_of(c(ok, object$columns))) %>% - group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% - dplyr::arrange(time_value) %>% - dplyr::mutate( - dplyr::across( - dplyr::all_of(object$columns), - ~ slider::slide_index_vec( - .x, - .i = time_value, - object$.f, .before = object$before, .after = object$after - ) - ) + if (any(vapply(c(mean, sum), \(x) identical(x, object$.f), logical(1L)))) { + cli_warn( + c("There is an optimized version of both mean and sum. See `step_epi_slide_mean`, `step_epi_slide_sum`, or `step_epi_slide_opt`." + ), + class = "epipredict__step_epi_slide__optimized_version" + ) + } + epi_slide_wrapper( + new_data, + object$before, + object$after, + object$columns, + c(object$.f), + object$f_name, + object$keys[-1], + object$prefix + ) +} +#' wrapper to handle epi_slide particulars +#' @description +#' This should simplify somewhat in the future when we can run `epi_slide` on +#' columns. Surprisingly, lapply is several orders of magnitude faster than +#' using roughly equivalent tidy select style. +#' @param fns vector of functions, even if it's length 1. +#' @param group_keys the keys to group by. likely epi_keys[-1] (to remove time_value) +#' @importFrom tidyr crossing +#' @importFrom dplyr bind_cols group_by ungroup +#' @importFrom epiprocess epi_slide +#' @keywords internal +epi_slide_wrapper <- function(new_data, before, after, columns, fns, fn_names, group_keys, name_prefix) { + cols_fns <- tidyr::crossing(col_name = columns, fn_name = fn_names, fn = fns) + seq_len(nrow(cols_fns)) %>% + lapply( # iterate over the rows of cols_fns + # takes in the row number, outputs the transformed column + function(comp_i) { + # extract values from the row + col_name <- cols_fns[[comp_i, "col_name"]] + fn_name <- cols_fns[[comp_i, "fn_name"]] + fn <- cols_fns[[comp_i, "fn"]][[1L]] + result_name <- paste(name_prefix, fn_name, col_name, sep="_") + result <- new_data %>% + group_by(across(group_keys)) %>% + epi_slide( + before = before, + after = after, + new_col_name = result_name, + f = function(slice, geo_key, ref_time_value) { + fn(slice[[col_name]]) + } + ) %>% + ungroup() + # the first result needs to include all of the original columns + if (comp_i == 1L) { + result + } else { + # everything else just needs that column transformed + result[result_name] + } + } ) %>% - dplyr::rename(dplyr::all_of(col_names)) %>% - dplyr::ungroup() - - dplyr::left_join(new_data, gr, by = ok) + bind_cols() } diff --git a/man/epi_slide_wrapper.Rd b/man/epi_slide_wrapper.Rd new file mode 100644 index 000000000..4f1ffe285 --- /dev/null +++ b/man/epi_slide_wrapper.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/step_epi_slide.R +\name{epi_slide_wrapper} +\alias{epi_slide_wrapper} +\title{wrapper to handle epi_slide particulars} +\usage{ +epi_slide_wrapper( + new_data, + before, + after, + columns, + fns, + fn_names, + group_keys, + name_prefix +) +} +\arguments{ +\item{fns}{vector of functions, even if it's length 1.} + +\item{group_keys}{the keys to group by. likely epi_keys\link{-1} (to remove time_value)} +} +\description{ +This should simplify somewhat in the future when we can run \code{epi_slide} on +columns. Surprisingly, lapply is several orders of magnitude faster than +using roughly equivalent tidy select style. +} +\keyword{internal} diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd index 3baefbc3a..0e066009d 100644 --- a/man/step_epi_slide.Rd +++ b/man/step_epi_slide.Rd @@ -38,7 +38,8 @@ won't produce an error until you try to actually fit the model) Note that in cases 3 and 4, \code{x} can be any variable name you like (for example \verb{\\(dog) mean(dog, na.rm = TRUE)} will work). But in case 5, the argument must be named \code{.x}. A common, though very difficult to debug -error is using something like \code{function(x) mean}. This will not work.} +error is using something like \code{function(x) mean}. This will not work +because it returns the function mean, rather than \code{mean(x)}} \item{before, after}{non-negative integers. How far \code{before} and \code{after} each \code{time_value} should @@ -67,7 +68,7 @@ they be assigned? \code{lag} is default a predictor while \code{ahead} is an out \item{f_name}{a character string of at most 20 characters that describes the function. This will be combined with \code{prefix} and the columns in \code{...} -to name the result using \verb{\{prefix\}\{f_name\}_\{column\}}. It will be determined +to name the result using \verb{\{prefix\}\{f_name\}_\{column\}}. By default it will be determined automatically using \code{clean_f_name()}.} \item{skip}{A logical. Should the step be skipped when the diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 0f92be588..215fdb43c 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -55,36 +55,54 @@ rolled_after <- edf %>% test_that("epi_slide handles classed before/after", { - baseline <- r %>% - step_epi_slide(value, .f = mean, before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) + expect_warning( + baseline <- r %>% + step_epi_slide(value, .f = mean, before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) expect_equal(baseline[[4]], rolled_before) - pbefore <- r %>% - step_epi_slide(value, .f = mean, before = lubridate::period("3 days")) %>% - prep(edf) %>% - bake(new_data = NULL) - cbefore <- r %>% - step_epi_slide(value, .f = mean, before = "3 days") %>% - prep(edf) %>% - bake(new_data = NULL) + expect_warning( + pbefore <- r %>% + step_epi_slide(value, .f = mean, before = lubridate::period("3 days")) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) + expect_warning( + cbefore <- r %>% + step_epi_slide(value, .f = mean, before = "3 days") %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) expect_equal(baseline, pbefore) expect_equal(baseline, cbefore) - baseline <- r %>% - step_epi_slide(value, .f = mean, after = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) + expect_warning( + baseline <- r %>% + step_epi_slide(value, .f = mean, after = 3L) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) expect_equal(baseline[[4]], rolled_after) - pafter <- r %>% - step_epi_slide(value, .f = mean, after = lubridate::period("3 days")) %>% - prep(edf) %>% - bake(new_data = NULL) - cafter <- r %>% - step_epi_slide(value, .f = mean, after = "3 days") %>% - prep(edf) %>% - bake(new_data = NULL) + expect_warning( + pafter <- r %>% + step_epi_slide(value, .f = mean, after = lubridate::period("3 days")) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) + expect_warning( + cafter <- r %>% + step_epi_slide(value, .f = mean, after = "3 days") %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) expect_equal(baseline, pafter) expect_equal(baseline, cafter) }) @@ -99,10 +117,13 @@ test_that("epi_slide handles different function specs", { step_epi_slide(value, .f = mean, before = 3L) %>% prep(edf) %>% bake(new_data = NULL) - lfun <- r %>% - step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) + # formula NOT currently supported + expect_error( + lfun <- r %>% + step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + ) blfun <- r %>% step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), before = 3L) %>% prep(edf) %>% @@ -114,7 +135,7 @@ test_that("epi_slide handles different function specs", { expect_equal(cfun[[4]], rolled_before) expect_equal(ffun[[4]], rolled_before) - expect_equal(lfun[[4]], rolled_before) + #expect_equal(lfun[[4]], rolled_before) expect_equal(blfun[[4]], rolled_before) expect_equal(nblfun[[4]], rolled_before) }) From acc40bd25686d7feaf151f659530ec0d3ae03a1d Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 31 Jul 2024 14:11:44 -0500 Subject: [PATCH 317/382] new version passes the tests --- R/step_epi_slide.R | 7 +++---- tests/testthat/test-step_epi_slide.R | 28 +++++++++++++++++----------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 64cd5370f..6b766b9d6 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -172,8 +172,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { } if (any(vapply(c(mean, sum), \(x) identical(x, object$.f), logical(1L)))) { cli_warn( - c("There is an optimized version of both mean and sum. See `step_epi_slide_mean`, `step_epi_slide_sum`, or `step_epi_slide_opt`." - ), + c("There is an optimized version of both mean and sum. See `step_epi_slide_mean`, `step_epi_slide_sum`, or `step_epi_slide_opt`."), class = "epipredict__step_epi_slide__optimized_version" ) } @@ -209,9 +208,9 @@ epi_slide_wrapper <- function(new_data, before, after, columns, fns, fn_names, g col_name <- cols_fns[[comp_i, "col_name"]] fn_name <- cols_fns[[comp_i, "fn_name"]] fn <- cols_fns[[comp_i, "fn"]][[1L]] - result_name <- paste(name_prefix, fn_name, col_name, sep="_") + result_name <- paste(name_prefix, fn_name, col_name, sep = "_") result <- new_data %>% - group_by(across(group_keys)) %>% + group_by(across(all_of(group_keys))) %>% epi_slide( before = before, after = after, diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 215fdb43c..1f284b721 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -61,7 +61,7 @@ test_that("epi_slide handles classed before/after", { prep(edf) %>% bake(new_data = NULL), regexp = "There is an optimized version" - ) + ) expect_equal(baseline[[4]], rolled_before) expect_warning( @@ -70,7 +70,7 @@ test_that("epi_slide handles classed before/after", { prep(edf) %>% bake(new_data = NULL), regexp = "There is an optimized version" - ) + ) expect_warning( cbefore <- r %>% step_epi_slide(value, .f = mean, before = "3 days") %>% @@ -109,14 +109,20 @@ test_that("epi_slide handles classed before/after", { test_that("epi_slide handles different function specs", { - cfun <- r %>% - step_epi_slide(value, .f = "mean", before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) - ffun <- r %>% - step_epi_slide(value, .f = mean, before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) + expect_warning( + cfun <- r %>% + step_epi_slide(value, .f = "mean", before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) + expect_warning( + ffun <- r %>% + step_epi_slide(value, .f = mean, before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL), + regexp = "There is an optimized version" + ) # formula NOT currently supported expect_error( lfun <- r %>% @@ -135,7 +141,7 @@ test_that("epi_slide handles different function specs", { expect_equal(cfun[[4]], rolled_before) expect_equal(ffun[[4]], rolled_before) - #expect_equal(lfun[[4]], rolled_before) + # expect_equal(lfun[[4]], rolled_before) expect_equal(blfun[[4]], rolled_before) expect_equal(nblfun[[4]], rolled_before) }) From a586ce1ff94f131d4f398a86d3042ebdef473451 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 31 Jul 2024 14:26:58 -0500 Subject: [PATCH 318/382] doc links update, example to function not formula --- R/step_epi_slide.R | 4 ++-- man/add_epi_recipe.Rd | 2 +- man/arx_classifier.Rd | 2 +- man/arx_forecaster.Rd | 2 +- man/autoplot-epipred.Rd | 15 --------------- man/cdc_baseline_forecaster.Rd | 4 ++-- man/flatline_forecaster.Rd | 4 ++-- man/get_test_data.Rd | 2 +- man/grad_employ_subset.Rd | 2 +- man/predict-epi_workflow.Rd | 2 +- 10 files changed, 12 insertions(+), 27 deletions(-) diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 6b766b9d6..25ef3973c 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -50,7 +50,7 @@ #' filter(time_value >= as.Date("2021-01-01"), geo_value %in% c("ca", "ny")) #' rec <- epi_recipe(jhu) %>% #' step_epi_slide(case_rate, death_rate, -#' .f = ~ mean(.x, na.rm = TRUE), +#' .f = \(x) mean(x, na.rm = TRUE), #' before = 6L #' ) #' bake(prep(rec, jhu), new_data = NULL) @@ -193,7 +193,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { #' columns. Surprisingly, lapply is several orders of magnitude faster than #' using roughly equivalent tidy select style. #' @param fns vector of functions, even if it's length 1. -#' @param group_keys the keys to group by. likely epi_keys[-1] (to remove time_value) +#' @param group_keys the keys to group by. likely `epi_keys[-1]` (to remove time_value) #' @importFrom tidyr crossing #' @importFrom dplyr bind_cols group_by ungroup #' @importFrom epiprocess epi_slide diff --git a/man/add_epi_recipe.Rd b/man/add_epi_recipe.Rd index 0da2d55b3..10c282209 100644 --- a/man/add_epi_recipe.Rd +++ b/man/add_epi_recipe.Rd @@ -35,7 +35,7 @@ Add an \code{epi_recipe} to a workflow \details{ \code{add_epi_recipe} has the same behaviour as \code{\link[workflows:add_recipe]{workflows::add_recipe()}} but sets a different -default blueprint to automatically handle \link[epiprocess:epi_df]{epiprocess::epi_df} data. +default blueprint to automatically handle \link[epiprocess:as_epi_df]{epiprocess::epi_df} data. } \examples{ library(dplyr) diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index 350352ae9..eb36f0872 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -44,7 +44,7 @@ workflow } \description{ This is an autoregressive classification model for -\link[epiprocess:epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning +\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning that it estimates a class at a particular target horizon. } \examples{ diff --git a/man/arx_forecaster.Rd b/man/arx_forecaster.Rd index af05c0682..2395f5659 100644 --- a/man/arx_forecaster.Rd +++ b/man/arx_forecaster.Rd @@ -37,7 +37,7 @@ workflow } \description{ This is an autoregressive forecasting model for -\link[epiprocess:epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning +\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning that it estimates a model for a particular target horizon. } \examples{ diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index dd6b37dcd..60ec11ea3 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,18 +39,6 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} -\item{.color_by}{Which variables should determine the color(s) used to plot -lines. Options include: -\itemize{ -\item \code{all_keys} - the default uses the interaction of any key variables -including the \code{geo_value} -\item \code{geo_value} - \code{geo_value} only -\item \code{other_keys} - any available keys that are not \code{geo_value} -\item \code{.response} - the numeric variables (same as the y-axis) -\item \code{all} - uses the interaction of all keys and numeric variables -\item \code{none} - no coloring aesthetic is applied -}} - \item{.facet_by}{Similar to \code{.color_by} except that the default is to display the response.} @@ -59,9 +47,6 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} - -\item{.max_facets}{Cut down of the number of facets displayed. Especially -useful for testing when there are many \code{geo_value}'s or keys.} } \description{ For a fit workflow, the training data will be displayed, the response by diff --git a/man/cdc_baseline_forecaster.Rd b/man/cdc_baseline_forecaster.Rd index cd3c4ed67..db7bbc41c 100644 --- a/man/cdc_baseline_forecaster.Rd +++ b/man/cdc_baseline_forecaster.Rd @@ -11,7 +11,7 @@ cdc_baseline_forecaster( ) } \arguments{ -\item{epi_data}{An \code{\link[epiprocess:epi_df]{epiprocess::epi_df}}} +\item{epi_data}{An \code{\link[epiprocess:as_epi_df]{epiprocess::epi_df}}} \item{outcome}{A scalar character for the column name we wish to predict.} @@ -24,7 +24,7 @@ horizons) for each unique combination of \code{key_vars}. } \description{ This is a simple forecasting model for -\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the +\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the forecast for any future date, and produces intervals by shuffling the quantiles of the residuals of such a "flatline" forecast and incrementing these forward over all available training data. diff --git a/man/flatline_forecaster.Rd b/man/flatline_forecaster.Rd index 052dd6428..9c37b4943 100644 --- a/man/flatline_forecaster.Rd +++ b/man/flatline_forecaster.Rd @@ -7,7 +7,7 @@ flatline_forecaster(epi_data, outcome, args_list = flatline_args_list()) } \arguments{ -\item{epi_data}{An \link[epiprocess:epi_df]{epiprocess::epi_df}} +\item{epi_data}{An \link[epiprocess:as_epi_df]{epiprocess::epi_df}} \item{outcome}{A scalar character for the column name we wish to predict.} @@ -20,7 +20,7 @@ ahead (unique horizon) for each unique combination of \code{key_vars}. } \description{ This is a simple forecasting model for -\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the +\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the forcast for any future date, and produces intervals based on the quantiles of the residuals of such a "flatline" forecast over all available training data. diff --git a/man/get_test_data.Rd b/man/get_test_data.Rd index b18685d89..a88dcc4c7 100644 --- a/man/get_test_data.Rd +++ b/man/get_test_data.Rd @@ -37,7 +37,7 @@ keys, as well other variables in the original dataset. } \description{ Based on the longest lag period in the recipe, -\code{get_test_data()} creates an \link[epiprocess:epi_df]{epi_df} +\code{get_test_data()} creates an \link[epiprocess:as_epi_df]{epi_df} with columns \code{geo_value}, \code{time_value} and other variables in the original dataset, which will be used to create features necessary to produce forecasts. diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index 46ba36913..8e7a230f7 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -5,7 +5,7 @@ \alias{grad_employ_subset} \title{Subset of Statistics Canada median employment income for postsecondary graduates} \format{ -An \link[epiprocess:epi_df]{epiprocess::epi_df} with 10193 rows and 8 variables: +An \link[epiprocess:as_epi_df]{epiprocess::epi_df} with 10193 rows and 8 variables: \describe{ \item{geo_value}{The province in Canada associated with each row of measurements.} diff --git a/man/predict-epi_workflow.Rd b/man/predict-epi_workflow.Rd index 130279249..2ecdf0102 100644 --- a/man/predict-epi_workflow.Rd +++ b/man/predict-epi_workflow.Rd @@ -60,7 +60,7 @@ workflow was created and fit. This is accomplished using \code{\link[recipes:bake]{recipes::bake()}} if a recipe was supplied. \item Call \code{\link[parsnip:predict.model_fit]{parsnip::predict.model_fit()}} for you using the underlying fit parsnip model. -\item Ensure that the returned object is an \link[epiprocess:epi_df]{epiprocess::epi_df} where +\item Ensure that the returned object is an \link[epiprocess:as_epi_df]{epiprocess::epi_df} where possible. Specifically, the output will have \code{time_value} and \code{geo_value} columns as well as the prediction. } From 0d7c0011e8697ae02d52143ed69d6359876f7332 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 31 Jul 2024 16:30:09 -0500 Subject: [PATCH 319/382] need to build the doc fix... --- man/autoplot-epipred.Rd | 15 +++++++++++++++ man/epi_slide_wrapper.Rd | 2 +- man/step_epi_slide.Rd | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 60ec11ea3..dd6b37dcd 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -39,6 +39,18 @@ More than 3 levels begins to be difficult to see.} \item{...}{Ignored} +\item{.color_by}{Which variables should determine the color(s) used to plot +lines. Options include: +\itemize{ +\item \code{all_keys} - the default uses the interaction of any key variables +including the \code{geo_value} +\item \code{geo_value} - \code{geo_value} only +\item \code{other_keys} - any available keys that are not \code{geo_value} +\item \code{.response} - the numeric variables (same as the y-axis) +\item \code{all} - uses the interaction of all keys and numeric variables +\item \code{none} - no coloring aesthetic is applied +}} + \item{.facet_by}{Similar to \code{.color_by} except that the default is to display the response.} @@ -47,6 +59,9 @@ color.} \item{.point_pred_color}{If available, point forecasts will be shown with this color.} + +\item{.max_facets}{Cut down of the number of facets displayed. Especially +useful for testing when there are many \code{geo_value}'s or keys.} } \description{ For a fit workflow, the training data will be displayed, the response by diff --git a/man/epi_slide_wrapper.Rd b/man/epi_slide_wrapper.Rd index 4f1ffe285..e1afbf599 100644 --- a/man/epi_slide_wrapper.Rd +++ b/man/epi_slide_wrapper.Rd @@ -18,7 +18,7 @@ epi_slide_wrapper( \arguments{ \item{fns}{vector of functions, even if it's length 1.} -\item{group_keys}{the keys to group by. likely epi_keys\link{-1} (to remove time_value)} +\item{group_keys}{the keys to group by. likely \code{epi_keys[-1]} (to remove time_value)} } \description{ This should simplify somewhat in the future when we can run \code{epi_slide} on diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd index 0e066009d..fb83942ae 100644 --- a/man/step_epi_slide.Rd +++ b/man/step_epi_slide.Rd @@ -95,7 +95,7 @@ jhu <- case_death_rate_subset \%>\% filter(time_value >= as.Date("2021-01-01"), geo_value \%in\% c("ca", "ny")) rec <- epi_recipe(jhu) \%>\% step_epi_slide(case_rate, death_rate, - .f = ~ mean(.x, na.rm = TRUE), + .f = \(x) mean(x, na.rm = TRUE), before = 6L ) bake(prep(rec, jhu), new_data = NULL) From 16f29ca1736fcd32d05bfe314af7a3b737c2dacf Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 10:25:34 -0700 Subject: [PATCH 320/382] typo --- R/flatline_forecaster.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index e14e44a96..dac87e5c4 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -1,8 +1,9 @@ #' Predict the future with today's value #' #' This is a simple forecasting model for -#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It uses the most recent observation as the -#' forcast for any future date, and produces intervals based on the quantiles +#' [epiprocess::epi_df][epiprocess::as_epi_df] data. It uses the most recent +#' observation as the +#' forecast for any future date, and produces intervals based on the quantiles #' of the residuals of such a "flatline" forecast over all available training #' data. #' From 475fcfc609a85fabfa0359e661505f48ac624753 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 10:25:57 -0700 Subject: [PATCH 321/382] add functions for weighted interval score --- NAMESPACE | 5 ++ R/weighted_interval_score.R | 76 ++++++++++++++++++++++++ man/flatline_forecaster.Rd | 5 +- man/weighted_interval_score.Rd | 48 +++++++++++++++ tests/testthat/test-wis-dist-quantiles.R | 50 ++++++++++++++++ 5 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 R/weighted_interval_score.R create mode 100644 man/weighted_interval_score.Rd create mode 100644 tests/testthat/test-wis-dist-quantiles.R diff --git a/NAMESPACE b/NAMESPACE index 941ea1542..261bf7473 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -121,6 +121,10 @@ S3method(tidy,layer) S3method(update,layer) S3method(vec_ptype_abbr,dist_quantiles) S3method(vec_ptype_full,dist_quantiles) +S3method(weighted_interval_score,default) +S3method(weighted_interval_score,dist_default) +S3method(weighted_interval_score,dist_quantiles) +S3method(weighted_interval_score,distribution) export("%>%") export(Add_model) export(Remove_model) @@ -202,6 +206,7 @@ export(update_epi_recipe) export(update_frosting) export(update_model) export(validate_layer) +export(weighted_interval_score) import(distributional) import(epiprocess) import(parsnip) diff --git a/R/weighted_interval_score.R b/R/weighted_interval_score.R new file mode 100644 index 000000000..1c2d22b6e --- /dev/null +++ b/R/weighted_interval_score.R @@ -0,0 +1,76 @@ + +#' Compute weighted interval score +#' +#' Weighted interval score (WIS), a well-known quantile-based +#' approximation of the commonly-used continuous ranked probability score +#' (CRPS). WIS is a proper score, and can be thought of as a distributional +#' generalization of absolute error. For example, see [Bracher et +#' al. (2020)](https://arxiv.org/abs/2005.12881) for discussion in the context +#' of COVID-19 forecasting. +#' +#' @param x dist_quantiles. A vector of class [dist_quantiles()]. +#' @param actual_value double. Actual value(s) +#' +#' @return a vector of nonnegative scores. +#' +#' @export +#' @examples +#' quantile_levels <- c(.2, .4, .6, .8) +#' predq_1 <- 1:4 # +#' predq_2 <- 8:11 +#' dstn <- dist_quantiles(list(predq_1, predq_2), quantile_levels) +#' actual <- c(3.3, 7.1) +#' weighted_interval_score(dstn, actual) +#' +#' # Using some actual forecasts -------- +#' library(dplyr) +#' jhu <- case_death_rate_subset %>% +#' filter(time_value >= "2021-10-01", time_value <= "2021-12-01") +#' preds <- flatline_forecaster( +#' jhu, "death_rate", +#' flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) +#' )$predictions +#' actuals <- case_death_rate_subset %>% +#' filter(time_value == as.Date("2021-12-01") + 7) %>% +#' select(geo_value, time_value, actual = death_rate) +#' preds <- left_join(preds, actuals, +#' by = c("target_date" = "time_value", "geo_value") +#' ) %>% +#' mutate(wis = weighted_interval_score(.pred_distn, actual)) +#' preds +weighted_interval_score <- function(x, actual, ...) { + + UseMethod("weighted_interval_score") +} + +#' @export +weighted_interval_score.default <- function(x, actual, ...) { + cli_abort("Weighted interval score can only be calculated if `x` has class {.cls distribution}.") +} + +#' @export +weighted_interval_score.distribution <- function(x, actual, ...) { + rlang::check_dots_empty() + assert_numeric(actual, finite = TRUE) + l <- vctrs::vec_recycle_common(x = x, actual = actual) + map2_dbl(vctrs::vec_data(l$x), l$actual, weighted_interval_score) +} + +#' @export +weighted_interval_score.dist_default <- function(x, actual) { + cli_warn(c( + "Weighted interval score is only meaningful for {.cls dist_quantiles}.", + "This {.cls distribution} vector contains {.cls {class(x)}}.", + "The result for this element will be `NA`." + )) + return(NA) +} + +#' @export +weighted_interval_score.dist_quantiles <- function(x, actual) { + q <- vctrs::field(x, "values") + if (all(is.na(q))) return(NA) + if (is.na(actual)) return(NA) + tau <- vctrs::field(x, "quantile_levels") + 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = TRUE) +} diff --git a/man/flatline_forecaster.Rd b/man/flatline_forecaster.Rd index 052dd6428..1803f1078 100644 --- a/man/flatline_forecaster.Rd +++ b/man/flatline_forecaster.Rd @@ -20,8 +20,9 @@ ahead (unique horizon) for each unique combination of \code{key_vars}. } \description{ This is a simple forecasting model for -\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the -forcast for any future date, and produces intervals based on the quantiles +\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent +observation as the +forecast for any future date, and produces intervals based on the quantiles of the residuals of such a "flatline" forecast over all available training data. } diff --git a/man/weighted_interval_score.Rd b/man/weighted_interval_score.Rd new file mode 100644 index 000000000..5a4c64ae1 --- /dev/null +++ b/man/weighted_interval_score.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/weighted_interval_score.R +\name{weighted_interval_score} +\alias{weighted_interval_score} +\title{Compute weighted interval score} +\usage{ +weighted_interval_score(x, actual, ...) +} +\arguments{ +\item{x}{dist_quantiles. A vector of class \code{\link[=dist_quantiles]{dist_quantiles()}}.} + +\item{actual_value}{double. Actual value(s)} +} +\value{ +a vector of nonnegative scores. +} +\description{ +Weighted interval score (WIS), a well-known quantile-based +approximation of the commonly-used continuous ranked probability score +(CRPS). WIS is a proper score, and can be thought of as a distributional +generalization of absolute error. For example, see \href{https://arxiv.org/abs/2005.12881}{Bracher et al. (2020)} for discussion in the context +of COVID-19 forecasting. +} +\examples{ +quantile_levels <- c(.2, .4, .6, .8) +predq_1 <- 1:4 # +predq_2 <- 8:11 +dstn <- dist_quantiles(list(predq_1, predq_2), quantile_levels) +actual <- c(3.3, 7.1) +weighted_interval_score(dstn, actual) + +# Using some actual forecasts -------- +library(dplyr) +jhu <- case_death_rate_subset \%>\% + filter(time_value >= "2021-10-01", time_value <= "2021-12-01") +preds <- flatline_forecaster( + jhu, "death_rate", + flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) +)$predictions +actuals <- case_death_rate_subset \%>\% + filter(time_value == as.Date("2021-12-01") + 7) \%>\% + select(geo_value, time_value, actual = death_rate) +preds <- left_join(preds, actuals, + by = c("target_date" = "time_value", "geo_value") +) \%>\% + mutate(wis = weighted_interval_score(.pred_distn, actual)) +preds +} diff --git a/tests/testthat/test-wis-dist-quantiles.R b/tests/testthat/test-wis-dist-quantiles.R new file mode 100644 index 000000000..d8bb98331 --- /dev/null +++ b/tests/testthat/test-wis-dist-quantiles.R @@ -0,0 +1,50 @@ +test_that("wis dispatches and produces the correct values", { + tau <- c(.2, .4, .6, .8) + q1 <- 1:4 + q2 <- 8:11 + wis_one_pred <- function(q, tau, actual) { + 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = TRUE) + } + actual <- 5 + expected <- c(wis_one_pred(q1, tau, actual), wis_one_pred(q2, tau, actual)) + + dstn <- dist_quantiles(list(q1, q2), tau) + expect_equal(weighted_interval_score(dstn, actual), expected) + + # works with a single dstn + q <- sort(10*rexp(23)) + tau0 <- c(.01, .025, 1:19 / 20, .975, .99) + dst <- dist_quantiles(q, tau0) + expect_equal(weighted_interval_score(dst, 10), wis_one_pred(q, tau0, 10)) + + # returns NA when expected + dst <- dist_quantiles(rep(NA, 3), c(.2, .5, .95)) + expect_true(is.na(weighted_interval_score(dst, 10))) + expect_equal( + weighted_interval_score(dstn, c(NA, actual)), + c(NA, wis_one_pred(q2, tau, actual)) + ) + + # non-NA where possible + expect_equal( + weighted_interval_score(dist_quantiles(c(1, 2, NA, 4), 1:4 / 5), 3), + 2 / 3 + ) + + # errors for non distributions + expect_error(weighted_interval_score(1:10, 10)) + expect_warning(w <- weighted_interval_score(dist_normal(1), 10)) + expect_true(all(is.na(w))) + expect_warning(w <- weighted_interval_score( + c(dist_normal(), dist_quantiles(1:5, 1:5/6)), + 10 + )) + expect_equal(w, c(NA, wis_one_pred(1:5, 1:5/6, 10))) + + # errors if sizes don't match + expect_error(weighted_interval_score( + dist_quantiles(list(1:4, 8:11), 1:4 / 5), # length 2 + 1:3 + )) + +}) From 47894fa586a968c5af8e74dbafb84989a8419ba8 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 10:28:05 -0700 Subject: [PATCH 322/382] add to news --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index b7e45e8b5..d90f6e642 100644 --- a/NEWS.md +++ b/NEWS.md @@ -53,3 +53,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values - produce length 0 `dist_quantiles()` +- add functionality to calculate weighted interval scores for `dist_quantiles()` From 97026042448011d0d2bef4b05d64e26cde809041 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 10:29:52 -0700 Subject: [PATCH 323/382] styler --- R/weighted_interval_score.R | 8 ++------ tests/testthat/test-wis-dist-quantiles.R | 7 +++---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/R/weighted_interval_score.R b/R/weighted_interval_score.R index 1c2d22b6e..53abbd52e 100644 --- a/R/weighted_interval_score.R +++ b/R/weighted_interval_score.R @@ -1,4 +1,3 @@ - #' Compute weighted interval score #' #' Weighted interval score (WIS), a well-known quantile-based @@ -27,8 +26,8 @@ #' jhu <- case_death_rate_subset %>% #' filter(time_value >= "2021-10-01", time_value <= "2021-12-01") #' preds <- flatline_forecaster( -#' jhu, "death_rate", -#' flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) +#' jhu, "death_rate", +#' flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) #' )$predictions #' actuals <- case_death_rate_subset %>% #' filter(time_value == as.Date("2021-12-01") + 7) %>% @@ -39,7 +38,6 @@ #' mutate(wis = weighted_interval_score(.pred_distn, actual)) #' preds weighted_interval_score <- function(x, actual, ...) { - UseMethod("weighted_interval_score") } @@ -69,8 +67,6 @@ weighted_interval_score.dist_default <- function(x, actual) { #' @export weighted_interval_score.dist_quantiles <- function(x, actual) { q <- vctrs::field(x, "values") - if (all(is.na(q))) return(NA) - if (is.na(actual)) return(NA) tau <- vctrs::field(x, "quantile_levels") 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = TRUE) } diff --git a/tests/testthat/test-wis-dist-quantiles.R b/tests/testthat/test-wis-dist-quantiles.R index d8bb98331..1821864c1 100644 --- a/tests/testthat/test-wis-dist-quantiles.R +++ b/tests/testthat/test-wis-dist-quantiles.R @@ -12,7 +12,7 @@ test_that("wis dispatches and produces the correct values", { expect_equal(weighted_interval_score(dstn, actual), expected) # works with a single dstn - q <- sort(10*rexp(23)) + q <- sort(10 * rexp(23)) tau0 <- c(.01, .025, 1:19 / 20, .975, .99) dst <- dist_quantiles(q, tau0) expect_equal(weighted_interval_score(dst, 10), wis_one_pred(q, tau0, 10)) @@ -36,15 +36,14 @@ test_that("wis dispatches and produces the correct values", { expect_warning(w <- weighted_interval_score(dist_normal(1), 10)) expect_true(all(is.na(w))) expect_warning(w <- weighted_interval_score( - c(dist_normal(), dist_quantiles(1:5, 1:5/6)), + c(dist_normal(), dist_quantiles(1:5, 1:5 / 6)), 10 )) - expect_equal(w, c(NA, wis_one_pred(1:5, 1:5/6, 10))) + expect_equal(w, c(NA, wis_one_pred(1:5, 1:5 / 6, 10))) # errors if sizes don't match expect_error(weighted_interval_score( dist_quantiles(list(1:4, 8:11), 1:4 / 5), # length 2 1:3 )) - }) From ed60e9cbc4d6c18ab2a365549b341333d28b75d2 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 11:43:20 -0700 Subject: [PATCH 324/382] incorporate suggestions --- R/dist_quantiles.R | 49 +- R/weighted_interval_score.R | 7 +- man/dist_quantiles.Rd | 18 +- man/weighted_interval_score.Rd | 8 +- tests/testthat/_snaps/snapshots.md | 1776 +++++++++++++--------------- 5 files changed, 852 insertions(+), 1006 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 86d34db64..6b6b635d6 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -1,13 +1,19 @@ #' @importFrom vctrs field vec_cast new_rcrd -new_quantiles <- function(values = double(), quantile_levels = double()) { +new_quantiles <- function(values = double(1), quantile_levels = double(1)) { arg_is_probabilities(quantile_levels) vec_cast(values, double()) vec_cast(quantile_levels, double()) - stopifnot(length(values) == length(quantile_levels)) + values <- unname(values) if (length(values) == 0L) { - return(distributional::dist_degenerate(double())) + return(new_rcrd( + list(values = rep(NA_real_, length(quantile_levels)), + quantile_levels = quantile_levels), + class = c("dist_quantiles", "dist_default") + )) } + stopifnot(length(values) == length(quantile_levels)) + stopifnot(!vctrs::vec_duplicate_any(quantile_levels)) if (is.unsorted(quantile_levels)) { o <- vctrs::vec_order(quantile_levels) @@ -40,13 +46,23 @@ format.dist_quantiles <- function(x, digits = 2, ...) { #' A distribution parameterized by a set of quantiles #' -#' @param values A vector of values -#' @param quantile_levels A vector of probabilities corresponding to `values` +#' @param values A vector (or list of vectors) of values. +#' @param quantile_levels A vector (or list of vectors) of probabilities +#' corresponding to `values`. +#' +#' When creating multiple sets of `values`/`quantile_levels` resulting in +#' different distributions, the sizes must match. See the examples below. +#' +#' @return A vector of class `"distribution"`. #' #' @export #' #' @examples -#' dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) +#' dist_quantiles(1:4, 1:4 / 5) +#' dist_quantiles(list(1:3, 1:4), list(1:3 / 4, 1:4 / 5)) +#' dstn <- dist_quantiles(list(1:4, 8:11), c(.2, .4, .6, .8)) +#' dstn +#' #' quantile(dstn, p = c(.1, .25, .5, .9)) #' median(dstn) #' @@ -54,19 +70,26 @@ format.dist_quantiles <- function(x, digits = 2, ...) { #' distributional::parameters(dstn[1]) #' nested_quantiles(dstn[1])[[1]] #' -#' dist_quantiles(1:4, 1:4 / 5) #' @importFrom vctrs as_list_of vec_recycle_common new_vctr dist_quantiles <- function(values, quantile_levels) { - if (!is.list(values)) values <- list(values) - if (!is.list(quantile_levels)) quantile_levels <- list(quantile_levels) + + if (!is.list(quantile_levels)) { + assert_numeric(quantile_levels, lower = 0, upper = 1, any.missing = FALSE, min.len = 1L) + quantile_levels <- list(quantile_levels) + } + if (!is.list(values)) { + if (length(values) == 0L) values = NA_real_ + values <- list(values) + } values <- as_list_of(values, .ptype = double()) quantile_levels <- as_list_of(quantile_levels, .ptype = double()) args <- vec_recycle_common(values = values, quantile_levels = quantile_levels) - if (length(args$values) == 0L) { - return(distributional::dist_degenerate(double())) - } - qntls <- as_list_of(map2(args$values, args$quantile_levels, new_quantiles)) + + qntls <- as_list_of( + map2(args$values, args$quantile_levels, new_quantiles), + .ptype = new_quantiles(NA_real_, 0.5) + ) new_vctr(qntls, class = "distribution") } diff --git a/R/weighted_interval_score.R b/R/weighted_interval_score.R index 53abbd52e..c87fbce71 100644 --- a/R/weighted_interval_score.R +++ b/R/weighted_interval_score.R @@ -8,7 +8,8 @@ #' of COVID-19 forecasting. #' #' @param x dist_quantiles. A vector of class [dist_quantiles()]. -#' @param actual_value double. Actual value(s) +#' @param actual double. Actual value(s) +#' @param ... not used #' #' @return a vector of nonnegative scores. #' @@ -55,7 +56,7 @@ weighted_interval_score.distribution <- function(x, actual, ...) { } #' @export -weighted_interval_score.dist_default <- function(x, actual) { +weighted_interval_score.dist_default <- function(x, actual, ...) { cli_warn(c( "Weighted interval score is only meaningful for {.cls dist_quantiles}.", "This {.cls distribution} vector contains {.cls {class(x)}}.", @@ -65,7 +66,7 @@ weighted_interval_score.dist_default <- function(x, actual) { } #' @export -weighted_interval_score.dist_quantiles <- function(x, actual) { +weighted_interval_score.dist_quantiles <- function(x, actual, ...) { q <- vctrs::field(x, "values") tau <- vctrs::field(x, "quantile_levels") 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = TRUE) diff --git a/man/dist_quantiles.Rd b/man/dist_quantiles.Rd index 57d2f3b3b..1a3226e36 100644 --- a/man/dist_quantiles.Rd +++ b/man/dist_quantiles.Rd @@ -7,15 +7,26 @@ dist_quantiles(values, quantile_levels) } \arguments{ -\item{values}{A vector of values} +\item{values}{A vector (or list of vectors) of values.} -\item{quantile_levels}{A vector of probabilities corresponding to \code{values}} +\item{quantile_levels}{A vector (or list of vectors) of probabilities +corresponding to \code{values}. + +When creating multiple sets of \code{values}/\code{quantile_levels} resulting in +different distributions, the sizes must match. See the examples below.} +} +\value{ +A vector of class \code{"distribution"}. } \description{ A distribution parameterized by a set of quantiles } \examples{ -dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) +dist_quantiles(1:4, 1:4 / 5) +dist_quantiles(list(1:3, 1:4), list(1:3 / 4, 1:4 / 5)) +dstn <- dist_quantiles(list(1:4, 8:11), c(.2, .4, .6, .8)) +dstn + quantile(dstn, p = c(.1, .25, .5, .9)) median(dstn) @@ -23,5 +34,4 @@ median(dstn) distributional::parameters(dstn[1]) nested_quantiles(dstn[1])[[1]] -dist_quantiles(1:4, 1:4 / 5) } diff --git a/man/weighted_interval_score.Rd b/man/weighted_interval_score.Rd index 5a4c64ae1..d77aa61c5 100644 --- a/man/weighted_interval_score.Rd +++ b/man/weighted_interval_score.Rd @@ -9,7 +9,9 @@ weighted_interval_score(x, actual, ...) \arguments{ \item{x}{dist_quantiles. A vector of class \code{\link[=dist_quantiles]{dist_quantiles()}}.} -\item{actual_value}{double. Actual value(s)} +\item{actual}{double. Actual value(s)} + +\item{...}{not used} } \value{ a vector of nonnegative scores. @@ -34,8 +36,8 @@ library(dplyr) jhu <- case_death_rate_subset \%>\% filter(time_value >= "2021-10-01", time_value <= "2021-12-01") preds <- flatline_forecaster( - jhu, "death_rate", - flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) + jhu, "death_rate", + flatline_args_list(quantile_levels = c(.01, .025, 1:19 / 20, .975, .99)) )$predictions actuals <- case_death_rate_subset \%>\% filter(time_value == as.Date("2021-12-01") + 7) \%>\% diff --git a/tests/testthat/_snaps/snapshots.md b/tests/testthat/_snaps/snapshots.md index 079bfa201..84abf57d2 100644 --- a/tests/testthat/_snaps/snapshots.md +++ b/tests/testthat/_snaps/snapshots.md @@ -2,21 +2,21 @@ structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, - 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, - "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + 0.1975426), .pred_distn = structure(list(structure(list(values = c(0, + 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, - "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0, 0.31206391), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.10325949, 0.52098931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + values = c(0.21298119, 0.63071101), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, - "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.52311949, 0.94084931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + values = c(0, 0.40640751), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18999, 18999, @@ -27,20 +27,20 @@ structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, - 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0.084583345, - "95%" = 0.194105055), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + 0.1975426), .pred_distn = structure(list(structure(list(values = c(0.084583345, + 0.194105055), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.048438145, "95%" = 0.157959855), quantile_levels = c(0.05, + values = c(0.048438145, 0.157959855), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.257363545, - "95%" = 0.366885255), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.257363545, 0.366885255 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.367085245, "95%" = 0.476606955), quantile_levels = c(0.05, + values = c(0.367085245, 0.476606955), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.677223545, - "95%" = 0.786745255), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.677223545, 0.786745255 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.142781745, "95%" = 0.252303455), quantile_levels = c(0.05, + values = c(0.142781745, 0.252303455), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, @@ -52,21 +52,21 @@ structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, - 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, - "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + 0.1975426), .pred_distn = structure(list(structure(list(values = c(0, + 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, - "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0, 0.31206391), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.10325949, 0.52098931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + values = c(0.21298119, 0.63071101), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, - "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.52311949, 0.94084931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + values = c(0, 0.40640751), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18999, 18999, @@ -77,21 +77,21 @@ structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" ), .pred = c(0.1393442, 0.103199, 0.3121244, 0.4218461, 0.7319844, - 0.1975426), .pred_distn = structure(list(structure(list(values = c("5%" = 0, - "95%" = 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + 0.1975426), .pred_distn = structure(list(structure(list(values = c(0, + 0.34820911), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.31206391), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.10325949, - "95%" = 0.52098931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0, 0.31206391), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.10325949, 0.52098931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.21298119, "95%" = 0.63071101), quantile_levels = c(0.05, + values = c(0.21298119, 0.63071101), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("5%" = 0.52311949, - "95%" = 0.94084931), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.52311949, 0.94084931 + ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0, "95%" = 0.40640751), quantile_levels = c(0.05, - 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + values = c(0, 0.40640751), quantile_levels = c(0.05, 0.95 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18993, 18993, @@ -111,334 +111,268 @@ 0.1975426, 0.1975426), ahead = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .pred_distn = structure(list(structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.05519342, - "15%" = 0.082372705, "20%" = 0.0936219, "25%" = 0.1048711, - "30%" = 0.1157573, "35%" = 0.12317806, "40%" = 0.1302723, - "45%" = 0.1353526, "50%" = 0.1393442, "55%" = 0.1433358, - "60%" = 0.1484161, "65%" = 0.15551034, "70%" = 0.1629311, - "75%" = 0.1738173, "80%" = 0.1850665, "85%" = 0.196315695, - "90%" = 0.22349498, "95%" = 0.309768685, "97.5%" = 0.3567520625, - "99%" = 0.439580229), quantile_levels = c(0.01, 0.025, 0.05, - 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, - 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0335550493877939, - "20%" = 0.0604073208819088, "25%" = 0.0796881899581496, "30%" = 0.0945180888333883, - "35%" = 0.107218788833388, "40%" = 0.118830788833388, "45%" = 0.129717088833388, - "50%" = 0.1393442, "55%" = 0.148949488833388, "60%" = 0.159110072060821, - "65%" = 0.171080110623306, "70%" = 0.184009705322953, "75%" = 0.19866346102411, - "80%" = 0.218798896615666, "85%" = 0.250961850618106, "90%" = 0.300471354816148, - "95%" = 0.368582781136862, "97.5%" = 0.43909595699107, "99%" = 0.520101234797705 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0310685196688967, "25%" = 0.0565901050435504, "30%" = 0.0768417663716637, - "35%" = 0.0947104815343153, "40%" = 0.110553706525765, "45%" = 0.125192081534315, - "50%" = 0.1393442, "55%" = 0.153133424194392, "60%" = 0.167807181271713, - "65%" = 0.183769310145952, "70%" = 0.202099979390294, "75%" = 0.224139947221972, - "80%" = 0.252840918770688, "85%" = 0.291417895572206, "90%" = 0.341073550318203, - "95%" = 0.420604597710477, "97.5%" = 0.494523225410904, "99%" = 0.573647294116801 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.00623643594225938, "25%" = 0.0360877950479505, - "30%" = 0.0604332430739307, "35%" = 0.0824028153516535, "40%" = 0.102509343235732, - "45%" = 0.121439405653606, "50%" = 0.1393442, "55%" = 0.15780837904264, - "60%" = 0.176333479766098, "65%" = 0.1971089199637, "70%" = 0.219859545844459, - "75%" = 0.246500872561225, "80%" = 0.279163385675357, "85%" = 0.320379296602716, - "90%" = 0.374497727839579, "95%" = 0.458894379633346, "97.5%" = 0.535545067037845, - "99%" = 0.628776504364044), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0.0192048017017668, "30%" = 0.0478501821296211, - "35%" = 0.0723167026720766, "40%" = 0.0958385084225842, "45%" = 0.11812331897399, - "50%" = 0.1393442, "55%" = 0.161074539705197, "60%" = 0.184026763327133, - "65%" = 0.207844848454635, "70%" = 0.23407004803228, "75%" = 0.265166265836908, - "80%" = 0.302137478236883, "85%" = 0.346008752873429, "90%" = 0.403205598400084, - "95%" = 0.495260096430714, "97.5%" = 0.574198142463125, "99%" = 0.672941852619816 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.016465765, - "20%" = 0.03549514, "25%" = 0.05225675, "30%" = 0.0644172, - "35%" = 0.0749343000000001, "40%" = 0.0847941, "45%" = 0.0966258, - "50%" = 0.103199, "55%" = 0.1097722, "60%" = 0.1216039, "65%" = 0.1314637, - "70%" = 0.1419808, "75%" = 0.15414125, "80%" = 0.17090286, - "85%" = 0.189932235, "90%" = 0.22848398, "95%" = 0.30542311, - "97.5%" = 0.40216399, "99%" = 0.512353658), quantile_levels = c(0.01, + values = c(0, 0, 0, 0.05519342, 0.082372705, 0.0936219, 0.1048711, + 0.1157573, 0.12317806, 0.1302723, 0.1353526, 0.1393442, 0.1433358, + 0.1484161, 0.15551034, 0.1629311, 0.1738173, 0.1850665, 0.196315695, + 0.22349498, 0.309768685, 0.3567520625, 0.439580229), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.00331296053340532, - "25%" = 0.0234804643776438, "30%" = 0.0414109089650896, "35%" = 0.0579040140087902, - "40%" = 0.0738391473860739, "45%" = 0.0882882738549385, "50%" = 0.103199, - "55%" = 0.118522737211872, "60%" = 0.134217143129031, "65%" = 0.15174910202592, - "70%" = 0.17076597900759, "75%" = 0.192368859892349, "80%" = 0.218887, - "85%" = 0.254338497855279, "90%" = 0.307871753369934, "95%" = 0.407530532639726, - "97.5%" = 0.506824682189646, "99%" = 0.607973477267732), quantile_levels = c(0.01, + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0335550493877939, + 0.0604073208819088, 0.0796881899581496, 0.0945180888333883, 0.107218788833388, + 0.118830788833388, 0.129717088833388, 0.1393442, 0.148949488833388, + 0.159110072060821, 0.171080110623306, 0.184009705322953, 0.19866346102411, + 0.218798896615666, 0.250961850618106, 0.300471354816148, 0.368582781136862, + 0.43909595699107, 0.520101234797705), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, "30%" = 0.0185864520320203, - "35%" = 0.0411215858914089, "40%" = 0.062281046686267, "45%" = 0.0828222124563246, - "50%" = 0.103199, "55%" = 0.123575888447284, "60%" = 0.144785989158292, - "65%" = 0.167277039342293, "70%" = 0.192536265178252, "75%" = 0.221677797769728, - "80%" = 0.256887836856768, "85%" = 0.302366681512415, "90%" = 0.3669383199518, - "95%" = 0.476508917333523, "97.5%" = 0.574293059865274, "99%" = 0.69194511433946 + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.0310685196688967, + 0.0565901050435504, 0.0768417663716637, 0.0947104815343153, 0.110553706525765, + 0.125192081534315, 0.1393442, 0.153133424194392, 0.167807181271713, + 0.183769310145952, 0.202099979390294, 0.224139947221972, 0.252840918770688, + 0.291417895572206, 0.341073550318203, 0.420604597710477, 0.494523225410904, + 0.573647294116801), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0, 0, 0.00623643594225938, 0.0360877950479505, + 0.0604332430739307, 0.0824028153516535, 0.102509343235732, + 0.121439405653606, 0.1393442, 0.15780837904264, 0.176333479766098, + 0.1971089199637, 0.219859545844459, 0.246500872561225, 0.279163385675357, + 0.320379296602716, 0.374497727839579, 0.458894379633346, + 0.535545067037845, 0.628776504364044), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0, 0.0192048017017668, + 0.0478501821296211, 0.0723167026720766, 0.0958385084225842, 0.11812331897399, + 0.1393442, 0.161074539705197, 0.184026763327133, 0.207844848454635, + 0.23407004803228, 0.265166265836908, 0.302137478236883, 0.346008752873429, + 0.403205598400084, 0.495260096430714, 0.574198142463125, 0.672941852619816 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, - "30%" = 0, "35%" = 0.0271019287070871, "40%" = 0.0535555494987951, - "45%" = 0.0785514374097741, "50%" = 0.103199, "55%" = 0.128043832742677, - "60%" = 0.154157375592856, "65%" = 0.181874602598776, "70%" = 0.212708648669987, - "75%" = 0.247608381738568, "80%" = 0.289082621291513, "85%" = 0.342486159511745, - "90%" = 0.41300665395314, "95%" = 0.52870334697862, "97.5%" = 0.634316186092986, - "99%" = 0.767614547228429), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0, "30%" = 0, "35%" = 0.0118725894981448, - "40%" = 0.0439446210512103, "45%" = 0.0736366703227029, "50%" = 0.103199, - "55%" = 0.133138617710077, "60%" = 0.16357656105121, "65%" = 0.19575459701827, - "70%" = 0.230475760859608, "75%" = 0.269323345322203, "80%" = 0.314976554734947, - "85%" = 0.373424338576786, "90%" = 0.452807955824158, "95%" = 0.578141866759416, - "97.5%" = 0.690542571738594, "99%" = 0.837295153768033), - quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, - 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0813658, "10%" = 0.14899276, - "15%" = 0.1960782, "20%" = 0.22542314, "25%" = 0.2414296, - "30%" = 0.25890318, "35%" = 0.2747762, "40%" = 0.2881148, - "45%" = 0.3027873, "50%" = 0.3121244, "55%" = 0.3214615, - "60%" = 0.336134, "65%" = 0.3494726, "70%" = 0.36534562, - "75%" = 0.3828192, "80%" = 0.39882566, "85%" = 0.4281706, - "90%" = 0.47525604, "95%" = 0.542883, "97.5%" = 0.682805397499999, - "99%" = 0.798878314999999), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0706949, - "15%" = 0.1267172, "20%" = 0.1667331, "25%" = 0.198582473624236, - "30%" = 0.225423180397104, "35%" = 0.2494327, "40%" = 0.2707747, - "45%" = 0.292116312116921, "50%" = 0.3121244, "55%" = 0.3321324, - "60%" = 0.353072222341423, "65%" = 0.375089999249792, "70%" = 0.3988256, - "75%" = 0.425831930221552, "80%" = 0.459232792604326, "85%" = 0.501467782274773, - "90%" = 0.562188443556836, "95%" = 0.685648485782108, "97.5%" = 0.80647163752115, - "99%" = 0.939224788489265), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0704696868359684, - "20%" = 0.121407167925079, "25%" = 0.161930580284053, "30%" = 0.197682797539976, - "35%" = 0.228361656891269, "40%" = 0.257706650923509, "45%" = 0.285717780926109, - "50%" = 0.3121244, "55%" = 0.338115598498035, "60%" = 0.365749693067931, - "65%" = 0.395921877240673, "70%" = 0.427437934626446, "75%" = 0.462388578749537, - "80%" = 0.504066064225642, "85%" = 0.558443518811788, "90%" = 0.636013559040791, - "95%" = 0.771225883005179, "97.5%" = 0.89210797204162, "99%" = 1.02314875759509 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0247190015881658, - "20%" = 0.0834693973257732, "25%" = 0.131490031120311, "30%" = 0.173258318827988, - "35%" = 0.211213742349423, "40%" = 0.246202447408474, "45%" = 0.279926744217642, - "50%" = 0.3121244, "55%" = 0.344908347408474, "60%" = 0.378255200773608, - "65%" = 0.412935547408474, "70%" = 0.45191576510605, "75%" = 0.494757615230152, - "80%" = 0.545060918490786, "85%" = 0.609312182129471, "90%" = 0.69704881099591, - "95%" = 0.838550239412991, "97.5%" = 0.962653262246773, "99%" = 1.11351403170759 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0501392705767058, "25%" = 0.104248897713977, "30%" = 0.151994400390804, - "35%" = 0.195087767727627, "40%" = 0.235544124698047, "45%" = 0.274058107118071, - "50%" = 0.3121244, "55%" = 0.350571341810268, "60%" = 0.390274666572666, - "65%" = 0.43048632300908, "70%" = 0.474320393891039, "75%" = 0.523839613390634, - "80%" = 0.581010268149082, "85%" = 0.652137495469405, "90%" = 0.748428674762348, - "95%" = 0.898563270096551, "97.5%" = 1.03273295410124, "99%" = 1.19211145220822 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.2148017, "10%" = 0.31250597, - "15%" = 0.350183905, "20%" = 0.3745639, "25%" = 0.3884161, - "30%" = 0.39746621, "35%" = 0.404854, "40%" = 0.4115031, - "45%" = 0.417413315, "50%" = 0.4218461, "55%" = 0.426278885, - "60%" = 0.4321891, "65%" = 0.4388382, "70%" = 0.44622599, - "75%" = 0.4552761, "80%" = 0.4691283, "85%" = 0.493508295, - "90%" = 0.53118623, "95%" = 0.628890499999999, "97.5%" = 1.22043540499999, - "99%" = 1.95905017899999), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.212369462232823, - "15%" = 0.289571577546325, "20%" = 0.324446887783878, "25%" = 0.351262144469445, - "30%" = 0.37087, "35%" = 0.3863844, "40%" = 0.399682509835098, - "45%" = 0.411036898891089, "50%" = 0.4218461, "55%" = 0.432927818676137, - "60%" = 0.444338520819208, "65%" = 0.4573077, "70%" = 0.4728222, - "75%" = 0.492817749438994, "80%" = 0.519442857224172, "85%" = 0.556165331447064, - "90%" = 0.635946057886079, "95%" = 1.18402232252562, "97.5%" = 1.7827032389242, - "99%" = 2.5561261649726), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0413098183761837, - "15%" = 0.216633655848608, "20%" = 0.28006329699657, "25%" = 0.3175577049983, - "30%" = 0.345923291761818, "35%" = 0.368957399144641, "40%" = 0.38804556403724, - "45%" = 0.405400893204282, "50%" = 0.4218461, "55%" = 0.43864616004845, - "60%" = 0.456105937661177, "65%" = 0.475585378227632, "70%" = 0.499018124730147, - "75%" = 0.5270891900114, "80%" = 0.564293444378844, "85%" = 0.630730263388634, - "90%" = 0.898212235100651, "95%" = 1.53976520159876, "97.5%" = 2.08228809477582, - "99%" = 2.80588762256078), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.114729892920429, - "20%" = 0.227785958288583, "25%" = 0.282278878729037, "30%" = 0.320407599201492, - "35%" = 0.350577823459785, "40%" = 0.376652303049231, "45%" = 0.39981364198757, - "50%" = 0.4218461, "55%" = 0.444009706175862, "60%" = 0.466962725214852, - "65%" = 0.493098379685547, "70%" = 0.523708407392674, "75%" = 0.562100740111401, - "80%" = 0.619050517814778, "85%" = 0.754868363055733, "90%" = 1.1177263295869, - "95%" = 1.76277018354499, "97.5%" = 2.37278671910076, "99%" = 2.9651652434047 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0100954501382014, - "20%" = 0.165091099860099, "25%" = 0.244964334392844, "30%" = 0.294577054174442, - "35%" = 0.333357739419644, "40%" = 0.365251480804308, "45%" = 0.394198909379894, - "50%" = 0.4218461, "55%" = 0.449607812233022, "60%" = 0.479120513116631, - "65%" = 0.511271131674317, "70%" = 0.5506402899964, "75%" = 0.60295411796593, - "80%" = 0.690751300611906, "85%" = 0.913578722060166, "90%" = 1.30856988553206, - "95%" = 1.94020220543606, "97.5%" = 2.57104934168037, "99%" = 3.07139639379724 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0, 0.016465765, 0.03549514, 0.05225675, 0.0644172, 0.0749343, + 0.0847941, 0.0966258, 0.103199, 0.1097722, 0.1216039, 0.1314637, + 0.1419808, 0.15414125, 0.17090286, 0.189932235, 0.22848398, 0.30542311, + 0.40216399, 0.512353658), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.303454977, "2.5%" = 0.3982330425, "5%" = 0.46791125, - "10%" = 0.57642367, "15%" = 0.631462275, "20%" = 0.6694025, - "25%" = 0.685048, "30%" = 0.69857015, "35%" = 0.7085162, - "40%" = 0.71633898, "45%" = 0.7252792, "50%" = 0.7319844, - "55%" = 0.7386896, "60%" = 0.74762982, "65%" = 0.7554526, - "70%" = 0.76539865, "75%" = 0.7789208, "80%" = 0.7945663, - "85%" = 0.832506525, "90%" = 0.88754513, "95%" = 0.99605755, - "97.5%" = 1.0657357575, "99%" = 1.160513823), quantile_levels = c(0.01, + values = c(0, 0, 0, 0, 0, 0.00331296053340532, 0.0234804643776438, + 0.0414109089650896, 0.0579040140087902, 0.0738391473860739, + 0.0882882738549385, 0.103199, 0.118522737211872, 0.134217143129031, + 0.15174910202592, 0.17076597900759, 0.192368859892349, 0.218887, + 0.254338497855279, 0.307871753369934, 0.407530532639726, + 0.506824682189646, 0.607973477267732), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0.188727136659627, - "2.5%" = 0.292714653217782, "5%" = 0.380882595473705, "10%" = 0.476427609604196, - "15%" = 0.5464739, "20%" = 0.6001155, "25%" = 0.636506664263643, - "30%" = 0.6638148, "35%" = 0.684726301742618, "40%" = 0.701811, - "45%" = 0.7174565, "50%" = 0.7319844, "55%" = 0.7465124, "60%" = 0.7621578, - "65%" = 0.779322149415794, "70%" = 0.800154, "75%" = 0.826981204292293, - "80%" = 0.8649709, "85%" = 0.918345662372574, "90%" = 0.987315641681917, - "95%" = 1.08210087899389, "97.5%" = 1.17564510102166, "99%" = 1.27428433325155 + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0, 0, + 0.0185864520320203, 0.0411215858914089, 0.062281046686267, 0.0828222124563246, + 0.103199, 0.123575888447284, 0.144785989158292, 0.167277039342293, + 0.192536265178252, 0.221677797769728, 0.256887836856768, 0.302366681512415, + 0.3669383199518, 0.476508917333523, 0.574293059865274, 0.69194511433946 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0.0928040444059739, - "2.5%" = 0.212569233904214, "5%" = 0.310718449102641, "10%" = 0.418013562853928, - "15%" = 0.489917936424114, "20%" = 0.546885925424654, "25%" = 0.593410228218282, - "30%" = 0.631406259421094, "35%" = 0.661579628218282, "40%" = 0.687282906872069, - "45%" = 0.710456666258662, "50%" = 0.7319844, "55%" = 0.754131389282943, - "60%" = 0.776685628218282, "65%" = 0.802388976168662, "70%" = 0.832758896293562, - "75%" = 0.869440928218282, "80%" = 0.916359694097141, "85%" = 0.97403912794778, - "90%" = 1.04529048496565, "95%" = 1.15710382277548, "97.5%" = 1.25675656404419, - "99%" = 1.37098330871205), quantile_levels = c(0.01, 0.025, 0.05, - 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0, 0, 0, 0, 0, 0.0271019287070871, 0.0535555494987951, 0.0785514374097741, + 0.103199, 0.128043832742677, 0.154157375592856, 0.181874602598776, + 0.212708648669987, 0.247608381738568, 0.289082621291513, 0.342486159511745, + 0.41300665395314, 0.52870334697862, 0.634316186092986, 0.767614547228429 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0, 0, 0, 0, 0, 0.0118725894981448, 0.0439446210512103, 0.0736366703227029, + 0.103199, 0.133138617710077, 0.16357656105121, 0.19575459701827, + 0.230475760859608, 0.269323345322203, 0.314976554734947, 0.373424338576786, + 0.452807955824158, 0.578141866759416, 0.690542571738594, 0.837295153768033 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0.0813658, 0.14899276, 0.1960782, 0.22542314, 0.2414296, 0.25890318, + 0.2747762, 0.2881148, 0.3027873, 0.3121244, 0.3214615, 0.336134, + 0.3494726, 0.36534562, 0.3828192, 0.39882566, 0.4281706, 0.47525604, + 0.542883, 0.682805397499999, 0.798878314999999), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0.0706949, + 0.1267172, 0.1667331, 0.198582473624236, 0.225423180397104, 0.2494327, + 0.2707747, 0.292116312116921, 0.3121244, 0.3321324, 0.353072222341423, + 0.375089999249792, 0.3988256, 0.425831930221552, 0.459232792604326, + 0.501467782274773, 0.562188443556836, 0.685648485782108, 0.80647163752115, + 0.939224788489265), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.0108404989744699, "2.5%" = 0.144337973117581, - "5%" = 0.250292371898569, "10%" = 0.367310419323293, "15%" = 0.44444044802193, - "20%" = 0.506592035751958, "25%" = 0.558428768125431, "30%" = 0.602035095628756, - "35%" = 0.64112383905529, "40%" = 0.674354964141041, "45%" = 0.703707875219752, - "50%" = 0.7319844, "55%" = 0.760702196782168, "60%" = 0.789758264058441, - "65%" = 0.823427572594726, "70%" = 0.860294897090771, "75%" = 0.904032120658957, - "80%" = 0.955736581115011, "85%" = 1.0165945004053, "90%" = 1.09529786576616, - "95%" = 1.21614421175967, "97.5%" = 1.32331604019295, "99%" = 1.45293812780298 + values = c(0, 0, 0, 0, 0.0704696868359684, 0.121407167925079, + 0.161930580284053, 0.197682797539976, 0.228361656891269, + 0.257706650923509, 0.285717780926109, 0.3121244, 0.338115598498035, + 0.365749693067931, 0.395921877240673, 0.427437934626446, + 0.462388578749537, 0.504066064225642, 0.558443518811788, + 0.636013559040791, 0.771225883005179, 0.89210797204162, 1.02314875759509 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0.0783919019408445, "5%" = 0.19440762901709, - "10%" = 0.323264916745368, "15%" = 0.407999619319143, "20%" = 0.474764568463685, - "25%" = 0.530890671381964, "30%" = 0.580852443909739, "35%" = 0.623441748828038, - "40%" = 0.661393469870099, "45%" = 0.69827126098506, "50%" = 0.7319844, - "55%" = 0.766440770218252, "60%" = 0.802260162496625, "65%" = 0.840536805657307, - "70%" = 0.883133954556946, "75%" = 0.931565607767828, "80%" = 0.98815401699637, - "85%" = 1.05406790404239, "90%" = 1.138596250043, "95%" = 1.27030064370239, - "97.5%" = 1.39007785503355, "99%" = 1.5343628053761), quantile_levels = c(0.01, + values = c(0, 0, 0, 0, 0.0247190015881658, 0.0834693973257732, + 0.131490031120311, 0.173258318827988, 0.211213742349423, + 0.246202447408474, 0.279926744217642, 0.3121244, 0.344908347408474, + 0.378255200773608, 0.412935547408474, 0.45191576510605, 0.494757615230152, + 0.545060918490786, 0.609312182129471, 0.69704881099591, 0.838550239412991, + 0.962653262246773, 1.11351403170759), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.0501392705767058, + 0.104248897713977, 0.151994400390804, 0.195087767727627, 0.235544124698047, + 0.274058107118071, 0.3121244, 0.350571341810268, 0.390274666572666, + 0.43048632300908, 0.474320393891039, 0.523839613390634, 0.581010268149082, + 0.652137495469405, 0.748428674762348, 0.898563270096551, 1.03273295410124, + 1.19211145220822), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0.2148017, 0.31250597, 0.350183905, 0.3745639, + 0.3884161, 0.39746621, 0.404854, 0.4115031, 0.417413315, + 0.4218461, 0.426278885, 0.4321891, 0.4388382, 0.44622599, + 0.4552761, 0.4691283, 0.493508295, 0.53118623, 0.628890499999999, + 1.22043540499999, 1.95905017899999), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0.212369462232823, + 0.289571577546325, 0.324446887783878, 0.351262144469445, 0.37087, + 0.3863844, 0.399682509835098, 0.411036898891089, 0.4218461, 0.432927818676137, + 0.444338520819208, 0.4573077, 0.4728222, 0.492817749438994, 0.519442857224172, + 0.556165331447064, 0.635946057886079, 1.18402232252562, 1.7827032389242, + 2.5561261649726), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0.0413098183761837, 0.216633655848608, + 0.28006329699657, 0.3175577049983, 0.345923291761818, 0.368957399144641, + 0.38804556403724, 0.405400893204282, 0.4218461, 0.43864616004845, + 0.456105937661177, 0.475585378227632, 0.499018124730147, + 0.5270891900114, 0.564293444378844, 0.630730263388634, 0.898212235100651, + 1.53976520159876, 2.08228809477582, 2.80588762256078), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0.012845105, "10%" = 0.07040502, "15%" = 0.09495188, "20%" = 0.12669976, - "25%" = 0.1502248, "30%" = 0.1659163, "35%" = 0.1761341, "40%" = 0.18586528, - "45%" = 0.191290375, "50%" = 0.1975426, "55%" = 0.203794825, - "60%" = 0.20921992, "65%" = 0.2189511, "70%" = 0.2291689, "75%" = 0.2448604, - "80%" = 0.26838544, "85%" = 0.30013332, "90%" = 0.32468018, "95%" = 0.382240095, - "97.5%" = 0.5020427625, "99%" = 0.590302013999998), quantile_levels = c(0.01, + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.114729892920429, + 0.227785958288583, 0.282278878729037, 0.320407599201492, 0.350577823459785, + 0.37665230304923, 0.39981364198757, 0.4218461, 0.444009706175862, + 0.466962725214852, 0.493098379685547, 0.523708407392674, 0.562100740111401, + 0.619050517814778, 0.754868363055733, 1.1177263295869, 1.76277018354499, + 2.37278671910076, 2.9651652434047), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0.0133856545472455, "15%" = 0.0528330564916649, - "20%" = 0.0825071163605637, "25%" = 0.107217748074731, "30%" = 0.130397558147181, - "35%" = 0.151367721571716, "40%" = 0.1688357, "45%" = 0.183736649076791, - "50%" = 0.1975426, "55%" = 0.2111662, "60%" = 0.226622576069161, - "65%" = 0.244738709634746, "70%" = 0.265660771838618, "75%" = 0.289502, - "80%" = 0.3157762, "85%" = 0.347933515877459, "90%" = 0.395446576674467, - "95%" = 0.494033943284933, "97.5%" = 0.586036939413118, "99%" = 0.696507800090321 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0119984314577645, - "20%" = 0.0497573816250162, "25%" = 0.081255049503995, "30%" = 0.108502307388674, - "35%" = 0.132961558931189, "40%" = 0.156011650575706, "45%" = 0.177125892134071, - "50%" = 0.1975426, "55%" = 0.217737120618906, "60%" = 0.239458499211792, - "65%" = 0.263562581820818, "70%" = 0.289525383565136, "75%" = 0.31824420000725, - "80%" = 0.351413051940519, "85%" = 0.393862560773808, "90%" = 0.453538799225292, - "95%" = 0.558631806850418, "97.5%" = 0.657452391363313, "99%" = 0.767918764883928 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0189057930465303, - "25%" = 0.0558619823820737, "30%" = 0.0885055048481483, "35%" = 0.117823094349893, - "40%" = 0.145878789120691, "45%" = 0.171852417645726, "50%" = 0.1975426, - "55%" = 0.222526993865839, "60%" = 0.249029206661066, "65%" = 0.27731797305948, - "70%" = 0.306704680469104, "75%" = 0.340659034209842, "80%" = 0.379550761828618, - "85%" = 0.429562304567396, "90%" = 0.499209921951019, "95%" = 0.612206099576094, - "97.5%" = 0.713714149138691, "99%" = 0.835600324727346), quantile_levels = c(0.01, + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0100954501382014, + 0.165091099860099, 0.244964334392844, 0.294577054174442, 0.333357739419644, + 0.365251480804308, 0.394198909379894, 0.4218461, 0.449607812233022, + 0.479120513116631, 0.511271131674317, 0.5506402899964, 0.60295411796593, + 0.690751300611906, 0.913578722060166, 1.30856988553206, 1.94020220543606, + 2.57104934168037, 3.07139639379724), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0.0331956220262204, - "30%" = 0.0710455499705998, "35%" = 0.105140687231072, "40%" = 0.136976315413355, - "45%" = 0.167518817907279, "50%" = 0.1975426, "55%" = 0.226974062486675, - "60%" = 0.257640196272163, "65%" = 0.289459502055271, "70%" = 0.323342029611596, - "75%" = 0.361500312536625, "80%" = 0.407123841331413, "85%" = 0.46286764504675, - "90%" = 0.538379175655057, "95%" = 0.659249503348734, "97.5%" = 0.768470658367656, - "99%" = 0.898774707571334), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0.303454977, 0.3982330425, + 0.46791125, 0.57642367, 0.631462275, 0.6694025, 0.685048, 0.69857015, + 0.7085162, 0.71633898, 0.7252792, 0.7319844, 0.7386896, 0.74762982, + 0.7554526, 0.76539865, 0.7789208, 0.7945663, 0.832506525, 0.88754513, + 0.99605755, 1.0657357575, 1.160513823), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.188727136659627, + 0.292714653217782, 0.380882595473705, 0.476427609604196, 0.5464739, + 0.6001155, 0.636506664263643, 0.6638148, 0.684726301742618, 0.701811, + 0.7174565, 0.7319844, 0.7465124, 0.7621578, 0.779322149415794, + 0.800154, 0.826981204292293, 0.8649709, 0.918345662372574, 0.987315641681917, + 1.08210087899389, 1.17564510102166, 1.27428433325155), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.0928040444059739, + 0.212569233904214, 0.310718449102641, 0.418013562853928, 0.489917936424114, + 0.546885925424654, 0.593410228218282, 0.631406259421094, 0.661579628218282, + 0.687282906872069, 0.710456666258662, 0.7319844, 0.754131389282943, + 0.776685628218282, 0.802388976168662, 0.832758896293562, 0.869440928218282, + 0.916359694097141, 0.97403912794778, 1.04529048496565, 1.15710382277548, + 1.25675656404419, 1.37098330871205), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.0108404989744699, + 0.144337973117581, 0.250292371898569, 0.367310419323293, 0.44444044802193, + 0.506592035751958, 0.558428768125431, 0.602035095628756, 0.64112383905529, + 0.674354964141041, 0.703707875219752, 0.7319844, 0.760702196782168, + 0.78975826405844, 0.823427572594726, 0.860294897090771, 0.904032120658957, + 0.955736581115011, 1.0165945004053, 1.09529786576616, 1.21614421175967, + 1.32331604019295, 1.45293812780298), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0.0783919019408445, + 0.19440762901709, 0.323264916745368, 0.407999619319143, 0.474764568463685, + 0.530890671381964, 0.580852443909739, 0.623441748828038, 0.661393469870099, + 0.69827126098506, 0.7319844, 0.766440770218252, 0.802260162496625, + 0.840536805657307, 0.883133954556946, 0.931565607767828, 0.98815401699637, + 1.05406790404239, 1.138596250043, 1.27030064370239, 1.39007785503355, + 1.5343628053761), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0.012845105, 0.07040502, 0.09495188, 0.12669976, + 0.1502248, 0.1659163, 0.1761341, 0.18586528, 0.191290375, + 0.1975426, 0.203794825, 0.20921992, 0.2189511, 0.2291689, + 0.2448604, 0.26838544, 0.30013332, 0.32468018, 0.382240095, + 0.5020427625, 0.590302013999998), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0.0133856545472455, + 0.0528330564916649, 0.0825071163605637, 0.107217748074731, 0.130397558147181, + 0.151367721571716, 0.1688357, 0.183736649076791, 0.1975426, 0.2111662, + 0.226622576069161, 0.244738709634746, 0.265660771838618, 0.289502, + 0.3157762, 0.347933515877459, 0.395446576674467, 0.494033943284933, + 0.586036939413118, 0.696507800090321), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0119984314577645, + 0.0497573816250162, 0.081255049503995, 0.108502307388674, 0.132961558931189, + 0.156011650575706, 0.177125892134071, 0.1975426, 0.217737120618906, + 0.239458499211792, 0.263562581820818, 0.289525383565136, 0.31824420000725, + 0.35141305194052, 0.393862560773808, 0.453538799225292, 0.558631806850418, + 0.657452391363313, 0.767918764883928), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.0189057930465303, + 0.0558619823820737, 0.0885055048481483, 0.117823094349893, 0.145878789120691, + 0.171852417645726, 0.1975426, 0.222526993865839, 0.249029206661066, + 0.27731797305948, 0.306704680469104, 0.340659034209842, 0.379550761828618, + 0.429562304567396, 0.499209921951019, 0.612206099576094, 0.713714149138691, + 0.835600324727346), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0, 0, 0, 0.0331956220262204, 0.0710455499705998, + 0.105140687231072, 0.136976315413355, 0.167518817907279, + 0.1975426, 0.226974062486675, 0.257640196272163, 0.289459502055271, + 0.323342029611596, 0.361500312536625, 0.407123841331413, + 0.46286764504675, 0.538379175655057, 0.659249503348734, 0.768470658367656, + 0.898774707571334), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, @@ -464,336 +398,280 @@ 0.1975426, 0.1975426), ahead = c(2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L), .pred_distn = structure(list(structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0344362435566855, - "20%" = 0.0610170086495865, "25%" = 0.0798865084778347, "30%" = 0.0944014546310463, - "35%" = 0.107339121226462, "40%" = 0.11899734099851, "45%" = 0.129600408649586, - "50%" = 0.1393442, "55%" = 0.149195708649586, "60%" = 0.159627982246122, - "65%" = 0.170968308649587, "70%" = 0.184031805880359, "75%" = 0.198909658094331, - "80%" = 0.219058736130861, "85%" = 0.250692448549235, "90%" = 0.300646382944129, - "95%" = 0.368938143197633, "97.5%" = 0.440038195052124, "99%" = 0.51997011826723 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0.0344362435566855, 0.0610170086495865, + 0.0798865084778347, 0.0944014546310463, 0.107339121226462, + 0.11899734099851, 0.129600408649586, 0.1393442, 0.149195708649586, + 0.159627982246122, 0.170968308649587, 0.184031805880359, + 0.198909658094331, 0.219058736130861, 0.250692448549235, + 0.300646382944129, 0.368938143197633, 0.440038195052124, + 0.51997011826723), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0303364052628526, "25%" = 0.0557306728227282, "30%" = 0.0766736159703596, - "35%" = 0.0942284381264812, "40%" = 0.11050757203172, "45%" = 0.125214601455714, - "50%" = 0.1393442, "55%" = 0.15359732398729, "60%" = 0.168500447692877, - "65%" = 0.184551468093631, "70%" = 0.202926420944109, "75%" = 0.22476606802393, - "80%" = 0.253070223293233, "85%" = 0.291229953951089, "90%" = 0.341963643747938, - "95%" = 0.419747975311502, "97.5%" = 0.495994046054689, "99%" = 0.5748791770223 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0.0303364052628526, 0.0557306728227282, + 0.0766736159703596, 0.0942284381264812, 0.11050757203172, + 0.125214601455714, 0.1393442, 0.15359732398729, 0.168500447692877, + 0.184551468093631, 0.202926420944109, 0.22476606802393, 0.253070223293233, + 0.29122995395109, 0.341963643747938, 0.419747975311502, 0.495994046054689, + 0.5748791770223), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.00603076915889168, "25%" = 0.0356039073625737, - "30%" = 0.0609470811194113, "35%" = 0.0833232869645198, "40%" = 0.103265350891109, - "45%" = 0.121507077706427, "50%" = 0.1393442, "55%" = 0.157305073932789, - "60%" = 0.176004666813668, "65%" = 0.196866917086671, "70%" = 0.219796529731897, - "75%" = 0.247137200365254, "80%" = 0.280371254591746, "85%" = 0.320842872758278, - "90%" = 0.374783454750148, "95%" = 0.461368597638526, "97.5%" = 0.539683256474915, - "99%" = 0.632562403391324), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0.00603076915889168, 0.0356039073625737, + 0.0609470811194113, 0.0833232869645198, 0.103265350891109, + 0.121507077706427, 0.1393442, 0.157305073932789, 0.176004666813668, + 0.196866917086671, 0.219796529731897, 0.247137200365254, + 0.280371254591746, 0.320842872758278, 0.374783454750148, + 0.461368597638526, 0.539683256474915, 0.632562403391324), + quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, + 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0.018869505399304, "30%" = 0.0471517885822858, - "35%" = 0.0732707765908659, "40%" = 0.0969223475714758, "45%" = 0.118188509171441, - "50%" = 0.1393442, "55%" = 0.161036861715017, "60%" = 0.183255665579256, - "65%" = 0.207206810683007, "70%" = 0.23409988698267, "75%" = 0.265549713886389, - "80%" = 0.302197074524145, "85%" = 0.346715970732557, "90%" = 0.40460690801818, - "95%" = 0.498076490174802, "97.5%" = 0.580016068409433, "99%" = 0.680138975526255 + values = c(0, 0, 0, 0, 0, 0, 0.018869505399304, 0.0471517885822858, + 0.0732707765908659, 0.0969223475714758, 0.118188509171441, + 0.1393442, 0.161036861715017, 0.183255665579256, 0.207206810683007, + 0.23409988698267, 0.265549713886389, 0.302197074524145, 0.346715970732557, + 0.40460690801818, 0.498076490174802, 0.580016068409433, 0.680138975526255 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0.00232218982614828, "30%" = 0.0342017690820909, - "35%" = 0.062828756299263, "40%" = 0.0893725834453345, "45%" = 0.114623710996309, - "50%" = 0.1393442, "55%" = 0.163790622390774, "60%" = 0.189495107256772, - "65%" = 0.216754530328403, "70%" = 0.247065337260473, "75%" = 0.281410456107061, - "80%" = 0.32037037400004, "85%" = 0.367018829587046, "90%" = 0.431198706165962, - "95%" = 0.52829547296083, "97.5%" = 0.619021148955337, "99%" = 0.728730172315724 + values = c(0, 0, 0, 0, 0, 0, 0.00232218982614828, 0.0342017690820909, + 0.062828756299263, 0.0893725834453345, 0.114623710996309, + 0.1393442, 0.163790622390774, 0.189495107256772, 0.216754530328403, + 0.247065337260473, 0.281410456107061, 0.32037037400004, 0.367018829587046, + 0.431198706165962, 0.52829547296083, 0.619021148955337, 0.728730172315724 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.00233673672776743, "25%" = 0.0223488000000001, - "30%" = 0.040304673503435, "35%" = 0.0576262998104982, "40%" = 0.0732741199141993, - "45%" = 0.088455610793058, "50%" = 0.103199, "55%" = 0.118707592060121, - "60%" = 0.134185928864089, "65%" = 0.151183139276793, "70%" = 0.1702454, - "75%" = 0.191937, "80%" = 0.2182298, "85%" = 0.253577609846549, - "90%" = 0.307351538752588, "95%" = 0.407165223924639, "97.5%" = 0.502529513927214, - "99%" = 0.605582108686126), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0.00233673672776743, 0.0223488000000001, + 0.040304673503435, 0.0576262998104982, 0.0732741199141993, + 0.088455610793058, 0.103199, 0.118707592060121, 0.134185928864089, + 0.151183139276793, 0.1702454, 0.191937, 0.2182298, 0.253577609846549, + 0.307351538752588, 0.407165223924639, 0.502529513927214, + 0.605582108686126), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0, "30%" = 0.0190621000375005, "35%" = 0.0420071558734088, - "40%" = 0.0629230825705257, "45%" = 0.0833688260410605, "50%" = 0.103199, - "55%" = 0.124118509153392, "60%" = 0.145401945823358, "65%" = 0.168667287877079, - "70%" = 0.1939090000375, "75%" = 0.222597428173282, "80%" = 0.256984900377504, - "85%" = 0.301709122144422, "90%" = 0.366495424858649, "95%" = 0.475152766217062, - "97.5%" = 0.572497835146252, "99%" = 0.693762274318904), + values = c(0, 0, 0, 0, 0, 0, 0, 0.0190621000375005, 0.0420071558734088, + 0.0629230825705257, 0.0833688260410605, 0.103199, 0.124118509153392, + 0.145401945823358, 0.168667287877079, 0.1939090000375, 0.222597428173282, + 0.256984900377504, 0.301709122144422, 0.366495424858649, + 0.475152766217062, 0.572497835146252, 0.693762274318904), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0, "30%" = 0, "35%" = 0.0269530072946728, - "40%" = 0.0530040092850928, "45%" = 0.0782481277003769, "50%" = 0.103199, - "55%" = 0.12816325599641, "60%" = 0.154866111682517, "65%" = 0.182302899107341, - "70%" = 0.213783044306043, "75%" = 0.248363904708547, "80%" = 0.28995690796288, - "85%" = 0.341627908394784, "90%" = 0.413707680386504, "95%" = 0.528381820556805, - "97.5%" = 0.635771182105746, "99%" = 0.77652465912812), quantile_levels = c(0.01, + values = c(0, 0, 0, 0, 0, 0, 0, 0, 0.0269530072946728, 0.0530040092850928, + 0.0782481277003769, 0.103199, 0.12816325599641, 0.154866111682517, + 0.182302899107341, 0.213783044306043, 0.248363904708547, + 0.28995690796288, 0.341627908394784, 0.413707680386504, 0.528381820556805, + 0.635771182105746, 0.77652465912812), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, "30%" = 0, - "35%" = 0.0133969262208122, "40%" = 0.0447913089328894, "45%" = 0.0739787251314013, - "50%" = 0.103199, "55%" = 0.132965213784838, "60%" = 0.163644939246192, - "65%" = 0.196475575572506, "70%" = 0.231647450729907, "75%" = 0.271208219491195, - "80%" = 0.317741925837459, "85%" = 0.376214875186902, "90%" = 0.454693715463155, - "95%" = 0.578781950822058, "97.5%" = 0.695278060333427, "99%" = 0.835521146843828 + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0, 0, + 0, 0.0133969262208122, 0.0447913089328894, 0.0739787251314013, + 0.103199, 0.132965213784838, 0.163644939246192, 0.196475575572506, + 0.231647450729907, 0.271208219491195, 0.317741925837459, 0.376214875186902, + 0.454693715463155, 0.578781950822058, 0.695278060333427, 0.835521146843828 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0, - "30%" = 0, "35%" = 0.000725156354313476, "40%" = 0.036290207696477, - "45%" = 0.0701157049196494, "50%" = 0.103199, "55%" = 0.136581757676227, - "60%" = 0.170980571439515, "65%" = 0.20778982998995, "70%" = 0.247087076718167, - "75%" = 0.291689672899979, "80%" = 0.343587258527985, "85%" = 0.406717577407724, - "90%" = 0.490437549306793, "95%" = 0.620305872542078, "97.5%" = 0.740730855925609, - "99%" = 0.888992767585756), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0701359181289814, - "15%" = 0.126021564763798, "20%" = 0.165542973066331, "25%" = 0.197412078824538, - "30%" = 0.2254231, "35%" = 0.24849244896414, "40%" = 0.271074448350284, - "45%" = 0.292116376731667, "50%" = 0.3121244, "55%" = 0.3321324, - "60%" = 0.3534741, "65%" = 0.375505591313813, "70%" = 0.4001594, - "75%" = 0.4268368, "80%" = 0.459466546351464, "85%" = 0.501142770839258, - "90%" = 0.562143084394445, "95%" = 0.686511993260583, "97.5%" = 0.808747521078011, - "99%" = 0.936070949770187), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.00157374045240457, - "15%" = 0.0698662194634446, "20%" = 0.120287640452405, "25%" = 0.16090076400914, - "30%" = 0.195966561494315, "35%" = 0.227802919628796, "40%" = 0.257250456567366, - "45%" = 0.284352940452404, "50%" = 0.3121244, "55%" = 0.338954445099751, - "60%" = 0.366682808562485, "65%" = 0.395431772465525, "70%" = 0.428410340452405, - "75%" = 0.464424683613586, "80%" = 0.505774640452405, "85%" = 0.559060310062401, - "90%" = 0.635868688255882, "95%" = 0.771213743700187, "97.5%" = 0.895124744284645, - "99%" = 1.02835689610128), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0203251909788099, - "20%" = 0.0807941084801849, "25%" = 0.131156594663197, "30%" = 0.173483742579226, - "35%" = 0.211670557196072, "40%" = 0.246244078609487, "45%" = 0.278363918673537, - "50%" = 0.3121244, "55%" = 0.345057130768308, "60%" = 0.378403757196072, - "65%" = 0.414130127568126, "70%" = 0.451969178608786, "75%" = 0.495598517595426, - "80%" = 0.545136665227352, "85%" = 0.60807806098831, "90%" = 0.695394235571256, - "95%" = 0.837130344811698, "97.5%" = 0.966111057134121, "99%" = 1.11185508502426 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0477276069251695, "25%" = 0.103509981435814, "30%" = 0.15221877094871, - "35%" = 0.195952578625286, "40%" = 0.236147272793828, "45%" = 0.274650521629366, - "50%" = 0.3121244, "55%" = 0.349346986282313, "60%" = 0.388561057230272, - "65%" = 0.429378978625286, "70%" = 0.474721256740267, "75%" = 0.523806740641156, - "80%" = 0.581962784214742, "85%" = 0.652062951302463, "90%" = 0.746838578625286, - "95%" = 0.896492945755508, "97.5%" = 1.0340527654686, "99%" = 1.19219029825678 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0166039560593608, "25%" = 0.0776387168354182, "30%" = 0.132003170161801, - "35%" = 0.180530886857168, "40%" = 0.22594722201882, "45%" = 0.268822337600976, - "50%" = 0.3121244, "55%" = 0.354489864523245, "60%" = 0.398378553881739, - "65%" = 0.444274543339083, "70%" = 0.494499388431484, "75%" = 0.548837448212482, - "80%" = 0.612239188685087, "85%" = 0.690272902609576, "90%" = 0.790473599123991, - "95%" = 0.950950996975469, "97.5%" = 1.09638828065763, "99%" = 1.26930966690442 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.214450885057551, - "15%" = 0.288864871241312, "20%" = 0.3250653, "25%" = 0.3516615, - "30%" = 0.3716087, "35%" = 0.386718885323753, "40%" = 0.399682691320713, - "45%" = 0.411042976158862, "50%" = 0.4218461, "55%" = 0.4329278, - "60%" = 0.444139278140181, "65%" = 0.456951313505885, "70%" = 0.4720835, - "75%" = 0.4920307, "80%" = 0.518626803531635, "85%" = 0.555566110165902, - "90%" = 0.636745822624727, "95%" = 1.18069710590251, "97.5%" = 1.79487371178211, - "99%" = 2.55270530204625), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0412188277837779, - "15%" = 0.218851219710947, "20%" = 0.281178109847399, "25%" = 0.318187061211362, - "30%" = 0.346336916208562, "35%" = 0.368500427783778, "40%" = 0.387753955899259, - "45%" = 0.405439627783778, "50%" = 0.4218461, "55%" = 0.438238911502765, - "60%" = 0.455473161565916, "65%" = 0.474946888792488, "70%" = 0.497793222697627, - "75%" = 0.526600327783778, "80%" = 0.565677321171112, "85%" = 0.632773149305243, - "90%" = 0.891087255237454, "95%" = 1.53723873883164, "97.5%" = 2.07877430490449, - "99%" = 2.80265665435411), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0, 0, 0, 0, 0, 0.000725156354313476, 0.036290207696477, 0.0701157049196494, + 0.103199, 0.136581757676227, 0.170980571439515, 0.20778982998995, + 0.247087076718167, 0.291689672899979, 0.343587258527985, 0.406717577407724, + 0.490437549306793, 0.620305872542078, 0.740730855925609, 0.888992767585756 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0.0701359181289814, 0.126021564763798, 0.165542973066331, + 0.197412078824538, 0.2254231, 0.24849244896414, 0.271074448350284, + 0.292116376731667, 0.3121244, 0.3321324, 0.3534741, 0.375505591313813, + 0.4001594, 0.4268368, 0.459466546351464, 0.501142770839258, 0.562143084394445, + 0.686511993260583, 0.808747521078011, 0.936070949770187), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0.00157374045240457, + 0.0698662194634446, 0.120287640452405, 0.16090076400914, 0.195966561494315, + 0.227802919628796, 0.257250456567366, 0.284352940452404, 0.3121244, + 0.338954445099751, 0.366682808562485, 0.395431772465525, 0.428410340452405, + 0.464424683613586, 0.505774640452405, 0.559060310062401, 0.635868688255882, + 0.771213743700187, 0.895124744284645, 1.02835689610128), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0203251909788099, + 0.0807941084801849, 0.131156594663197, 0.173483742579226, 0.211670557196072, + 0.246244078609487, 0.278363918673537, 0.3121244, 0.345057130768308, + 0.378403757196072, 0.414130127568126, 0.451969178608786, 0.495598517595426, + 0.545136665227352, 0.60807806098831, 0.695394235571256, 0.837130344811698, + 0.966111057134121, 1.11185508502426), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.0477276069251695, + 0.103509981435814, 0.15221877094871, 0.195952578625286, 0.236147272793828, + 0.274650521629366, 0.3121244, 0.349346986282313, 0.388561057230272, + 0.429378978625286, 0.474721256740267, 0.523806740641156, 0.581962784214742, + 0.652062951302463, 0.746838578625286, 0.896492945755508, 1.0340527654686, + 1.19219029825678), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.11916637099981, - "20%" = 0.229217761668717, "25%" = 0.283591182792578, "30%" = 0.32089403701397, - "35%" = 0.351025234947199, "40%" = 0.376764238355684, "45%" = 0.399580647158371, - "50%" = 0.4218461, "55%" = 0.44387311299288, "60%" = 0.466809871716417, - "65%" = 0.493008689720547, "70%" = 0.523409488360383, "75%" = 0.563157298622986, - "80%" = 0.621505313473235, "85%" = 0.756485815282202, "90%" = 1.12190615310943, - "95%" = 1.76010655352564, "97.5%" = 2.36678033794496, "99%" = 2.94420631979259 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0.0166039560593608, 0.0776387168354182, + 0.132003170161801, 0.180530886857168, 0.22594722201882, 0.268822337600976, + 0.3121244, 0.354489864523245, 0.398378553881739, 0.444274543339083, + 0.494499388431484, 0.548837448212482, 0.612239188685087, + 0.690272902609576, 0.790473599123991, 0.950950996975469, + 1.09638828065763, 1.26930966690442), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0.214450885057551, + 0.288864871241312, 0.3250653, 0.3516615, 0.3716087, 0.386718885323753, + 0.399682691320713, 0.411042976158862, 0.4218461, 0.4329278, 0.444139278140181, + 0.456951313505885, 0.4720835, 0.4920307, 0.518626803531635, 0.555566110165902, + 0.636745822624727, 1.18069710590251, 1.79487371178211, 2.55270530204625 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0.0412188277837779, 0.218851219710947, 0.281178109847399, + 0.318187061211362, 0.346336916208562, 0.368500427783778, 0.387753955899259, + 0.405439627783778, 0.4218461, 0.438238911502765, 0.455473161565916, + 0.474946888792488, 0.497793222697627, 0.526600327783778, 0.565677321171112, + 0.632773149305243, 0.891087255237454, 1.53723873883164, 2.07877430490449, + 2.80265665435411), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0166944520132201, - "20%" = 0.165418069472795, "25%" = 0.245206977511275, "30%" = 0.294705591133411, - "35%" = 0.333122440419504, "40%" = 0.365628706470365, "45%" = 0.393898304736197, - "50%" = 0.4218461, "55%" = 0.449111464628896, "60%" = 0.478419567119571, - "65%" = 0.511583967360174, "70%" = 0.551380591704217, "75%" = 0.602914542469175, - "80%" = 0.695207681738717, "85%" = 0.912006796599716, "90%" = 1.31516316514125, - "95%" = 1.94296465866439, "97.5%" = 2.56528565211139, "99%" = 3.07364144272118 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0.11916637099981, 0.229217761668717, + 0.283591182792578, 0.32089403701397, 0.351025234947199, 0.376764238355684, + 0.399580647158371, 0.4218461, 0.44387311299288, 0.466809871716417, + 0.493008689720547, 0.523409488360383, 0.563157298622986, + 0.621505313473235, 0.756485815282202, 1.12190615310943, 1.76010655352564, + 2.36678033794496, 2.94420631979259), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0166944520132201, + 0.165418069472795, 0.245206977511275, 0.294705591133411, 0.333122440419504, + 0.365628706470365, 0.393898304736197, 0.4218461, 0.449111464628896, + 0.478419567119571, 0.511583967360174, 0.551380591704217, 0.602914542469175, + 0.695207681738717, 0.912006796599716, 1.31516316514125, 1.94296465866439, + 2.56528565211139, 3.07364144272118), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.095868346511765, + 0.20216012803078, 0.267545492825128, 0.314290150935209, 0.353895445422154, + 0.388115128404834, 0.4218461, 0.455823761272913, 0.49135719600286, + 0.53249009905049, 0.582341165610556, 0.654473427614026, 0.784511194125441, + 1.05644872659752, 1.47044175860169, 2.09183984013705, 2.69484857437112, + 3.1694157654766), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.095868346511765, "25%" = 0.20216012803078, "30%" = 0.267545492825128, - "35%" = 0.314290150935209, "40%" = 0.353895445422154, "45%" = 0.388115128404834, - "50%" = 0.4218461, "55%" = 0.455823761272913, "60%" = 0.49135719600286, - "65%" = 0.53249009905049, "70%" = 0.582341165610556, "75%" = 0.654473427614026, - "80%" = 0.784511194125441, "85%" = 1.05644872659752, "90%" = 1.47044175860169, - "95%" = 2.09183984013705, "97.5%" = 2.69484857437112, "99%" = 3.1694157654766 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0.189889609612846, 0.28831400446517, 0.378590156778518, + 0.474951757151471, 0.546550271666467, 0.599713541496415, + 0.636994072140471, 0.663814888730087, 0.6839305, 0.701811, + 0.71711131701917, 0.7319844, 0.746512343291783, 0.7621579, + 0.7800383, 0.800154, 0.826974702066021, 0.86472325100111, + 0.918612458720487, 0.988605006042461, 1.08324298909714, 1.1736324426019, + 1.27400190201593), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.189889609612846, "2.5%" = 0.28831400446517, - "5%" = 0.378590156778518, "10%" = 0.474951757151471, "15%" = 0.546550271666467, - "20%" = 0.599713541496415, "25%" = 0.636994072140471, "30%" = 0.663814888730087, - "35%" = 0.6839305, "40%" = 0.701811, "45%" = 0.71711131701917, - "50%" = 0.7319844, "55%" = 0.746512343291783, "60%" = 0.7621579, - "65%" = 0.7800383, "70%" = 0.800154, "75%" = 0.826974702066021, - "80%" = 0.86472325100111, "85%" = 0.918612458720487, "90%" = 0.988605006042461, - "95%" = 1.08324298909714, "97.5%" = 1.1736324426019, "99%" = 1.27400190201593 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0.0970521814156041, 0.21019273451422, 0.3073217, + 0.418096666577866, 0.489016664299943, 0.547102113575136, + 0.594490775323003, 0.63162246104581, 0.661579866583116, 0.687283, + 0.709633785855109, 0.7319844, 0.754030577281223, 0.776967707389074, + 0.802389, 0.832791429272493, 0.870576437517875, 0.917019363782438, + 0.973069487834329, 1.04481411391714, 1.15502640396814, 1.25613855529213, + 1.37419193312441), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.0970521814156041, "2.5%" = 0.21019273451422, - "5%" = 0.3073217, "10%" = 0.418096666577866, "15%" = 0.489016664299943, - "20%" = 0.547102113575136, "25%" = 0.594490775323003, "30%" = 0.63162246104581, - "35%" = 0.661579866583116, "40%" = 0.687283, "45%" = 0.709633785855109, - "50%" = 0.7319844, "55%" = 0.754030577281223, "60%" = 0.776967707389074, - "65%" = 0.802389, "70%" = 0.832791429272493, "75%" = 0.870576437517875, - "80%" = 0.917019363782438, "85%" = 0.973069487834329, "90%" = 1.04481411391714, - "95%" = 1.15502640396814, "97.5%" = 1.25613855529213, "99%" = 1.37419193312441 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0.0121672025865257, 0.139873460696682, 0.245836896475015, + 0.366700877088971, 0.445024777793378, 0.506295707796278, + 0.557812941319663, 0.601634091201612, 0.639324955546405, + 0.673001603565436, 0.702827370737707, 0.7319844, 0.760387153293983, + 0.790515252114921, 0.823330663438584, 0.86065768198682, 0.904468070814958, + 0.954989716167962, 1.01626566701207, 1.09352836237872, 1.21548452077266, + 1.32239947141536, 1.46006378366371), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0.0755189873928237, + 0.192404624794198, 0.322282766861868, 0.409749729479745, 0.475729034228042, + 0.531171513462134, 0.579442333436034, 0.623023292701627, 0.662178609529395, + 0.697968947885378, 0.7319844, 0.766345465406154, 0.80256496503135, + 0.841452466611966, 0.884524366576965, 0.93218174000415, 0.988252217755677, + 1.05297410373014, 1.13838991320473, 1.27210128334768, 1.38822119412612, + 1.53603026586717), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.0121672025865257, "2.5%" = 0.139873460696682, - "5%" = 0.245836896475015, "10%" = 0.366700877088971, "15%" = 0.445024777793378, - "20%" = 0.506295707796278, "25%" = 0.557812941319663, "30%" = 0.601634091201612, - "35%" = 0.639324955546405, "40%" = 0.673001603565436, "45%" = 0.702827370737707, - "50%" = 0.7319844, "55%" = 0.760387153293983, "60%" = 0.790515252114921, - "65%" = 0.823330663438584, "70%" = 0.86065768198682, "75%" = 0.904468070814958, - "80%" = 0.954989716167962, "85%" = 1.01626566701207, "90%" = 1.09352836237872, - "95%" = 1.21548452077266, "97.5%" = 1.32239947141536, "99%" = 1.46006378366371 + values = c(0, 0.0137515321313713, 0.140785106599616, 0.283710273212032, + 0.374321519596796, 0.446394180252102, 0.505830587319873, + 0.559570052916329, 0.606684360953109, 0.65111343293503, 0.692845474832798, + 0.7319844, 0.771333743893139, 0.812267094081241, 0.855930534362644, + 0.903545840608706, 0.955193592261423, 1.01560313647486, 1.08583632750787, + 1.17818451335943, 1.31856131315813, 1.44615719776698, 1.60468791291453 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0.0755189873928237, "5%" = 0.192404624794198, - "10%" = 0.322282766861868, "15%" = 0.409749729479745, "20%" = 0.475729034228042, - "25%" = 0.531171513462134, "30%" = 0.579442333436034, "35%" = 0.623023292701627, - "40%" = 0.662178609529395, "45%" = 0.697968947885378, "50%" = 0.7319844, - "55%" = 0.766345465406154, "60%" = 0.80256496503135, "65%" = 0.841452466611966, - "70%" = 0.884524366576965, "75%" = 0.93218174000415, "80%" = 0.988252217755677, - "85%" = 1.05297410373014, "90%" = 1.13838991320473, "95%" = 1.27210128334768, - "97.5%" = 1.38822119412612, "99%" = 1.53603026586717), quantile_levels = c(0.01, + values = c(0, 0, 0, 0.0124103998425985, 0.0518320161167612, + 0.0822283734557346, 0.106956582246572, 0.130236689538895, + 0.150852198845738, 0.168835673455735, 0.183678547429124, + 0.1975426, 0.211166273455735, 0.226249473455735, 0.243919155834858, + 0.265304527061771, 0.289781663064881, 0.315985067670677, + 0.347644682675627, 0.394981842425824, 0.491215248628636, + 0.584975102439074, 0.694697494489265), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0.0137515321313713, - "5%" = 0.140785106599616, "10%" = 0.283710273212032, "15%" = 0.374321519596796, - "20%" = 0.446394180252102, "25%" = 0.505830587319873, "30%" = 0.559570052916329, - "35%" = 0.606684360953109, "40%" = 0.65111343293503, "45%" = 0.692845474832798, - "50%" = 0.7319844, "55%" = 0.771333743893139, "60%" = 0.812267094081241, - "65%" = 0.855930534362644, "70%" = 0.903545840608706, "75%" = 0.955193592261423, - "80%" = 1.01560313647486, "85%" = 1.08583632750787, "90%" = 1.17818451335943, - "95%" = 1.31856131315813, "97.5%" = 1.44615719776698, "99%" = 1.60468791291453 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0.0124103998425985, "15%" = 0.0518320161167612, - "20%" = 0.0822283734557346, "25%" = 0.106956582246572, "30%" = 0.130236689538895, - "35%" = 0.150852198845738, "40%" = 0.168835673455735, "45%" = 0.183678547429124, - "50%" = 0.1975426, "55%" = 0.211166273455735, "60%" = 0.226249473455735, - "65%" = 0.243919155834858, "70%" = 0.265304527061771, "75%" = 0.289781663064881, - "80%" = 0.315985067670677, "85%" = 0.347644682675627, "90%" = 0.394981842425824, - "95%" = 0.491215248628636, "97.5%" = 0.584975102439074, "99%" = 0.694697494489265 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0106056685868359, - "20%" = 0.0491424720812208, "25%" = 0.0803975947094471, "30%" = 0.108060576398464, - "35%" = 0.133638500841809, "40%" = 0.155968088623186, "45%" = 0.177107275224252, - "50%" = 0.1975426, "55%" = 0.218180906543366, "60%" = 0.239601831646016, - "65%" = 0.262811949904799, "70%" = 0.28886838404664, "75%" = 0.317235975224252, - "80%" = 0.350545157867879, "85%" = 0.393998327257523, "90%" = 0.454550976564066, - "95%" = 0.558555075803007, "97.5%" = 0.656859449317743, "99%" = 0.763718974419534 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0185370189554894, - "25%" = 0.0562218087603375, "30%" = 0.0890356919950198, "35%" = 0.118731362266373, - "40%" = 0.146216910144001, "45%" = 0.172533896645116, "50%" = 0.1975426, - "55%" = 0.223021121504065, "60%" = 0.249412654553045, "65%" = 0.277680444480195, - "70%" = 0.308522683806638, "75%" = 0.342270845449704, "80%" = 0.382702709814398, - "85%" = 0.433443929063141, "90%" = 0.501610622734127, "95%" = 0.614175801063261, - "97.5%" = 0.715138862353848, "99%" = 0.833535553075286), quantile_levels = c(0.01, + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0106056685868359, + 0.0491424720812208, 0.0803975947094471, 0.108060576398464, 0.133638500841809, + 0.155968088623186, 0.177107275224252, 0.1975426, 0.218180906543366, + 0.239601831646016, 0.262811949904799, 0.28886838404664, 0.317235975224252, + 0.350545157867879, 0.393998327257523, 0.454550976564066, 0.558555075803007, + 0.656859449317743, 0.763718974419534), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0, "25%" = 0.0346528073343234, - "30%" = 0.0723584880324803, "35%" = 0.106222897173122, "40%" = 0.138467941096611, - "45%" = 0.167844669490445, "50%" = 0.1975426, "55%" = 0.227591504589096, - "60%" = 0.258479799230192, "65%" = 0.290862843650987, "70%" = 0.325718759418194, - "75%" = 0.364163081687565, "80%" = 0.409581315443156, "85%" = 0.46531554698862, - "90%" = 0.54043504498905, "95%" = 0.659111642885379, "97.5%" = 0.761453612496025, - "99%" = 0.889794566241181), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.0185370189554894, + 0.0562218087603375, 0.0890356919950198, 0.118731362266373, 0.146216910144001, + 0.172533896645116, 0.1975426, 0.223021121504065, 0.249412654553045, + 0.277680444480195, 0.308522683806638, 0.342270845449704, 0.382702709814398, + 0.433443929063141, 0.501610622734127, 0.61417580106326, 0.715138862353848, + 0.833535553075286), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0.0134397969692197, "30%" = 0.0557212574100741, - "35%" = 0.0941597345954959, "40%" = 0.130401776157262, "45%" = 0.164200585080601, - "50%" = 0.1975426, "55%" = 0.231566981332063, "60%" = 0.265597088493385, - "65%" = 0.30192115798073, "70%" = 0.341652226704467, "75%" = 0.384249568152932, - "80%" = 0.43541812199952, "85%" = 0.495340659591346, "90%" = 0.575765691755518, - "95%" = 0.703032070294999, "97.5%" = 0.815605113815338, "99%" = 0.955488202108743 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0, 0.0346528073343234, 0.0723584880324803, + 0.106222897173122, 0.138467941096611, 0.167844669490445, + 0.1975426, 0.227591504589096, 0.258479799230192, 0.290862843650987, + 0.325718759418194, 0.364163081687565, 0.409581315443156, + 0.46531554698862, 0.54043504498905, 0.659111642885379, 0.761453612496025, + 0.889794566241181), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0, 0, 0, 0.0134397969692197, 0.0557212574100741, + 0.0941597345954959, 0.130401776157262, 0.164200585080601, + 0.1975426, 0.231566981332063, 0.265597088493385, 0.30192115798073, + 0.341652226704467, 0.384249568152932, 0.43541812199952, 0.495340659591346, + 0.575765691755518, 0.703032070294999, 0.815605113815338, + 0.955488202108743), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, @@ -819,405 +697,337 @@ 0.1975426, 0.1975426), ahead = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .pred_distn = structure(list(structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.00812835000000001, - "10%" = 0.07297428, "15%" = 0.0936219, "20%" = 0.10421786, - "25%" = 0.1121285, "30%" = 0.1201118, "35%" = 0.1273693, - "40%" = 0.1317238, "45%" = 0.1360783, "50%" = 0.1393442, - "55%" = 0.1426101, "60%" = 0.1469646, "65%" = 0.1513191, - "70%" = 0.1585766, "75%" = 0.1665599, "80%" = 0.17447054, - "85%" = 0.1850665, "90%" = 0.20571412, "95%" = 0.27056005, - "97.5%" = 0.313941744999999, "99%" = 0.384931126999997), - quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, - 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0250982954899548, - "15%" = 0.0576421230361804, "20%" = 0.0776985410529105, "25%" = 0.0929731777892779, - "30%" = 0.104205115094451, "35%" = 0.114209292598776, "40%" = 0.123365027741977, - "45%" = 0.131496226094211, "50%" = 0.1393442, "55%" = 0.147007648291083, - "60%" = 0.154990950042, "65%" = 0.16406284204392, "70%" = 0.173835548288583, - "75%" = 0.185472494222942, "80%" = 0.200167568392984, "85%" = 0.221760005190952, - "90%" = 0.260313716029161, "95%" = 0.318794320716957, "97.5%" = 0.376941794597195, - "99%" = 0.461705276864399), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.028693230499105, - "20%" = 0.055453963203632, "25%" = 0.0755679534410344, "30%" = 0.0913921813275133, - "35%" = 0.104804902302573, "40%" = 0.117142722458225, "45%" = 0.128444430213702, - "50%" = 0.1393442, "55%" = 0.150479535783308, "60%" = 0.161776522458225, - "65%" = 0.173925041831968, "70%" = 0.187540579925299, "75%" = 0.204200618941439, - "80%" = 0.225353161205212, "85%" = 0.253695961466565, "90%" = 0.294498109305393, - "95%" = 0.358245879234942, "97.5%" = 0.427563795224327, "99%" = 0.501665748776186 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.00587171510650109, - "20%" = 0.0364866623781238, "25%" = 0.0602683002957529, "30%" = 0.0794861096145961, - "35%" = 0.0963414561651617, "40%" = 0.111439230212802, "45%" = 0.125394639614746, - "50%" = 0.1393442, "55%" = 0.153216527502025, "60%" = 0.167801944181742, - "65%" = 0.183359587288923, "70%" = 0.200880434888349, "75%" = 0.221656465706657, - "80%" = 0.24743726609676, "85%" = 0.279449270180852, "90%" = 0.322415149384594, - "95%" = 0.395367499639696, "97.5%" = 0.464904880713406, "99%" = 0.539558052669137 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.019055042091221, "25%" = 0.0457625510440105, "30%" = 0.068309473710537, - "35%" = 0.087945102194822, "40%" = 0.106033592330923, "45%" = 0.123045226382564, - "50%" = 0.1393442, "55%" = 0.155351600131351, "60%" = 0.172491058371384, - "65%" = 0.19101350900654, "70%" = 0.211425349928599, "75%" = 0.234936300692507, - "80%" = 0.264303292652126, "85%" = 0.299599722715327, "90%" = 0.346282638921389, - "95%" = 0.423857010226352, "97.5%" = 0.494689091614341, "99%" = 0.577833814673327 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.00138033000000002, - "15%" = 0.030893965, "20%" = 0.0479842, "25%" = 0.059815975, - "30%" = 0.07118759, "35%" = 0.0815075, "40%" = 0.0926819, - "45%" = 0.0992551, "50%" = 0.103199, "55%" = 0.1071429, "60%" = 0.1137161, - "65%" = 0.1248905, "70%" = 0.13521041, "75%" = 0.146582025, - "80%" = 0.1584138, "85%" = 0.175504035, "90%" = 0.20501767, - "95%" = 0.25694586, "97.5%" = 0.335051815, "99%" = 0.436709474 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0.0179658025100251, "25%" = 0.0356060154111541, "30%" = 0.050834301692017, - "35%" = 0.0650050989327893, "40%" = 0.0784417069434695, "45%" = 0.0916422518458685, - "50%" = 0.103199, "55%" = 0.115251501692017, "60%" = 0.128398001692017, - "65%" = 0.142201701692017, "70%" = 0.157319973859039, "75%" = 0.174980914065641, - "80%" = 0.196101805086251, "85%" = 0.223989860848608, "90%" = 0.266334685464555, - "95%" = 0.354050965519204, "97.5%" = 0.437948459272293, "99%" = 0.520203978940639 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0.0134241653129031, "30%" = 0.0338447112456125, - "35%" = 0.052643303388484, "40%" = 0.0699345638167383, "45%" = 0.0866373614747148, - "50%" = 0.103199, "55%" = 0.119627111136411, "60%" = 0.137401026927169, - "65%" = 0.156056395793358, "70%" = 0.175781901322513, "75%" = 0.198564535163602, - "80%" = 0.226934571881819, "85%" = 0.263862501322513, "90%" = 0.317121769745397, - "95%" = 0.412419996940619, "97.5%" = 0.491470213131306, "99%" = 0.580892509639735 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0.00812835000000001, 0.07297428, 0.0936219, + 0.10421786, 0.1121285, 0.1201118, 0.1273693, 0.1317238, 0.1360783, + 0.1393442, 0.1426101, 0.1469646, 0.1513191, 0.1585766, 0.1665599, + 0.17447054, 0.1850665, 0.20571412, 0.27056005, 0.313941744999999, + 0.384931126999997), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0, "30%" = 0.0170903, "35%" = 0.0403385023363734, - "40%" = 0.0616387632732329, "45%" = 0.0827585779094291, "50%" = 0.103199, - "55%" = 0.123094939420544, "60%" = 0.14464638301663, "65%" = 0.1669589, - "70%" = 0.191770645535455, "75%" = 0.220735117412174, "80%" = 0.254231042750228, - "85%" = 0.296807527848978, "90%" = 0.357153759489695, "95%" = 0.45347931404539, - "97.5%" = 0.538725322834228, "99%" = 0.636530647411066), - quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, - 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0.0250982954899548, 0.0576421230361804, + 0.0776985410529105, 0.0929731777892779, 0.104205115094451, + 0.114209292598776, 0.123365027741977, 0.131496226094211, + 0.1393442, 0.147007648291083, 0.154990950042, 0.16406284204392, + 0.173835548288583, 0.185472494222942, 0.200167568392984, + 0.221760005190952, 0.260313716029161, 0.318794320716957, + 0.376941794597195, 0.461705276864399), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.028693230499105, + 0.055453963203632, 0.0755679534410344, 0.0913921813275133, 0.104804902302573, + 0.117142722458225, 0.128444430213702, 0.1393442, 0.150479535783308, + 0.161776522458225, 0.173925041831968, 0.187540579925299, 0.204200618941439, + 0.225353161205212, 0.253695961466565, 0.294498109305393, 0.358245879234942, + 0.427563795224327, 0.501665748776186), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.00587171510650109, + 0.0364866623781238, 0.0602683002957529, 0.0794861096145961, 0.0963414561651617, + 0.111439230212802, 0.125394639614746, 0.1393442, 0.153216527502025, + 0.167801944181742, 0.183359587288923, 0.200880434888349, 0.221656465706657, + 0.24743726609676, 0.279449270180852, 0.322415149384594, 0.395367499639696, + 0.464904880713406, 0.539558052669137), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0.019055042091221, + 0.0457625510440105, 0.068309473710537, 0.087945102194822, 0.106033592330923, + 0.123045226382564, 0.1393442, 0.155351600131351, 0.172491058371384, + 0.19101350900654, 0.211425349928599, 0.234936300692507, 0.264303292652126, + 0.299599722715327, 0.346282638921389, 0.423857010226352, 0.494689091614341, + 0.577833814673327), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, - "20%" = 0, "25%" = 0, "30%" = 0.0026415954262542, "35%" = 0.0297423239924899, - "40%" = 0.0555402340406406, "45%" = 0.0792255827466275, "50%" = 0.103199, - "55%" = 0.127366925585556, "60%" = 0.151700351432014, "65%" = 0.177708522618176, - "70%" = 0.206088123699737, "75%" = 0.238712707453825, "80%" = 0.277708313715037, - "85%" = 0.325132239647296, "90%" = 0.390468252727729, "95%" = 0.490417296529864, - "97.5%" = 0.578557086846368, "99%" = 0.688679948593326), + values = c(0, 0, 0, 0.00138033000000002, 0.030893965, 0.0479842, + 0.059815975, 0.07118759, 0.0815075, 0.0926819, 0.0992551, + 0.103199, 0.1071429, 0.1137161, 0.1248905, 0.13521041, 0.146582025, + 0.1584138, 0.175504035, 0.20501767, 0.25694586, 0.335051815, + 0.436709474), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0, 0, 0.0179658025100251, 0.0356060154111541, + 0.050834301692017, 0.0650050989327893, 0.0784417069434695, + 0.0916422518458685, 0.103199, 0.115251501692017, 0.128398001692017, + 0.142201701692017, 0.157319973859039, 0.174980914065641, + 0.196101805086251, 0.223989860848608, 0.266334685464555, + 0.354050965519204, 0.437948459272293, 0.520203978940639), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0.0320461375000001, "5%" = 0.129384955, - "10%" = 0.18940881, "15%" = 0.2200878, "20%" = 0.2427634, - "25%" = 0.2587698, "30%" = 0.2734423, "35%" = 0.2841133, - "40%" = 0.296118, "45%" = 0.3041212, "50%" = 0.3121244, "55%" = 0.3201276, - "60%" = 0.3281308, "65%" = 0.3401355, "70%" = 0.3508065, - "75%" = 0.365479, "80%" = 0.3814854, "85%" = 0.404161, "90%" = 0.43483999, - "95%" = 0.494863845, "97.5%" = 0.592202662499998, "99%" = 0.737413847999994 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0, 0, 0, 0.0134241653129031, 0.0338447112456125, + 0.052643303388484, 0.0699345638167383, 0.0866373614747148, + 0.103199, 0.119627111136411, 0.137401026927169, 0.156056395793358, + 0.175781901322513, 0.198564535163602, 0.226934571881819, + 0.263862501322513, 0.317121769745397, 0.412419996940619, + 0.491470213131306, 0.580892509639735), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0, 0, + 0.0170903, 0.0403385023363734, 0.0616387632732329, 0.0827585779094291, + 0.103199, 0.123094939420544, 0.14464638301663, 0.1669589, 0.191770645535455, + 0.220735117412174, 0.254231042750228, 0.296807527848978, 0.357153759489695, + 0.45347931404539, 0.538725322834228, 0.636530647411066), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0, 0, 0, + 0.0026415954262542, 0.0297423239924899, 0.0555402340406406, 0.0792255827466275, + 0.103199, 0.127366925585556, 0.151700351432014, 0.177708522618176, + 0.206088123699737, 0.238712707453825, 0.277708313715037, 0.325132239647296, + 0.390468252727729, 0.490417296529864, 0.578557086846368, 0.688679948593326 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0.0320461375000001, + 0.129384955, 0.18940881, 0.2200878, 0.2427634, 0.2587698, 0.2734423, + 0.2841133, 0.296118, 0.3041212, 0.3121244, 0.3201276, 0.3281308, + 0.3401355, 0.3508065, 0.365479, 0.3814854, 0.404161, 0.43483999, + 0.494863845, 0.592202662499998, 0.737413847999994), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0.0319186440152902, + 0.118606588418984, 0.166386434627046, 0.198884154069741, 0.224089313858389, + 0.245418255377554, 0.2641052, 0.281445422925429, 0.297451875378704, + 0.3121244, 0.327667648091081, 0.343487967727477, 0.360314881408664, + 0.379575527422374, 0.400991145952209, 0.426605204088841, 0.4588495, + 0.506128350755908, 0.604640728888889, 0.713520019350718, 0.848429920658984 + ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, + 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, + 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0, 0, + 0, 0.0628145244703447, 0.119951261697167, 0.161800708429584, + 0.194481529786298, 0.221976473503235, 0.246382528361484, 0.268661795456855, + 0.29099237601426, 0.3121244, 0.332687273503235, 0.354487379145491, + 0.376704773503235, 0.401222379758598, 0.428725473503235, 0.462071908680987, + 0.503745448659536, 0.564825512591627, 0.677307126205362, 0.788889302835928, + 0.92389000979736), quantile_levels = c(0.01, 0.025, 0.05, 0.1, + 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, + 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0319186440152902, - "10%" = 0.118606588418984, "15%" = 0.166386434627046, "20%" = 0.198884154069741, - "25%" = 0.224089313858389, "30%" = 0.245418255377554, "35%" = 0.2641052, - "40%" = 0.281445422925429, "45%" = 0.297451875378704, "50%" = 0.3121244, - "55%" = 0.327667648091081, "60%" = 0.343487967727477, "65%" = 0.360314881408664, - "70%" = 0.379575527422374, "75%" = 0.400991145952209, "80%" = 0.426605204088841, - "85%" = 0.4588495, "90%" = 0.506128350755908, "95%" = 0.604640728888889, - "97.5%" = 0.713520019350718, "99%" = 0.848429920658984), + values = c(0, 0, 0, 0.0154147362739629, 0.0815589624901754, + 0.130419447103471, 0.16933591200637, 0.202296191455315, 0.23230661698317, + 0.260103744489245, 0.28583424396924, 0.3121244, 0.337226511153312, + 0.3628113, 0.3894886, 0.419049975899859, 0.453339140405904, + 0.492830630339104, 0.542883079890499, 0.613577832767128, + 0.73571689900399, 0.853844909059791, 0.988010467319443), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0628145244703447, - "15%" = 0.119951261697167, "20%" = 0.161800708429584, "25%" = 0.194481529786298, - "30%" = 0.221976473503235, "35%" = 0.246382528361484, "40%" = 0.268661795456855, - "45%" = 0.29099237601426, "50%" = 0.3121244, "55%" = 0.332687273503235, - "60%" = 0.354487379145491, "65%" = 0.376704773503235, "70%" = 0.401222379758598, - "75%" = 0.428725473503235, "80%" = 0.462071908680987, "85%" = 0.503745448659536, - "90%" = 0.564825512591627, "95%" = 0.677307126205362, "97.5%" = 0.788889302835928, - "99%" = 0.92389000979736), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0154147362739629, - "15%" = 0.0815589624901754, "20%" = 0.130419447103471, "25%" = 0.16933591200637, - "30%" = 0.202296191455315, "35%" = 0.23230661698317, "40%" = 0.260103744489245, - "45%" = 0.28583424396924, "50%" = 0.3121244, "55%" = 0.337226511153312, - "60%" = 0.3628113, "65%" = 0.3894886, "70%" = 0.419049975899859, - "75%" = 0.453339140405904, "80%" = 0.492830630339104, "85%" = 0.542883079890499, - "90%" = 0.613577832767128, "95%" = 0.73571689900399, "97.5%" = 0.853844909059791, - "99%" = 0.988010467319443), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0493531737111374, - "20%" = 0.104172112803728, "25%" = 0.147940700281253, "30%" = 0.185518687303273, - "35%" = 0.220197034594646, "40%" = 0.2521005, "45%" = 0.282477641919719, - "50%" = 0.3121244, "55%" = 0.3414694, "60%" = 0.371435390499905, - "65%" = 0.402230766363414, "70%" = 0.436173824348844, "75%" = 0.474579164424894, - "80%" = 0.519690345185252, "85%" = 0.576673752066771, "90%" = 0.655151246845668, - "95%" = 0.78520792902029, "97.5%" = 0.90968118047453, "99%" = 1.05112182091783 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.28439515, "10%" = 0.33688581, - "15%" = 0.369872555, "20%" = 0.3863845, "25%" = 0.3945111, - "30%" = 0.40189893, "35%" = 0.4078092, "40%" = 0.4137194, - "45%" = 0.4174134, "50%" = 0.4218461, "55%" = 0.4262788, - "60%" = 0.4299728, "65%" = 0.435883, "70%" = 0.44179327, - "75%" = 0.4491811, "80%" = 0.4573077, "85%" = 0.473819645, - "90%" = 0.50680639, "95%" = 0.55929705, "97.5%" = 0.9841905175, - "99%" = 1.556671116), quantile_levels = c(0.01, 0.025, 0.05, + values = c(0, 0, 0, 0, 0.0493531737111374, 0.104172112803728, + 0.147940700281253, 0.185518687303273, 0.220197034594646, + 0.2521005, 0.282477641919719, 0.3121244, 0.3414694, 0.371435390499905, + 0.402230766363414, 0.436173824348844, 0.474579164424894, + 0.519690345185252, 0.57667375206677, 0.655151246845668, 0.78520792902029, + 0.90968118047453, 1.05112182091783), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, + 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, + 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0.28439515, 0.33688581, + 0.369872555, 0.3863845, 0.3945111, 0.40189893, 0.4078092, 0.4137194, + 0.4174134, 0.4218461, 0.4262788, 0.4299728, 0.435883, 0.44179327, + 0.4491811, 0.4573077, 0.473819645, 0.50680639, 0.55929705, 0.9841905175, + 1.556671116), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, + 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, + 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0.003694, 0.268840486221162, 0.320208490155752, + 0.34804029700677, 0.368653615349654, 0.3834292, 0.3945111, + 0.4041153, 0.413171785132151, 0.4218461, 0.430424661802068, + 0.4395769, 0.4491812, 0.4610017, 0.47590450199302, 0.497193409669697, + 0.525275921931869, 0.57616046396334, 0.97179808113241, 1.42880557869041, + 2.00265362857685), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.003694, "10%" = 0.268840486221162, - "15%" = 0.320208490155752, "20%" = 0.34804029700677, "25%" = 0.368653615349654, - "30%" = 0.3834292, "35%" = 0.3945111, "40%" = 0.4041153, - "45%" = 0.413171785132151, "50%" = 0.4218461, "55%" = 0.430424661802068, - "60%" = 0.4395769, "65%" = 0.4491812, "70%" = 0.4610017, - "75%" = 0.47590450199302, "80%" = 0.497193409669697, "85%" = 0.525275921931869, - "90%" = 0.57616046396334, "95%" = 0.97179808113241, "97.5%" = 1.42880557869041, - "99%" = 2.00265362857685), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0.0925362072632727, - "15%" = 0.270427502912579, "20%" = 0.315212102423624, "25%" = 0.343335698090731, - "30%" = 0.364285966419164, "35%" = 0.381412585636556, "40%" = 0.3959887, - "45%" = 0.4092868, "50%" = 0.4218461, "55%" = 0.4344055, - "60%" = 0.447738051828318, "65%" = 0.4632179, "70%" = 0.480948870517105, - "75%" = 0.502553166907419, "80%" = 0.531676966454865, "85%" = 0.576804782629326, - "90%" = 0.776643061384413, "95%" = 1.21840177544959, "97.5%" = 1.666716830807, - "99%" = 2.19163048441111), quantile_levels = c(0.01, 0.025, - 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, - 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.186887482630176, - "20%" = 0.277238777881179, "25%" = 0.317854348809488, "30%" = 0.345779327332173, - "35%" = 0.367941987952029, "40%" = 0.38755201396574, "45%" = 0.405055828677287, - "50%" = 0.4218461, "55%" = 0.438666668060931, "60%" = 0.456611962704227, - "65%" = 0.476718028677287, "70%" = 0.499751625882259, "75%" = 0.528508989683397, - "80%" = 0.569810205861059, "85%" = 0.666081219804098, "90%" = 0.934028445917159, - "95%" = 1.42658287124316, "97.5%" = 1.85311957889209, "99%" = 2.30760254154095 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0845659921302213, - "20%" = 0.228553649752897, "25%" = 0.289236861333113, "30%" = 0.326073140839108, - "35%" = 0.354785333802038, "40%" = 0.379166830409904, "45%" = 0.401230227456875, - "50%" = 0.4218461, "55%" = 0.442801275729157, "60%" = 0.465572618600986, - "65%" = 0.490133389090691, "70%" = 0.520052318734487, "75%" = 0.558588500497255, - "80%" = 0.62065225601836, "85%" = 0.788392143304334, "90%" = 1.05428294678997, - "95%" = 1.55684044507063, "97.5%" = 2.01374350966068, "99%" = 2.37954449328776 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.33818795, "2.5%" = 0.4386877525, "5%" = 0.528816855, - "10%" = 0.61252005, "15%" = 0.6626973, "20%" = 0.6816954, - "25%" = 0.697340875, "30%" = 0.7085162, "35%" = 0.7152214, - "40%" = 0.7208091, "45%" = 0.72745833, "50%" = 0.7319844, - "55%" = 0.73651047, "60%" = 0.7431597, "65%" = 0.7487474, - "70%" = 0.7554526, "75%" = 0.766627925, "80%" = 0.7822734, - "85%" = 0.8012715, "90%" = 0.85144875, "95%" = 0.935151945, - "97.5%" = 1.0252810475, "99%" = 1.12578085), quantile_levels = c(0.01, + values = c(0, 0, 0, 0.0925362072632727, 0.270427502912579, + 0.315212102423624, 0.343335698090731, 0.364285966419164, + 0.381412585636556, 0.3959887, 0.4092868, 0.4218461, 0.4344055, + 0.447738051828318, 0.4632179, 0.480948870517105, 0.502553166907419, + 0.531676966454865, 0.576804782629326, 0.776643061384413, + 1.21840177544959, 1.666716830807, 2.19163048441111), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0.276821846502455, - "2.5%" = 0.354318476867519, "5%" = 0.440270225449805, "10%" = 0.533132934163242, - "15%" = 0.5900576, "20%" = 0.631102729748298, "25%" = 0.660462274661497, - "30%" = 0.680831108876989, "35%" = 0.696223359635746, "40%" = 0.7096337, - "45%" = 0.7219265, "50%" = 0.7319844, "55%" = 0.7431597, "60%" = 0.7543351, - "65%" = 0.7677455, "70%" = 0.783391, "75%" = 0.804046832839828, - "80%" = 0.833541896886769, "85%" = 0.873735298798638, "90%" = 0.929106903073231, - "95%" = 1.02188617627186, "97.5%" = 1.10971107833641, "99%" = 1.18626816850867 + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.186887482630176, + 0.277238777881179, 0.317854348809488, 0.345779327332173, 0.367941987952029, + 0.38755201396574, 0.405055828677287, 0.4218461, 0.438666668060931, + 0.456611962704227, 0.476718028677287, 0.499751625882259, 0.528508989683397, + 0.569810205861059, 0.666081219804098, 0.934028445917159, 1.42658287124316, + 1.85311957889209, 2.30760254154095), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0, 0, 0.0845659921302213, + 0.228553649752897, 0.289236861333113, 0.326073140839108, 0.354785333802038, + 0.379166830409904, 0.401230227456875, 0.4218461, 0.442801275729157, + 0.465572618600986, 0.490133389090691, 0.520052318734487, 0.558588500497255, + 0.62065225601836, 0.788392143304334, 1.05428294678997, 1.55684044507063, + 2.01374350966068, 2.37954449328776), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.33818795, 0.4386877525, + 0.528816855, 0.61252005, 0.6626973, 0.6816954, 0.697340875, 0.7085162, + 0.7152214, 0.7208091, 0.72745833, 0.7319844, 0.73651047, 0.7431597, + 0.7487474, 0.7554526, 0.766627925, 0.7822734, 0.8012715, 0.85144875, + 0.935151945, 1.0252810475, 1.12578085), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.276821846502455, + 0.354318476867519, 0.440270225449805, 0.533132934163242, 0.5900576, + 0.631102729748298, 0.660462274661497, 0.680831108876989, 0.696223359635746, + 0.7096337, 0.7219265, 0.7319844, 0.7431597, 0.7543351, 0.7677455, + 0.783391, 0.804046832839828, 0.833541896886769, 0.873735298798638, + 0.929106903073231, 1.02188617627186, 1.10971107833641, 1.18626816850867 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0.202265200637946, - "2.5%" = 0.298325094034965, "5%" = 0.380907645938709, "10%" = 0.481339524857949, - "15%" = 0.543219696138311, "20%" = 0.589507953775938, "25%" = 0.6258186, - "30%" = 0.654874580912809, "35%" = 0.6783427, "40%" = 0.6984583, - "45%" = 0.715655544727447, "50%" = 0.7319844, "55%" = 0.7487473, - "60%" = 0.7666278, "65%" = 0.785715489951649, "70%" = 0.8090941, - "75%" = 0.83815, "80%" = 0.873623567291473, "85%" = 0.920206978680437, - "90%" = 0.98231174201862, "95%" = 1.08425930872329, "97.5%" = 1.16639411427812, - "99%" = 1.25926838507547), quantile_levels = c(0.01, 0.025, 0.05, - 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, - 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c(0.202265200637946, + 0.298325094034965, 0.380907645938709, 0.481339524857949, 0.543219696138311, + 0.589507953775938, 0.6258186, 0.654874580912809, 0.6783427, 0.6984583, + 0.715655544727447, 0.7319844, 0.7487473, 0.7666278, 0.785715489951649, + 0.8090941, 0.83815, 0.873623567291473, 0.920206978680437, 0.98231174201862, + 1.08425930872329, 1.16639411427812, 1.25926838507547), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.129193504425124, + 0.241744300793533, 0.331949483165032, 0.43649858695157, 0.504472062268773, + 0.556141464729147, 0.597172505336053, 0.631406591640416, 0.660898437441874, + 0.686684727470375, 0.709633972330423, 0.7319844, 0.753217699696647, + 0.77608746100351, 0.8012715950276, 0.830327492252422, 0.86464477397774, + 0.906319686121761, 0.956815387818928, 1.02495125855129, 1.13129413647201, + 1.21644533535035, 1.32424172966634), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.0667682979050189, + 0.189580042212397, 0.290485041721667, 0.402951609190092, 0.475328740486855, + 0.530590906520765, 0.575504908587586, 0.613421932920829, 0.647285177364573, + 0.678099283398734, 0.70593862799773, 0.7319844, 0.758701322488325, + 0.786639532920829, 0.816837200234752, 0.850627936753767, 0.888963924063491, + 0.933785069065791, 0.988913131611816, 1.06240172852619, 1.16959624730917, + 1.2662008825538, 1.38860505690239), quantile_levels = c(0.01, + 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, + 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 + )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0, 0, 0.0419413650000001, + 0.09882005, 0.1230992, 0.14226962, 0.1600776, 0.1722416, 0.1800265, + 0.1880061, 0.1936501, 0.1975426, 0.2014351, 0.2070791, 0.2150587, + 0.2228436, 0.2350076, 0.25281558, 0.271986, 0.29626515, 0.353143835, + 0.4353357125, 0.545314878), quantile_levels = c(0.01, 0.025, + 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, + 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.129193504425124, "2.5%" = 0.241744300793533, - "5%" = 0.331949483165032, "10%" = 0.43649858695157, "15%" = 0.504472062268773, - "20%" = 0.556141464729147, "25%" = 0.597172505336053, "30%" = 0.631406591640416, - "35%" = 0.660898437441874, "40%" = 0.686684727470375, "45%" = 0.709633972330423, - "50%" = 0.7319844, "55%" = 0.753217699696647, "60%" = 0.77608746100351, - "65%" = 0.8012715950276, "70%" = 0.830327492252422, "75%" = 0.86464477397774, - "80%" = 0.906319686121761, "85%" = 0.956815387818928, "90%" = 1.02495125855129, - "95%" = 1.13129413647201, "97.5%" = 1.21644533535035, "99%" = 1.32424172966634 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, - 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, - 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + values = c(0, 0, 0, 0.0438463650372504, 0.0808594787511875, + 0.106995615813358, 0.127478232938079, 0.145480846633466, + 0.1610508, 0.17461199504795, 0.186668812203222, 0.1975426, + 0.208428571374764, 0.2204108, 0.233930283744537, 0.249894552784127, + 0.267362348440485, 0.288755575723157, 0.316120297580926, + 0.355450425419354, 0.443192503687136, 0.536871211931719, + 0.636344785545224), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( + values = c(0, 0, 0, 0.00188932708477086, 0.0470905919531195, + 0.079226864399944, 0.105414109111591, 0.127225815559956, + 0.146699420891509, 0.164644114298843, 0.18142942603581, 0.1975426, + 0.213933119201142, 0.231001630488804, 0.24941229702312, 0.269578845560456, + 0.292362546530965, 0.319632071367214, 0.354433951358713, + 0.406915236639266, 0.506944745332152, 0.596044605353528, + 0.695533388807317), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0.0667682979050189, "2.5%" = 0.189580042212397, - "5%" = 0.290485041721667, "10%" = 0.402951609190092, "15%" = 0.475328740486855, - "20%" = 0.530590906520765, "25%" = 0.575504908587586, "30%" = 0.613421932920829, - "35%" = 0.647285177364573, "40%" = 0.678099283398734, "45%" = 0.70593862799773, - "50%" = 0.7319844, "55%" = 0.758701322488325, "60%" = 0.786639532920829, - "65%" = 0.816837200234752, "70%" = 0.850627936753767, "75%" = 0.888963924063491, - "80%" = 0.933785069065791, "85%" = 0.988913131611816, "90%" = 1.06240172852619, - "95%" = 1.16959624730917, "97.5%" = 1.2662008825538, "99%" = 1.38860505690239 + values = c(0, 0, 0, 0, 0.0156342454546545, 0.0536811248488485, + 0.084228833507335, 0.110407751354614, 0.134410113872139, + 0.156669167575476, 0.177701902429674, 0.1975426, 0.217759024165492, + 0.238897316673167, 0.261484572608426, 0.286120039498095, + 0.313065324705997, 0.345395334882349, 0.386811116673167, + 0.44780805303823, 0.550781846423163, 0.644984940689833, 0.752937731654986 ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("1%" = 0, "2.5%" = 0, "5%" = 0.0419413650000001, - "10%" = 0.09882005, "15%" = 0.1230992, "20%" = 0.14226962, - "25%" = 0.1600776, "30%" = 0.1722416, "35%" = 0.1800265, - "40%" = 0.1880061, "45%" = 0.1936501, "50%" = 0.1975426, - "55%" = 0.2014351, "60%" = 0.2070791, "65%" = 0.2150587, - "70%" = 0.2228436, "75%" = 0.2350076, "80%" = 0.25281558, - "85%" = 0.271986, "90%" = 0.29626515, "95%" = 0.353143835, - "97.5%" = 0.4353357125, "99%" = 0.545314878), quantile_levels = c(0.01, - 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, - 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, - 0.99)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr")), structure(list(values = c("1%" = 0, "2.5%" = 0, - "5%" = 0, "10%" = 0.0438463650372504, "15%" = 0.0808594787511875, - "20%" = 0.106995615813358, "25%" = 0.127478232938079, "30%" = 0.145480846633466, - "35%" = 0.1610508, "40%" = 0.17461199504795, "45%" = 0.186668812203222, - "50%" = 0.1975426, "55%" = 0.208428571374764, "60%" = 0.2204108, - "65%" = 0.233930283744537, "70%" = 0.249894552784127, "75%" = 0.267362348440485, - "80%" = 0.288755575723157, "85%" = 0.316120297580926, "90%" = 0.355450425419354, - "95%" = 0.443192503687136, "97.5%" = 0.536871211931719, "99%" = 0.636344785545224 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0.00188932708477086, "15%" = 0.0470905919531195, - "20%" = 0.079226864399944, "25%" = 0.105414109111591, "30%" = 0.127225815559956, - "35%" = 0.146699420891509, "40%" = 0.164644114298843, "45%" = 0.18142942603581, - "50%" = 0.1975426, "55%" = 0.213933119201142, "60%" = 0.231001630488804, - "65%" = 0.24941229702312, "70%" = 0.269578845560456, "75%" = 0.292362546530965, - "80%" = 0.319632071367214, "85%" = 0.354433951358713, "90%" = 0.406915236639266, - "95%" = 0.506944745332152, "97.5%" = 0.596044605353528, "99%" = 0.695533388807317 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0.0156342454546545, - "20%" = 0.0536811248488485, "25%" = 0.084228833507335, "30%" = 0.110407751354614, - "35%" = 0.134410113872139, "40%" = 0.156669167575476, "45%" = 0.177701902429674, - "50%" = 0.1975426, "55%" = 0.217759024165492, "60%" = 0.238897316673167, - "65%" = 0.261484572608426, "70%" = 0.286120039498095, "75%" = 0.313065324705997, - "80%" = 0.345395334882349, "85%" = 0.386811116673167, "90%" = 0.44780805303823, - "95%" = 0.550781846423163, "97.5%" = 0.644984940689833, "99%" = 0.752937731654986 - ), quantile_levels = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, - 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, - 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", "dist_default", - "vctrs_rcrd", "vctrs_vctr")), structure(list(values = c("1%" = 0, - "2.5%" = 0, "5%" = 0, "10%" = 0, "15%" = 0, "20%" = 0.0290260214229144, - "25%" = 0.0653218111708617, "30%" = 0.0966336637233373, "35%" = 0.124670861123061, - "40%" = 0.149775978614687, "45%" = 0.174275935467055, "50%" = 0.1975426, - "55%" = 0.221291415429954, "60%" = 0.246723385601356, "65%" = 0.273144383515685, - "70%" = 0.30101566402084, "75%" = 0.33204051788793, "80%" = 0.369730347126771, - "85%" = 0.416909038104281, "90%" = 0.481925596660567, "95%" = 0.58989871202142, - "97.5%" = 0.688635568252056, "99%" = 0.803906183401304), quantile_levels = c(0.01, - 0.025, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, - 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99 - )), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", - "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", "list" - )), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, + values = c(0, 0, 0, 0, 0, 0.0290260214229144, 0.0653218111708617, + 0.0966336637233373, 0.124670861123061, 0.149775978614687, + 0.174275935467055, 0.1975426, 0.221291415429954, 0.246723385601356, + 0.273144383515685, 0.30101566402084, 0.33204051788793, 0.369730347126771, + 0.416909038104281, 0.481925596660567, 0.58989871202142, 0.688635568252056, + 0.803906183401304), quantile_levels = c(0.01, 0.025, 0.05, + 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, + 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.975, 0.99)), class = c("dist_quantiles", + "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", + "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, - 18992, 18992, 18992, 18992, 18992, 18992, 18992), class = "Date"), - target_date = structure(c(18997, 19002, 19007, 19012, 19017, - 18997, 19002, 19007, 19012, 19017, 18997, 19002, 19007, 19012, - 19017, 18997, 19002, 19007, 19012, 19017, 18997, 19002, 19007, - 19012, 19017, 18997, 19002, 19007, 19012, 19017), class = "Date")), row.names = c(NA, - -30L), class = c("tbl_df", "tbl", "data.frame")) + 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, 18992, + 18992), class = "Date"), target_date = structure(c(18997, 19002, + 19007, 19012, 19017, 18997, 19002, 19007, 19012, 19017, 18997, + 19002, 19007, 19012, 19017, 18997, 19002, 19007, 19012, 19017, + 18997, 19002, 19007, 19012, 19017, 18997, 19002, 19007, 19012, + 19017), class = "Date")), row.names = c(NA, -30L), class = c("tbl_df", + "tbl", "data.frame")) # arx_forecaster snapshots structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" - ), .pred = c(0.353013358779434, 0.648525432444876, 0.667670289394328, - 1.1418673907239, 0.830448695683588, 0.329799431948648), .pred_distn = structure(list( - structure(list(values = c("5%" = 0.171022956902287, "95%" = 0.535003760656581 + ), .pred = c(0.353013358779435, 0.648525432444877, 0.667670289394328, + 1.1418673907239, 0.830448695683587, 0.329799431948649), .pred_distn = structure(list( + structure(list(values = c(0.171022956902288, 0.535003760656582 ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.466535030567729, "95%" = 0.830515834322023 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.485679887517181, "95%" = 0.849660691271475 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0.46653503056773, 0.830515834322024), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.485679887517181, + 0.849660691271475), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.959876988846752, "95%" = 1.32385779260105 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0.959876988846753, 1.32385779260105), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.64845829380644, + 1.01243909756073), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.648458293806441, "95%" = 1.01243909756074 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.147809030071501, "95%" = 0.511789833825795 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", - "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, - 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18999, + values = c(0.147809030071502, 0.511789833825796), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", + "list")), forecast_date = structure(c(18992, 18992, 18992, 18992, + 18992, 18992), class = "Date"), target_date = structure(c(18999, 18999, 18999, 18999, 18999, 18999), class = "Date")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame")) --- structure(list(geo_value = c("ca", "fl", "ga", "ny", "pa", "tx" - ), .pred = c(0.149303403634372, 0.139764664505947, 0.333186321066645, - 0.470345577837144, 0.725986105412009, 0.212686665274006), .pred_distn = structure(list( - structure(list(values = c("5%" = 0.0961118191398626, "95%" = 0.202494988128881 + ), .pred = c(0.149303403634373, 0.139764664505948, 0.333186321066645, + 0.470345577837144, 0.725986105412008, 0.212686665274007), .pred_distn = structure(list( + structure(list(values = c(0.0961118191398634, 0.202494988128882 ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.0865730800114376, "95%" = 0.192956249000456 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.279994736572135, "95%" = 0.386377905561154 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0.0865730800114383, 0.192956249000457), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.279994736572136, + 0.386377905561154), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.417153993342635, "95%" = 0.523537162331653 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", + values = c(0.417153993342634, 0.523537162331653), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr")), structure(list(values = c(0.672794520917498, + 0.779177689906517), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.672794520917499, "95%" = 0.779177689906518 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr")), structure(list( - values = c("5%" = 0.159495080779497, "95%" = 0.265878249768516 - ), quantile_levels = c(0.05, 0.95)), class = c("dist_quantiles", - "dist_default", "vctrs_rcrd", "vctrs_vctr"))), class = c("distribution", - "vctrs_vctr", "list")), forecast_date = structure(c(18992, 18992, - 18992, 18992, 18992, 18992), class = "Date"), target_date = structure(c(18993, + values = c(0.159495080779498, 0.265878249768516), quantile_levels = c(0.05, + 0.95)), class = c("dist_quantiles", "dist_default", "vctrs_rcrd", + "vctrs_vctr"))), class = c("distribution", "vctrs_vctr", + "list")), forecast_date = structure(c(18992, 18992, 18992, 18992, + 18992, 18992), class = "Date"), target_date = structure(c(18993, 18993, 18993, 18993, 18993, 18993), class = "Date")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame")) From 32a236513683a4fa67505918ff5a70cfc6b6e0ec Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 2 Aug 2024 11:47:15 -0700 Subject: [PATCH 325/382] styler and pkgdown --- R/dist_quantiles.R | 9 +++++---- _pkgdown.yml | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 6b6b635d6..8f05065c6 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -7,8 +7,10 @@ new_quantiles <- function(values = double(1), quantile_levels = double(1)) { values <- unname(values) if (length(values) == 0L) { return(new_rcrd( - list(values = rep(NA_real_, length(quantile_levels)), - quantile_levels = quantile_levels), + list( + values = rep(NA_real_, length(quantile_levels)), + quantile_levels = quantile_levels + ), class = c("dist_quantiles", "dist_default") )) } @@ -72,13 +74,12 @@ format.dist_quantiles <- function(x, digits = 2, ...) { #' #' @importFrom vctrs as_list_of vec_recycle_common new_vctr dist_quantiles <- function(values, quantile_levels) { - if (!is.list(quantile_levels)) { assert_numeric(quantile_levels, lower = 0, upper = 1, any.missing = FALSE, min.len = 1L) quantile_levels <- list(quantile_levels) } if (!is.list(values)) { - if (length(values) == 0L) values = NA_real_ + if (length(values) == 0L) values <- NA_real_ values <- list(values) } diff --git a/_pkgdown.yml b/_pkgdown.yml index 62f1cc25d..24a217091 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -115,6 +115,7 @@ reference: - dist_quantiles - extrapolate_quantiles - nested_quantiles + - weighted_interval_score - starts_with("pivot_quantiles") - title: Included datasets contents: From 740d4387e79524c22414a37298e6eeaed2c441ea Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 2 Aug 2024 18:33:13 -0700 Subject: [PATCH 326/382] refactor: step_epi_slide * validate_slide_fun now rejects formula f * remove warning about optimized slide functions until that PR * fix tests * remove try_period and replace with epiprocess internal * remove slider dependency * update documentation --- DESCRIPTION | 5 +- NEWS.md | 2 +- R/step_epi_slide.R | 127 ++++++++++----------------- man/add_epi_recipe.Rd | 2 +- man/arx_classifier.Rd | 2 +- man/arx_forecaster.Rd | 2 +- man/cdc_baseline_forecaster.Rd | 4 +- man/epi_slide_wrapper.Rd | 2 +- man/flatline_forecaster.Rd | 4 +- man/get_test_data.Rd | 2 +- man/grad_employ_subset.Rd | 2 +- man/predict-epi_workflow.Rd | 2 +- man/step_epi_slide.Rd | 24 +---- tests/testthat/test-step_epi_slide.R | 112 +++++------------------ 14 files changed, 86 insertions(+), 206 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c16aff98e..3e8db4117 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.17 +Version: 0.0.18 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), @@ -35,12 +35,10 @@ Imports: ggplot2, glue, hardhat (>= 1.3.0), - lubridate, magrittr, quantreg, recipes (>= 1.0.4), rlang (>= 1.0.0), - slider, smoothqr, stats, tibble, @@ -55,6 +53,7 @@ Suggests: epidatr (>= 1.0.0), fs, knitr, + lubridate, poissonreg, purrr, ranger, diff --git a/NEWS.md b/NEWS.md index 4cb3e092a..d02e246f0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -52,4 +52,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat `...` args intended for `predict.model_fit()` - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values -- Add a step to produce generic sliding computations over an `epi_df` +- Add `step_epi_slide` to produce generic sliding computations over an `epi_df` diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 25ef3973c..637d31a54 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -4,7 +4,6 @@ #' that will generate one or more new columns of derived data by "sliding" #' a computation along existing data. #' -#' #' @inheritParams step_epi_lag #' @param .f A function in one of the following formats: #' 1. An unquoted function name with no arguments, e.g., `mean` @@ -20,27 +19,15 @@ #' argument must be named `.x`. A common, though very difficult to debug #' error is using something like `function(x) mean`. This will not work #' because it returns the function mean, rather than `mean(x)` +#' @param before,after the size of the sliding window on the left and the right +#' of the center. Usually non-negative integers for data indexed by date, but +#' more restrictive in other cases (see [epiprocess::epi_slide()] for details). +#' @param prefix A character string that will be prefixed to the new column. #' @param f_name a character string of at most 20 characters that describes #' the function. This will be combined with `prefix` and the columns in `...` #' to name the result using `{prefix}{f_name}_{column}`. By default it will be determined #' automatically using `clean_f_name()`. -#' @param before,after non-negative integers. -#' How far `before` and `after` each `time_value` should -#' the sliding window extend? Any value provided for either -#' argument must be a single, non-`NA`, non-negative, -#' [integer-compatible][vctrs::vec_cast] number of time steps. Endpoints of -#' the window are inclusive. Common settings: -#' * For trailing/right-aligned windows from `time_value - time_step(k)` to -#' `time_value`, use `before=k, after=0`. This is the most likely use case -#' for the purposes of forecasting. -#' * For center-aligned windows from `time_value - time_step(k)` to -#' `time_value + time_step(k)`, use `before=k, after=k`. -#' * For leading/left-aligned windows from `time_value` to -#' `time_value + time_step(k)`, use `after=k, after=0`. #' -#' You may also pass a [lubridate::period], like `lubridate::weeks(1)` or a -#' character string that is coercible to a [lubridate::period], like -#' `"2 weeks"`. #' @template step-return #' #' @export @@ -69,9 +56,8 @@ step_epi_slide <- rlang::abort("This recipe step can only operate on an `epi_recipe`.") } .f <- validate_slide_fun(.f) - arg_is_scalar(before, after) - before <- try_period(before) - after <- try_period(after) + epiprocess:::validate_slide_window_arg(before, attributes(recipe$template)$metadata$time_type) + epiprocess:::validate_slide_window_arg(after, attributes(recipe$template)$metadata$time_type) arg_is_chr_scalar(role, prefix, id) arg_is_lgl_scalar(skip) @@ -126,7 +112,6 @@ step_epi_slide_new <- } - #' @export prep.step_epi_slide <- function(x, training, info = NULL, ...) { col_names <- recipes::recipes_eval_select(x$terms, data = training, info = info) @@ -150,7 +135,6 @@ prep.step_epi_slide <- function(x, training, info = NULL, ...) { } - #' @export bake.step_epi_slide <- function(object, new_data, ...) { recipes::check_new_data(names(object$columns), object, new_data) @@ -170,12 +154,16 @@ bake.step_epi_slide <- function(object, new_data, ...) { class = "epipredict__step__name_collision_error" ) } - if (any(vapply(c(mean, sum), \(x) identical(x, object$.f), logical(1L)))) { - cli_warn( - c("There is an optimized version of both mean and sum. See `step_epi_slide_mean`, `step_epi_slide_sum`, or `step_epi_slide_opt`."), - class = "epipredict__step_epi_slide__optimized_version" - ) - } + # TODO: Uncomment this whenever we make the optimized versions available. + # if (any(vapply(c(mean, sum), \(x) identical(x, object$.f), logical(1L)))) { + # cli_warn( + # c( + # "There is an optimized version of both mean and sum. See `step_epi_slide_mean`, `step_epi_slide_sum`, + # or `step_epi_slide_opt`." + # ), + # class = "epipredict__step_epi_slide__optimized_version" + # ) + # } epi_slide_wrapper( new_data, object$before, @@ -187,48 +175,51 @@ bake.step_epi_slide <- function(object, new_data, ...) { object$prefix ) } -#' wrapper to handle epi_slide particulars + + +#' Wrapper to handle epi_slide particulars +#' #' @description #' This should simplify somewhat in the future when we can run `epi_slide` on #' columns. Surprisingly, lapply is several orders of magnitude faster than #' using roughly equivalent tidy select style. +#' #' @param fns vector of functions, even if it's length 1. #' @param group_keys the keys to group by. likely `epi_keys[-1]` (to remove time_value) +#' #' @importFrom tidyr crossing #' @importFrom dplyr bind_cols group_by ungroup #' @importFrom epiprocess epi_slide #' @keywords internal epi_slide_wrapper <- function(new_data, before, after, columns, fns, fn_names, group_keys, name_prefix) { cols_fns <- tidyr::crossing(col_name = columns, fn_name = fn_names, fn = fns) + # Iterate over the rows of cols_fns. For each row number, we will output a + # transformed column. The first result returns all the original columns along + # with the new column. The rest just return the new column. seq_len(nrow(cols_fns)) %>% - lapply( # iterate over the rows of cols_fns - # takes in the row number, outputs the transformed column - function(comp_i) { - # extract values from the row - col_name <- cols_fns[[comp_i, "col_name"]] - fn_name <- cols_fns[[comp_i, "fn_name"]] - fn <- cols_fns[[comp_i, "fn"]][[1L]] - result_name <- paste(name_prefix, fn_name, col_name, sep = "_") - result <- new_data %>% - group_by(across(all_of(group_keys))) %>% - epi_slide( - before = before, - after = after, - new_col_name = result_name, - f = function(slice, geo_key, ref_time_value) { - fn(slice[[col_name]]) - } - ) %>% - ungroup() - # the first result needs to include all of the original columns - if (comp_i == 1L) { - result - } else { - # everything else just needs that column transformed - result[result_name] - } + lapply(function(comp_i) { + col_name <- cols_fns[[comp_i, "col_name"]] + fn_name <- cols_fns[[comp_i, "fn_name"]] + fn <- cols_fns[[comp_i, "fn"]][[1L]] + result_name <- paste(name_prefix, fn_name, col_name, sep = "_") + result <- new_data %>% + group_by(across(all_of(group_keys))) %>% + epi_slide( + before = before, + after = after, + new_col_name = result_name, + f = function(slice, geo_key, ref_time_value) { + fn(slice[[col_name]]) + } + ) %>% + ungroup() + + if (comp_i == 1L) { + result + } else { + result[result_name] } - ) %>% + }) %>% bind_cols() } @@ -286,9 +277,7 @@ validate_slide_fun <- function(.f) { cli_abort("In, `step_epi_slide()`, `.f` may not be missing.") } if (rlang::is_formula(.f, scoped = TRUE)) { - if (!is.null(rlang::f_lhs(.f))) { - cli_abort("In, `step_epi_slide()`, `.f` must be a one-sided formula.") - } + cli_abort("In, `step_epi_slide()`, `.f` cannot be a formula.") } else if (rlang::is_character(.f)) { .f <- rlang::as_function(.f) } else if (!rlang::is_function(.f)) { @@ -296,23 +285,3 @@ validate_slide_fun <- function(.f) { } .f } - -try_period <- function(x) { - err <- is.na(x) - if (!err) { - if (is.numeric(x)) { - err <- !rlang::is_integerish(x) || x < 0 - } else { - x <- lubridate::as.period(x) - err <- is.na(x) - } - } - if (err) { - cli_abort(paste( - "The value supplied to `before` or `after` must be a non-negative integer", - "a {.cls lubridate::period} or a character scalar that can be coerced", - 'as a {.cls lubridate::period}, e.g., `"1 week"`.' - ), ) - } - x -} diff --git a/man/add_epi_recipe.Rd b/man/add_epi_recipe.Rd index 10c282209..0da2d55b3 100644 --- a/man/add_epi_recipe.Rd +++ b/man/add_epi_recipe.Rd @@ -35,7 +35,7 @@ Add an \code{epi_recipe} to a workflow \details{ \code{add_epi_recipe} has the same behaviour as \code{\link[workflows:add_recipe]{workflows::add_recipe()}} but sets a different -default blueprint to automatically handle \link[epiprocess:as_epi_df]{epiprocess::epi_df} data. +default blueprint to automatically handle \link[epiprocess:epi_df]{epiprocess::epi_df} data. } \examples{ library(dplyr) diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index eb36f0872..350352ae9 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -44,7 +44,7 @@ workflow } \description{ This is an autoregressive classification model for -\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning +\link[epiprocess:epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning that it estimates a class at a particular target horizon. } \examples{ diff --git a/man/arx_forecaster.Rd b/man/arx_forecaster.Rd index 2395f5659..af05c0682 100644 --- a/man/arx_forecaster.Rd +++ b/man/arx_forecaster.Rd @@ -37,7 +37,7 @@ workflow } \description{ This is an autoregressive forecasting model for -\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning +\link[epiprocess:epi_df]{epiprocess::epi_df} data. It does "direct" forecasting, meaning that it estimates a model for a particular target horizon. } \examples{ diff --git a/man/cdc_baseline_forecaster.Rd b/man/cdc_baseline_forecaster.Rd index db7bbc41c..cd3c4ed67 100644 --- a/man/cdc_baseline_forecaster.Rd +++ b/man/cdc_baseline_forecaster.Rd @@ -11,7 +11,7 @@ cdc_baseline_forecaster( ) } \arguments{ -\item{epi_data}{An \code{\link[epiprocess:as_epi_df]{epiprocess::epi_df}}} +\item{epi_data}{An \code{\link[epiprocess:epi_df]{epiprocess::epi_df}}} \item{outcome}{A scalar character for the column name we wish to predict.} @@ -24,7 +24,7 @@ horizons) for each unique combination of \code{key_vars}. } \description{ This is a simple forecasting model for -\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the +\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the forecast for any future date, and produces intervals by shuffling the quantiles of the residuals of such a "flatline" forecast and incrementing these forward over all available training data. diff --git a/man/epi_slide_wrapper.Rd b/man/epi_slide_wrapper.Rd index e1afbf599..583d2eacf 100644 --- a/man/epi_slide_wrapper.Rd +++ b/man/epi_slide_wrapper.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/step_epi_slide.R \name{epi_slide_wrapper} \alias{epi_slide_wrapper} -\title{wrapper to handle epi_slide particulars} +\title{Wrapper to handle epi_slide particulars} \usage{ epi_slide_wrapper( new_data, diff --git a/man/flatline_forecaster.Rd b/man/flatline_forecaster.Rd index 9c37b4943..052dd6428 100644 --- a/man/flatline_forecaster.Rd +++ b/man/flatline_forecaster.Rd @@ -7,7 +7,7 @@ flatline_forecaster(epi_data, outcome, args_list = flatline_args_list()) } \arguments{ -\item{epi_data}{An \link[epiprocess:as_epi_df]{epiprocess::epi_df}} +\item{epi_data}{An \link[epiprocess:epi_df]{epiprocess::epi_df}} \item{outcome}{A scalar character for the column name we wish to predict.} @@ -20,7 +20,7 @@ ahead (unique horizon) for each unique combination of \code{key_vars}. } \description{ This is a simple forecasting model for -\link[epiprocess:as_epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the +\link[epiprocess:epi_df]{epiprocess::epi_df} data. It uses the most recent observation as the forcast for any future date, and produces intervals based on the quantiles of the residuals of such a "flatline" forecast over all available training data. diff --git a/man/get_test_data.Rd b/man/get_test_data.Rd index a88dcc4c7..b18685d89 100644 --- a/man/get_test_data.Rd +++ b/man/get_test_data.Rd @@ -37,7 +37,7 @@ keys, as well other variables in the original dataset. } \description{ Based on the longest lag period in the recipe, -\code{get_test_data()} creates an \link[epiprocess:as_epi_df]{epi_df} +\code{get_test_data()} creates an \link[epiprocess:epi_df]{epi_df} with columns \code{geo_value}, \code{time_value} and other variables in the original dataset, which will be used to create features necessary to produce forecasts. diff --git a/man/grad_employ_subset.Rd b/man/grad_employ_subset.Rd index 8e7a230f7..46ba36913 100644 --- a/man/grad_employ_subset.Rd +++ b/man/grad_employ_subset.Rd @@ -5,7 +5,7 @@ \alias{grad_employ_subset} \title{Subset of Statistics Canada median employment income for postsecondary graduates} \format{ -An \link[epiprocess:as_epi_df]{epiprocess::epi_df} with 10193 rows and 8 variables: +An \link[epiprocess:epi_df]{epiprocess::epi_df} with 10193 rows and 8 variables: \describe{ \item{geo_value}{The province in Canada associated with each row of measurements.} diff --git a/man/predict-epi_workflow.Rd b/man/predict-epi_workflow.Rd index 2ecdf0102..130279249 100644 --- a/man/predict-epi_workflow.Rd +++ b/man/predict-epi_workflow.Rd @@ -60,7 +60,7 @@ workflow was created and fit. This is accomplished using \code{\link[recipes:bake]{recipes::bake()}} if a recipe was supplied. \item Call \code{\link[parsnip:predict.model_fit]{parsnip::predict.model_fit()}} for you using the underlying fit parsnip model. -\item Ensure that the returned object is an \link[epiprocess:as_epi_df]{epiprocess::epi_df} where +\item Ensure that the returned object is an \link[epiprocess:epi_df]{epiprocess::epi_df} where possible. Specifically, the output will have \code{time_value} and \code{geo_value} columns as well as the prediction. } diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd index fb83942ae..46bb386ad 100644 --- a/man/step_epi_slide.Rd +++ b/man/step_epi_slide.Rd @@ -41,30 +41,14 @@ argument must be named \code{.x}. A common, though very difficult to debug error is using something like \code{function(x) mean}. This will not work because it returns the function mean, rather than \code{mean(x)}} -\item{before, after}{non-negative integers. -How far \code{before} and \code{after} each \code{time_value} should -the sliding window extend? Any value provided for either -argument must be a single, non-\code{NA}, non-negative, -\link[vctrs:vec_cast]{integer-compatible} number of time steps. Endpoints of -the window are inclusive. Common settings: -\itemize{ -\item For trailing/right-aligned windows from \code{time_value - time_step(k)} to -\code{time_value}, use \verb{before=k, after=0}. This is the most likely use case -for the purposes of forecasting. -\item For center-aligned windows from \code{time_value - time_step(k)} to -\code{time_value + time_step(k)}, use \verb{before=k, after=k}. -\item For leading/left-aligned windows from \code{time_value} to -\code{time_value + time_step(k)}, use \verb{after=k, after=0}. -} - -You may also pass a \link[lubridate:period]{lubridate::period}, like \code{lubridate::weeks(1)} or a -character string that is coercible to a \link[lubridate:period]{lubridate::period}, like -\code{"2 weeks"}.} +\item{before, after}{the size of the sliding window on the left and the right +of the center. Usually non-negative integers for data indexed by date, but +more restrictive in other cases (see \code{\link[epiprocess:epi_slide]{epiprocess::epi_slide()}} for details).} \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} -\item{prefix}{A prefix to indicate what type of variable this is} +\item{prefix}{A character string that will be prefixed to the new column.} \item{f_name}{a character string of at most 20 characters that describes the function. This will be combined with \code{prefix} and the columns in \code{...} diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 1f284b721..29e046eae 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -1,3 +1,5 @@ +library(dplyr) + tt <- seq(as.Date("2022-01-01"), by = "1 day", length.out = 20) edf <- data.frame( time_value = c(tt, tt), @@ -7,17 +9,14 @@ edf <- data.frame( as_epi_df() r <- epi_recipe(edf) - -test_that("try_period works", { - expect_error(try_period("1 jeff")) - expect_error(try_period(lubridate::period("1 jeff"))) - expect_error(try_period(NA)) - expect_error(try_period(1.5)) - res <- lubridate::weeks(1) - expect_identical(try_period("1 week"), res) - expect_identical(try_period(lubridate::period("1 week")), res) - expect_identical(try_period(1L), 1L) -}) +rolled_before <- edf %>% + group_by(geo_value) %>% + epi_slide(value = mean(value), before = 3L) %>% + pull(value) +rolled_after <- edf %>% + group_by(geo_value) %>% + epi_slide(value = mean(value), after = 3L) %>% + pull(value) test_that("epi_slide errors when needed", { @@ -43,92 +42,21 @@ test_that("epi_slide errors when needed", { expect_error(r %>% step_epi_slide(value, .f = 1)) }) -library(dplyr) -rolled_before <- edf %>% - group_by(geo_value) %>% - epi_slide(value = mean(value), before = 3L) %>% - pull(value) -rolled_after <- edf %>% - group_by(geo_value) %>% - epi_slide(value = mean(value), after = 3L) %>% - pull(value) - - -test_that("epi_slide handles classed before/after", { - expect_warning( - baseline <- r %>% - step_epi_slide(value, .f = mean, before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_equal(baseline[[4]], rolled_before) - - expect_warning( - pbefore <- r %>% - step_epi_slide(value, .f = mean, before = lubridate::period("3 days")) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_warning( - cbefore <- r %>% - step_epi_slide(value, .f = mean, before = "3 days") %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_equal(baseline, pbefore) - expect_equal(baseline, cbefore) - - expect_warning( - baseline <- r %>% - step_epi_slide(value, .f = mean, after = 3L) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_equal(baseline[[4]], rolled_after) - expect_warning( - pafter <- r %>% - step_epi_slide(value, .f = mean, after = lubridate::period("3 days")) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_warning( - cafter <- r %>% - step_epi_slide(value, .f = mean, after = "3 days") %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_equal(baseline, pafter) - expect_equal(baseline, cafter) -}) - test_that("epi_slide handles different function specs", { - expect_warning( - cfun <- r %>% - step_epi_slide(value, .f = "mean", before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) - expect_warning( - ffun <- r %>% - step_epi_slide(value, .f = mean, before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL), - regexp = "There is an optimized version" - ) + cfun <- r %>% + step_epi_slide(value, .f = "mean", before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) + ffun <- r %>% + step_epi_slide(value, .f = mean, before = 3L) %>% + prep(edf) %>% + bake(new_data = NULL) # formula NOT currently supported expect_error( lfun <- r %>% - step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L) %>% - prep(edf) %>% - bake(new_data = NULL) + step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L), + regexp = "cannot be a formula." ) blfun <- r %>% step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), before = 3L) %>% From 5ff6a6d7559b68ac837144e8f06f477929dfd340 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 10:57:48 -0700 Subject: [PATCH 327/382] move func to new file, properly deal with NAs --- R/dist_quantiles.R | 63 +++++----------------------------------------- 1 file changed, 6 insertions(+), 57 deletions(-) diff --git a/R/dist_quantiles.R b/R/dist_quantiles.R index 8f05065c6..dd97ec809 100644 --- a/R/dist_quantiles.R +++ b/R/dist_quantiles.R @@ -117,59 +117,6 @@ validate_dist_quantiles <- function(values, quantile_levels) { } -#' Summarize a distribution with a set of quantiles -#' -#' @param x a `distribution` vector -#' @param probs a vector of probabilities at which to calculate quantiles -#' @param ... additional arguments passed on to the `quantile` method -#' -#' @return a `distribution` vector containing `dist_quantiles` -#' @export -#' -#' @examples -#' library(distributional) -#' dstn <- dist_normal(c(10, 2), c(5, 10)) -#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) -#' -#' dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) -#' # because this distribution is already quantiles, any extra quantiles are -#' # appended -#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) -#' -#' dstn <- c( -#' dist_normal(c(10, 2), c(5, 10)), -#' dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) -#' ) -#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) -extrapolate_quantiles <- function(x, probs, ...) { - UseMethod("extrapolate_quantiles") -} - -#' @export -#' @importFrom vctrs vec_data -extrapolate_quantiles.distribution <- function(x, probs, ...) { - arg_is_probabilities(probs) - dstn <- lapply(vec_data(x), extrapolate_quantiles, probs = probs, ...) - new_vctr(dstn, vars = NULL, class = "distribution") -} - -#' @export -extrapolate_quantiles.dist_default <- function(x, probs, ...) { - values <- quantile(x, probs, ...) - new_quantiles(values = values, quantile_levels = probs) -} - -#' @export -extrapolate_quantiles.dist_quantiles <- function(x, probs, ...) { - new_values <- quantile(x, probs, ...) - quantile_levels <- field(x, "quantile_levels") - values <- field(x, "values") - new_quantiles( - values = c(values, new_values), - quantile_levels = c(quantile_levels, probs) - ) -} - is_dist_quantiles <- function(x) { is_distribution(x) & all(stats::family(x) == "quantiles") } @@ -213,18 +160,20 @@ quantile.dist_quantiles <- function(x, p, ..., middle = c("cubic", "linear")) { quantile_extrapolate <- function(x, tau_out, middle) { tau <- field(x, "quantile_levels") qvals <- field(x, "values") - r <- range(tau, na.rm = TRUE) + nas <- is.na(qvals) qvals_out <- rep(NA, length(tau_out)) + qvals <- qvals[!nas] + tau <- tau[!nas] # short circuit if we aren't actually extrapolating # matches to ~15 decimals if (all(tau_out %in% tau)) { return(qvals[match(tau_out, tau)]) } - if (length(qvals) < 2) { - cli::cli_abort(c( + if (length(tau) < 2) { + cli::cli_abort( "Quantile extrapolation is not possible with fewer than 2 quantiles." - )) + ) return(qvals_out) } From 80d204b7e1021b3858325a5c43748f28651d2358 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 10:58:24 -0700 Subject: [PATCH 328/382] function in new file --- R/extrapolate_quantiles.R | 61 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 R/extrapolate_quantiles.R diff --git a/R/extrapolate_quantiles.R b/R/extrapolate_quantiles.R new file mode 100644 index 000000000..55115d4cd --- /dev/null +++ b/R/extrapolate_quantiles.R @@ -0,0 +1,61 @@ + +#' Summarize a distribution with a set of quantiles +#' +#' @param x a `distribution` vector +#' @param probs a vector of probabilities at which to calculate quantiles +#' @param ... additional arguments passed on to the `quantile` method +#' +#' @return a `distribution` vector containing `dist_quantiles` +#' @export +#' +#' @examples +#' library(distributional) +#' dstn <- dist_normal(c(10, 2), c(5, 10)) +#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) +#' +#' dstn <- dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) +#' # because this distribution is already quantiles, any extra quantiles are +#' # appended +#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) +#' +#' dstn <- c( +#' dist_normal(c(10, 2), c(5, 10)), +#' dist_quantiles(list(1:4, 8:11), list(c(.2, .4, .6, .8))) +#' ) +#' extrapolate_quantiles(dstn, probs = c(.25, 0.5, .75)) +extrapolate_quantiles <- function(x, probs, replace_na = TRUE, ...) { + UseMethod("extrapolate_quantiles") +} + +#' @export +#' @importFrom vctrs vec_data +extrapolate_quantiles.distribution <- function(x, probs, replace_na = TRUE, ...) { + rlang::check_dots_empty() + arg_is_lgl_scalar(replace_na) + arg_is_probabilities(probs) + if (is.unsorted(probs)) probs <- sort(probs) + dstn <- lapply(vec_data(x), extrapolate_quantiles, probs = probs, replace_na = replace_na) + new_vctr(dstn, vars = NULL, class = "distribution") +} + +#' @export +extrapolate_quantiles.dist_default <- function(x, probs, replace_na = TRUE, ...) { + values <- quantile(x, probs, ...) + new_quantiles(values = values, quantile_levels = probs) +} + +#' @export +extrapolate_quantiles.dist_quantiles <- function(x, probs, replace_na = TRUE, ...) { + orig_probs <- field(x, "quantile_levels") + orig_values <- field(x, "values") + new_probs <- c(orig_probs, probs) + dups <- duplicated(new_probs) + if (!replace_na || !anyNA(orig_values)) { + new_values <- c(orig_values, quantile(x, probs, ...)) + } else { + nas <- is.na(orig_values) + orig_values[nas] <- quantile(x, orig_probs[nas], ...) + new_values <- c(orig_values, quantile(x, probs, ...)) + } + new_quantiles(new_values[!dups], new_probs[!dups]) +} From 86a90853f3b99e798385e69d13a93d56df72bf7d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 10:58:49 -0700 Subject: [PATCH 329/382] add function for na handling, allow a set of quantiles to be passed in --- R/weighted_interval_score.R | 105 +++++++++++++++++++++++++++++------- 1 file changed, 87 insertions(+), 18 deletions(-) diff --git a/R/weighted_interval_score.R b/R/weighted_interval_score.R index c87fbce71..a5fd5483e 100644 --- a/R/weighted_interval_score.R +++ b/R/weighted_interval_score.R @@ -7,8 +7,12 @@ #' al. (2020)](https://arxiv.org/abs/2005.12881) for discussion in the context #' of COVID-19 forecasting. #' -#' @param x dist_quantiles. A vector of class [dist_quantiles()]. +#' @param x distribution. A vector of class distribution. Ideally, this vector +#' contains `dist_quantiles()`, though other distributions are supported when +#' `quantile_levels` is specified. See below. #' @param actual double. Actual value(s) +#' @param quantile_levels probabilities. If specified, the score will be +#' computed at this set of levels. #' @param ... not used #' #' @return a vector of nonnegative scores. @@ -21,6 +25,21 @@ #' dstn <- dist_quantiles(list(predq_1, predq_2), quantile_levels) #' actual <- c(3.3, 7.1) #' weighted_interval_score(dstn, actual) +#' weighted_interval_score(dstn, actual, c(.25, .5, .75)) +#' +#' library(distributional) +#' dstn <- dist_normal(c(.75, 2)) +#' weighted_interval_score(dstn, 1, c(.25, .5, .75)) +#' +#' # Missing value behaviours +#' dstn <- dist_quantiles(c(1, 2, NA, 4), 1:4 / 5) +#' weighted_interval_score(dstn, 2.5) +#' weighted_interval_score(dstn, 2.5, 1:9 / 10) +#' weighted_interval_score(dstn, 2.5, 1:9 / 10, na_handling = "drop") +#' weighted_interval_score(dstn, 2.5, na_handling = "propagate") +#' weighted_interval_score(dist_quantiles(1:4, 1:4 / 5), 2.5, 1:9 / 10, +#' na_handling = "fail") +#' #' #' # Using some actual forecasts -------- #' library(dplyr) @@ -38,36 +57,86 @@ #' ) %>% #' mutate(wis = weighted_interval_score(.pred_distn, actual)) #' preds -weighted_interval_score <- function(x, actual, ...) { +weighted_interval_score <- function(x, actual, quantile_levels = NULL, ...) { UseMethod("weighted_interval_score") } #' @export -weighted_interval_score.default <- function(x, actual, ...) { - cli_abort("Weighted interval score can only be calculated if `x` has class {.cls distribution}.") +weighted_interval_score.default <- function(x, actual, + quantile_levels = NULL, ...) { + cli_abort(c( + "Weighted interval score can only be calculated if `x`", + "has class {.cls distribution}." + )) } #' @export -weighted_interval_score.distribution <- function(x, actual, ...) { - rlang::check_dots_empty() +weighted_interval_score.distribution <- function( + x, actual, + quantile_levels = NULL, ...) { assert_numeric(actual, finite = TRUE) l <- vctrs::vec_recycle_common(x = x, actual = actual) - map2_dbl(vctrs::vec_data(l$x), l$actual, weighted_interval_score) + map2_dbl( + .x = vctrs::vec_data(l$x), + .y = l$actual, + .f = weighted_interval_score, + quantile_levels = quantile_levels, + ... + ) } #' @export -weighted_interval_score.dist_default <- function(x, actual, ...) { - cli_warn(c( - "Weighted interval score is only meaningful for {.cls dist_quantiles}.", - "This {.cls distribution} vector contains {.cls {class(x)}}.", - "The result for this element will be `NA`." - )) - return(NA) +weighted_interval_score.dist_default <- function(x, actual, + quantile_levels = NULL, ...) { + rlang::check_dots_empty() + if (is.null(quantile_levels)) { + cli_warn(c( + "Weighted interval score isn't implemented for {.cls {class(x)}}", + "as we don't know what set of quantile levels to use.", + "Use a {.cls dist_quantiles} or pass `quantile_levels`.", + "The result for this element will be `NA`." + )) + return(NA) + } + x <- extrapolate_quantiles(x, probs = quantile_levels) + weighted_interval_score(x, actual, quantile_levels = NULL) } +#' @param na_handling character. Determines how `quantile_levels` without a +#' corresponding `value` are handled. For `"impute"`, missing values will be +#' calculated if possible using the available quantiles. For `"drop"`, +#' explicitly missing values are ignored in the calculation of the score, but +#' implicitly missing values are imputed if possible. +#' For `"propogate"`, the resulting score will be `NA` if any missing values +#' exist in the original `quantile_levels`. Finally, if +#' `quantile_levels` is specified, `"fail"` will result in +#' the score being `NA` when any required quantile levels (implicit or explicit) +#' are do not have corresponding values. +#' @describeIn weighted_interval_score Weighted interval score with +#' `dist_quantiles` allows for different `NA` behaviours. #' @export -weighted_interval_score.dist_quantiles <- function(x, actual, ...) { - q <- vctrs::field(x, "values") - tau <- vctrs::field(x, "quantile_levels") - 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = TRUE) +weighted_interval_score.dist_quantiles <- function( + x, actual, + quantile_levels = NULL, + na_handling = c("impute", "drop", "propagate", "fail"), + ...) { + rlang::check_dots_empty() + if (is.na(actual)) return(NA) + if (all(is.na(vctrs::field(x, "values")))) return(NA) + na_handling <- rlang::arg_match(na_handling) + old_quantile_levels <- field(x, "quantile_levels") + if (na_handling == "fail") { + if (is.null(quantile_levels)) { + cli_abort('`na_handling = "fail"` requires `quantile_levels` to be specified.') + } + old_values <- field(x, "values") + if (!all(quantile_levels %in% old_quantile_levels) || any(is.na(old_values))) { + return(NA) + } + } + tau <- quantile_levels %||% old_quantile_levels + x <- extrapolate_quantiles(x, probs = tau, replace_na = (na_handling == "impute")) + q <- field(x, "values")[field(x, "quantile_levels") %in% tau] + na_rm = (na_handling == "drop") + 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = na_rm) } From 604b22ffe3288eb88df0298a7c98b14af26717ba Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 10:59:28 -0700 Subject: [PATCH 330/382] tests for additional functionality --- tests/testthat/test-dist_quantiles.R | 11 +++++++++++ tests/testthat/test-wis-dist-quantiles.R | 23 +++++++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 9845cb787..66456ef80 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -46,6 +46,17 @@ test_that("quantile extrapolator works", { expect_s3_class(qq, "distribution") expect_s3_class(vctrs::vec_data(qq[1])[[1]], "dist_quantiles") expect_length(parameters(qq[1])$quantile_levels[[1]], 7L) + + dstn <- dist_quantiles(1:4, 1:4 / 5) + qq <- extrapolate_quantiles(dstn, 1:9 / 10) + dstn_na <- dist_quantiles(c(1, 2, NA, 4), 1:4 / 5) + qq2 <- extrapolate_quantiles(dstn_na, 1:9 / 10) + expect_equal(qq, qq2) + qq3 <- extrapolate_quantiles(dstn_na, 1:9 / 10, replace_na = FALSE) + qq2_vals <- field(vec_data(qq2)[[1]], "values") + qq3_vals <- field(vec_data(qq3)[[1]], "values") + qq2_vals[6] <- NA + expect_equal(qq2_vals, qq3_vals) }) test_that("small deviations of quantile requests work", { diff --git a/tests/testthat/test-wis-dist-quantiles.R b/tests/testthat/test-wis-dist-quantiles.R index 1821864c1..93f7c50eb 100644 --- a/tests/testthat/test-wis-dist-quantiles.R +++ b/tests/testthat/test-wis-dist-quantiles.R @@ -25,12 +25,6 @@ test_that("wis dispatches and produces the correct values", { c(NA, wis_one_pred(q2, tau, actual)) ) - # non-NA where possible - expect_equal( - weighted_interval_score(dist_quantiles(c(1, 2, NA, 4), 1:4 / 5), 3), - 2 / 3 - ) - # errors for non distributions expect_error(weighted_interval_score(1:10, 10)) expect_warning(w <- weighted_interval_score(dist_normal(1), 10)) @@ -46,4 +40,21 @@ test_that("wis dispatches and produces the correct values", { dist_quantiles(list(1:4, 8:11), 1:4 / 5), # length 2 1:3 )) + + #' # Missing value behaviours + dstn <- dist_quantiles(c(1, 2, NA, 4), 1:4 / 5) + expect_equal(weighted_interval_score(dstn, 2.5), 0.5) + expect_equal(weighted_interval_score(dstn, 2.5, c(2, 4, 5, 6, 8) / 10), 0.4) + expect_equal( + weighted_interval_score(dist_quantiles(c(1, 2, NA, 4), 1:4 / 5), 3, na_handling = "drop"), + 2 / 3 + ) + expect_equal( + weighted_interval_score(dstn, 2.5, c(2, 4, 5, 6, 8) / 10, na_handling = "drop"), + 0.4 + ) + expect_true(is.na( + weighted_interval_score(dstn, 2.5, na_handling = "propagate") + )) + weighted_interval_score(dist_quantiles(1:4, 1:4 / 5), 2.5, 1:9 / 10, na_handling = "fail") }) From 00d5c514d02634efc35f666c1c8fe6917384483c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 10:59:48 -0700 Subject: [PATCH 331/382] document --- man/extrapolate_quantiles.Rd | 4 +-- man/weighted_interval_score.Rd | 50 ++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/man/extrapolate_quantiles.Rd b/man/extrapolate_quantiles.Rd index 619b2aa07..4c63b33f2 100644 --- a/man/extrapolate_quantiles.Rd +++ b/man/extrapolate_quantiles.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/dist_quantiles.R +% Please edit documentation in R/extrapolate_quantiles.R \name{extrapolate_quantiles} \alias{extrapolate_quantiles} \title{Summarize a distribution with a set of quantiles} \usage{ -extrapolate_quantiles(x, probs, ...) +extrapolate_quantiles(x, probs, replace_na = TRUE, ...) } \arguments{ \item{x}{a \code{distribution} vector} diff --git a/man/weighted_interval_score.Rd b/man/weighted_interval_score.Rd index d77aa61c5..1881d2baf 100644 --- a/man/weighted_interval_score.Rd +++ b/man/weighted_interval_score.Rd @@ -2,16 +2,41 @@ % Please edit documentation in R/weighted_interval_score.R \name{weighted_interval_score} \alias{weighted_interval_score} +\alias{weighted_interval_score.dist_quantiles} \title{Compute weighted interval score} \usage{ -weighted_interval_score(x, actual, ...) +weighted_interval_score(x, actual, quantile_levels = NULL, ...) + +\method{weighted_interval_score}{dist_quantiles}( + x, + actual, + quantile_levels = NULL, + na_handling = c("impute", "drop", "propagate", "fail"), + ... +) } \arguments{ -\item{x}{dist_quantiles. A vector of class \code{\link[=dist_quantiles]{dist_quantiles()}}.} +\item{x}{distribution. A vector of class distribution. Ideally, this vector +contains \code{dist_quantiles()}, though other distributions are supported when +\code{quantile_levels} is specified. See below.} \item{actual}{double. Actual value(s)} +\item{quantile_levels}{probabilities. If specified, the score will be +computed at this set of levels.} + \item{...}{not used} + +\item{na_handling}{character. Determines how \code{quantile_levels} without a +corresponding \code{value} are handled. For \code{"impute"}, missing values will be +calculated if possible using the available quantiles. For \code{"drop"}, +explicitly missing values are ignored in the calculation of the score, but +implicitly missing values are imputed if possible. +For \code{"propogate"}, the resulting score will be \code{NA} if any missing values +exist in the original \code{quantile_levels}. Finally, if +\code{quantile_levels} is specified, \code{"fail"} will result in +the score being \code{NA} when any required quantile levels (implicit or explicit) +are do not have corresponding values.} } \value{ a vector of nonnegative scores. @@ -23,6 +48,12 @@ approximation of the commonly-used continuous ranked probability score generalization of absolute error. For example, see \href{https://arxiv.org/abs/2005.12881}{Bracher et al. (2020)} for discussion in the context of COVID-19 forecasting. } +\section{Methods (by class)}{ +\itemize{ +\item \code{weighted_interval_score(dist_quantiles)}: Weighted interval score with +\code{dist_quantiles} allows for different \code{NA} behaviours. + +}} \examples{ quantile_levels <- c(.2, .4, .6, .8) predq_1 <- 1:4 # @@ -30,6 +61,21 @@ predq_2 <- 8:11 dstn <- dist_quantiles(list(predq_1, predq_2), quantile_levels) actual <- c(3.3, 7.1) weighted_interval_score(dstn, actual) +weighted_interval_score(dstn, actual, c(.25, .5, .75)) + +library(distributional) +dstn <- dist_normal(c(.75, 2)) +weighted_interval_score(dstn, 1, c(.25, .5, .75)) + +# Missing value behaviours +dstn <- dist_quantiles(c(1, 2, NA, 4), 1:4 / 5) +weighted_interval_score(dstn, 2.5) +weighted_interval_score(dstn, 2.5, 1:9 / 10) +weighted_interval_score(dstn, 2.5, 1:9 / 10, na_handling = "drop") +weighted_interval_score(dstn, 2.5, na_handling = "propagate") +weighted_interval_score(dist_quantiles(1:4, 1:4 / 5), 2.5, 1:9 / 10, + na_handling = "fail") + # Using some actual forecasts -------- library(dplyr) From 4171573919a8a3f829a02c09d533ddf2c41f87e4 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 11:01:57 -0700 Subject: [PATCH 332/382] stylr --- R/extrapolate_quantiles.R | 1 - R/weighted_interval_score.R | 13 +++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/R/extrapolate_quantiles.R b/R/extrapolate_quantiles.R index 55115d4cd..d63f1272c 100644 --- a/R/extrapolate_quantiles.R +++ b/R/extrapolate_quantiles.R @@ -1,4 +1,3 @@ - #' Summarize a distribution with a set of quantiles #' #' @param x a `distribution` vector diff --git a/R/weighted_interval_score.R b/R/weighted_interval_score.R index a5fd5483e..cd67bbee9 100644 --- a/R/weighted_interval_score.R +++ b/R/weighted_interval_score.R @@ -38,7 +38,8 @@ #' weighted_interval_score(dstn, 2.5, 1:9 / 10, na_handling = "drop") #' weighted_interval_score(dstn, 2.5, na_handling = "propagate") #' weighted_interval_score(dist_quantiles(1:4, 1:4 / 5), 2.5, 1:9 / 10, -#' na_handling = "fail") +#' na_handling = "fail" +#' ) #' #' #' # Using some actual forecasts -------- @@ -121,8 +122,12 @@ weighted_interval_score.dist_quantiles <- function( na_handling = c("impute", "drop", "propagate", "fail"), ...) { rlang::check_dots_empty() - if (is.na(actual)) return(NA) - if (all(is.na(vctrs::field(x, "values")))) return(NA) + if (is.na(actual)) { + return(NA) + } + if (all(is.na(vctrs::field(x, "values")))) { + return(NA) + } na_handling <- rlang::arg_match(na_handling) old_quantile_levels <- field(x, "quantile_levels") if (na_handling == "fail") { @@ -137,6 +142,6 @@ weighted_interval_score.dist_quantiles <- function( tau <- quantile_levels %||% old_quantile_levels x <- extrapolate_quantiles(x, probs = tau, replace_na = (na_handling == "impute")) q <- field(x, "values")[field(x, "quantile_levels") %in% tau] - na_rm = (na_handling == "drop") + na_rm <- (na_handling == "drop") 2 * mean(pmax(tau * (actual - q), (1 - tau) * (q - actual)), na.rm = na_rm) } From f96a1f17c1e6bdebeccf7180a93407636c728468 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 9 Aug 2024 11:26:57 -0700 Subject: [PATCH 333/382] documentation adjustments --- R/extrapolate_quantiles.R | 7 ++++++- man/extrapolate_quantiles.Rd | 8 +++++++- man/weighted_interval_score.Rd | 3 ++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/R/extrapolate_quantiles.R b/R/extrapolate_quantiles.R index d63f1272c..3362e339e 100644 --- a/R/extrapolate_quantiles.R +++ b/R/extrapolate_quantiles.R @@ -2,9 +2,14 @@ #' #' @param x a `distribution` vector #' @param probs a vector of probabilities at which to calculate quantiles +#' @param replace_na logical. If `x` contains `NA`'s, these are imputed if +#' possible (if `TRUE`) or retained (if `FALSE`). This only effects +#' elements of class `dist_quantiles`. #' @param ... additional arguments passed on to the `quantile` method #' -#' @return a `distribution` vector containing `dist_quantiles` +#' @return a `distribution` vector containing `dist_quantiles`. Any elements +#' of `x` which were originally `dist_quantiles` will now have a superset +#' of the original `quantile_values` (the union of those and `probs`). #' @export #' #' @examples diff --git a/man/extrapolate_quantiles.Rd b/man/extrapolate_quantiles.Rd index 4c63b33f2..4b1d1282c 100644 --- a/man/extrapolate_quantiles.Rd +++ b/man/extrapolate_quantiles.Rd @@ -11,10 +11,16 @@ extrapolate_quantiles(x, probs, replace_na = TRUE, ...) \item{probs}{a vector of probabilities at which to calculate quantiles} +\item{replace_na}{logical. If \code{x} contains \code{NA}'s, these are imputed if +possible (if \code{TRUE}) or retained (if \code{FALSE}). This only effects +elements of class \code{dist_quantiles}.} + \item{...}{additional arguments passed on to the \code{quantile} method} } \value{ -a \code{distribution} vector containing \code{dist_quantiles} +a \code{distribution} vector containing \code{dist_quantiles}. Any elements +of \code{x} which were originally \code{dist_quantiles} will now have a superset +of the original \code{quantile_values} (the union of those and \code{probs}). } \description{ Summarize a distribution with a set of quantiles diff --git a/man/weighted_interval_score.Rd b/man/weighted_interval_score.Rd index 1881d2baf..4907e2724 100644 --- a/man/weighted_interval_score.Rd +++ b/man/weighted_interval_score.Rd @@ -74,7 +74,8 @@ weighted_interval_score(dstn, 2.5, 1:9 / 10) weighted_interval_score(dstn, 2.5, 1:9 / 10, na_handling = "drop") weighted_interval_score(dstn, 2.5, na_handling = "propagate") weighted_interval_score(dist_quantiles(1:4, 1:4 / 5), 2.5, 1:9 / 10, - na_handling = "fail") + na_handling = "fail" +) # Using some actual forecasts -------- From b4ae46400292c5a60c499f48cc297514df8c8660 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 12 Aug 2024 13:15:28 -0700 Subject: [PATCH 334/382] missing exports --- R/make_grf_quantiles.R | 4 ++-- man/grf_quantiles.Rd | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/make_grf_quantiles.R b/R/make_grf_quantiles.R index 9796e581e..253ea1ac7 100644 --- a/R/make_grf_quantiles.R +++ b/R/make_grf_quantiles.R @@ -143,7 +143,7 @@ make_grf_quantiles <- function() { defaults = list( quantiles = c(0.1, 0.5, 0.9), num.threads = 1L, - seed = expr(runif(1, 0, .Machine$integer.max)) + seed = rlang::expr(stats::runif(1, 0, .Machine$integer.max)) ) ) ) @@ -185,7 +185,7 @@ make_grf_quantiles <- function() { args = list( object = quote(object$fit), newdata = quote(new_data), - seed = expr(sample.int(10^5, 1)), + seed = rlang::expr(sample.int(10^5, 1)), verbose = FALSE ) ) diff --git a/man/grf_quantiles.Rd b/man/grf_quantiles.Rd index ece589011..e6852a55b 100644 --- a/man/grf_quantiles.Rd +++ b/man/grf_quantiles.Rd @@ -52,7 +52,7 @@ details, see \href{https://grf-labs.github.io/grf/articles/categorical_inputs.ht #> Model fit template: #> grf::quantile_forest(X = missing_arg(), Y = missing_arg(), mtry = min_cols(~integer(1), #> x), num.trees = integer(1), min.node.size = min_rows(~integer(1), -#> x), quantiles = c(0.1, 0.5, 0.9), num.threads = 1L, seed = runif(1, +#> x), quantiles = c(0.1, 0.5, 0.9), num.threads = 1L, seed = stats::runif(1, #> 0, .Machine$integer.max)) }\if{html}{\out{

    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Π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�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

    }} } From 193d0c8026a9c9d815b05969ee02ccd74717faff Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 13 Aug 2024 15:06:45 -0700 Subject: [PATCH 335/382] fixing guess_time_type error --- vignettes/articles/sliding.Rmd | 1 - 1 file changed, 1 deletion(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 3480dfff1..ec6f67359 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -429,7 +429,6 @@ arx_preds <- x %>% names_sep = NULL ) %>% mutate(engine_type = quantile_reg()$engine) %>% - as_epi_df() %>% mutate(ahead_val = target_date - forecast_date) x_latest <- epix_as_of(x, max_version = max(x$versions_end)) From 90c89c78e7ae7942b4f557161d8fbe824e82f7b5 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 13 Aug 2024 15:26:08 -0700 Subject: [PATCH 336/382] updating DESCRIPTION and NEWS.md --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 3e8db4117..9bf5de6b4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.18 +Version: 0.0.19 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From f5b05c5664e58a078173fbefee3d7d7bcdaf7a92 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 13 Aug 2024 15:27:47 -0700 Subject: [PATCH 337/382] updating NEWS.md --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index d02e246f0..1237f4ecd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -53,3 +53,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values - Add `step_epi_slide` to produce generic sliding computations over an `epi_df` +- Fixed `guess_time_type()` error in sliding vignette \ No newline at end of file From 55db8bb077b7dea151766e38cea5eaae8b59ecb5 Mon Sep 17 00:00:00 2001 From: Ryan Nayebi Date: Tue, 13 Aug 2024 15:48:51 -0700 Subject: [PATCH 338/382] undoing changes to news and description, as it is a small change --- DESCRIPTION | 2 +- NEWS.md | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9bf5de6b4..3e8db4117 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.19 +Version: 0.0.18 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 1237f4ecd..12780f208 100644 --- a/NEWS.md +++ b/NEWS.md @@ -52,5 +52,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat `...` args intended for `predict.model_fit()` - `bake.epi_recipe()` will now re-infer the geo and time type in case baking the steps has changed the appropriate values -- Add `step_epi_slide` to produce generic sliding computations over an `epi_df` -- Fixed `guess_time_type()` error in sliding vignette \ No newline at end of file +- Add `step_epi_slide` to produce generic sliding computations over an `epi_df` \ No newline at end of file From e4617d00e3fe52ad1807a15271894279d9bedeb7 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 09:44:10 -0700 Subject: [PATCH 339/382] checks pass --- NAMESPACE | 16 ++++-- NEWS.md | 1 + R/autoplot.R | 6 +- R/cdc_baseline_forecaster.R | 2 +- R/epi_keys.R | 56 ------------------- R/epi_recipe.R | 12 ++-- R/epi_workflow.R | 4 +- R/epipredict-package.R | 2 + R/flatline_forecaster.R | 2 +- R/get_test_data.R | 16 +++--- R/key_colnames.R | 28 ++++++++++ R/layer_cdc_flatline_quantiles.R | 2 +- R/layer_population_scaling.R | 2 +- R/step_epi_shift.R | 6 +- R/step_epi_slide.R | 2 +- R/step_growth_rate.R | 4 +- R/step_lag_difference.R | 4 +- R/step_training_window.R | 2 +- R/utils-misc.R | 4 +- man/epi_keys.Rd | 20 ------- tests/testthat/test-epi_recipe.R | 10 ++-- tests/testthat/test-epi_shift.R | 2 +- .../{test-epi_keys.R => test-key_colnames.R} | 30 ++-------- vignettes/epipredict.Rmd | 2 +- 24 files changed, 87 insertions(+), 148 deletions(-) delete mode 100644 R/epi_keys.R create mode 100644 R/key_colnames.R delete mode 100644 man/epi_keys.Rd rename tests/testthat/{test-epi_keys.R => test-key_colnames.R} (63%) diff --git a/NAMESPACE b/NAMESPACE index 608cea18b..b07321768 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -28,11 +28,6 @@ S3method(bake,step_population_scaling) S3method(bake,step_training_window) S3method(detect_layer,frosting) S3method(detect_layer,workflow) -S3method(epi_keys,data.frame) -S3method(epi_keys,default) -S3method(epi_keys,epi_df) -S3method(epi_keys,epi_workflow) -S3method(epi_keys,recipe) S3method(epi_recipe,default) S3method(epi_recipe,epi_df) S3method(epi_recipe,formula) @@ -55,6 +50,9 @@ S3method(forecast,epi_workflow) S3method(format,dist_quantiles) S3method(is.na,dist_quantiles) S3method(is.na,distribution) +S3method(key_colnames,epi_workflow) +S3method(key_colnames,list) +S3method(key_colnames,recipe) S3method(mean,dist_quantiles) S3method(median,dist_quantiles) S3method(predict,epi_workflow) @@ -154,7 +152,6 @@ export(clean_f_name) export(default_epi_recipe_blueprint) export(detect_layer) export(dist_quantiles) -export(epi_keys) export(epi_recipe) export(epi_recipe_blueprint) export(epi_workflow) @@ -231,9 +228,16 @@ importFrom(checkmate,assert_scalar) importFrom(cli,cli_abort) importFrom(dplyr,across) importFrom(dplyr,all_of) +importFrom(dplyr,any_of) +importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) +importFrom(dplyr,bind_rows) +importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,left_join) +importFrom(dplyr,mutate) importFrom(dplyr,n) +importFrom(dplyr,select) importFrom(dplyr,summarise) importFrom(dplyr,ungroup) importFrom(epiprocess,epi_slide) diff --git a/NEWS.md b/NEWS.md index 62095be73..15aa6de29 100644 --- a/NEWS.md +++ b/NEWS.md @@ -56,3 +56,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - add functionality to calculate weighted interval scores for `dist_quantiles()` - Add `step_epi_slide` to produce generic sliding computations over an `epi_df` - Add quantile random forests (via `{grf}`) as a parsnip engine +- Replace `epi_keys()` with `epiprocess::key_colnames()`, #352 diff --git a/R/autoplot.R b/R/autoplot.R index 77f04dde7..0d0e48e35 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -125,7 +125,7 @@ autoplot.epi_workflow <- function( if (!is.null(shift)) { edf <- dplyr::mutate(edf, time_value = time_value + shift) } - extra_keys <- setdiff(epi_keys_mold(mold), c("time_value", "geo_value")) + extra_keys <- setdiff(key_colnames(mold), c("time_value", "geo_value")) if (length(extra_keys) == 0L) extra_keys <- NULL edf <- as_epi_df(edf, as_of = object$fit$meta$as_of, @@ -145,7 +145,7 @@ autoplot.epi_workflow <- function( } predictions <- dplyr::rename(predictions, time_value = target_date) } - pred_cols_ok <- hardhat::check_column_names(predictions, epi_keys(edf)) + pred_cols_ok <- hardhat::check_column_names(predictions, key_colnames(edf)) if (!pred_cols_ok$ok) { cli::cli_warn(c( "`predictions` is missing required variables: {.var {pred_cols_ok$missing_names}}.", @@ -165,7 +165,7 @@ autoplot.epi_workflow <- function( ) # Now, prepare matching facets in the predictions - ek <- kill_time_value(epi_keys(edf)) + ek <- kill_time_value(key_colnames(edf)) predictions <- predictions %>% dplyr::mutate( .facets = interaction(!!!rlang::syms(as.list(ek)), sep = "/"), diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index d5b74a9c3..31194daae 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -63,7 +63,7 @@ cdc_baseline_forecaster <- function( if (!inherits(args_list, c("cdc_flat_fcast", "alist"))) { cli_stop("args_list was not created using `cdc_baseline_args_list().") } - keys <- epi_keys(epi_data) + keys <- key_colnames(epi_data) ek <- kill_time_value(keys) outcome <- rlang::sym(outcome) diff --git a/R/epi_keys.R b/R/epi_keys.R deleted file mode 100644 index 08e4595c3..000000000 --- a/R/epi_keys.R +++ /dev/null @@ -1,56 +0,0 @@ -#' Grab any keys associated to an epi_df -#' -#' @param x a data.frame, tibble, or epi_df -#' @param ... additional arguments passed on to methods -#' -#' @return If an `epi_df`, this returns all "keys". Otherwise `NULL` -#' @keywords internal -#' @export -epi_keys <- function(x, ...) { - UseMethod("epi_keys") -} - -#' @export -epi_keys.default <- function(x, ...) { - character(0L) -} - -#' @export -epi_keys.data.frame <- function(x, other_keys = character(0L), ...) { - arg_is_chr(other_keys, allow_empty = TRUE) - nm <- c("time_value", "geo_value", other_keys) - intersect(nm, names(x)) -} - -#' @export -epi_keys.epi_df <- function(x, ...) { - c("time_value", "geo_value", attr(x, "metadata")$other_keys) -} - -#' @export -epi_keys.recipe <- function(x, ...) { - x$var_info$variable[x$var_info$role %in% c("time_value", "geo_value", "key")] -} - -#' @export -epi_keys.epi_workflow <- function(x, ...) { - epi_keys_mold(hardhat::extract_mold(x)) -} - -# a mold is a list extracted from a fitted workflow, gives info about -# training data. But it doesn't have a class -epi_keys_mold <- function(mold) { - keys <- c("time_value", "geo_value", "key") - molded_names <- names(mold$extras$roles) - mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unname(unlist(mold_keys)) -} - -kill_time_value <- function(v) { - arg_is_chr(v) - v[v != "time_value"] -} - -epi_keys_only <- function(x, ...) { - kill_time_value(epi_keys(x, ...)) -} diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 6d01d718f..311decf62 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -90,7 +90,7 @@ epi_recipe.epi_df <- rlang::abort("1 or more elements of `vars` are not in the data") } - keys <- epi_keys(x) # we know x is an epi_df + keys <- key_colnames(x) # we know x is an epi_df var_info <- tibble(variable = vars) key_roles <- c("time_value", "geo_value", rep("key", length(keys) - 2)) @@ -186,7 +186,7 @@ epi_form2args <- function(formula, data, ...) { ## use rlang to get both sides of the formula outcomes <- recipes:::get_lhs_vars(formula, data) predictors <- recipes:::get_rhs_vars(formula, data, no_lhs = TRUE) - keys <- epi_keys(data) + keys <- key_colnames(data) ## if . was used on the rhs, subtract out the outcomes predictors <- predictors[!(predictors %in% outcomes)] @@ -444,9 +444,9 @@ prep.epi_recipe <- function( } training <- recipes:::check_training_set(training, x, fresh) training <- epi_check_training_set(training, x) - training <- dplyr::relocate(training, tidyselect::all_of(epi_keys(training))) + training <- dplyr::relocate(training, dplyr::all_of(key_colnames(training))) tr_data <- recipes:::train_info(training) - keys <- epi_keys(x) + keys <- key_colnames(x) orig_lvls <- lapply(training, recipes:::get_levels) orig_lvls <- kill_levels(orig_lvls, keys) @@ -498,10 +498,10 @@ prep.epi_recipe <- function( # tidymodels killed our class # for now, we only allow step_epi_* to alter the metadata training <- dplyr::dplyr_reconstruct( - epiprocess::as_epi_df(training), before_template + as_epi_df(training), before_template ) } - training <- dplyr::relocate(training, tidyselect::all_of(epi_keys(training))) + training <- dplyr::relocate(training, dplyr::all_of(key_colnames(training))) x$term_info <- recipes:::merge_term_info(get_types(training), x$term_info) if (!is.na(x$steps[[i]]$role)) { new_vars <- setdiff(x$term_info$variable, running_info$variable) diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 0bdeece4f..3660b87e1 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -184,8 +184,8 @@ predict.epi_workflow <- function(object, new_data, type = NULL, opts = list(), . #' @export augment.epi_workflow <- function(x, new_data, ...) { predictions <- predict(x, new_data, ...) - if (epiprocess::is_epi_df(predictions)) { - join_by <- epi_keys(predictions) + if (is_epi_df(predictions)) { + join_by <- key_colnames(predictions) } else { rlang::abort( c( diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 6ca349570..d3c7a8a4a 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -3,6 +3,8 @@ #' @importFrom rlang := !! %||% as_function global_env set_names !!! #' @importFrom rlang is_logical is_true inject enquo enquos expr #' @importFrom stats poly predict lm residuals quantile +#' @importFrom dplyr arrange across all_of any_of bind_rows group_by summarise +#' filter mutate select left_join #' @importFrom cli cli_abort #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index dac87e5c4..42970c569 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -36,7 +36,7 @@ flatline_forecaster <- function( if (!inherits(args_list, c("flat_fcast", "alist"))) { cli_stop("args_list was not created using `flatline_args_list().") } - keys <- epi_keys(epi_data) + keys <- key_colnames(epi_data) ek <- kill_time_value(keys) outcome <- rlang::sym(outcome) diff --git a/R/get_test_data.R b/R/get_test_data.R index 0a7d0dc2a..88ecf4054 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -92,7 +92,7 @@ get_test_data <- function( } x <- arrange(x, time_value) - groups <- kill_time_value(epi_keys(recipe)) + groups <- kill_time_value(key_colnames(recipe)) # If we skip NA completion, we remove undesirably early time values # Happens globally, over all groups @@ -102,7 +102,7 @@ get_test_data <- function( # Pad with explicit missing values up to and including the forecast_date # x is grouped here x <- pad_to_end(x, groups, forecast_date) %>% - epiprocess::group_by(dplyr::across(dplyr::all_of(groups))) + group_by(dplyr::across(dplyr::all_of(groups))) # If all(lags > 0), then we get rid of recent data if (min_lags > 0 && min_lags < Inf) { @@ -116,14 +116,14 @@ get_test_data <- function( dplyr::mutate(fillers = forecast_date - time_value > min_required) %>% dplyr::summarize( dplyr::across( - -tidyselect::any_of(epi_keys(recipe)), + -dplyr::any_of(key_colnames(recipe)), ~ all(is.na(.x[fillers])) & is.na(head(.x[!fillers], 1)) ), .groups = "drop" ) %>% dplyr::select(-fillers) %>% dplyr::summarise(dplyr::across( - -tidyselect::any_of(epi_keys(recipe)), ~ any(.x) + -dplyr::any_of(key_colnames(recipe)), ~ any(.x) )) %>% unlist() if (any(cannot_be_used)) { @@ -142,13 +142,13 @@ get_test_data <- function( } dplyr::filter(x, forecast_date - time_value <= min_required) %>% - epiprocess::ungroup() + ungroup() } pad_to_end <- function(x, groups, end_date) { - itval <- epiprocess:::guess_period(c(x$time_value, end_date), "time_value") + itval <- guess_period(c(x$time_value, end_date), "time_value") completed_time_values <- x %>% - dplyr::group_by(dplyr::across(tidyselect::all_of(groups))) %>% + dplyr::group_by(dplyr::across(dplyr::all_of(groups))) %>% dplyr::summarise( time_value = rlang::list2( time_value = Seq(max(time_value) + itval, end_date, itval) @@ -158,7 +158,7 @@ pad_to_end <- function(x, groups, end_date) { mutate(time_value = vctrs::vec_cast(time_value, x$time_value)) dplyr::bind_rows(x, completed_time_values) %>% - dplyr::arrange(dplyr::across(tidyselect::all_of(c("time_value", groups)))) + dplyr::arrange(dplyr::across(dplyr::all_of(c("time_value", groups)))) } Seq <- function(from, to, by) { diff --git a/R/key_colnames.R b/R/key_colnames.R new file mode 100644 index 000000000..e16ce1f42 --- /dev/null +++ b/R/key_colnames.R @@ -0,0 +1,28 @@ +#' @export +key_colnames.recipe <- function(x, ...) { + x$var_info$variable[x$var_info$role %in% c("time_value", "geo_value", "key")] +} + +#' @export +key_colnames.epi_workflow <- function(x, ...) { + NextMethod(hardhat::extract_mold(x)) +} + +# a mold is a list extracted from a fitted workflow, gives info about +# training data. But it doesn't have a class +#' @export +key_colnames.list <- function(x, ...) { + keys <- c("time_value", "geo_value", "key") + molded_names <- names(x$extras$roles) + mold_keys <- map(x$extras$roles[molded_names %in% keys], names) + unname(unlist(mold_keys)) %||% character(0L) +} + +kill_time_value <- function(v) { + arg_is_chr(v) + v[v != "time_value"] +} + +epi_keys_only <- function(x, ...) { + kill_time_value(key_colnames(x, ...)) +} diff --git a/R/layer_cdc_flatline_quantiles.R b/R/layer_cdc_flatline_quantiles.R index f54c1da78..db1440b03 100644 --- a/R/layer_cdc_flatline_quantiles.R +++ b/R/layer_cdc_flatline_quantiles.R @@ -170,7 +170,7 @@ slather.layer_cdc_flatline_quantiles <- ) } p <- components$predictions - ek <- kill_time_value(epi_keys_mold(components$mold)) + ek <- kill_time_value(key_colnames(components$mold)) r <- grab_residuals(the_fit, components) avail_grps <- character(0L) diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 33183198d..3829eec5a 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -136,7 +136,7 @@ slather.layer_population_scaling <- if (is.null(object$by)) { object$by <- intersect( - kill_time_value(epi_keys(components$predictions)), + kill_time_value(key_colnames(components$predictions)), colnames(dplyr::select(object$df, !object$df_pop_col)) ) } diff --git a/R/step_epi_shift.R b/R/step_epi_shift.R index 52f51de16..f45f5d8f4 100644 --- a/R/step_epi_shift.R +++ b/R/step_epi_shift.R @@ -89,7 +89,7 @@ step_epi_lag <- lag = as.integer(lag), prefix = prefix, default = default, - keys = epi_keys(recipe), + keys = key_colnames(recipe), columns = columns, skip = skip, id = id @@ -133,13 +133,13 @@ step_epi_ahead <- add_step( recipe, step_epi_ahead_new( - terms = dplyr::enquos(...), + terms = enquos(...), role = role, trained = trained, ahead = as.integer(ahead), prefix = prefix, default = default, - keys = epi_keys(recipe), + keys = key_colnames(recipe), columns = columns, skip = skip, id = id diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 637d31a54..a8ad66c85 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -72,7 +72,7 @@ step_epi_slide <- role = role, trained = FALSE, prefix = prefix, - keys = epi_keys(recipe), + keys = key_colnames(recipe), columns = NULL, skip = skip, id = id diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index e5edb18d4..48d8b4394 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -87,7 +87,7 @@ step_growth_rate <- add_step( recipe, step_growth_rate_new( - terms = dplyr::enquos(...), + terms = enquos(...), role = role, trained = trained, horizon = horizon, @@ -95,7 +95,7 @@ step_growth_rate <- log_scale = log_scale, replace_Inf = replace_Inf, prefix = prefix, - keys = epi_keys(recipe), + keys = key_colnames(recipe), columns = columns, skip = skip, id = id, diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index e954bd9a0..87852be2d 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -52,12 +52,12 @@ step_lag_difference <- add_step( recipe, step_lag_difference_new( - terms = dplyr::enquos(...), + terms = enquos(...), role = role, trained = trained, horizon = horizon, prefix = prefix, - keys = epi_keys(recipe), + keys = key_colnames(recipe), columns = columns, skip = skip, id = id diff --git a/R/step_training_window.R b/R/step_training_window.R index 7102d29d8..90de468ce 100644 --- a/R/step_training_window.R +++ b/R/step_training_window.R @@ -87,7 +87,7 @@ step_training_window_new <- #' @export prep.step_training_window <- function(x, training, info = NULL, ...) { - ekt <- kill_time_value(epi_keys(training)) + ekt <- kill_time_value(key_colnames(training)) ek <- x$epi_keys %||% ekt %||% character(0L) hardhat::validate_column_names(training, ek) diff --git a/R/utils-misc.R b/R/utils-misc.R index 18f6380df..231a8f60f 100644 --- a/R/utils-misc.R +++ b/R/utils-misc.R @@ -39,9 +39,9 @@ grab_forged_keys <- function(forged, mold, new_data) { # 1. these are the keys in the test data after prep/bake new_keys <- names(extras) # 2. these are the keys in the training data - old_keys <- epi_keys_mold(mold) + old_keys <- key_colnames(mold) # 3. these are the keys in the test data as input - new_df_keys <- epi_keys(new_data, extra_keys = setdiff(new_keys, keys[1:2])) + new_df_keys <- key_colnames(new_data, extra_keys = setdiff(new_keys, keys[1:2])) if (!(setequal(old_keys, new_df_keys) && setequal(new_keys, new_df_keys))) { cli::cli_warn(c( "Not all epi keys that were present in the training data are available", diff --git a/man/epi_keys.Rd b/man/epi_keys.Rd deleted file mode 100644 index 8026fc140..000000000 --- a/man/epi_keys.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/epi_keys.R -\name{epi_keys} -\alias{epi_keys} -\title{Grab any keys associated to an epi_df} -\usage{ -epi_keys(x, ...) -} -\arguments{ -\item{x}{a data.frame, tibble, or epi_df} - -\item{...}{additional arguments passed on to methods} -} -\value{ -If an \code{epi_df}, this returns all "keys". Otherwise \code{NULL} -} -\description{ -Grab any keys associated to an epi_df -} -\keyword{internal} diff --git a/tests/testthat/test-epi_recipe.R b/tests/testthat/test-epi_recipe.R index 75726652d..ed27d88c0 100644 --- a/tests/testthat/test-epi_recipe.R +++ b/tests/testthat/test-epi_recipe.R @@ -128,7 +128,7 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { wf <- epi_workflow() %>% add_epi_recipe(r) - steps <- extract_preprocessor(wf)$steps + steps <- workflows::extract_preprocessor(wf)$steps expect_equal(length(steps), 3) expect_equal(class(steps[[1]]), c("step_epi_lag", "step")) expect_equal(steps[[1]]$lag, c(0, 7, 14)) @@ -143,7 +143,7 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { wf <- update_epi_recipe(wf, r2) - steps <- extract_preprocessor(wf)$steps + steps <- workflows::extract_preprocessor(wf)$steps expect_equal(length(steps), 2) expect_equal(class(steps[[1]]), c("step_epi_lag", "step")) expect_equal(steps[[1]]$lag, c(0, 1)) @@ -152,7 +152,7 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { # adjust_epi_recipe using step number wf <- adjust_epi_recipe(wf, which_step = 2, ahead = 7) - steps <- extract_preprocessor(wf)$steps + steps <- workflows::extract_preprocessor(wf)$steps expect_equal(length(steps), 2) expect_equal(class(steps[[1]]), c("step_epi_lag", "step")) expect_equal(steps[[1]]$lag, c(0, 1)) @@ -161,7 +161,7 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { # adjust_epi_recipe using step name wf <- adjust_epi_recipe(wf, which_step = "step_epi_ahead", ahead = 8) - steps <- extract_preprocessor(wf)$steps + steps <- workflows::extract_preprocessor(wf)$steps expect_equal(length(steps), 2) expect_equal(class(steps[[1]]), c("step_epi_lag", "step")) expect_equal(steps[[1]]$lag, c(0, 1)) @@ -170,6 +170,6 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { wf <- remove_epi_recipe(wf) - expect_error(extract_preprocessor(wf)$steps) + expect_error(workflows::extract_preprocessor(wf)$steps) expect_equal(wf$pre$actions$recipe$recipe, NULL) }) diff --git a/tests/testthat/test-epi_shift.R b/tests/testthat/test-epi_shift.R index b0ab3a21f..245a39c0d 100644 --- a/tests/testthat/test-epi_shift.R +++ b/tests/testthat/test-epi_shift.R @@ -24,7 +24,7 @@ test_that("epi shift single works, renames", { time_value = seq(as.Date("2020-01-01"), by = 1, length.out = 5), geo_value = "ca" ) %>% epiprocess::as_epi_df() - ess <- epi_shift_single(tib, "x", 1, "test", epi_keys(tib)) + ess <- epi_shift_single(tib, "x", 1, "test", key_colnames(tib)) expect_named(ess, c("time_value", "geo_value", "test")) expect_equal(ess$time_value, tib$time_value + 1) }) diff --git a/tests/testthat/test-epi_keys.R b/tests/testthat/test-key_colnames.R similarity index 63% rename from tests/testthat/test-epi_keys.R rename to tests/testthat/test-key_colnames.R index 3e794542e..3fecd9e44 100644 --- a/tests/testthat/test-epi_keys.R +++ b/tests/testthat/test-key_colnames.R @@ -1,25 +1,5 @@ -library(parsnip) -library(workflows) -library(dplyr) - -test_that("epi_keys returns empty for an object that isn't an epi_df", { - expect_identical(epi_keys(data.frame(x = 1:3, y = 2:4)), character(0L)) -}) - -test_that("epi_keys returns possible keys if they exist", { - expect_identical( - epi_keys(data.frame(time_value = 1:3, geo_value = 2:4)), - c("time_value", "geo_value") - ) -}) - - -test_that("Extracts keys from an epi_df", { - expect_equal(epi_keys(case_death_rate_subset), c("time_value", "geo_value")) -}) - test_that("Extracts keys from a recipe; roles are NA, giving an empty vector", { - expect_equal(epi_keys(recipe(case_death_rate_subset)), character(0L)) + expect_equal(key_colnames(recipe(case_death_rate_subset)), character(0L)) }) test_that("epi_keys_mold extracts time_value and geo_value, but not raw", { @@ -35,12 +15,12 @@ test_that("epi_keys_mold extracts time_value and geo_value, but not raw", { fit(data = case_death_rate_subset) expect_setequal( - epi_keys_mold(my_workflow$pre$mold), + key_colnames(my_workflow$pre$mold), c("time_value", "geo_value") ) }) -test_that("epi_keys_mold extracts additional keys when they are present", { +test_that("key_colnames extracts additional keys when they are present", { my_data <- tibble::tibble( geo_value = rep(c("ca", "fl", "pa"), each = 3), time_value = rep(seq(as.Date("2020-06-01"), as.Date("2020-06-03"), @@ -50,7 +30,7 @@ test_that("epi_keys_mold extracts additional keys when they are present", { state = rep(c("ca", "fl", "pa"), each = 3), # extra key value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) ) %>% - epiprocess::as_epi_df( + as_epi_df( additional_metadata = list(other_keys = c("state", "pol")) ) @@ -61,7 +41,7 @@ test_that("epi_keys_mold extracts additional keys when they are present", { my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) expect_setequal( - epi_keys_mold(my_workflow$pre$mold), + key_colnames(my_workflow$pre$mold), c("time_value", "geo_value", "state", "pol") ) }) diff --git a/vignettes/epipredict.Rmd b/vignettes/epipredict.Rmd index af83dc321..7e24b04c6 100644 --- a/vignettes/epipredict.Rmd +++ b/vignettes/epipredict.Rmd @@ -448,7 +448,7 @@ To illustrate everything above, here is (roughly) the code for the r <- epi_recipe(jhu) %>% step_epi_ahead(case_rate, ahead = 7, skip = TRUE) %>% update_role(case_rate, new_role = "predictor") %>% - add_role(all_of(epi_keys(jhu)), new_role = "predictor") + add_role(all_of(key_colnames(jhu)), new_role = "predictor") f <- frosting() %>% layer_predict() %>% From c531007c577ce94ac2d6a40dc6f64fbdd18c7767 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 09:44:29 -0700 Subject: [PATCH 340/382] bump version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 4da92afe6..6d1217587 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.19 +Version: 0.0.20 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From a0d09f9c8f0db963bc590bb56ef2f5d949203aae Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 11:00:47 -0700 Subject: [PATCH 341/382] remove lots of extraneous prefixing --- NAMESPACE | 14 ++++++-- R/arx_classifier.R | 51 +++++++++++++------------- R/arx_forecaster.R | 53 ++++++++++++++------------- R/autoplot.R | 68 ++++++++++++++++++----------------- R/canned-epipred.R | 12 +++---- R/cdc_baseline_forecaster.R | 14 ++++---- R/check_enough_train_data.R | 30 +++++++--------- R/epi_check_training_set.R | 8 ++--- R/epi_recipe.R | 12 ++++--- R/epi_shift.R | 10 +++--- R/epi_workflow.R | 24 ++++++------- R/epipredict-package.R | 12 ++++--- R/flatline.R | 23 ++++++------ R/flatline_forecaster.R | 8 ++--- R/flusight_hub_formatter.R | 61 ++++++++++++++++--------------- R/frosting.R | 40 +++++++++++---------- R/step_epi_naomit.R | 2 +- man/add_frosting.Rd | 5 +-- man/adjust_frosting.Rd | 3 +- man/arx_class_epi_workflow.Rd | 6 ++-- man/arx_classifier.Rd | 2 +- man/arx_fcast_epi_workflow.Rd | 5 +-- man/arx_forecaster.Rd | 2 +- man/autoplot-epipred.Rd | 14 ++++---- man/epi_recipe.Rd | 10 +++--- man/flusight_hub_formatter.Rd | 39 ++++++++++---------- man/frosting.Rd | 4 +-- 27 files changed, 270 insertions(+), 262 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index b07321768..d1bd615b4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -226,6 +226,7 @@ importFrom(checkmate,assert_number) importFrom(checkmate,assert_numeric) importFrom(checkmate,assert_scalar) importFrom(cli,cli_abort) +importFrom(cli,cli_warn) importFrom(dplyr,across) importFrom(dplyr,all_of) importFrom(dplyr,any_of) @@ -233,10 +234,12 @@ importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) importFrom(dplyr,bind_rows) importFrom(dplyr,filter) +importFrom(dplyr,full_join) importFrom(dplyr,group_by) importFrom(dplyr,left_join) importFrom(dplyr,mutate) -importFrom(dplyr,n) +importFrom(dplyr,relocate) +importFrom(dplyr,rename) importFrom(dplyr,select) importFrom(dplyr,summarise) importFrom(dplyr,ungroup) @@ -245,7 +248,12 @@ importFrom(epiprocess,growth_rate) importFrom(generics,augment) importFrom(generics,fit) importFrom(generics,forecast) +importFrom(ggplot2,aes) importFrom(ggplot2,autoplot) +importFrom(ggplot2,geom_line) +importFrom(ggplot2,geom_linerange) +importFrom(ggplot2,geom_point) +importFrom(ggplot2,geom_ribbon) importFrom(hardhat,refresh_blueprint) importFrom(hardhat,run_mold) importFrom(magrittr,"%>%") @@ -257,6 +265,7 @@ importFrom(rlang,"%@%") importFrom(rlang,"%||%") importFrom(rlang,":=") importFrom(rlang,abort) +importFrom(rlang,arg_match) importFrom(rlang,as_function) importFrom(rlang,caller_env) importFrom(rlang,enquo) @@ -268,6 +277,7 @@ importFrom(rlang,is_logical) importFrom(rlang,is_null) importFrom(rlang,is_true) importFrom(rlang,set_names) +importFrom(rlang,sym) importFrom(stats,as.formula) importFrom(stats,family) importFrom(stats,lm) @@ -278,9 +288,9 @@ importFrom(stats,predict) importFrom(stats,qnorm) importFrom(stats,quantile) importFrom(stats,residuals) +importFrom(tibble,as_tibble) importFrom(tibble,tibble) importFrom(tidyr,crossing) -importFrom(tidyr,drop_na) importFrom(vctrs,as_list_of) importFrom(vctrs,field) importFrom(vctrs,new_rcrd) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index 44acb9b30..d5f5bf05d 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -45,14 +45,14 @@ arx_classifier <- function( epi_data, outcome, predictors, - trainer = parsnip::logistic_reg(), + trainer = logistic_reg(), args_list = arx_class_args_list()) { if (!is_classification(trainer)) { - cli::cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'classification'.") + cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'classification'.") } wf <- arx_class_epi_workflow(epi_data, outcome, predictors, trainer, args_list) - wf <- generics::fit(wf, epi_data) + wf <- fit(wf, epi_data) preds <- forecast( wf, @@ -60,8 +60,8 @@ arx_classifier <- function( n_recent = args_list$nafill_buffer, forecast_date = args_list$forecast_date %||% max(epi_data$time_value) ) %>% - tibble::as_tibble() %>% - dplyr::select(-time_value) + as_tibble() %>% + select(-time_value) structure( list( @@ -95,9 +95,9 @@ arx_classifier <- function( #' @export #' @seealso [arx_classifier()] #' @examples -#' +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value >= as.Date("2021-11-01")) +#' filter(time_value >= as.Date("2021-11-01")) #' #' arx_class_epi_workflow(jhu, "death_rate", c("case_rate", "death_rate")) #' @@ -105,7 +105,7 @@ arx_classifier <- function( #' jhu, #' "death_rate", #' c("case_rate", "death_rate"), -#' trainer = parsnip::multinom_reg(), +#' trainer = multinom_reg(), #' args_list = arx_class_args_list( #' breaks = c(-.05, .1), ahead = 14, #' horizon = 14, method = "linear_reg" @@ -119,10 +119,10 @@ arx_class_epi_workflow <- function( args_list = arx_class_args_list()) { validate_forecaster_inputs(epi_data, outcome, predictors) if (!inherits(args_list, c("arx_class", "alist"))) { - rlang::abort("args_list was not created using `arx_class_args_list().") + cli_abort("`args_list` was not created using `arx_class_args_list()`.") } if (!(is.null(trainer) || is_classification(trainer))) { - rlang::abort("`trainer` must be a `{parsnip}` model of mode 'classification'.") + cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'classification'.") } lags <- arx_lags_validator(predictors, args_list$lags) @@ -130,7 +130,7 @@ arx_class_epi_workflow <- function( # ------- predictors r <- epi_recipe(epi_data) %>% step_growth_rate( - tidyselect::all_of(predictors), + all_of(predictors), role = "grp", horizon = args_list$horizon, method = args_list$method, @@ -173,26 +173,23 @@ arx_class_epi_workflow <- function( o2 <- rlang::sym(paste0("ahead_", args_list$ahead, "_", o)) r <- r %>% step_epi_ahead(!!o, ahead = args_list$ahead, role = "pre-outcome") %>% - step_mutate( + recipes::step_mutate( outcome_class = cut(!!o2, breaks = args_list$breaks), role = "outcome" ) %>% step_epi_naomit() %>% - step_training_window(n_recent = args_list$n_training) %>% - { - if (!is.null(args_list$check_enough_data_n)) { - check_enough_train_data( - ., - all_predictors(), - !!outcome, - n = args_list$check_enough_data_n, - epi_keys = args_list$check_enough_data_epi_keys, - drop_na = FALSE - ) - } else { - . - } - } + step_training_window(n_recent = args_list$n_training) + + if (!is.null(args_list$check_enough_data_n)) { + r <- check_enough_train_data( + r, + all_predictors(), + !!outcome, + n = args_list$check_enough_data_n, + epi_keys = args_list$check_enough_data_epi_keys, + drop_na = FALSE + ) + } forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) diff --git a/R/arx_forecaster.R b/R/arx_forecaster.R index 1b9e3d503..37c9aae86 100644 --- a/R/arx_forecaster.R +++ b/R/arx_forecaster.R @@ -42,14 +42,14 @@ arx_forecaster <- function( epi_data, outcome, predictors = outcome, - trainer = parsnip::linear_reg(), + trainer = linear_reg(), args_list = arx_args_list()) { if (!is_regression(trainer)) { - cli::cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'regression'.") + cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'regression'.") } wf <- arx_fcast_epi_workflow(epi_data, outcome, predictors, trainer, args_list) - wf <- generics::fit(wf, epi_data) + wf <- fit(wf, epi_data) preds <- forecast( wf, @@ -57,8 +57,8 @@ arx_forecaster <- function( n_recent = args_list$nafill_buffer, forecast_date = args_list$forecast_date %||% max(epi_data$time_value) ) %>% - tibble::as_tibble() %>% - dplyr::select(-time_value) + as_tibble() %>% + select(-time_value) structure( list( @@ -91,8 +91,9 @@ arx_forecaster <- function( #' @seealso [arx_forecaster()] #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value >= as.Date("2021-12-01")) +#' filter(time_value >= as.Date("2021-12-01")) #' #' arx_fcast_epi_workflow( #' jhu, "death_rate", @@ -108,15 +109,15 @@ arx_fcast_epi_workflow <- function( epi_data, outcome, predictors = outcome, - trainer = parsnip::linear_reg(), + trainer = linear_reg(), args_list = arx_args_list()) { # --- validation validate_forecaster_inputs(epi_data, outcome, predictors) if (!inherits(args_list, c("arx_fcast", "alist"))) { - cli::cli_abort("args_list was not created using `arx_args_list().") + cli_abort("`args_list` was not created using `arx_args_list()`.") } if (!(is.null(trainer) || is_regression(trainer))) { - cli::cli_abort("{trainer} must be a `{parsnip}` model of mode 'regression'.") + cli_abort("`trainer` must be a {.pkg parsnip} model of mode 'regression'.") } lags <- arx_lags_validator(predictors, args_list$lags) @@ -129,21 +130,19 @@ arx_fcast_epi_workflow <- function( r <- r %>% step_epi_ahead(!!outcome, ahead = args_list$ahead) %>% step_epi_naomit() %>% - step_training_window(n_recent = args_list$n_training) %>% - { - if (!is.null(args_list$check_enough_data_n)) { - check_enough_train_data( - ., - all_predictors(), - !!outcome, - n = args_list$check_enough_data_n, - epi_keys = args_list$check_enough_data_epi_keys, - drop_na = FALSE - ) - } else { - . - } - } + step_training_window(n_recent = args_list$n_training) + + if (!is.null(args_list$check_enough_data_n)) { + r <- check_enough_train_data( + r, + all_predictors(), + !!outcome, + n = args_list$check_enough_data_n, + epi_keys = args_list$check_enough_data_epi_keys, + drop_na = FALSE + ) + } + forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) @@ -157,7 +156,7 @@ arx_fcast_epi_workflow <- function( rlang::eval_tidy(trainer$args$quantile_levels) )) args_list$quantile_levels <- quantile_levels - trainer$args$quantile_levels <- rlang::enquo(quantile_levels) + trainer$args$quantile_levels <- enquo(quantile_levels) f <- layer_quantile_distn(f, quantile_levels = quantile_levels) %>% layer_point_from_distn() } else { @@ -265,7 +264,7 @@ arx_args_list <- function( if (!is.null(forecast_date) && !is.null(target_date)) { if (forecast_date + ahead != target_date) { - cli::cli_warn(c( + cli_warn(c( "`forecast_date` + `ahead` must equal `target_date`.", i = "{.val {forecast_date}} + {.val {ahead}} != {.val {target_date}}." )) @@ -316,7 +315,7 @@ compare_quantile_args <- function(alist, tlist) { if (setequal(alist, tlist)) { return(sort(unique(alist))) } - rlang::abort(c( + cli_abort(c( "You have specified different, non-default, quantiles in the trainier and `arx_args` options.", i = "Please only specify quantiles in one location." )) diff --git a/R/autoplot.R b/R/autoplot.R index 0d0e48e35..1be30dd29 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -1,4 +1,4 @@ -#' @importFrom ggplot2 autoplot +#' @importFrom ggplot2 autoplot aes geom_point geom_line geom_ribbon geom_linerange #' @export ggplot2::autoplot @@ -28,6 +28,7 @@ ggplot2::autoplot #' #' @name autoplot-epipred #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% #' filter(time_value >= as.Date("2021-11-01")) #' @@ -41,26 +42,26 @@ ggplot2::autoplot #' layer_residual_quantiles( #' quantile_levels = c(.025, .1, .25, .75, .9, .975) #' ) %>% -#' layer_threshold(dplyr::starts_with(".pred")) %>% +#' layer_threshold(starts_with(".pred")) %>% #' layer_add_target_date() #' -#' wf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg(), f) %>% fit(jhu) #' #' autoplot(wf) #' -#' latest <- jhu %>% dplyr::filter(time_value >= max(time_value) - 14) +#' latest <- jhu %>% filter(time_value >= max(time_value) - 14) #' preds <- predict(wf, latest) #' autoplot(wf, preds, .max_facets = 4) #' #' # ------- Show multiple horizons #' -#' p <- lapply(c(7, 14, 21, 28), \(h) { +#' p <- lapply(c(7, 14, 21, 28), function(h) { #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = h) %>% #' step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% #' step_epi_naomit() -#' ewf <- epi_workflow(r, parsnip::linear_reg(), f) %>% fit(jhu) +#' ewf <- epi_workflow(r, linear_reg(), f) %>% fit(jhu) #' forecast(ewf) #' }) #' @@ -69,7 +70,8 @@ ggplot2::autoplot #' #' # ------- Plotting canned forecaster output #' -#' jhu <- case_death_rate_subset %>% filter(time_value >= as.Date("2021-11-01")) +#' jhu <- case_death_rate_subset %>% +#' filter(time_value >= as.Date("2021-11-01")) #' flat <- flatline_forecaster(jhu, "death_rate") #' autoplot(flat, .max_facets = 4) #' @@ -95,7 +97,7 @@ autoplot.epi_workflow <- function( rlang::arg_match(.facet_by) if (!workflows::is_trained_workflow(object)) { - cli::cli_abort(c( + cli_abort(c( "Can't plot an untrained {.cls epi_workflow}.", i = "Do you need to call `fit()`?" )) @@ -105,25 +107,25 @@ autoplot.epi_workflow <- function( y <- mold$outcomes if (ncol(y) > 1) { y <- y[, 1] - cli::cli_warn("Multiple outcome variables were detected. Displaying only 1.") + cli_warn("Multiple outcome variables were detected. Displaying only 1.") } keys <- c("time_value", "geo_value", "key") mold_roles <- names(mold$extras$roles) - edf <- dplyr::bind_cols(mold$extras$roles[mold_roles %in% keys], y) + edf <- bind_cols(mold$extras$roles[mold_roles %in% keys], y) if (starts_with_impl("ahead_", names(y))) { old_name_y <- unlist(strsplit(names(y), "_")) shift <- as.numeric(old_name_y[2]) new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") - edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) + edf <- rename(edf, !!new_name_y := !!names(y)) } else if (starts_with_impl("lag_", names(y))) { old_name_y <- unlist(strsplit(names(y), "_")) shift <- -as.numeric(old_name_y[2]) new_name_y <- paste(old_name_y[-c(1:2)], collapse = "_") - edf <- dplyr::rename(edf, !!new_name_y := !!names(y)) + edf <- rename(edf, !!new_name_y := !!names(y)) } if (!is.null(shift)) { - edf <- dplyr::mutate(edf, time_value = time_value + shift) + edf <- mutate(edf, time_value = time_value + shift) } extra_keys <- setdiff(key_colnames(mold), c("time_value", "geo_value")) if (length(extra_keys) == 0L) extra_keys <- NULL @@ -141,13 +143,13 @@ autoplot.epi_workflow <- function( if ("target_date" %in% names(predictions)) { if ("time_value" %in% names(predictions)) { - predictions <- dplyr::select(predictions, -time_value) + predictions <- select(predictions, -time_value) } - predictions <- dplyr::rename(predictions, time_value = target_date) + predictions <- rename(predictions, time_value = target_date) } pred_cols_ok <- hardhat::check_column_names(predictions, key_colnames(edf)) if (!pred_cols_ok$ok) { - cli::cli_warn(c( + cli_warn(c( "`predictions` is missing required variables: {.var {pred_cols_ok$missing_names}}.", i = "Plotting the original data." )) @@ -167,13 +169,13 @@ autoplot.epi_workflow <- function( # Now, prepare matching facets in the predictions ek <- kill_time_value(key_colnames(edf)) predictions <- predictions %>% - dplyr::mutate( + mutate( .facets = interaction(!!!rlang::syms(as.list(ek)), sep = "/"), ) if (.max_facets < Inf) { top_n <- levels(as.factor(bp$data$.facets))[seq_len(.max_facets)] - predictions <- dplyr::filter(predictions, .facets %in% top_n) %>% - dplyr::mutate(.facets = droplevels(.facets)) + predictions <- filter(predictions, .facets %in% top_n) %>% + mutate(.facets = droplevels(.facets)) } @@ -182,17 +184,17 @@ autoplot.epi_workflow <- function( } if (".pred" %in% names(predictions)) { - ntarget_dates <- dplyr::n_distinct(predictions$time_value) + ntarget_dates <- n_distinct(predictions$time_value) if (ntarget_dates > 1L) { bp <- bp + - ggplot2::geom_line( - data = predictions, ggplot2::aes(y = .data$.pred), + geom_line( + data = predictions, aes(y = .data$.pred), color = .point_pred_color ) } else { bp <- bp + - ggplot2::geom_point( - data = predictions, ggplot2::aes(y = .data$.pred), + geom_point( + data = predictions, aes(y = .data$.pred), color = .point_pred_color ) } @@ -243,7 +245,7 @@ plot_bands <- function( ntarget_dates <- dplyr::n_distinct(predictions$time_value) predictions <- predictions %>% - dplyr::mutate(.pred_distn = dist_quantiles(quantile(.pred_distn, l), l)) %>% + mutate(.pred_distn = dist_quantiles(quantile(.pred_distn, l), l)) %>% pivot_quantiles_wider(.pred_distn) qnames <- setdiff(names(predictions), innames) @@ -253,32 +255,32 @@ plot_bands <- function( if (i == 1) { if (ntarget_dates > 1L) { base_plot <- base_plot + - ggplot2::geom_ribbon( + geom_ribbon( data = predictions, - ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + aes(ymin = .data[[bottom]], ymax = .data[[top]]), alpha = 0.2, linewidth = linewidth, fill = fill ) } else { base_plot <- base_plot + - ggplot2::geom_linerange( + geom_linerange( data = predictions, - ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + aes(ymin = .data[[bottom]], ymax = .data[[top]]), alpha = 0.2, linewidth = 2, color = fill ) } } else { if (ntarget_dates > 1L) { base_plot <- base_plot + - ggplot2::geom_ribbon( + geom_ribbon( data = predictions, - ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + aes(ymin = .data[[bottom]], ymax = .data[[top]]), fill = fill, alpha = alpha ) } else { base_plot <- base_plot + - ggplot2::geom_linerange( + geom_linerange( data = predictions, - ggplot2::aes(ymin = .data[[bottom]], ymax = .data[[top]]), + aes(ymin = .data[[bottom]], ymax = .data[[top]]), color = fill, alpha = alpha, linewidth = 2 ) } diff --git a/R/canned-epipred.R b/R/canned-epipred.R index 5a87a0d2e..0adc0536a 100644 --- a/R/canned-epipred.R +++ b/R/canned-epipred.R @@ -1,6 +1,6 @@ validate_forecaster_inputs <- function(epi_data, outcome, predictors) { - if (!epiprocess::is_epi_df(epi_data)) { - cli::cli_abort(c( + if (!is_epi_df(epi_data)) { + cli_abort(c( "`epi_data` must be an {.cls epi_df}.", "!" = "This one is a {.cls {class(epi_data)}}." )) @@ -8,11 +8,11 @@ validate_forecaster_inputs <- function(epi_data, outcome, predictors) { arg_is_chr_scalar(outcome) arg_is_chr(predictors) if (!outcome %in% names(epi_data)) { - cli::cli_abort("{.var {outcome}} was not found in the training data.") + cli_abort("{.var {outcome}} was not found in the training data.") } check <- hardhat::check_column_names(epi_data, predictors) if (!check$ok) { - cli::cli_abort(c( + cli_abort(c( "At least one predictor was not found in the training data.", "!" = "The following required columns are missing: {.val {check$missing_names}}." )) @@ -29,7 +29,7 @@ arx_lags_validator <- function(predictors, lags) { if (l == 1) { lags <- rep(lags, p) } else if (length(lags) != p) { - cli::cli_abort(c( + cli_abort(c( "You have requested {p} predictor(s) but {l} different lags.", i = "Lags must be a vector or a list with length == number of predictors." )) @@ -39,7 +39,7 @@ arx_lags_validator <- function(predictors, lags) { lags <- lags[order(match(names(lags), predictors))] } else { predictors_miss <- setdiff(predictors, names(lags)) - cli::cli_abort(c( + cli_abort(c( "If lags is a named list, then all predictors must be present.", i = "The predictors are {.var {predictors}}.", i = "So lags is missing {.var {predictors_miss}}'." diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index 31194daae..21b5e8ece 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -98,14 +98,14 @@ cdc_baseline_forecaster <- function( # layer_add_target_date(target_date = target_date) if (args_list$nonneg) f <- layer_threshold(f, ".pred") - eng <- parsnip::linear_reg() %>% parsnip::set_engine("flatline") + eng <- linear_reg(engine = "flatline") wf <- epi_workflow(r, eng, f) - wf <- generics::fit(wf, epi_data) + wf <- fit(wf, epi_data) preds <- suppressWarnings(predict(wf, new_data = latest)) %>% - tibble::as_tibble() %>% - dplyr::select(-time_value) %>% - dplyr::mutate(target_date = forecast_date + ahead * args_list$data_frequency) + as_tibble() %>% + select(-time_value) %>% + mutate(target_date = forecast_date + ahead * args_list$data_frequency) structure( list( @@ -218,11 +218,11 @@ parse_period <- function(x) { mult <- switch(mult, day = 1L, wee = 7L, - cli::cli_abort("incompatible timespan in `aheads`.") + cli_abort("incompatible timespan in `aheads`.") ) x <- as.numeric(x[1]) * mult } - if (length(x) > 2L) cli::cli_abort("incompatible timespan in `aheads`.") + if (length(x) > 2L) cli_abort("incompatible timespan in `aheads`.") } stopifnot(rlang::is_integerish(x)) as.integer(x) diff --git a/R/check_enough_train_data.R b/R/check_enough_train_data.R index af2183d15..1279a3712 100644 --- a/R/check_enough_train_data.R +++ b/R/check_enough_train_data.R @@ -49,13 +49,13 @@ check_enough_train_data <- columns = NULL, skip = TRUE, id = rand_id("enough_train_data")) { - add_check( + recipes::add_check( recipe, check_enough_train_data_new( n = n, epi_keys = epi_keys, drop_na = drop_na, - terms = rlang::enquos(...), + terms = enquos(...), role = role, trained = trained, columns = columns, @@ -67,7 +67,7 @@ check_enough_train_data <- check_enough_train_data_new <- function(n, epi_keys, drop_na, terms, role, trained, columns, skip, id) { - check( + recipes::check( subclass = "enough_train_data", prefix = "check_", n = n, @@ -83,30 +83,24 @@ check_enough_train_data_new <- } #' @export -#' @importFrom dplyr group_by summarise ungroup across all_of n -#' @importFrom tidyr drop_na prep.check_enough_train_data <- function(x, training, info = NULL, ...) { - col_names <- recipes_eval_select(x$terms, training, info) + col_names <- recipes::recipes_eval_select(x$terms, training, info) if (is.null(x$n)) { x$n <- length(col_names) } + if (x$drop_na) { + training <- tidyr::drop_na(training) + } cols_not_enough_data <- training %>% - { - if (x$drop_na) { - drop_na(.) - } else { - . - } - } %>% group_by(across(all_of(.env$x$epi_keys))) %>% - summarise(across(all_of(.env$col_names), ~ n() < .env$x$n), .groups = "drop") %>% + summarise(across(all_of(.env$col_names), ~ dplyr::n() < .env$x$n), .groups = "drop") %>% summarise(across(all_of(.env$col_names), any), .groups = "drop") %>% unlist() %>% names(.)[.] if (length(cols_not_enough_data) > 0) { - cli::cli_abort( + cli_abort( "The following columns don't have enough data to predict: {cols_not_enough_data}." ) } @@ -132,16 +126,16 @@ bake.check_enough_train_data <- function(object, new_data, ...) { #' @export print.check_enough_train_data <- function(x, width = max(20, options()$width - 30), ...) { title <- paste0("Check enough data (n = ", x$n, ") for ") - print_step(x$columns, x$terms, x$trained, title, width) + recipes::print_step(x$columns, x$terms, x$trained, title, width) invisible(x) } #' @export tidy.check_enough_train_data <- function(x, ...) { - if (is_trained(x)) { + if (recipes::is_trained(x)) { res <- tibble(terms = unname(x$columns)) } else { - res <- tibble(terms = sel2char(x$terms)) + res <- tibble(terms = recipes::sel2char(x$terms)) } res$id <- x$id res$n <- x$n diff --git a/R/epi_check_training_set.R b/R/epi_check_training_set.R index 0c7dc9036..596e99887 100644 --- a/R/epi_check_training_set.R +++ b/R/epi_check_training_set.R @@ -16,7 +16,7 @@ epi_check_training_set <- function(x, rec) { if (!is.null(old_ok)) { if (all(old_ok %in% colnames(x))) { # case 1 if (!all(old_ok %in% new_ok)) { - cli::cli_warn(c( + cli_warn(c( "The recipe specifies additional keys. Because these are available,", "they are being added to the metadata of the training data." )) @@ -25,7 +25,7 @@ epi_check_training_set <- function(x, rec) { } missing_ok <- setdiff(old_ok, colnames(x)) if (length(missing_ok) > 0) { # case 2 - cli::cli_abort(c( + cli_abort(c( "The recipe specifies keys which are not in the training data.", i = "The training set is missing columns for {missing_ok}." )) @@ -45,8 +45,8 @@ validate_meta_match <- function(x, template, meta, warn_or_abort = "warn") { ) if (new_meta != old_meta) { switch(warn_or_abort, - warn = cli::cli_warn(msg), - abort = cli::cli_abort(msg) + warn = cli_warn(msg), + abort = cli_abort(msg) ) } } diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 311decf62..c40fda019 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -46,17 +46,19 @@ epi_recipe.default <- function(x, ...) { #' #' @export #' @examples +#' library(dplyr) +#' library(recipes) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-08-01") %>% -#' dplyr::arrange(geo_value, time_value) +#' filter(time_value > "2021-08-01") %>% +#' arrange(geo_value, time_value) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% -#' recipes::step_naomit(recipes::all_predictors()) %>% +#' step_naomit(all_predictors()) %>% #' # below, `skip` means we don't do this at predict time -#' recipes::step_naomit(recipes::all_outcomes(), skip = TRUE) +#' step_naomit(all_outcomes(), skip = TRUE) #' #' r epi_recipe.epi_df <- @@ -501,7 +503,7 @@ prep.epi_recipe <- function( as_epi_df(training), before_template ) } - training <- dplyr::relocate(training, dplyr::all_of(key_colnames(training))) + training <- dplyr::relocate(training, all_of(key_colnames(training))) x$term_info <- recipes:::merge_term_info(get_types(training), x$term_info) if (!is.na(x$steps[[i]]$role)) { new_vars <- setdiff(x$term_info$variable, running_info$variable) diff --git a/R/epi_shift.R b/R/epi_shift.R index b40b36ecc..eb534f1ea 100644 --- a/R/epi_shift.R +++ b/R/epi_shift.R @@ -17,9 +17,9 @@ epi_shift <- function(x, shifts, time_value, keys = NULL, out_name = "x") { if (!is.data.frame(x)) x <- data.frame(x) if (is.null(keys)) keys <- rep("empty", nrow(x)) p_in <- ncol(x) - out_list <- tibble::tibble(i = 1:p_in, shift = shifts) %>% + out_list <- tibble(i = 1:p_in, shift = shifts) %>% tidyr::unchop(shift) %>% # what is chop - dplyr::mutate(name = paste0(out_name, 1:nrow(.))) %>% + mutate(name = paste0(out_name, 1:nrow(.))) %>% # One list element for each shifted feature pmap(function(i, shift, name) { tibble(keys, @@ -38,7 +38,7 @@ epi_shift <- function(x, shifts, time_value, keys = NULL, out_name = "x") { epi_shift_single <- function(x, col, shift_val, newname, key_cols) { x %>% - dplyr::select(tidyselect::all_of(c(key_cols, col))) %>% - dplyr::mutate(time_value = time_value + shift_val) %>% - dplyr::rename(!!newname := {{ col }}) + select(all_of(c(key_cols, col))) %>% + mutate(time_value = time_value + shift_val) %>% + rename(!!newname := {{ col }}) } diff --git a/R/epi_workflow.R b/R/epi_workflow.R index 3660b87e1..f715dc9b0 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -187,24 +187,20 @@ augment.epi_workflow <- function(x, new_data, ...) { if (is_epi_df(predictions)) { join_by <- key_colnames(predictions) } else { - rlang::abort( - c( - "Cannot determine how to join new_data with the predictions.", - "Try converting new_data to an epi_df with `as_epi_df(new_data)`." - ) - ) + cli_abort(c( + "Cannot determine how to join new_data with the predictions.", + "Try converting new_data to an epi_df with `as_epi_df(new_data)`." + )) } complete_overlap <- intersect(names(new_data), join_by) if (length(complete_overlap) < length(join_by)) { - rlang::warn( - glue::glue( - "Your original training data had keys {join_by}, but", - "`new_data` only has {complete_overlap}. The output", - "may be strange." - ) - ) + rlang::warn(glue::glue( + "Your original training data had keys {join_by}, but", + "`new_data` only has {complete_overlap}. The output", + "may be strange." + )) } - dplyr::full_join(predictions, new_data, by = join_by) + full_join(predictions, new_data, by = join_by) } new_epi_workflow <- function( diff --git a/R/epipredict-package.R b/R/epipredict-package.R index d3c7a8a4a..785c183b7 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,14 +1,16 @@ ## usethis namespace: start -#' @importFrom tibble tibble +#' @importFrom tibble tibble as_tibble #' @importFrom rlang := !! %||% as_function global_env set_names !!! -#' @importFrom rlang is_logical is_true inject enquo enquos expr +#' is_logical is_true inject enquo enquos expr sym arg_match #' @importFrom stats poly predict lm residuals quantile -#' @importFrom dplyr arrange across all_of any_of bind_rows group_by summarise -#' filter mutate select left_join -#' @importFrom cli cli_abort +#' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by +#' summarise filter mutate select left_join rename ungroup full_join +#' relocate +#' @importFrom cli cli_abort cli_warn #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer #' assert_integerish assert_date assert_function assert_class +#' @importFrom generics fit #' @import epiprocess parsnip ## usethis namespace: end NULL diff --git a/R/flatline.R b/R/flatline.R index 0f98b0e2b..fb60c920d 100644 --- a/R/flatline.R +++ b/R/flatline.R @@ -43,26 +43,26 @@ flatline <- function(formula, data) { observed <- rhs[n] # DANGER!! ek <- rhs[-n] if (length(response) > 1) { - cli_stop("flatline forecaster can accept only 1 observed time series.") + cli_abort("flatline forecaster can accept only 1 observed time series.") } keys <- kill_time_value(ek) preds <- data %>% - dplyr::mutate( + mutate( .pred = !!rlang::sym(observed), .resid = !!rlang::sym(response) - .pred ) .pred <- preds %>% - dplyr::filter(!is.na(.pred)) %>% - dplyr::group_by(!!!rlang::syms(keys)) %>% - dplyr::arrange(time_value) %>% + filter(!is.na(.pred)) %>% + group_by(!!!rlang::syms(keys)) %>% + arrange(time_value) %>% dplyr::slice_tail(n = 1L) %>% - dplyr::ungroup() %>% - dplyr::select(tidyselect::all_of(c(keys, ".pred"))) + ungroup() %>% + select(all_of(c(keys, ".pred"))) structure( list( - residuals = dplyr::select(preds, dplyr::all_of(c(keys, ".resid"))), + residuals = select(preds, all_of(c(keys, ".resid"))), .pred = .pred ), class = "flatline" @@ -80,14 +80,13 @@ predict.flatline <- function(object, newdata, ...) { metadata <- names(object)[names(object) != ".pred"] ek <- names(newdata) if (!all(metadata %in% ek)) { - cli_stop( + cli_abort(c( "`newdata` has different metadata than was used", "to fit the flatline forecaster" - ) + )) } - dplyr::left_join(newdata, object, by = metadata) %>% - dplyr::pull(.pred) + left_join(newdata, object, by = metadata)$.pred } #' @export diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index 42970c569..50cccc908 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -61,18 +61,18 @@ flatline_forecaster <- function( layer_add_target_date(target_date = target_date) if (args_list$nonneg) f <- layer_threshold(f, dplyr::starts_with(".pred")) - eng <- parsnip::linear_reg() %>% parsnip::set_engine("flatline") + eng <- linear_reg(engine = "flatline") wf <- epi_workflow(r, eng, f) - wf <- generics::fit(wf, epi_data) + wf <- fit(wf, epi_data) preds <- suppressWarnings(forecast( wf, fill_locf = TRUE, n_recent = args_list$nafill_buffer, forecast_date = forecast_date )) %>% - tibble::as_tibble() %>% - dplyr::select(-time_value) + as_tibble() %>% + select(-time_value) structure( list( diff --git a/R/flusight_hub_formatter.R b/R/flusight_hub_formatter.R index e45f88189..c91f738ae 100644 --- a/R/flusight_hub_formatter.R +++ b/R/flusight_hub_formatter.R @@ -56,27 +56,26 @@ abbr_to_location <- function(abbr) { #' @export #' #' @examples -#' if (require(dplyr)) { -#' weekly_deaths <- case_death_rate_subset %>% -#' filter( -#' time_value >= as.Date("2021-09-01"), -#' geo_value %in% c("ca", "ny", "dc", "ga", "vt") -#' ) %>% -#' select(geo_value, time_value, death_rate) %>% -#' left_join(state_census %>% select(pop, abbr), by = c("geo_value" = "abbr")) %>% -#' mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) %>% -#' select(-pop, -death_rate) %>% -#' group_by(geo_value) %>% -#' epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") %>% -#' ungroup() %>% -#' filter(weekdays(time_value) == "Saturday") +#' library(dplyr) +#' weekly_deaths <- case_death_rate_subset %>% +#' filter( +#' time_value >= as.Date("2021-09-01"), +#' geo_value %in% c("ca", "ny", "dc", "ga", "vt") +#' ) %>% +#' select(geo_value, time_value, death_rate) %>% +#' left_join(state_census %>% select(pop, abbr), by = c("geo_value" = "abbr")) %>% +#' mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) %>% +#' select(-pop, -death_rate) %>% +#' group_by(geo_value) %>% +#' epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") %>% +#' ungroup() %>% +#' filter(weekdays(time_value) == "Saturday") #' -#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") -#' flusight_hub_formatter(cdc) -#' flusight_hub_formatter(cdc, target = "wk inc covid deaths") -#' flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) -#' flusight_hub_formatter(cdc, target = "wk inc covid deaths", output_type = "quantile") -#' } +#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +#' flusight_hub_formatter(cdc) +#' flusight_hub_formatter(cdc, target = "wk inc covid deaths") +#' flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) +#' flusight_hub_formatter(cdc, target = "wk inc covid deaths", output_type = "quantile") flusight_hub_formatter <- function( object, ..., .fcast_period = c("daily", "weekly")) { @@ -98,7 +97,7 @@ flusight_hub_formatter.data.frame <- function( optional_names <- c("ahead", "target_date") hardhat::validate_column_names(object, required_names) if (!any(optional_names %in% names(object))) { - cli::cli_abort("At least one of {.val {optional_names}} must be present.") + cli_abort("At least one of {.val {optional_names}} must be present.") } dots <- enquos(..., .named = TRUE) @@ -106,38 +105,38 @@ flusight_hub_formatter.data.frame <- function( object <- object %>% # combine the predictions and the distribution - dplyr::mutate(.pred_distn = nested_quantiles(.pred_distn)) %>% + mutate(.pred_distn = nested_quantiles(.pred_distn)) %>% tidyr::unnest(.pred_distn) %>% # now we create the correct column names - dplyr::rename( + rename( value = values, output_type_id = quantile_levels, reference_date = forecast_date ) %>% # convert to fips codes, and add any constant cols passed in ... - dplyr::mutate(location = abbr_to_location(tolower(geo_value)), geo_value = NULL) + mutate(location = abbr_to_location(tolower(geo_value)), geo_value = NULL) # create target_end_date / horizon, depending on what is available pp <- ifelse(match.arg(.fcast_period) == "daily", 1L, 7L) has_ahead <- charmatch("ahead", names(object)) if ("target_date" %in% names(object) && !is.na(has_ahead)) { object <- object %>% - dplyr::rename( + rename( target_end_date = target_date, horizon = !!names(object)[has_ahead] ) } else if (!is.na(has_ahead)) { # ahead present, not target date object <- object %>% - dplyr::rename(horizon = !!names(object)[has_ahead]) %>% - dplyr::mutate(target_end_date = horizon * pp + reference_date) + rename(horizon = !!names(object)[has_ahead]) %>% + mutate(target_end_date = horizon * pp + reference_date) } else { # target_date present, not ahead object <- object %>% - dplyr::rename(target_end_date = target_date) %>% - dplyr::mutate(horizon = as.integer((target_end_date - reference_date)) / pp) + rename(target_end_date = target_date) %>% + mutate(horizon = as.integer((target_end_date - reference_date)) / pp) } object %>% - dplyr::relocate( + relocate( reference_date, horizon, target_end_date, location, output_type_id, value ) %>% - dplyr::mutate(!!!dots) + mutate(!!!dots) } diff --git a/R/frosting.R b/R/frosting.R index 4fc0caec3..8474edbdf 100644 --- a/R/frosting.R +++ b/R/frosting.R @@ -8,15 +8,16 @@ #' @export #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% #' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' latest <- jhu %>% -#' dplyr::filter(time_value >= max(time_value) - 14) +#' filter(time_value >= max(time_value) - 14) #' #' # Add frosting to a workflow and predict #' f <- frosting() %>% @@ -84,7 +85,8 @@ validate_has_postprocessor <- function(x, ..., call = caller_env()) { rlang::check_dots_empty() has_postprocessor <- has_postprocessor_frosting(x) if (!has_postprocessor) { - message <- c("The workflow must have a frosting postprocessor.", + message <- c( + "The workflow must have a frosting postprocessor.", i = "Provide one with `add_frosting()`." ) rlang::abort(message, call = call) @@ -125,6 +127,7 @@ update_frosting <- function(x, frosting, ...) { #' #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% #' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% @@ -132,7 +135,7 @@ update_frosting <- function(x, frosting, ...) { #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' # in the frosting from the workflow #' f1 <- frosting() %>% @@ -177,11 +180,10 @@ adjust_frosting.epi_workflow <- function( adjust_frosting.frosting <- function( x, which_layer, ...) { if (!(is.numeric(which_layer) || is.character(which_layer))) { - cli::cli_abort( - c("`which_layer` must be a number or a character.", - i = "`which_layer` has class {.cls {class(which_layer)[1]}}." - ) - ) + cli_abort(c( + "`which_layer` must be a number or a character.", + i = "`which_layer` has class {.cls {class(which_layer)[1]}}." + )) } else if (is.numeric(which_layer)) { x$layers[[which_layer]] <- update(x$layers[[which_layer]], ...) } else { @@ -190,7 +192,7 @@ adjust_frosting.frosting <- function( if (!starts_with_layer) which_layer <- paste0("layer_", which_layer) if (!(which_layer %in% layer_names)) { - cli::cli_abort(c( + cli_abort(c( "`which_layer` does not appear in the available `frosting` layer names. ", i = "The layer names are {.val {layer_names}}." )) @@ -199,7 +201,7 @@ adjust_frosting.frosting <- function( if (length(which_layer_idx) == 1) { x$layers[[which_layer_idx]] <- update(x$layers[[which_layer_idx]], ...) } else { - cli::cli_abort(c( + cli_abort(c( "`which_layer` is not unique. Matches layers: {.val {which_layer_idx}}.", i = "Please use the layer number instead for precise alterations." )) @@ -216,7 +218,7 @@ add_postprocessor <- function(x, postprocessor, ..., call = caller_env()) { if (is_frosting(postprocessor)) { return(add_frosting(x, postprocessor)) } - cli::cli_abort("`postprocessor` must be a frosting object.", call = call) + cli_abort("`postprocessor` must be a frosting object.", call = call) } is_frosting <- function(x) { @@ -227,7 +229,7 @@ is_frosting <- function(x) { validate_frosting <- function(x, ..., arg = "`x`", call = caller_env()) { rlang::check_dots_empty() if (!is_frosting(x)) { - cli::cli_abort( + cli_abort( "{arg} must be a frosting postprocessor, not a {.cls {class(x)[[1]]}}.", .call = call ) @@ -260,14 +262,14 @@ new_frosting <- function() { #' @export #' #' @examples -#' +#' library(dplyr) #' # Toy example to show that frosting can be created and added for postprocessing #' f <- frosting() #' wf <- epi_workflow() %>% add_frosting(f) #' #' # A more realistic example #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% @@ -307,7 +309,7 @@ extract_frosting <- function(x, ...) { #' @export extract_frosting.default <- function(x, ...) { - cli::cli_abort(c( + cli_abort(c( "Frosting is only available for epi_workflows currently.", i = "Can you use `epi_workflow()` instead of `workflow()`?" )) @@ -319,7 +321,7 @@ extract_frosting.epi_workflow <- function(x, ...) { if (has_postprocessor_frosting(x)) { return(x$post$actions$frosting$frosting) } else { - cli_stop("The epi_workflow does not have a postprocessor.") + cli_abort("The epi_workflow does not have a postprocessor.") } } @@ -342,7 +344,7 @@ apply_frosting <- function(workflow, ...) { #' @export apply_frosting.default <- function(workflow, components, ...) { if (has_postprocessor(workflow)) { - cli::cli_abort(c( + cli_abort(c( "Postprocessing is only available for epi_workflows currently.", i = "Can you use `epi_workflow()` instead of `workflow()`?" )) @@ -373,7 +375,7 @@ apply_frosting.epi_workflow <- } if (!has_postprocessor_frosting(workflow)) { - cli::cli_warn(c( + cli_warn(c( "Only postprocessors of class {.cls frosting} are allowed.", "Returning unpostprocessed predictions." )) diff --git a/R/step_epi_naomit.R b/R/step_epi_naomit.R index 1cbc9c5d9..d81ba398d 100644 --- a/R/step_epi_naomit.R +++ b/R/step_epi_naomit.R @@ -22,6 +22,6 @@ step_epi_naomit <- function(recipe) { print.step_naomit <- # not exported from recipes package function(x, width = max(20, options()$width - 30), ...) { title <- "Removing rows with NA values in " - print_step(x$columns, x$terms, x$trained, title, width) + recipes::print_step(x$columns, x$terms, x$trained, title, width) invisible(x) } diff --git a/man/add_frosting.Rd b/man/add_frosting.Rd index 161a540e2..94812cbe2 100644 --- a/man/add_frosting.Rd +++ b/man/add_frosting.Rd @@ -26,15 +26,16 @@ update_frosting(x, frosting, ...) Add frosting to a workflow } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) latest <- jhu \%>\% - dplyr::filter(time_value >= max(time_value) - 14) + filter(time_value >= max(time_value) - 14) # Add frosting to a workflow and predict f <- frosting() \%>\% diff --git a/man/adjust_frosting.Rd b/man/adjust_frosting.Rd index 6cdc13b30..c089b3443 100644 --- a/man/adjust_frosting.Rd +++ b/man/adjust_frosting.Rd @@ -35,6 +35,7 @@ must be inputted as \code{...}. See the examples below for brief illustrations of the different types of updates. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% @@ -42,7 +43,7 @@ r <- epi_recipe(jhu) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) # in the frosting from the workflow f1 <- frosting() \%>\% diff --git a/man/arx_class_epi_workflow.Rd b/man/arx_class_epi_workflow.Rd index bfce7cdaa..713365f17 100644 --- a/man/arx_class_epi_workflow.Rd +++ b/man/arx_class_epi_workflow.Rd @@ -47,9 +47,9 @@ before fitting and predicting. Supplying a trainer to the function may alter the returned \code{epi_workflow} object but can be omitted. } \examples{ - +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value >= as.Date("2021-11-01")) + filter(time_value >= as.Date("2021-11-01")) arx_class_epi_workflow(jhu, "death_rate", c("case_rate", "death_rate")) @@ -57,7 +57,7 @@ arx_class_epi_workflow( jhu, "death_rate", c("case_rate", "death_rate"), - trainer = parsnip::multinom_reg(), + trainer = multinom_reg(), args_list = arx_class_args_list( breaks = c(-.05, .1), ahead = 14, horizon = 14, method = "linear_reg" diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index 350352ae9..36297b00c 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -8,7 +8,7 @@ arx_classifier( epi_data, outcome, predictors, - trainer = parsnip::logistic_reg(), + trainer = logistic_reg(), args_list = arx_class_args_list() ) } diff --git a/man/arx_fcast_epi_workflow.Rd b/man/arx_fcast_epi_workflow.Rd index 4ed279351..4070a3337 100644 --- a/man/arx_fcast_epi_workflow.Rd +++ b/man/arx_fcast_epi_workflow.Rd @@ -8,7 +8,7 @@ arx_fcast_epi_workflow( epi_data, outcome, predictors = outcome, - trainer = parsnip::linear_reg(), + trainer = linear_reg(), args_list = arx_args_list() ) } @@ -42,8 +42,9 @@ may alter the returned \code{epi_workflow} object (e.g., if you intend to use \code{\link[=quantile_reg]{quantile_reg()}}) but can be omitted. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value >= as.Date("2021-12-01")) + filter(time_value >= as.Date("2021-12-01")) arx_fcast_epi_workflow( jhu, "death_rate", diff --git a/man/arx_forecaster.Rd b/man/arx_forecaster.Rd index af05c0682..d8c7671dc 100644 --- a/man/arx_forecaster.Rd +++ b/man/arx_forecaster.Rd @@ -8,7 +8,7 @@ arx_forecaster( epi_data, outcome, predictors = outcome, - trainer = parsnip::linear_reg(), + trainer = linear_reg(), args_list = arx_args_list() ) } diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index dd6b37dcd..27bfdf5f7 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -70,6 +70,7 @@ will be shown as well. Unfit workflows will result in an error, (you can simply call \code{autoplot()} on the original \code{epi_df}). } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% filter(time_value >= as.Date("2021-11-01")) @@ -83,26 +84,26 @@ f <- frosting() \%>\% layer_residual_quantiles( quantile_levels = c(.025, .1, .25, .75, .9, .975) ) \%>\% - layer_threshold(dplyr::starts_with(".pred")) \%>\% + layer_threshold(starts_with(".pred")) \%>\% layer_add_target_date() -wf <- epi_workflow(r, parsnip::linear_reg(), f) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg(), f) \%>\% fit(jhu) autoplot(wf) -latest <- jhu \%>\% dplyr::filter(time_value >= max(time_value) - 14) +latest <- jhu \%>\% filter(time_value >= max(time_value) - 14) preds <- predict(wf, latest) autoplot(wf, preds, .max_facets = 4) # ------- Show multiple horizons -p <- lapply(c(7, 14, 21, 28), \(h) { +p <- lapply(c(7, 14, 21, 28), function(h) { r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = h) \%>\% step_epi_lag(case_rate, lag = c(0, 7, 14)) \%>\% step_epi_naomit() - ewf <- epi_workflow(r, parsnip::linear_reg(), f) \%>\% fit(jhu) + ewf <- epi_workflow(r, linear_reg(), f) \%>\% fit(jhu) forecast(ewf) }) @@ -111,7 +112,8 @@ autoplot(wf, p, .max_facets = 4) # ------- Plotting canned forecaster output -jhu <- case_death_rate_subset \%>\% filter(time_value >= as.Date("2021-11-01")) +jhu <- case_death_rate_subset \%>\% + filter(time_value >= as.Date("2021-11-01")) flat <- flatline_forecaster(jhu, "death_rate") autoplot(flat, .max_facets = 4) diff --git a/man/epi_recipe.Rd b/man/epi_recipe.Rd index 1c9048a36..d0105d1ec 100644 --- a/man/epi_recipe.Rd +++ b/man/epi_recipe.Rd @@ -57,17 +57,19 @@ around \code{\link[recipes:recipe]{recipes::recipe()}} to properly handle the ad columns present in an \code{epi_df} } \examples{ +library(dplyr) +library(recipes) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-08-01") \%>\% - dplyr::arrange(geo_value, time_value) + filter(time_value > "2021-08-01") \%>\% + arrange(geo_value, time_value) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_lag(case_rate, lag = c(0, 7, 14)) \%>\% - recipes::step_naomit(recipes::all_predictors()) \%>\% + step_naomit(all_predictors()) \%>\% # below, `skip` means we don't do this at predict time - recipes::step_naomit(recipes::all_outcomes(), skip = TRUE) + step_naomit(all_outcomes(), skip = TRUE) r } diff --git a/man/flusight_hub_formatter.Rd b/man/flusight_hub_formatter.Rd index 87cfc7e4f..b43bc0ac2 100644 --- a/man/flusight_hub_formatter.Rd +++ b/man/flusight_hub_formatter.Rd @@ -41,25 +41,24 @@ be done via the \code{...} argument. See the examples below. The specific requir format for this forecast task is \href{https://github.com/cdcepi/FluSight-forecast-hub/blob/main/model-output/README.md}{here}. } \examples{ -if (require(dplyr)) { - weekly_deaths <- case_death_rate_subset \%>\% - filter( - time_value >= as.Date("2021-09-01"), - geo_value \%in\% c("ca", "ny", "dc", "ga", "vt") - ) \%>\% - select(geo_value, time_value, death_rate) \%>\% - left_join(state_census \%>\% select(pop, abbr), by = c("geo_value" = "abbr")) \%>\% - mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) \%>\% - select(-pop, -death_rate) \%>\% - group_by(geo_value) \%>\% - epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") \%>\% - ungroup() \%>\% - filter(weekdays(time_value) == "Saturday") +library(dplyr) +weekly_deaths <- case_death_rate_subset \%>\% + filter( + time_value >= as.Date("2021-09-01"), + geo_value \%in\% c("ca", "ny", "dc", "ga", "vt") + ) \%>\% + select(geo_value, time_value, death_rate) \%>\% + left_join(state_census \%>\% select(pop, abbr), by = c("geo_value" = "abbr")) \%>\% + mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) \%>\% + select(-pop, -death_rate) \%>\% + group_by(geo_value) \%>\% + epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") \%>\% + ungroup() \%>\% + filter(weekdays(time_value) == "Saturday") - cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") - flusight_hub_formatter(cdc) - flusight_hub_formatter(cdc, target = "wk inc covid deaths") - flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) - flusight_hub_formatter(cdc, target = "wk inc covid deaths", output_type = "quantile") -} +cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +flusight_hub_formatter(cdc) +flusight_hub_formatter(cdc, target = "wk inc covid deaths") +flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) +flusight_hub_formatter(cdc, target = "wk inc covid deaths", output_type = "quantile") } diff --git a/man/frosting.Rd b/man/frosting.Rd index 367d132ec..a75f21b61 100644 --- a/man/frosting.Rd +++ b/man/frosting.Rd @@ -22,14 +22,14 @@ to hold steps for postprocessing predictions. The arguments are currently placeholders and must be NULL } \examples{ - +library(dplyr) # Toy example to show that frosting can be created and added for postprocessing f <- frosting() wf <- epi_workflow() \%>\% add_frosting(f) # A more realistic example jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% From cf3e89a0ce497693f81b71f989f14d571d1d0808 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 11:05:46 -0700 Subject: [PATCH 342/382] remove unused function --- R/grab_names.R | 23 ----------------------- tests/testthat/test-grab_names.R | 8 -------- 2 files changed, 31 deletions(-) delete mode 100644 R/grab_names.R delete mode 100644 tests/testthat/test-grab_names.R diff --git a/R/grab_names.R b/R/grab_names.R deleted file mode 100644 index 7ff3ac77e..000000000 --- a/R/grab_names.R +++ /dev/null @@ -1,23 +0,0 @@ -#' Get the names from a data frame via tidy select -#' -#' Given a data.frame, use `` syntax to choose -#' some variables. Return the names of those variables -#' -#' As this is an internal function, no checks are performed. -#' -#' @param dat a data.frame -#' @param ... <[`tidy-select`][dplyr::dplyr_tidy_select]> One or more unquoted -#' expressions separated by commas. Variable names can be used as if they -#' were positions in the data frame, so expressions like `x:y` can -#' be used to select a range of variables. -#' -#' @export -#' @keywords internal -#' @return a character vector -#' @examples -#' df <- data.frame(a = 1, b = 2, cc = rep(NA, 3)) -#' grab_names(df, dplyr::starts_with("c")) -grab_names <- function(dat, ...) { - x <- rlang::expr(c(...)) - names(tidyselect::eval_select(x, dat)) -} diff --git a/tests/testthat/test-grab_names.R b/tests/testthat/test-grab_names.R deleted file mode 100644 index 6e0376f5a..000000000 --- a/tests/testthat/test-grab_names.R +++ /dev/null @@ -1,8 +0,0 @@ -df <- data.frame(b = 1, c = 2, ca = 3, cat = 4) - -test_that("Names are grabbed properly", { - expect_identical( - grab_names(df, dplyr::starts_with("ca")), - subset(names(df), startsWith(names(df), "ca")) - ) -}) From 78cd65e2d27ea284a682f271ba36db7b1f2fedfe Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 14:13:09 -0700 Subject: [PATCH 343/382] remove unused funs --- R/utils-cli.R | 23 ----------------------- man/grab_names.Rd | 31 ------------------------------- 2 files changed, 54 deletions(-) delete mode 100644 R/utils-cli.R delete mode 100644 man/grab_names.Rd diff --git a/R/utils-cli.R b/R/utils-cli.R deleted file mode 100644 index 3b1555941..000000000 --- a/R/utils-cli.R +++ /dev/null @@ -1,23 +0,0 @@ -# Modeled after / copied from rundel/ghclass -cli_glue <- function(..., .envir = parent.frame()) { - txt <- cli::cli_format_method(cli::cli_text(..., .envir = .envir)) - - # cli_format_method does wrapping which we dont want at this stage - # so glue things back together. - paste(txt, collapse = " ") -} - -cli_stop <- function(..., .envir = parent.frame()) { - text <- cli_glue(..., .envir = .envir) - stop(paste(text, collapse = "\n"), call. = FALSE) -} - -cli_warn <- function(..., .envir = parent.frame()) { - text <- cli_glue(..., .envir = .envir) - warning(paste(text, collapse = "\n"), call. = FALSE) -} - -#' @importFrom rlang caller_env -cat_line <- function(...) { - cat(paste0(..., collapse = "\n"), "\n", sep = "") -} diff --git a/man/grab_names.Rd b/man/grab_names.Rd deleted file mode 100644 index cee6b19dc..000000000 --- a/man/grab_names.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/grab_names.R -\name{grab_names} -\alias{grab_names} -\title{Get the names from a data frame via tidy select} -\usage{ -grab_names(dat, ...) -} -\arguments{ -\item{dat}{a data.frame} - -\item{...}{<\code{\link[dplyr:dplyr_tidy_select]{tidy-select}}> One or more unquoted -expressions separated by commas. Variable names can be used as if they -were positions in the data frame, so expressions like \code{x:y} can -be used to select a range of variables.} -} -\value{ -a character vector -} -\description{ -Given a data.frame, use \verb{} syntax to choose -some variables. Return the names of those variables -} -\details{ -As this is an internal function, no checks are performed. -} -\examples{ -df <- data.frame(a = 1, b = 2, cc = rep(NA, 3)) -grab_names(df, dplyr::starts_with("c")) -} -\keyword{internal} From 8d24aa17a1666b93638e8ee972bff7a5196bc5a1 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 14:13:33 -0700 Subject: [PATCH 344/382] remove prefixed funs, simplify some redundancies --- NAMESPACE | 8 ++- R/cdc_baseline_forecaster.R | 2 +- R/epipredict-package.R | 7 +- R/flatline_forecaster.R | 2 +- R/get_test_data.R | 45 ++++++------ R/layer_add_forecast_date.R | 15 ++-- R/layer_add_target_date.R | 17 +++-- R/layer_cdc_flatline_quantiles.R | 39 +++++----- R/layer_naomit.R | 9 +-- R/layer_point_from_distn.R | 10 +-- R/layer_population_scaling.R | 41 ++++------- R/layer_predict.R | 7 +- R/layer_predictive_distn.R | 9 +-- R/layer_quantile_distn.R | 7 +- R/layer_residual_quantiles.R | 31 ++++---- R/layer_threshold_preds.R | 16 ++--- R/layer_unnest.R | 2 +- R/layers.R | 8 +-- R/model-methods.R | 8 +-- R/pivot_quantiles.R | 49 ++++++------- R/reexports-tidymodels.R | 12 ++++ R/step_epi_shift.R | 108 +++++++++++----------------- R/step_epi_slide.R | 11 ++- R/step_growth_rate.R | 85 +++++++++------------- R/step_lag_difference.R | 59 +++++++-------- R/step_population_scaling.R | 88 ++++++++--------------- R/step_training_window.R | 33 +++------ R/tidy.R | 25 +++---- R/time_types.R | 2 +- R/utils-misc.R | 15 ++-- man/Add_model.Rd | 8 +-- man/layer_add_forecast_date.Rd | 7 +- man/layer_add_target_date.Rd | 5 +- man/layer_cdc_flatline_quantiles.Rd | 9 +-- man/layer_naomit.Rd | 5 +- man/layer_point_from_distn.Rd | 6 +- man/layer_population_scaling.Rd | 9 +-- man/layer_predict.Rd | 3 +- man/layer_predictive_distn.Rd | 5 +- man/layer_quantile_distn.Rd | 3 +- man/layer_residual_quantiles.Rd | 15 ++-- man/layer_threshold.Rd | 6 +- man/nested_quantiles.Rd | 6 +- man/pivot_quantiles_longer.Rd | 4 +- man/pivot_quantiles_wider.Rd | 2 +- man/reexports.Rd | 9 ++- man/step_epi_shift.Rd | 12 +--- man/step_growth_rate.Rd | 22 ++---- man/step_lag_difference.Rd | 9 +-- man/step_population_scaling.Rd | 32 +++------ man/step_training_window.Rd | 18 ++--- man/tidy.frosting.Rd | 3 +- man/update.layer.Rd | 8 +-- 53 files changed, 429 insertions(+), 547 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index d1bd615b4..8d08ea12e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -167,7 +167,6 @@ export(flusight_hub_formatter) export(forecast) export(frosting) export(get_test_data) -export(grab_names) export(is_epi_recipe) export(is_epi_workflow) export(is_layer) @@ -191,6 +190,7 @@ export(pivot_quantiles_longer) export(pivot_quantiles_wider) export(prep) export(quantile_reg) +export(rand_id) export(remove_epi_recipe) export(remove_frosting) export(remove_model) @@ -204,6 +204,8 @@ export(step_growth_rate) export(step_lag_difference) export(step_population_scaling) export(step_training_window) +export(tibble) +export(tidy) export(update_epi_recipe) export(update_frosting) export(update_model) @@ -233,6 +235,7 @@ importFrom(dplyr,any_of) importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) importFrom(dplyr,bind_rows) +importFrom(dplyr,everything) importFrom(dplyr,filter) importFrom(dplyr,full_join) importFrom(dplyr,group_by) @@ -242,12 +245,14 @@ importFrom(dplyr,relocate) importFrom(dplyr,rename) importFrom(dplyr,select) importFrom(dplyr,summarise) +importFrom(dplyr,summarize) importFrom(dplyr,ungroup) importFrom(epiprocess,epi_slide) importFrom(epiprocess,growth_rate) importFrom(generics,augment) importFrom(generics,fit) importFrom(generics,forecast) +importFrom(generics,tidy) importFrom(ggplot2,aes) importFrom(ggplot2,autoplot) importFrom(ggplot2,geom_line) @@ -259,6 +264,7 @@ importFrom(hardhat,run_mold) importFrom(magrittr,"%>%") importFrom(recipes,bake) importFrom(recipes,prep) +importFrom(recipes,rand_id) importFrom(rlang,"!!!") importFrom(rlang,"!!") importFrom(rlang,"%@%") diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index 21b5e8ece..74af5e443 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -61,7 +61,7 @@ cdc_baseline_forecaster <- function( args_list = cdc_baseline_args_list()) { validate_forecaster_inputs(epi_data, outcome, "time_value") if (!inherits(args_list, c("cdc_flat_fcast", "alist"))) { - cli_stop("args_list was not created using `cdc_baseline_args_list().") + cli_abort("`args_list` was not created using `cdc_baseline_args_list().") } keys <- key_colnames(epi_data) ek <- kill_time_value(keys) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 785c183b7..6460b65e4 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,16 +1,15 @@ ## usethis namespace: start -#' @importFrom tibble tibble as_tibble +#' @importFrom tibble as_tibble #' @importFrom rlang := !! %||% as_function global_env set_names !!! #' is_logical is_true inject enquo enquos expr sym arg_match #' @importFrom stats poly predict lm residuals quantile #' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by -#' summarise filter mutate select left_join rename ungroup full_join -#' relocate +#' summarize filter mutate select left_join rename ungroup full_join +#' relocate summarise everything #' @importFrom cli cli_abort cli_warn #' @importFrom checkmate assert assert_character assert_int assert_scalar #' assert_logical assert_numeric assert_number assert_integer #' assert_integerish assert_date assert_function assert_class -#' @importFrom generics fit #' @import epiprocess parsnip ## usethis namespace: end NULL diff --git a/R/flatline_forecaster.R b/R/flatline_forecaster.R index 50cccc908..55808b803 100644 --- a/R/flatline_forecaster.R +++ b/R/flatline_forecaster.R @@ -34,7 +34,7 @@ flatline_forecaster <- function( args_list = flatline_args_list()) { validate_forecaster_inputs(epi_data, outcome, "time_value") if (!inherits(args_list, c("flat_fcast", "alist"))) { - cli_stop("args_list was not created using `flatline_args_list().") + cli_abort("`args_list` was not created using `flatline_args_list().") } keys <- key_colnames(epi_data) ek <- kill_time_value(keys) diff --git a/R/get_test_data.R b/R/get_test_data.R index 88ecf4054..ff3a146ef 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -42,14 +42,13 @@ #' get_test_data(recipe = rec, x = case_death_rate_subset) #' @importFrom rlang %@% #' @export - get_test_data <- function( recipe, x, fill_locf = FALSE, n_recent = NULL, forecast_date = max(x$time_value)) { - if (!is_epi_df(x)) cli::cli_abort("`x` must be an `epi_df`.") + if (!is_epi_df(x)) cli_abort("`x` must be an `epi_df`.") arg_is_lgl(fill_locf) arg_is_scalar(fill_locf) arg_is_scalar(n_recent, allow_null = TRUE) @@ -60,16 +59,16 @@ get_test_data <- function( check <- hardhat::check_column_names(x, colnames(recipe$template)) if (!check$ok) { - cli::cli_abort(c( + cli_abort(c( "Some variables used for training are not available in {.arg x}.", i = "The following required columns are missing: {check$missing_names}" )) } if (class(forecast_date) != class(x$time_value)) { - cli::cli_abort("`forecast_date` must be the same class as `x$time_value`.") + cli_abort("`forecast_date` must be the same class as `x$time_value`.") } if (forecast_date < max(x$time_value)) { - cli::cli_abort("`forecast_date` must be no earlier than `max(x$time_value)`") + cli_abort("`forecast_date` must be no earlier than `max(x$time_value)`") } min_lags <- min(map_dbl(recipe$steps, ~ min(.x$lag %||% Inf)), Inf) @@ -84,7 +83,7 @@ get_test_data <- function( # Probably needs a fix based on the time_type of the epi_df avail_recent <- diff(range(x$time_value)) if (avail_recent < min_required) { - cli::cli_abort(c( + cli_abort(c( "You supplied insufficient recent data for this recipe. ", "!" = "You need at least {min_required} days of data,", "!" = "but `x` contains only {avail_recent}." @@ -97,39 +96,37 @@ get_test_data <- function( # If we skip NA completion, we remove undesirably early time values # Happens globally, over all groups keep <- max(n_recent, min_required + 1) - x <- dplyr::filter(x, forecast_date - time_value <= keep) + x <- filter(x, forecast_date - time_value <= keep) # Pad with explicit missing values up to and including the forecast_date # x is grouped here x <- pad_to_end(x, groups, forecast_date) %>% - group_by(dplyr::across(dplyr::all_of(groups))) + group_by(across(all_of(groups))) # If all(lags > 0), then we get rid of recent data if (min_lags > 0 && min_lags < Inf) { - x <- dplyr::filter(x, forecast_date - time_value >= min_lags) + x <- filter(x, forecast_date - time_value >= min_lags) } # Now, fill forward missing data if requested if (fill_locf) { cannot_be_used <- x %>% - dplyr::filter(forecast_date - time_value <= n_recent) %>% - dplyr::mutate(fillers = forecast_date - time_value > min_required) %>% - dplyr::summarize( - dplyr::across( - -dplyr::any_of(key_colnames(recipe)), + filter(forecast_date - time_value <= n_recent) %>% + mutate(fillers = forecast_date - time_value > min_required) %>% + summarize( + across( + -any_of(key_colnames(recipe)), ~ all(is.na(.x[fillers])) & is.na(head(.x[!fillers], 1)) ), .groups = "drop" ) %>% - dplyr::select(-fillers) %>% - dplyr::summarise(dplyr::across( - -dplyr::any_of(key_colnames(recipe)), ~ any(.x) - )) %>% + select(-fillers) %>% + summarise(across(-any_of(key_colnames(recipe)), ~ any(.x))) %>% unlist() if (any(cannot_be_used)) { bad_vars <- names(cannot_be_used)[cannot_be_used] if (recipes::is_trained(recipe)) { - cli::cli_abort(c( + cli_abort(c( "The variables {.var {bad_vars}} have too many recent missing", `!` = "values to be filled automatically. ", i = "You should either choose `n_recent` larger than its current ", @@ -141,15 +138,15 @@ get_test_data <- function( x <- tidyr::fill(x, !time_value) } - dplyr::filter(x, forecast_date - time_value <= min_required) %>% + filter(x, forecast_date - time_value <= min_required) %>% ungroup() } pad_to_end <- function(x, groups, end_date) { itval <- guess_period(c(x$time_value, end_date), "time_value") completed_time_values <- x %>% - dplyr::group_by(dplyr::across(dplyr::all_of(groups))) %>% - dplyr::summarise( + group_by(across(all_of(groups))) %>% + summarise( time_value = rlang::list2( time_value = Seq(max(time_value) + itval, end_date, itval) ) @@ -157,8 +154,8 @@ pad_to_end <- function(x, groups, end_date) { unnest("time_value") %>% mutate(time_value = vctrs::vec_cast(time_value, x$time_value)) - dplyr::bind_rows(x, completed_time_values) %>% - dplyr::arrange(dplyr::across(dplyr::all_of(c("time_value", groups)))) + bind_rows(x, completed_time_values) %>% + arrange(across(all_of(c("time_value", groups)))) } Seq <- function(from, to, by) { diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index c4bb7d483..02395f960 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -19,15 +19,16 @@ #' #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' latest <- jhu %>% -#' dplyr::filter(time_value >= max(time_value) - 14) +#' filter(time_value >= max(time_value) - 14) #' #' # Don't specify `forecast_date` (by default, this should be last date in latest) #' f <- frosting() %>% @@ -85,7 +86,8 @@ layer_add_forecast_date_new <- function(forecast_date, id) { } #' @export -slather.layer_add_forecast_date <- function(object, components, workflow, new_data, ...) { +slather.layer_add_forecast_date <- function(object, components, workflow, + new_data, ...) { rlang::check_dots_empty() if (is.null(object$forecast_date)) { max_time_value <- as.Date(max( @@ -102,12 +104,13 @@ slather.layer_add_forecast_date <- function(object, components, workflow, new_da workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type if (expected_time_type == "week") expected_time_type <- "day" - validate_date(forecast_date, expected_time_type, + validate_date( + forecast_date, expected_time_type, call = rlang::expr(layer_add_forecast_date()) ) forecast_date <- coerce_time_type(forecast_date, expected_time_type) object$forecast_date <- forecast_date - components$predictions <- dplyr::bind_cols( + components$predictions <- bind_cols( components$predictions, forecast_date = forecast_date ) diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 23aeb4091..834deb82b 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -20,14 +20,15 @@ #' #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' dfilter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' # Use ahead + forecast date #' f <- frosting() %>% @@ -79,7 +80,8 @@ layer_add_target_date_new <- function(id = id, target_date = target_date) { } #' @export -slather.layer_add_target_date <- function(object, components, workflow, new_data, ...) { +slather.layer_add_target_date <- function(object, components, workflow, + new_data, ...) { rlang::check_dots_empty() the_recipe <- workflows::extract_recipe(workflow) the_frosting <- extract_frosting(workflow) @@ -91,7 +93,8 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data if (!is.null(object$target_date)) { target_date <- object$target_date - validate_date(target_date, expected_time_type, + validate_date( + target_date, expected_time_type, call = expr(layer_add_target_date()) ) target_date <- coerce_time_type(target_date, expected_time_type) @@ -100,7 +103,8 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data !is.null(forecast_date <- extract_argument( the_frosting, "layer_add_forecast_date", "forecast_date" ))) { - validate_date(forecast_date, expected_time_type, + validate_date( + forecast_date, expected_time_type, call = rlang::expr(layer_add_forecast_date()) ) forecast_date <- coerce_time_type(forecast_date, expected_time_type) @@ -117,7 +121,8 @@ slather.layer_add_target_date <- function(object, components, workflow, new_data } object$target_date <- target_date - components$predictions <- dplyr::bind_cols(components$predictions, + components$predictions <- bind_cols( + components$predictions, target_date = target_date ) components diff --git a/R/layer_cdc_flatline_quantiles.R b/R/layer_cdc_flatline_quantiles.R index db1440b03..9166d3469 100644 --- a/R/layer_cdc_flatline_quantiles.R +++ b/R/layer_cdc_flatline_quantiles.R @@ -55,6 +55,7 @@ #' @export #' #' @examples +#' library(dplyr) #' r <- epi_recipe(case_death_rate_subset) %>% #' # data is "daily", so we fit this to 1 ahead, the result will contain #' # 1 day ahead residuals @@ -68,16 +69,16 @@ #' layer_predict() %>% #' layer_cdc_flatline_quantiles(aheads = c(7, 14, 21, 28), symmetrize = TRUE) #' -#' eng <- parsnip::linear_reg() %>% parsnip::set_engine("flatline") +#' eng <- linear_reg(engine = "flatline") #' #' wf <- epi_workflow(r, eng, f) %>% fit(case_death_rate_subset) #' preds <- forecast(wf) %>% -#' dplyr::select(-time_value) %>% -#' dplyr::mutate(forecast_date = forecast_date) +#' select(-time_value) %>% +#' mutate(forecast_date = forecast_date) #' preds #' #' preds <- preds %>% -#' unnest(.pred_distn_all) %>% +#' tidyr::unnest(.pred_distn_all) %>% #' pivot_quantiles_wider(.pred_distn) %>% #' mutate(target_date = forecast_date + ahead) #' @@ -162,12 +163,10 @@ slather.layer_cdc_flatline_quantiles <- } the_fit <- workflows::extract_fit_parsnip(workflow) if (!inherits(the_fit, "_flatline")) { - cli::cli_warn( - c( - "Predictions for this workflow were not produced by the {.cls flatline}", - "{.pkg parsnip} engine. Results may be unexpected. See {.fn epipredict::flatline}." - ) - ) + cli::cli_warn(c( + "Predictions for this workflow were not produced by the {.cls flatline}", + "{.pkg parsnip} engine. Results may be unexpected. See {.fn epipredict::flatline}." + )) } p <- components$predictions ek <- kill_time_value(key_colnames(components$mold)) @@ -196,7 +195,7 @@ slather.layer_cdc_flatline_quantiles <- c(cols_in_preds$missing_names, cols_in_resids$missing_names) )) } else { # not flatline, but we'll try - key_cols <- dplyr::bind_cols( + key_cols <- bind_cols( geo_value = components$mold$extras$roles$geo_value, components$mold$extras$roles$key ) @@ -211,26 +210,26 @@ slather.layer_cdc_flatline_quantiles <- object$by_key, c(cols_in_preds$missing_names, cols_in_resids$missing_names) )) - r <- dplyr::bind_cols(key_cols, r) + r <- bind_cols(key_cols, r) } } r <- r %>% - dplyr::select(tidyselect::all_of(c(avail_grps, ".resid"))) %>% - dplyr::group_by(!!!rlang::syms(avail_grps)) %>% - dplyr::summarise(.resid = list(.resid), .groups = "drop") + select(all_of(c(avail_grps, ".resid"))) %>% + group_by(!!!rlang::syms(avail_grps)) %>% + summarise(.resid = list(.resid), .groups = "drop") - res <- dplyr::left_join(p, r, by = avail_grps) %>% + res <- left_join(p, r, by = avail_grps) %>% dplyr::rowwise() %>% - dplyr::mutate( + mutate( .pred_distn_all = propagate_samples( .resid, .pred, object$quantile_levels, object$aheads, object$nsim, object$symmetrize, object$nonneg ) ) %>% - dplyr::select(tidyselect::all_of(c(avail_grps, ".pred_distn_all"))) + select(all_of(c(avail_grps, ".pred_distn_all"))) # res <- check_pname(res, components$predictions, object) - components$predictions <- dplyr::left_join( + components$predictions <- left_join( components$predictions, res, by = avail_grps @@ -267,7 +266,7 @@ propagate_samples <- function( } } res <- res[aheads] - list(tibble::tibble( + list(tibble( ahead = aheads, .pred_distn = map_vec( res, ~ dist_quantiles(quantile(.x, quantile_levels), quantile_levels) diff --git a/R/layer_naomit.R b/R/layer_naomit.R index 85842bfdf..209a663b4 100644 --- a/R/layer_naomit.R +++ b/R/layer_naomit.R @@ -11,14 +11,15 @@ #' @return an updated `frosting` postprocessor #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' f <- frosting() %>% #' layer_predict() %>% @@ -33,7 +34,7 @@ layer_naomit <- function(frosting, ..., id = rand_id("naomit")) { add_layer( frosting, layer_naomit_new( - terms = dplyr::enquos(...), + terms = enquos(...), id = id ) ) @@ -50,7 +51,7 @@ slather.layer_naomit <- function(object, components, workflow, new_data, ...) { pos <- tidyselect::eval_select(exprs, components$predictions) col_names <- names(pos) components$predictions <- components$predictions %>% - dplyr::filter(dplyr::if_any(dplyr::all_of(col_names), ~ !is.na(.x))) + filter(dplyr::if_any(all_of(col_names), ~ !is.na(.x))) components } diff --git a/R/layer_point_from_distn.R b/R/layer_point_from_distn.R index f415e7bd4..f14008748 100644 --- a/R/layer_point_from_distn.R +++ b/R/layer_point_from_distn.R @@ -16,15 +16,17 @@ #' @export #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) %>% fit(jhu) +#' wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) %>% +#' fit(jhu) #' #' f1 <- frosting() %>% #' layer_predict() %>% @@ -91,9 +93,9 @@ slather.layer_point_from_distn <- if (is.null(object$name)) { components$predictions$.pred <- dstn } else { - dstn <- tibble::tibble(dstn = dstn) + dstn <- tibble(dstn = dstn) dstn <- check_pname(dstn, components$predictions, object) - components$predictions <- dplyr::mutate(components$predictions, !!!dstn) + components$predictions <- mutate(components$predictions, !!!dstn) } components } diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 3829eec5a..1b940b804 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -47,9 +47,10 @@ #' @return an updated `frosting` postprocessor #' @export #' @examples -#' jhu <- epiprocess::jhu_csse_daily_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% -#' dplyr::select(geo_value, time_value, cases) +#' library(dplyr) +#' jhu <- jhu_csse_daily_subset %>% +#' filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% +#' select(geo_value, time_value, cases) #' #' pop_data <- data.frame(states = c("ca", "ny"), value = c(20000, 30000)) #' @@ -74,7 +75,7 @@ #' df_pop_col = "value" #' ) #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% +#' wf <- epi_workflow(r, linear_reg()) %>% #' fit(jhu) %>% #' add_frosting(f) #' @@ -93,7 +94,7 @@ layer_population_scaling <- function(frosting, arg_is_chr(df_pop_col, suffix, id) arg_is_chr(by, allow_null = TRUE) if (rate_rescaling <= 0) { - cli_stop("`rate_rescaling` should be a positive number") + cli_abort("`rate_rescaling` must be a positive number.") } add_layer( @@ -134,24 +135,12 @@ slather.layer_population_scaling <- ) rlang::check_dots_empty() - if (is.null(object$by)) { - object$by <- intersect( - kill_time_value(key_colnames(components$predictions)), - colnames(dplyr::select(object$df, !object$df_pop_col)) - ) - } - try_join <- try( - dplyr::left_join(components$predictions, object$df, - by = object$by - ), - silent = TRUE + object$by <- object$by %||% intersect( + kill_time_value(key_colnames(components$predictions)), + colnames(select(object$df, !object$df_pop_col)) ) - if (any(grepl("Join columns must be present in data", unlist(try_join)))) { - cli_stop(c( - "columns in `by` selectors of `layer_population_scaling` ", - "must be present in data and match" - )) - } + hardhat::validate_column_names(components$predictions, object$by) + hardhat::validate_column_names(object$df, object$by) # object$df <- object$df %>% # dplyr::mutate(dplyr::across(tidyselect::where(is.character), tolower)) @@ -162,18 +151,18 @@ slather.layer_population_scaling <- suffix <- ifelse(object$create_new, object$suffix, "") col_to_remove <- setdiff(colnames(object$df), colnames(components$predictions)) - components$predictions <- dplyr::left_join( + components$predictions <- left_join( components$predictions, object$df, by = object$by, suffix = c("", ".df") ) %>% - dplyr::mutate(dplyr::across( - dplyr::all_of(col_names), + mutate(across( + all_of(col_names), ~ .x * !!pop_col / object$rate_rescaling, .names = "{.col}{suffix}" )) %>% - dplyr::select(-dplyr::any_of(col_to_remove)) + select(-any_of(col_to_remove)) components } diff --git a/R/layer_predict.R b/R/layer_predict.R index 46d81be18..6ca17ac24 100644 --- a/R/layer_predict.R +++ b/R/layer_predict.R @@ -16,6 +16,7 @@ #' @export #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% #' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' @@ -24,7 +25,7 @@ #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' latest <- jhu %>% filter(time_value >= max(time_value) - 14) #' #' # Predict layer alone @@ -90,9 +91,7 @@ slather.layer_predict <- function(object, components, workflow, new_data, type = opts = c(object$opts, opts), !!!object$dots_list, ... )) - components$predictions <- dplyr::bind_cols( - components$keys, components$predictions - ) + components$predictions <- bind_cols(components$keys, components$predictions) components } diff --git a/R/layer_predictive_distn.R b/R/layer_predictive_distn.R index 9b1a160e1..b28e0c765 100644 --- a/R/layer_predictive_distn.R +++ b/R/layer_predictive_distn.R @@ -20,15 +20,16 @@ #' @export #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' f <- frosting() %>% #' layer_predict() %>% @@ -91,9 +92,9 @@ slather.layer_predictive_distn <- if (!all(is.infinite(truncate))) { dstn <- distributional::dist_truncated(dstn, truncate[1], truncate[2]) } - dstn <- tibble::tibble(dstn = dstn) + dstn <- tibble(dstn = dstn) dstn <- check_pname(dstn, components$predictions, object) - components$predictions <- dplyr::mutate(components$predictions, !!!dstn) + components$predictions <- mutate(components$predictions, !!!dstn) components } diff --git a/R/layer_quantile_distn.R b/R/layer_quantile_distn.R index ea96969da..5f87ded29 100644 --- a/R/layer_quantile_distn.R +++ b/R/layer_quantile_distn.R @@ -22,8 +22,9 @@ #' @export #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% @@ -95,9 +96,9 @@ slather.layer_quantile_distn <- if (!all(is.infinite(truncate))) { dstn <- snap(dstn, truncate[1], truncate[2]) } - dstn <- tibble::tibble(dstn = dstn) + dstn <- tibble(dstn = dstn) dstn <- check_pname(dstn, components$predictions, object) - components$predictions <- dplyr::mutate(components$predictions, !!!dstn) + components$predictions <- mutate(components$predictions, !!!dstn) components } diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index 85c1c6ed0..dc53f0f60 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -14,19 +14,23 @@ #' residual quantiles added to the prediction #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' f <- frosting() %>% #' layer_predict() %>% -#' layer_residual_quantiles(quantile_levels = c(0.0275, 0.975), symmetrize = FALSE) %>% +#' layer_residual_quantiles( +#' quantile_levels = c(0.0275, 0.975), +#' symmetrize = FALSE +#' ) %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' @@ -34,7 +38,10 @@ #' #' f2 <- frosting() %>% #' layer_predict() %>% -#' layer_residual_quantiles(quantile_levels = c(0.3, 0.7), by_key = "geo_value") %>% +#' layer_residual_quantiles( +#' quantile_levels = c(0.3, 0.7), +#' by_key = "geo_value" +#' ) %>% #' layer_naomit(.pred) #' wf2 <- wf %>% add_frosting(f2) #' @@ -88,7 +95,7 @@ slather.layer_residual_quantiles <- ## Handle any grouping requests if (length(object$by_key) > 0L) { - key_cols <- dplyr::bind_cols( + key_cols <- bind_cols( geo_value = components$mold$extras$roles$geo_value, components$mold$extras$roles$key ) @@ -101,23 +108,23 @@ slather.layer_residual_quantiles <- )) } if (length(common) > 0L) { - r <- r %>% dplyr::select(tidyselect::any_of(c(common, ".resid"))) + r <- r %>% select(any_of(c(common, ".resid"))) common_in_r <- common[common %in% names(r)] if (length(common_in_r) == length(common)) { - r <- dplyr::left_join(key_cols, r, by = common_in_r) + r <- left_join(key_cols, r, by = common_in_r) } else { cli::cli_warn(c( "Some grouping keys are not in data.frame returned by the", "`residuals()` method. Groupings may not be correct." )) - r <- dplyr::bind_cols(key_cols, r %>% dplyr::select(.resid)) %>% - dplyr::group_by(!!!rlang::syms(common)) + r <- bind_cols(key_cols, select(r, .resid)) %>% + group_by(!!!rlang::syms(common)) } } } r <- r %>% - dplyr::summarize( + summarize( dstn = list(quantile( c(.resid, s * .resid), probs = object$quantile_levels, na.rm = TRUE @@ -132,11 +139,11 @@ slather.layer_residual_quantiles <- } estimate <- components$predictions$.pred - res <- tibble::tibble( + res <- tibble( .pred_distn = dist_quantiles(map2(estimate, r$dstn, "+"), object$quantile_levels) ) res <- check_pname(res, components$predictions, object) - components$predictions <- dplyr::mutate(components$predictions, !!!res) + components$predictions <- mutate(components$predictions, !!!res) components } diff --git a/R/layer_threshold_preds.R b/R/layer_threshold_preds.R index 8b2b56d1e..56f8059ab 100644 --- a/R/layer_threshold_preds.R +++ b/R/layer_threshold_preds.R @@ -22,15 +22,14 @@ #' @return an updated `frosting` postprocessor #' @export #' @examples - +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value < "2021-03-08", -#' geo_value %in% c("ak", "ca", "ar")) +#' filter(time_value < "2021-03-08", geo_value %in% c("ak", "ca", "ar")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) #' #' f <- frosting() %>% #' layer_predict() %>% @@ -46,7 +45,7 @@ layer_threshold <- add_layer( frosting, layer_threshold_new( - terms = dplyr::enquos(...), + terms = enquos(...), lower = lower, upper = upper, id = id @@ -103,12 +102,7 @@ slather.layer_threshold <- pos <- tidyselect::eval_select(exprs, components$predictions) col_names <- names(pos) components$predictions <- components$predictions %>% - dplyr::mutate( - dplyr::across( - dplyr::all_of(col_names), - ~ snap(.x, object$lower, object$upper) - ) - ) + mutate(across(all_of(col_names), ~ snap(.x, object$lower, object$upper))) components } diff --git a/R/layer_unnest.R b/R/layer_unnest.R index dfc391942..a6fc9f0af 100644 --- a/R/layer_unnest.R +++ b/R/layer_unnest.R @@ -15,7 +15,7 @@ layer_unnest <- function(frosting, ..., id = rand_id("unnest")) { add_layer( frosting, layer_unnest_new( - terms = dplyr::enquos(...), + terms = enquos(...), id = id ) ) diff --git a/R/layers.R b/R/layers.R index b59e95cdd..aa515a917 100644 --- a/R/layers.R +++ b/R/layers.R @@ -41,15 +41,15 @@ layer <- function(subclass, ..., .prefix = "layer_") { #' in the layer, and the values are the new values to update the layer with. #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% #' step_epi_naomit() -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) -#' latest <- jhu %>% -#' dplyr::filter(time_value >= max(time_value) - 14) +#' wf <- epi_workflow(r, linear_reg()) %>% fit(jhu) +#' latest <- jhu %>% filter(time_value >= max(time_value) - 14) #' #' # Specify a `forecast_date` that is greater than or equal to `as_of` date #' f <- frosting() %>% diff --git a/R/model-methods.R b/R/model-methods.R index 607b04234..f3b374879 100644 --- a/R/model-methods.R +++ b/R/model-methods.R @@ -32,11 +32,9 @@ #' #' @export #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter( -#' time_value > "2021-11-01", -#' geo_value %in% c("ak", "ca", "ny") -#' ) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% @@ -49,7 +47,7 @@ #' wf <- wf %>% Add_model(rf_model) #' wf #' -#' lm_model <- parsnip::linear_reg() +#' lm_model <- linear_reg() #' #' wf <- Update_model(wf, lm_model) #' wf diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index 70e51da8e..c8601b4f6 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -6,16 +6,18 @@ #' @export #' #' @examples +#' library(dplyr) +#' library(tidyr) #' edf <- case_death_rate_subset[1:3, ] #' edf$q <- dist_quantiles(list(1:5, 2:4, 3:10), list(1:5 / 6, 2:4 / 5, 3:10 / 11)) #' -#' edf_nested <- edf %>% dplyr::mutate(q = nested_quantiles(q)) -#' edf_nested %>% tidyr::unnest(q) +#' edf_nested <- edf %>% mutate(q = nested_quantiles(q)) +#' edf_nested %>% unnest(q) nested_quantiles <- function(x) { stopifnot(is_dist_quantiles(x)) distributional:::dist_apply(x, .f = function(z) { - tibble::as_tibble(vec_data(z)) %>% - dplyr::mutate(dplyr::across(tidyselect::everything(), as.double)) %>% + as_tibble(vec_data(z)) %>% + mutate(across(everything(), as.double)) %>% vctrs::list_of() }) } @@ -47,31 +49,26 @@ nested_quantiles <- function(x) { #' @examples #' d1 <- c(dist_quantiles(1:3, 1:3 / 4), dist_quantiles(2:4, 1:3 / 4)) #' d2 <- c(dist_quantiles(2:4, 2:4 / 5), dist_quantiles(3:5, 2:4 / 5)) -#' tib <- tibble::tibble(g = c("a", "b"), d1 = d1, d2 = d2) +#' tib <- tibble(g = c("a", "b"), d1 = d1, d2 = d2) #' #' pivot_quantiles_longer(tib, "d1") -#' pivot_quantiles_longer(tib, tidyselect::ends_with("1")) +#' pivot_quantiles_longer(tib, dplyr::ends_with("1")) #' pivot_quantiles_longer(tib, d1, d2) pivot_quantiles_longer <- function(.data, ..., .ignore_length_check = FALSE) { cols <- validate_pivot_quantiles(.data, ...) - .data <- .data %>% - dplyr::mutate(dplyr::across(tidyselect::all_of(cols), nested_quantiles)) + .data <- .data %>% mutate(across(all_of(cols), nested_quantiles)) if (length(cols) > 1L) { lengths_check <- .data %>% - dplyr::transmute(dplyr::across( - tidyselect::all_of(cols), - ~ map_int(.x, vctrs::vec_size) - )) %>% + dplyr::transmute(across(all_of(cols), ~ map_int(.x, vctrs::vec_size))) %>% as.matrix() %>% apply(1, function(x) dplyr::n_distinct(x) == 1L) %>% all() if (lengths_check) { - .data <- tidyr::unnest(.data, tidyselect::all_of(cols), names_sep = "_") + .data <- tidyr::unnest(.data, all_of(cols), names_sep = "_") } else { if (.ignore_length_check) { for (col in cols) { - .data <- .data %>% - tidyr::unnest(tidyselect::all_of(col), names_sep = "_") + .data <- .data %>% tidyr::unnest(all_of(col), names_sep = "_") } } else { cli::cli_abort(c( @@ -82,7 +79,7 @@ pivot_quantiles_longer <- function(.data, ..., .ignore_length_check = FALSE) { } } } else { - .data <- .data %>% tidyr::unnest(tidyselect::all_of(cols)) + .data <- .data %>% tidyr::unnest(all_of(cols)) } .data } @@ -110,20 +107,18 @@ pivot_quantiles_longer <- function(.data, ..., .ignore_length_check = FALSE) { #' tib <- tibble::tibble(g = c("a", "b"), d1 = d1, d2 = d2) #' #' pivot_quantiles_wider(tib, c("d1", "d2")) -#' pivot_quantiles_wider(tib, tidyselect::starts_with("d")) +#' pivot_quantiles_wider(tib, dplyr::starts_with("d")) #' pivot_quantiles_wider(tib, d2) pivot_quantiles_wider <- function(.data, ...) { cols <- validate_pivot_quantiles(.data, ...) - .data <- .data %>% - dplyr::mutate(dplyr::across(tidyselect::all_of(cols), nested_quantiles)) + .data <- .data %>% mutate(across(all_of(cols), nested_quantiles)) checks <- map_lgl(cols, ~ diff(range(vctrs::list_sizes(.data[[.x]]))) == 0L) if (!all(checks)) { nms <- cols[!checks] - cli::cli_abort( - c("Quantiles must be the same length and have the same set of taus.", - i = "Check failed for variables(s) {.var {nms}}." - ) - ) + cli::cli_abort(c( + "Quantiles must be the same length and have the same set of taus.", + i = "Check failed for variables(s) {.var {nms}}." + )) } # tidyr::pivot_wider can crash if there are duplicates, this generally won't @@ -134,7 +129,7 @@ pivot_quantiles_wider <- function(.data, ...) { if (length(cols) > 1L) { for (col in cols) { .data <- .data %>% - tidyr::unnest(tidyselect::all_of(col)) %>% + tidyr::unnest(all_of(col)) %>% tidyr::pivot_wider( names_from = "quantile_levels", values_from = "values", names_prefix = paste0(col, "_") @@ -142,10 +137,10 @@ pivot_quantiles_wider <- function(.data, ...) { } } else { .data <- .data %>% - tidyr::unnest(tidyselect::all_of(cols)) %>% + tidyr::unnest(all_of(cols)) %>% tidyr::pivot_wider(names_from = "quantile_levels", values_from = "values") } - dplyr::select(.data, -.hidden_index) + select(.data, -.hidden_index) } pivot_quantiles <- function(.data, ...) { diff --git a/R/reexports-tidymodels.R b/R/reexports-tidymodels.R index 2c69139a2..3b28ac5c5 100644 --- a/R/reexports-tidymodels.R +++ b/R/reexports-tidymodels.R @@ -13,3 +13,15 @@ recipes::prep #' @importFrom recipes bake #' @export recipes::bake + +#' @importFrom recipes rand_id +#' @export +recipes::rand_id + +#' @importFrom tibble tibble +#' @export +tibble::tibble + +#' @importFrom generics tidy +#' @export +generics::tidy diff --git a/R/step_epi_shift.R b/R/step_epi_shift.R index f45f5d8f4..616d98f03 100644 --- a/R/step_epi_shift.R +++ b/R/step_epi_shift.R @@ -15,16 +15,12 @@ #' for this step. See [recipes::selections()] for more details. #' @param role For model terms created by this step, what analysis role should #' they be assigned? `lag` is default a predictor while `ahead` is an outcome. -#' @param trained A logical to indicate if the quantities for -#' preprocessing have been estimated. #' @param lag,ahead A vector of integers. Each specified column will #' be the lag or lead for each value in the vector. Lag integers must be #' nonnegative, while ahead integers must be positive. -#' @param prefix A prefix to indicate what type of variable this is +#' @param prefix A character string that will be prefixed to the new column. #' @param default Determines what fills empty rows #' left by leading/lagging (defaults to NA). -#' @param columns A character string of variable names that will -#' be populated (eventually) by the `terms` argument. #' @param skip A logical. Should the step be skipped when the #' recipe is baked by [bake()]? While all operations are baked #' when [prep()] is run, some operations may not be able to be @@ -55,42 +51,34 @@ step_epi_lag <- ..., lag, role = "predictor", - trained = FALSE, prefix = "lag_", default = NA, - columns = NULL, skip = FALSE, id = rand_id("epi_lag")) { if (!is_epi_recipe(recipe)) { - cli::cli_abort("This step can only operate on an `epi_recipe`.") + cli_abort("This step can only operate on an `epi_recipe`.") } if (missing(lag)) { - cli::cli_abort( - c("The `lag` argument must not be empty.", - i = "Did you perhaps pass an integer in `...` accidentally?" - ) - ) + cli_abort(c( + "The `lag` argument must not be empty.", + i = "Did you perhaps pass an integer in `...` accidentally?" + )) } arg_is_nonneg_int(lag) arg_is_chr_scalar(prefix, id) - if (!is.null(columns)) { - cli::cli_abort(c( - "The `columns` argument must be `NULL.", - i = "Use `tidyselect` methods to choose columns to lag." - )) - } - add_step( + + recipes::add_step( recipe, step_epi_lag_new( - terms = dplyr::enquos(...), + terms = enquos(...), role = role, - trained = trained, + trained = FALSE, lag = as.integer(lag), prefix = prefix, default = default, keys = key_colnames(recipe), - columns = columns, + columns = NULL, skip = skip, id = id ) @@ -107,40 +95,34 @@ step_epi_ahead <- ..., ahead, role = "outcome", - trained = FALSE, prefix = "ahead_", default = NA, - columns = NULL, skip = FALSE, id = rand_id("epi_ahead")) { if (!is_epi_recipe(recipe)) { - cli::cli_abort("This step can only operate on an `epi_recipe`.") + cli_abort("This step can only operate on an `epi_recipe`.") } if (missing(ahead)) { - cli::cli_abort(c( + cli_abort(c( "The `ahead` argument must not be empty.", i = "Did you perhaps pass an integer in `...` accidentally?" )) } arg_is_nonneg_int(ahead) arg_is_chr_scalar(prefix, id) - if (!is.null(columns)) { - rlang::abort(c("The `columns` argument must be `NULL.", - i = "Use `tidyselect` methods to choose columns to lead." - )) - } - add_step( + + recipes::add_step( recipe, step_epi_ahead_new( terms = enquos(...), role = role, - trained = trained, + trained = FALSE, ahead = as.integer(ahead), prefix = prefix, default = default, keys = key_colnames(recipe), - columns = columns, + columns = NULL, skip = skip, id = id ) @@ -151,7 +133,7 @@ step_epi_ahead <- step_epi_lag_new <- function(terms, role, trained, lag, prefix, default, keys, columns, skip, id) { - step( + recipes::step( subclass = "epi_lag", terms = terms, role = role, @@ -169,7 +151,7 @@ step_epi_lag_new <- step_epi_ahead_new <- function(terms, role, trained, ahead, prefix, default, keys, columns, skip, id) { - step( + recipes::step( subclass = "epi_ahead", terms = terms, role = role, @@ -196,7 +178,7 @@ prep.step_epi_lag <- function(x, training, info = NULL, ...) { prefix = x$prefix, default = x$default, keys = x$keys, - columns = recipes_eval_select(x$terms, training, info), + columns = recipes::recipes_eval_select(x$terms, training, info), skip = x$skip, id = x$id ) @@ -212,7 +194,7 @@ prep.step_epi_ahead <- function(x, training, info = NULL, ...) { prefix = x$prefix, default = x$default, keys = x$keys, - columns = recipes_eval_select(x$terms, training, info), + columns = recipes::recipes_eval_select(x$terms, training, info), skip = x$skip, id = x$id ) @@ -223,7 +205,7 @@ prep.step_epi_ahead <- function(x, training, info = NULL, ...) { #' @export bake.step_epi_lag <- function(object, new_data, ...) { grid <- tidyr::expand_grid(col = object$columns, lag = object$lag) %>% - dplyr::mutate( + mutate( newname = glue::glue("{object$prefix}{lag}_{col}"), shift_val = lag, lag = NULL @@ -233,32 +215,28 @@ bake.step_epi_lag <- function(object, new_data, ...) { new_data_names <- colnames(new_data) intersection <- new_data_names %in% grid$newname if (any(intersection)) { - rlang::abort( - paste0( - "Name collision occured in `", class(object)[1], - "`. The following variable names already exists: ", - paste0(new_data_names[intersection], collapse = ", "), - "." - ) - ) + cli_abort(c( + "Name collision occured in {.cls {class(object)[1]}}", + "The following variable name{?s} already exist{?s/}: {.val {new_data_names[intersection]}}." + )) } ok <- object$keys shifted <- reduce( pmap(grid, epi_shift_single, x = new_data, key_cols = ok), - dplyr::full_join, + full_join, by = ok ) - dplyr::full_join(new_data, shifted, by = ok) %>% - dplyr::group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% - dplyr::arrange(time_value) %>% - dplyr::ungroup() + full_join(new_data, shifted, by = ok) %>% + group_by(across(all_of(ok[-1]))) %>% + arrange(time_value) %>% + ungroup() } #' @export bake.step_epi_ahead <- function(object, new_data, ...) { grid <- tidyr::expand_grid(col = object$columns, ahead = object$ahead) %>% - dplyr::mutate( + mutate( newname = glue::glue("{object$prefix}{ahead}_{col}"), shift_val = -ahead, ahead = NULL @@ -268,26 +246,22 @@ bake.step_epi_ahead <- function(object, new_data, ...) { new_data_names <- colnames(new_data) intersection <- new_data_names %in% grid$newname if (any(intersection)) { - rlang::abort( - paste0( - "Name collision occured in `", class(object)[1], - "`. The following variable names already exists: ", - paste0(new_data_names[intersection], collapse = ", "), - "." - ) - ) + cli_abort(c( + "Name collision occured in {.cls {class(object)[1]}}", + "The following variable name{?s} already exist{?s/}: {.val {new_data_names[intersection]}}." + )) } ok <- object$keys shifted <- reduce( pmap(grid, epi_shift_single, x = new_data, key_cols = ok), - dplyr::full_join, + full_join, by = ok ) - dplyr::full_join(new_data, shifted, by = ok) %>% - dplyr::group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% - dplyr::arrange(time_value) %>% - dplyr::ungroup() + full_join(new_data, shifted, by = ok) %>% + group_by(across(all_of(ok[-1]))) %>% + arrange(time_value) %>% + ungroup() } diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index a8ad66c85..180be3d51 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -22,7 +22,6 @@ #' @param before,after the size of the sliding window on the left and the right #' of the center. Usually non-negative integers for data indexed by date, but #' more restrictive in other cases (see [epiprocess::epi_slide()] for details). -#' @param prefix A character string that will be prefixed to the new column. #' @param f_name a character string of at most 20 characters that describes #' the function. This will be combined with `prefix` and the columns in `...` #' to name the result using `{prefix}{f_name}_{column}`. By default it will be determined @@ -53,7 +52,7 @@ step_epi_slide <- skip = FALSE, id = rand_id("epi_slide")) { if (!is_epi_recipe(recipe)) { - rlang::abort("This recipe step can only operate on an `epi_recipe`.") + cli_abort("This recipe step can only operate on an {.cls epi_recipe}.") } .f <- validate_slide_fun(.f) epiprocess:::validate_slide_window_arg(before, attributes(recipe$template)$metadata$time_type) @@ -61,7 +60,7 @@ step_epi_slide <- arg_is_chr_scalar(role, prefix, id) arg_is_lgl_scalar(skip) - add_step( + recipes::add_step( recipe, step_epi_slide_new( terms = enquos(...), @@ -94,7 +93,7 @@ step_epi_slide_new <- columns, skip, id) { - step( + recipes::step( subclass = "epi_slide", terms = terms, before = before, @@ -116,7 +115,7 @@ step_epi_slide_new <- prep.step_epi_slide <- function(x, training, info = NULL, ...) { col_names <- recipes::recipes_eval_select(x$terms, data = training, info = info) - check_type(training[, col_names], types = c("double", "integer")) + recipes::check_type(training[, col_names], types = c("double", "integer")) step_epi_slide_new( terms = x$terms, @@ -147,7 +146,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { if (any(intersection)) { nms <- new_data_names[intersection] cli_abort( - c("In `step_epi_slide()` a name collision occurred. The following variable names already exist:", + c("In `step_epi_slide()` a name collision occurred. The following variable name{?s} already exist{?/s}:", `*` = "{.var {nms}}" ), call = caller_env(), diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index 48d8b4394..e1950d208 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -8,13 +8,11 @@ #' @param horizon Bandwidth for the sliding window, when `method` is #' "rel_change" or "linear_reg". See [epiprocess::growth_rate()] for more #' details. -#' @param method Either "rel_change", "linear_reg", "smooth_spline", or -#' "trend_filter", indicating the method to use for the growth rate -#' calculation. The first two are local methods: they are run in a sliding +#' @param method Either "rel_change" or "linear_reg", +#' indicating the method to use for the growth rate +#' calculation. These are local methods: they are run in a sliding #' fashion over the sequence (in order to estimate derivatives and hence -#' growth rates); the latter two are global methods: they are run once over -#' the entire sequence. See [epiprocess::growth_rate()] for more -#' details. +#' growth rates). See [epiprocess::growth_rate()] for more details. #' @param log_scale Should growth rates be estimated using the parameterization #' on the log scale? See details for an explanation. Default is `FALSE`. #' @param replace_Inf Sometimes, the growth rate calculation can result in @@ -45,58 +43,49 @@ step_growth_rate <- function(recipe, ..., role = "predictor", - trained = FALSE, horizon = 7, - method = c("rel_change", "linear_reg", "smooth_spline", "trend_filter"), + method = c("rel_change", "linear_reg"), log_scale = FALSE, replace_Inf = NA, prefix = "gr_", - columns = NULL, skip = FALSE, id = rand_id("growth_rate"), additional_gr_args_list = list()) { if (!is_epi_recipe(recipe)) { - rlang::abort("This recipe step can only operate on an `epi_recipe`.") + cli_abort("This recipe step can only operate on an {.cls epi_recipe}.") } - method <- match.arg(method) + method <- rlang::arg_match(method) arg_is_pos_int(horizon) arg_is_scalar(horizon) if (!is.null(replace_Inf)) { - if (length(replace_Inf) != 1L) rlang::abort("replace_Inf must be a scalar.") + if (length(replace_Inf) != 1L) cli_abort("replace_Inf must be a scalar.") if (!is.na(replace_Inf)) arg_is_numeric(replace_Inf) } arg_is_chr(role) arg_is_chr_scalar(prefix, id) - arg_is_lgl_scalar(trained, log_scale, skip) + arg_is_lgl_scalar(log_scale, skip) if (!is.list(additional_gr_args_list)) { - rlang::abort( - c("`additional_gr_args_list` must be a list.", - i = "See `?epiprocess::growth_rate` for available options." - ) - ) - } - - if (!is.null(columns)) { - rlang::abort(c("The `columns` argument must be `NULL.", - i = "Use `tidyselect` methods to choose columns to use." + cli_abort(c( + "`additional_gr_args_list` must be a {.cls list}.", + i = "See `?epiprocess::growth_rate` for available options." )) } - add_step( + recipes::add_step( recipe, step_growth_rate_new( terms = enquos(...), role = role, - trained = trained, + trained = FALSE, horizon = horizon, method = method, log_scale = log_scale, replace_Inf = replace_Inf, prefix = prefix, keys = key_colnames(recipe), - columns = columns, + columns = NULL, skip = skip, id = id, additional_gr_args_list = additional_gr_args_list @@ -119,7 +108,7 @@ step_growth_rate_new <- skip, id, additional_gr_args_list) { - step( + recipes::step( subclass = "growth_rate", terms = terms, role = role, @@ -151,7 +140,7 @@ prep.step_growth_rate <- function(x, training, info = NULL, ...) { replace_Inf = x$replace_Inf, prefix = x$prefix, keys = x$keys, - columns = recipes_eval_select(x$terms, training, info), + columns = recipes::recipes_eval_select(x$terms, training, info), skip = x$skip, id = x$id, additional_gr_args_list = x$additional_gr_args_list @@ -170,24 +159,23 @@ bake.step_growth_rate <- function(object, new_data, ...) { new_data_names <- colnames(new_data) intersection <- new_data_names %in% newnames if (any(intersection)) { - rlang::abort( - c(paste0("Name collision occured in `", class(object)[1], "`."), - i = paste( - "The following variable names already exists: ", - paste0(new_data_names[intersection], collapse = ", "), - "." - ) - ) + nms <- new_data_names[intersection] + cli_abort( + c("In `step_growth_rate()` a name collision occurred. The following variable name{?s} already exist{?/s}:", + `*` = "{.var {nms}}" + ), + call = caller_env(), + class = "epipredict__step__name_collision_error" ) } ok <- object$keys gr <- new_data %>% - dplyr::group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% + group_by(across(all_of(ok[-1]))) %>% dplyr::transmute( time_value = time_value, - dplyr::across( - dplyr::all_of(object$columns), + across( + all_of(object$columns), ~ epiprocess::growth_rate( time_value, .x, method = object$method, @@ -197,23 +185,18 @@ bake.step_growth_rate <- function(object, new_data, ...) { .names = "{object$prefix}{object$horizon}_{object$method}_{.col}" ) ) %>% - dplyr::ungroup() %>% - dplyr::mutate(time_value = time_value + object$horizon) # shift x0 right + ungroup() %>% + mutate(time_value = time_value + object$horizon) # shift x0 right if (!is.null(object$replace_Inf)) { gr <- gr %>% - dplyr::mutate( - dplyr::across( - !dplyr::all_of(ok), - ~ vec_replace_inf(.x, object$replace_Inf) - ) - ) + mutate(across(all_of(ok), ~ vec_replace_inf(.x, object$replace_Inf))) } - dplyr::left_join(new_data, gr, by = ok) %>% - dplyr::group_by(dplyr::across(dplyr::all_of(ok[-1]))) %>% - dplyr::arrange(time_value) %>% - dplyr::ungroup() + left_join(new_data, gr, by = ok) %>% + group_by(across(all_of(ok[-1]))) %>% + arrange(time_value) %>% + ungroup() } diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index 87852be2d..009ebe4f5 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -30,35 +30,27 @@ step_lag_difference <- trained = FALSE, horizon = 7, prefix = "lag_diff_", - columns = NULL, skip = FALSE, id = rand_id("lag_diff")) { if (!is_epi_recipe(recipe)) { - rlang::abort("This recipe step can only operate on an `epi_recipe`.") + cli_abort("This recipe step can only operate on an {.cls epi_recipe}.") } arg_is_pos_int(horizon) arg_is_chr(role) arg_is_chr_scalar(prefix, id) - arg_is_lgl_scalar(trained, skip) + arg_is_lgl_scalar(skip) - if (!is.null(columns)) { - rlang::abort( - c("The `columns` argument must be `NULL.", - i = "Use `tidyselect` methods to choose columns to use." - ) - ) - } - add_step( + recipes::add_step( recipe, step_lag_difference_new( terms = enquos(...), role = role, - trained = trained, + trained = FALSE, horizon = horizon, prefix = prefix, keys = key_colnames(recipe), - columns = columns, + columns = NULL, skip = skip, id = id ) @@ -76,7 +68,7 @@ step_lag_difference_new <- columns, skip, id) { - step( + recipes::step( subclass = "lag_difference", terms = terms, role = role, @@ -101,7 +93,7 @@ prep.step_lag_difference <- function(x, training, info = NULL, ...) { horizon = x$horizon, prefix = x$prefix, keys = x$keys, - columns = recipes_eval_select(x$terms, training, info), + columns = recipes::recipes_eval_select(x$terms, training, info), skip = x$skip, id = x$id ) @@ -109,47 +101,46 @@ prep.step_lag_difference <- function(x, training, info = NULL, ...) { epi_shift_single_diff <- function(x, col, horizon, newname, key_cols) { - x <- x %>% dplyr::select(tidyselect::all_of(c(key_cols, col))) + x <- x %>% select(all_of(c(key_cols, col))) y <- x %>% - dplyr::mutate(time_value = time_value + horizon) %>% - dplyr::rename(!!newname := {{ col }}) - x <- dplyr::left_join(x, y, by = key_cols) + mutate(time_value = time_value + horizon) %>% + rename(!!newname := {{ col }}) + x <- left_join(x, y, by = key_cols) x[, newname] <- x[, col] - x[, newname] - x %>% dplyr::select(tidyselect::all_of(c(key_cols, newname))) + x %>% select(all_of(c(key_cols, newname))) } #' @export bake.step_lag_difference <- function(object, new_data, ...) { grid <- tidyr::expand_grid(col = object$columns, horizon = object$horizon) %>% - dplyr::mutate(newname = glue::glue("{object$prefix}{horizon}_{col}")) + mutate(newname = glue::glue("{object$prefix}{horizon}_{col}")) ## ensure no name clashes new_data_names <- colnames(new_data) intersection <- new_data_names %in% grid$newname if (any(intersection)) { - rlang::abort( - c(paste0("Name collision occured in `", class(object)[1], "`."), - i = paste( - "The following variable names already exists: ", - paste0(new_data_names[intersection], collapse = ", "), - "." - ) - ) + nms <- new_data_names[intersection] + cli_abort( + c("In `step_lag_difference()` a name collision occurred. The following variable name{?s} already exist{?/s}:", + `*` = "{.var {nms}}" + ), + call = caller_env(), + class = "epipredict__step__name_collision_error" ) } ok <- object$keys shifted <- reduce( pmap(grid, epi_shift_single_diff, x = new_data, key_cols = ok), - dplyr::full_join, + full_join, by = ok ) - dplyr::left_join(new_data, shifted, by = ok) %>% - dplyr::group_by(dplyr::across(tidyselect::all_of(ok[-1]))) %>% - dplyr::arrange(time_value) %>% - dplyr::ungroup() + left_join(new_data, shifted, by = ok) %>% + group_by(across(all_of(ok[-1]))) %>% + arrange(time_value) %>% + ungroup() } diff --git a/R/step_population_scaling.R b/R/step_population_scaling.R index 7f2d44ab9..e5baa837b 100644 --- a/R/step_population_scaling.R +++ b/R/step_population_scaling.R @@ -11,17 +11,7 @@ #' passed will *divide* the selected variables while the `rate_rescaling` #' argument is a common *multiplier* of the selected variables. #' -#' @param recipe A recipe object. The step will be added to the sequence of -#' operations for this recipe. The recipe should contain information about the -#' `epi_df` such as column names. -#' @param ... One or more selector functions to scale variables -#' for this step. See [recipes::selections()] for more details. -#' @param role For model terms created by this step, what analysis role should -#' they be assigned? By default, the new columns created by this step from the -#' original variables will be used as predictors in a model. Other options can -#' be ard are not limited to "outcome". -#' @param trained A logical to indicate if the quantities for preprocessing -#' have been estimated. +#' @inheritParams step_epi_lag #' @param df a data frame that contains the population data to be used for #' inverting the existing scaling. #' @param by A (possibly named) character vector of variables to join by. @@ -49,25 +39,15 @@ #' @param create_new TRUE to create a new column and keep the original column #' in the `epi_df` #' @param suffix a character. The suffix added to the column name if -#' `crete_new = TRUE`. Default to "_scaled". -#' @param columns A character string of variable names that will -#' be populated (eventually) by the `terms` argument. -#' @param skip A logical. Should the step be skipped when the -#' recipe is baked by [bake()]? While all operations are baked -#' when [prep()] is run, some operations may not be able to be -#' conducted on new data (e.g. processing the outcome variable(s)). -#' Care should be taken when using `skip = TRUE` as it may affect -#' the computations for subsequent operations. -#' @param id A unique identifier for the step +#' `create_new = TRUE`. Default to "_scaled". #' #' @return Scales raw data by the population #' @export #' @examples -#' library(epiprocess) -#' library(epipredict) -#' jhu <- epiprocess::jhu_csse_daily_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% -#' dplyr::select(geo_value, time_value, cases) +#' library(dplyr) +#' jhu <- jhu_csse_daily_subset %>% +#' filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% +#' select(geo_value, time_value, cases) #' #' pop_data <- data.frame(states = c("ca", "ny"), value = c(20000, 30000)) #' @@ -92,7 +72,7 @@ #' df_pop_col = "value" #' ) #' -#' wf <- epi_workflow(r, parsnip::linear_reg()) %>% +#' wf <- epi_workflow(r, linear_reg()) %>% #' fit(jhu) %>% #' add_frosting(f) #' @@ -101,37 +81,35 @@ step_population_scaling <- function(recipe, ..., role = "raw", - trained = FALSE, df, by = NULL, df_pop_col, rate_rescaling = 1, create_new = TRUE, suffix = "_scaled", - columns = NULL, skip = FALSE, id = rand_id("population_scaling")) { - arg_is_scalar(role, trained, df_pop_col, rate_rescaling, create_new, suffix, id) + arg_is_scalar(role, df_pop_col, rate_rescaling, create_new, suffix, id) arg_is_lgl(create_new, skip) arg_is_chr(df_pop_col, suffix, id) - arg_is_chr(by, columns, allow_null = TRUE) + arg_is_chr(by, allow_null = TRUE) if (rate_rescaling <= 0) { - cli_stop("`rate_rescaling` should be a positive number") + cli_abort("`rate_rescaling` must be a positive number.") } - add_step( + recipes::add_step( recipe, step_population_scaling_new( - terms = dplyr::enquos(...), + terms = enquos(...), role = role, - trained = trained, + trained = FALSE, df = df, by = by, df_pop_col = df_pop_col, rate_rescaling = rate_rescaling, create_new = create_new, suffix = suffix, - columns = columns, + columns = NULL, skip = skip, id = id ) @@ -141,7 +119,7 @@ step_population_scaling <- step_population_scaling_new <- function(role, trained, df, by, df_pop_col, rate_rescaling, terms, create_new, suffix, columns, skip, id) { - step( + recipes::step( subclass = "population_scaling", terms = terms, role = role, @@ -170,7 +148,7 @@ prep.step_population_scaling <- function(x, training, info = NULL, ...) { rate_rescaling = x$rate_rescaling, create_new = x$create_new, suffix = x$suffix, - columns = recipes_eval_select(x$terms, training, info), + columns = recipes::recipes_eval_select(x$terms, training, info), skip = x$skip, id = x$id ) @@ -185,15 +163,10 @@ bake.step_population_scaling <- function(object, length(object$df_pop_col) == 1 ) - try_join <- try(dplyr::left_join(new_data, object$df, by = object$by), - silent = TRUE - ) - if (any(grepl("Join columns must be present in data", unlist(try_join)))) { - cli_stop(c( - "columns in `by` selectors of `step_population_scaling` ", - "must be present in data and match" - )) - } + + hardhat::validate_column_names(new_data, object$by) + hardhat::validate_column_names(object$df, object$by) + if (object$suffix != "_scaled" && object$create_new == FALSE) { cli::cli_warn(c( @@ -202,23 +175,22 @@ bake.step_population_scaling <- function(object, )) } - object$df <- object$df %>% - dplyr::mutate(dplyr::across(tidyselect::where(is.character), tolower)) + object$df <- mutate(object$df, across(dplyr::where(is.character), tolower)) pop_col <- rlang::sym(object$df_pop_col) suffix <- ifelse(object$create_new, object$suffix, "") col_to_remove <- setdiff(colnames(object$df), colnames(new_data)) - dplyr::left_join(new_data, - object$df, - by = object$by, suffix = c("", ".df") - ) %>% - dplyr::mutate(dplyr::across(dplyr::all_of(object$columns), - ~ .x * object$rate_rescaling / !!pop_col, - .names = "{.col}{suffix}" - )) %>% + left_join(new_data, object$df, by = object$by, suffix = c("", ".df")) %>% + mutate( + across( + all_of(object$columns), + ~ .x * object$rate_rescaling / !!pop_col, + .names = "{.col}{suffix}" + ) + ) %>% # removed so the models do not use the population column - dplyr::select(-dplyr::any_of(col_to_remove)) + select(any_of(col_to_remove)) } #' @export diff --git a/R/step_training_window.R b/R/step_training_window.R index 90de468ce..e66b08365 100644 --- a/R/step_training_window.R +++ b/R/step_training_window.R @@ -5,18 +5,13 @@ #' observations in `time_value` per group, where the groups are formed #' based on the remaining `epi_keys`. #' -#' @param recipe A recipe object. The step will be added to the -#' sequence of operations for this recipe. -#' @param role Not used by this step since no new variables are created. -#' @param trained A logical to indicate if the quantities for -#' preprocessing have been estimated. #' @param n_recent An integer value that represents the number of most recent #' observations that are to be kept in the training window per key #' The default value is 50. #' @param epi_keys An optional character vector for specifying "key" variables #' to group on. The default, `NULL`, ensures that every key combination is #' limited. -#' @param id A character string that is unique to this step to identify it. +#' @inheritParams step_epi_lag #' @template step-return #' #' @details Note that `step_epi_lead()` and `step_epi_lag()` should come @@ -25,13 +20,10 @@ #' @export #' #' @examples -#' tib <- tibble::tibble( +#' tib <- tibble( #' x = 1:10, #' y = 1:10, -#' time_value = rep(seq(as.Date("2020-01-01"), -#' by = 1, -#' length.out = 5 -#' ), times = 2), +#' time_value = rep(seq(as.Date("2020-01-01"), by = 1, length.out = 5), 2), #' geo_value = rep(c("ca", "hi"), each = 5) #' ) %>% #' as_epi_df() @@ -42,18 +34,16 @@ #' bake(new_data = NULL) #' #' epi_recipe(y ~ x, data = tib) %>% -#' recipes::step_naomit() %>% +#' step_epi_naomit() %>% #' step_training_window(n_recent = 3) %>% #' prep(tib) %>% #' bake(new_data = NULL) step_training_window <- function(recipe, role = NA, - trained = FALSE, n_recent = 50, epi_keys = NULL, id = rand_id("training_window")) { - arg_is_lgl_scalar(trained) arg_is_scalar(n_recent, id) arg_is_pos(n_recent) if (is.finite(n_recent)) arg_is_pos_int(n_recent) @@ -63,7 +53,7 @@ step_training_window <- recipe, step_training_window_new( role = role, - trained = trained, + trained = FALSE, n_recent = n_recent, epi_keys = epi_keys, skip = TRUE, @@ -108,10 +98,10 @@ bake.step_training_window <- function(object, new_data, ...) { if (object$n_recent < Inf) { new_data <- new_data %>% - dplyr::group_by(dplyr::across(dplyr::all_of(object$epi_keys))) %>% - dplyr::arrange(time_value) %>% + group_by(across(all_of(object$epi_keys))) %>% + arrange(time_value) %>% dplyr::slice_tail(n = object$n_recent) %>% - dplyr::ungroup() + ungroup() } new_data @@ -122,10 +112,7 @@ print.step_training_window <- function(x, width = max(20, options()$width - 30), ...) { title <- "# of recent observations per key limited to:" n_recent <- x$n_recent - tr_obj <- format_selectors(rlang::enquos(n_recent), width) - recipes::print_step( - tr_obj, rlang::enquos(n_recent), - x$trained, title, width - ) + tr_obj <- recipes::format_selectors(rlang::enquos(n_recent), width) + recipes::print_step(tr_obj, rlang::enquos(n_recent), x$trained, title, width) invisible(x) } diff --git a/R/tidy.R b/R/tidy.R index 06835eff0..a239a8121 100644 --- a/R/tidy.R +++ b/R/tidy.R @@ -26,8 +26,9 @@ #' `type` (the method, e.g. "predict", "naomit"), and a character column `id`. #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% @@ -52,21 +53,17 @@ tidy.frosting <- function(x, number = NA, id = NA, ...) { num_oper <- length(x$layers) pattern <- "^layer_" - if (length(id) != 1L) { - rlang::abort("If `id` is provided, it must be a length 1 character vector.") - } - - if (length(number) != 1L) { - rlang::abort("If `number` is provided, it must be a length 1 integer vector.") - } + arg_is_chr_scalar(id, allow_na = TRUE) + arg_is_scalar(number, allow_na = TRUE) + arg_is_int(number, allow_na = TRUE) if (!is.na(id)) { if (!is.na(number)) { - rlang::abort("You may specify `number` or `id`, but not both.") + cli_abort("You may specify `number` or `id`, but not both.") } layer_ids <- vapply(x$layers, function(x) x$id, character(1)) if (!(id %in% layer_ids)) { - rlang::abort("Supplied `id` not found in the frosting.") + cli_abort("Supplied `id` not found in the frosting.") } number <- which(id == layer_ids) } @@ -89,13 +86,7 @@ tidy.frosting <- function(x, number = NA, id = NA, ...) { ) } else { if (number > num_oper || length(number) > 1) { - rlang::abort( - paste0( - "`number` should be a single value between 1 and ", - num_oper, - "." - ) - ) + cli_abort("`number` should be a single value between 1 and {num_oper}.") } res <- tidy(x$layers[[number]], ...) diff --git a/R/time_types.R b/R/time_types.R index 7fe3e47b4..f33974833 100644 --- a/R/time_types.R +++ b/R/time_types.R @@ -64,7 +64,7 @@ validate_date <- function(x, expected, arg = rlang::caller_arg(x), time_type_x <- guess_time_type(x) ok <- time_type_x == expected if (!ok) { - cli::cli_abort(c( + cli_abort(c( "The {.arg {arg}} was given as a {.val {time_type_x}} while the", `!` = "`time_type` of the training data was {.val {expected}}.", i = "See {.topic epiprocess::epi_df} for descriptions of these are determined." diff --git a/R/utils-misc.R b/R/utils-misc.R index 231a8f60f..c59afc19a 100644 --- a/R/utils-misc.R +++ b/R/utils-misc.R @@ -48,13 +48,13 @@ grab_forged_keys <- function(forged, mold, new_data) { "in `new_data`. Predictions will have only the available keys." )) } - if (epiprocess::is_epi_df(new_data)) { - extras <- epiprocess::as_epi_df(extras) + if (is_epi_df(new_data)) { + extras <- as_epi_df(extras) attr(extras, "metadata") <- attr(new_data, "metadata") } else if (all(keys[1:2] %in% new_keys)) { l <- list() if (length(new_keys) > 2) l <- list(other_keys = new_keys[-c(1:2)]) - extras <- epiprocess::as_epi_df(extras, additional_metadata = l) + extras <- as_epi_df(extras, additional_metadata = l) } extras } @@ -64,11 +64,10 @@ get_parsnip_mode <- function(trainer) { return(trainer$mode) } cc <- class(trainer) - cli::cli_abort( - c("`trainer` must be a `parsnip` model.", - i = "This trainer has class(s) {.cls {cc}}." - ) - ) + cli_abort(c( + "`trainer` must be a `parsnip` model.", + i = "This trainer has class{?s}: {.cls {cc}}." + )) } is_classification <- function(trainer) { diff --git a/man/Add_model.Rd b/man/Add_model.Rd index 6bf6b6b02..17b65793c 100644 --- a/man/Add_model.Rd +++ b/man/Add_model.Rd @@ -71,11 +71,9 @@ aliases with the lower-case names. However, in the event that properly. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter( - time_value > "2021-11-01", - geo_value \%in\% c("ak", "ca", "ny") - ) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% @@ -88,7 +86,7 @@ wf <- epi_workflow(r) wf <- wf \%>\% Add_model(rf_model) wf -lm_model <- parsnip::linear_reg() +lm_model <- linear_reg() wf <- Update_model(wf, lm_model) wf diff --git a/man/layer_add_forecast_date.Rd b/man/layer_add_forecast_date.Rd index 4e173d662..e27f2bacd 100644 --- a/man/layer_add_forecast_date.Rd +++ b/man/layer_add_forecast_date.Rd @@ -36,15 +36,16 @@ less than the maximum \code{as_of} value (from the data used pre-processing, model fitting, and postprocessing), an appropriate warning will be thrown. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) latest <- jhu \%>\% - dplyr::filter(time_value >= max(time_value) - 14) + filter(time_value >= max(time_value) - 14) # Don't specify `forecast_date` (by default, this should be last date in latest) f <- frosting() \%>\% diff --git a/man/layer_add_target_date.Rd b/man/layer_add_target_date.Rd index 5b32002d1..9dc6abbdd 100644 --- a/man/layer_add_target_date.Rd +++ b/man/layer_add_target_date.Rd @@ -37,14 +37,15 @@ has been specified in a preprocessing step (most likely in in the test data to get the target date. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + dfilter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) # Use ahead + forecast date f <- frosting() \%>\% diff --git a/man/layer_cdc_flatline_quantiles.Rd b/man/layer_cdc_flatline_quantiles.Rd index 5653f9691..c3bc4f257 100644 --- a/man/layer_cdc_flatline_quantiles.Rd +++ b/man/layer_cdc_flatline_quantiles.Rd @@ -84,6 +84,7 @@ the future. This version continues to use the same set of residuals, and adds them on to produce wider intervals as \code{ahead} increases. } \examples{ +library(dplyr) r <- epi_recipe(case_death_rate_subset) \%>\% # data is "daily", so we fit this to 1 ahead, the result will contain # 1 day ahead residuals @@ -97,16 +98,16 @@ f <- frosting() \%>\% layer_predict() \%>\% layer_cdc_flatline_quantiles(aheads = c(7, 14, 21, 28), symmetrize = TRUE) -eng <- parsnip::linear_reg() \%>\% parsnip::set_engine("flatline") +eng <- linear_reg(engine = "flatline") wf <- epi_workflow(r, eng, f) \%>\% fit(case_death_rate_subset) preds <- forecast(wf) \%>\% - dplyr::select(-time_value) \%>\% - dplyr::mutate(forecast_date = forecast_date) + select(-time_value) \%>\% + mutate(forecast_date = forecast_date) preds preds <- preds \%>\% - unnest(.pred_distn_all) \%>\% + tidyr::unnest(.pred_distn_all) \%>\% pivot_quantiles_wider(.pred_distn) \%>\% mutate(target_date = forecast_date + ahead) diff --git a/man/layer_naomit.Rd b/man/layer_naomit.Rd index e3325fe7c..d77112f95 100644 --- a/man/layer_naomit.Rd +++ b/man/layer_naomit.Rd @@ -24,14 +24,15 @@ an updated \code{frosting} postprocessor Omit \code{NA}s from predictions or other columns } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) f <- frosting() \%>\% layer_predict() \%>\% diff --git a/man/layer_point_from_distn.Rd b/man/layer_point_from_distn.Rd index 58d8add8b..276f7cb17 100644 --- a/man/layer_point_from_distn.Rd +++ b/man/layer_point_from_distn.Rd @@ -34,15 +34,17 @@ information, so one should usually call this AFTER \code{layer_quantile_distn()} or set the \code{name} argument to something specific. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) \%>\% fit(jhu) +wf <- epi_workflow(r, quantile_reg(quantile_levels = c(.25, .5, .75))) \%>\% + fit(jhu) f1 <- frosting() \%>\% layer_predict() \%>\% diff --git a/man/layer_population_scaling.Rd b/man/layer_population_scaling.Rd index cf8dfcc1a..5a105f208 100644 --- a/man/layer_population_scaling.Rd +++ b/man/layer_population_scaling.Rd @@ -74,9 +74,10 @@ passed will \emph{multiply} the selected variables while the \code{rate_rescalin argument is a common \emph{divisor} of the selected variables. } \examples{ -jhu <- epiprocess::jhu_csse_daily_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ca", "ny")) \%>\% - dplyr::select(geo_value, time_value, cases) +library(dplyr) +jhu <- jhu_csse_daily_subset \%>\% + filter(time_value > "2021-11-01", geo_value \%in\% c("ca", "ny")) \%>\% + select(geo_value, time_value, cases) pop_data <- data.frame(states = c("ca", "ny"), value = c(20000, 30000)) @@ -101,7 +102,7 @@ f <- frosting() \%>\% df_pop_col = "value" ) -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) \%>\% add_frosting(f) diff --git a/man/layer_predict.Rd b/man/layer_predict.Rd index 03473053f..8ae92f4c8 100644 --- a/man/layer_predict.Rd +++ b/man/layer_predict.Rd @@ -58,6 +58,7 @@ postprocessing. This would typically be the first layer in a \code{frosting} postprocessor. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) @@ -66,7 +67,7 @@ r <- epi_recipe(jhu) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) latest <- jhu \%>\% filter(time_value >= max(time_value) - 14) # Predict layer alone diff --git a/man/layer_predictive_distn.Rd b/man/layer_predictive_distn.Rd index 7cd4e4efc..240db5f5b 100644 --- a/man/layer_predictive_distn.Rd +++ b/man/layer_predictive_distn.Rd @@ -39,15 +39,16 @@ should be reasonably accurate for models fit using \code{lm} when the new point \verb{x*} isn't too far from the bulk of the data. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) f <- frosting() \%>\% layer_predict() \%>\% diff --git a/man/layer_quantile_distn.Rd b/man/layer_quantile_distn.Rd index f5de4aa19..68192deee 100644 --- a/man/layer_quantile_distn.Rd +++ b/man/layer_quantile_distn.Rd @@ -45,8 +45,9 @@ If these engines were used, then this layer will grab out estimated (or extrapolated) quantiles at the requested quantile values. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% diff --git a/man/layer_residual_quantiles.Rd b/man/layer_residual_quantiles.Rd index dd576aa5e..d300241d3 100644 --- a/man/layer_residual_quantiles.Rd +++ b/man/layer_residual_quantiles.Rd @@ -39,19 +39,23 @@ residual quantiles added to the prediction Creates predictions based on residual quantiles } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) f <- frosting() \%>\% layer_predict() \%>\% - layer_residual_quantiles(quantile_levels = c(0.0275, 0.975), symmetrize = FALSE) \%>\% + layer_residual_quantiles( + quantile_levels = c(0.0275, 0.975), + symmetrize = FALSE + ) \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) @@ -59,7 +63,10 @@ p <- forecast(wf1) f2 <- frosting() \%>\% layer_predict() \%>\% - layer_residual_quantiles(quantile_levels = c(0.3, 0.7), by_key = "geo_value") \%>\% + layer_residual_quantiles( + quantile_levels = c(0.3, 0.7), + by_key = "geo_value" + ) \%>\% layer_naomit(.pred) wf2 <- wf \%>\% add_frosting(f2) diff --git a/man/layer_threshold.Rd b/man/layer_threshold.Rd index dbd7e6669..0f4b1dfb7 100644 --- a/man/layer_threshold.Rd +++ b/man/layer_threshold.Rd @@ -40,14 +40,14 @@ smaller than the lower threshold or higher than the upper threshold equal to the threshold values. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value < "2021-03-08", - geo_value \%in\% c("ak", "ca", "ar")) + filter(time_value < "2021-03-08", geo_value \%in\% c("ak", "ca", "ar")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) f <- frosting() \%>\% layer_predict() \%>\% diff --git a/man/nested_quantiles.Rd b/man/nested_quantiles.Rd index 143532650..b34b718ca 100644 --- a/man/nested_quantiles.Rd +++ b/man/nested_quantiles.Rd @@ -16,9 +16,11 @@ a list-col Turn a vector of quantile distributions into a list-col } \examples{ +library(dplyr) +library(tidyr) edf <- case_death_rate_subset[1:3, ] edf$q <- dist_quantiles(list(1:5, 2:4, 3:10), list(1:5 / 6, 2:4 / 5, 3:10 / 11)) -edf_nested <- edf \%>\% dplyr::mutate(q = nested_quantiles(q)) -edf_nested \%>\% tidyr::unnest(q) +edf_nested <- edf \%>\% mutate(q = nested_quantiles(q)) +edf_nested \%>\% unnest(q) } diff --git a/man/pivot_quantiles_longer.Rd b/man/pivot_quantiles_longer.Rd index f73e6deaf..9879d5d07 100644 --- a/man/pivot_quantiles_longer.Rd +++ b/man/pivot_quantiles_longer.Rd @@ -34,9 +34,9 @@ multiple columns are selected, these will be prefixed with the column name. \examples{ d1 <- c(dist_quantiles(1:3, 1:3 / 4), dist_quantiles(2:4, 1:3 / 4)) d2 <- c(dist_quantiles(2:4, 2:4 / 5), dist_quantiles(3:5, 2:4 / 5)) -tib <- tibble::tibble(g = c("a", "b"), d1 = d1, d2 = d2) +tib <- tibble(g = c("a", "b"), d1 = d1, d2 = d2) pivot_quantiles_longer(tib, "d1") -pivot_quantiles_longer(tib, tidyselect::ends_with("1")) +pivot_quantiles_longer(tib, dplyr::ends_with("1")) pivot_quantiles_longer(tib, d1, d2) } diff --git a/man/pivot_quantiles_wider.Rd b/man/pivot_quantiles_wider.Rd index 02a33bb2f..e477777ca 100644 --- a/man/pivot_quantiles_wider.Rd +++ b/man/pivot_quantiles_wider.Rd @@ -30,6 +30,6 @@ d2 <- c(dist_quantiles(2:4, 2:4 / 5), dist_quantiles(3:5, 2:4 / 5)) tib <- tibble::tibble(g = c("a", "b"), d1 = d1, d2 = d2) pivot_quantiles_wider(tib, c("d1", "d2")) -pivot_quantiles_wider(tib, tidyselect::starts_with("d")) +pivot_quantiles_wider(tib, dplyr::starts_with("d")) pivot_quantiles_wider(tib, d2) } diff --git a/man/reexports.Rd b/man/reexports.Rd index 1ac328b2c..f6849a53c 100644 --- a/man/reexports.Rd +++ b/man/reexports.Rd @@ -8,6 +8,9 @@ \alias{forecast} \alias{prep} \alias{bake} +\alias{rand_id} +\alias{tibble} +\alias{tidy} \title{Objects exported from other packages} \keyword{internal} \description{ @@ -15,10 +18,12 @@ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ - \item{generics}{\code{\link[generics]{fit}}, \code{\link[generics]{forecast}}} + \item{generics}{\code{\link[generics]{fit}}, \code{\link[generics]{forecast}}, \code{\link[generics]{tidy}}} \item{ggplot2}{\code{\link[ggplot2]{autoplot}}} - \item{recipes}{\code{\link[recipes]{bake}}, \code{\link[recipes]{prep}}} + \item{recipes}{\code{\link[recipes]{bake}}, \code{\link[recipes]{prep}}, \code{\link[recipes]{rand_id}}} + + \item{tibble}{\code{\link[tibble]{tibble}}} }} diff --git a/man/step_epi_shift.Rd b/man/step_epi_shift.Rd index f4419b831..2bf22c15d 100644 --- a/man/step_epi_shift.Rd +++ b/man/step_epi_shift.Rd @@ -10,10 +10,8 @@ step_epi_lag( ..., lag, role = "predictor", - trained = FALSE, prefix = "lag_", default = NA, - columns = NULL, skip = FALSE, id = rand_id("epi_lag") ) @@ -23,10 +21,8 @@ step_epi_ahead( ..., ahead, role = "outcome", - trained = FALSE, prefix = "ahead_", default = NA, - columns = NULL, skip = FALSE, id = rand_id("epi_ahead") ) @@ -45,17 +41,11 @@ nonnegative, while ahead integers must be positive.} \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} -\item{trained}{A logical to indicate if the quantities for -preprocessing have been estimated.} - -\item{prefix}{A prefix to indicate what type of variable this is} +\item{prefix}{A character string that will be prefixed to the new column.} \item{default}{Determines what fills empty rows left by leading/lagging (defaults to NA).} -\item{columns}{A character string of variable names that will -be populated (eventually) by the \code{terms} argument.} - \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked when \code{\link[=prep]{prep()}} is run, some operations may not be able to be diff --git a/man/step_growth_rate.Rd b/man/step_growth_rate.Rd index 46d8b92f6..bc6da0bef 100644 --- a/man/step_growth_rate.Rd +++ b/man/step_growth_rate.Rd @@ -8,13 +8,11 @@ step_growth_rate( recipe, ..., role = "predictor", - trained = FALSE, horizon = 7, - method = c("rel_change", "linear_reg", "smooth_spline", "trend_filter"), + method = c("rel_change", "linear_reg"), log_scale = FALSE, replace_Inf = NA, prefix = "gr_", - columns = NULL, skip = FALSE, id = rand_id("growth_rate"), additional_gr_args_list = list() @@ -30,20 +28,15 @@ for this step. See \code{\link[recipes:selections]{recipes::selections()}} for m \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} -\item{trained}{A logical to indicate if the quantities for -preprocessing have been estimated.} - \item{horizon}{Bandwidth for the sliding window, when \code{method} is "rel_change" or "linear_reg". See \code{\link[epiprocess:growth_rate]{epiprocess::growth_rate()}} for more details.} -\item{method}{Either "rel_change", "linear_reg", "smooth_spline", or -"trend_filter", indicating the method to use for the growth rate -calculation. The first two are local methods: they are run in a sliding +\item{method}{Either "rel_change" or "linear_reg", +indicating the method to use for the growth rate +calculation. These are local methods: they are run in a sliding fashion over the sequence (in order to estimate derivatives and hence -growth rates); the latter two are global methods: they are run once over -the entire sequence. See \code{\link[epiprocess:growth_rate]{epiprocess::growth_rate()}} for more -details.} +growth rates). See \code{\link[epiprocess:growth_rate]{epiprocess::growth_rate()}} for more details.} \item{log_scale}{Should growth rates be estimated using the parameterization on the log scale? See details for an explanation. Default is \code{FALSE}.} @@ -56,10 +49,7 @@ being removed from the data. Alternatively, you could specify arbitrary large values, or perhaps zero. Setting this argument to \code{NULL} will result in no replacement.} -\item{prefix}{A prefix to indicate what type of variable this is} - -\item{columns}{A character string of variable names that will -be populated (eventually) by the \code{terms} argument.} +\item{prefix}{A character string that will be prefixed to the new column.} \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked diff --git a/man/step_lag_difference.Rd b/man/step_lag_difference.Rd index 123265ea6..d6bafc4c7 100644 --- a/man/step_lag_difference.Rd +++ b/man/step_lag_difference.Rd @@ -11,7 +11,6 @@ step_lag_difference( trained = FALSE, horizon = 7, prefix = "lag_diff_", - columns = NULL, skip = FALSE, id = rand_id("lag_diff") ) @@ -26,16 +25,10 @@ for this step. See \code{\link[recipes:selections]{recipes::selections()}} for m \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} -\item{trained}{A logical to indicate if the quantities for -preprocessing have been estimated.} - \item{horizon}{Scalar or vector. Time period(s) over which to calculate differences.} -\item{prefix}{A prefix to indicate what type of variable this is} - -\item{columns}{A character string of variable names that will -be populated (eventually) by the \code{terms} argument.} +\item{prefix}{A character string that will be prefixed to the new column.} \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked diff --git a/man/step_population_scaling.Rd b/man/step_population_scaling.Rd index 2af3c245b..294f27f61 100644 --- a/man/step_population_scaling.Rd +++ b/man/step_population_scaling.Rd @@ -8,33 +8,25 @@ step_population_scaling( recipe, ..., role = "raw", - trained = FALSE, df, by = NULL, df_pop_col, rate_rescaling = 1, create_new = TRUE, suffix = "_scaled", - columns = NULL, skip = FALSE, id = rand_id("population_scaling") ) } \arguments{ -\item{recipe}{A recipe object. The step will be added to the sequence of -operations for this recipe. The recipe should contain information about the -\code{epi_df} such as column names.} +\item{recipe}{A recipe object. The step will be added to the +sequence of operations for this recipe.} -\item{...}{One or more selector functions to scale variables +\item{...}{One or more selector functions to choose variables for this step. See \code{\link[recipes:selections]{recipes::selections()}} for more details.} \item{role}{For model terms created by this step, what analysis role should -they be assigned? By default, the new columns created by this step from the -original variables will be used as predictors in a model. Other options can -be ard are not limited to "outcome".} - -\item{trained}{A logical to indicate if the quantities for preprocessing -have been estimated.} +they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} \item{df}{a data frame that contains the population data to be used for inverting the existing scaling.} @@ -68,10 +60,7 @@ scale is "per 100K", then set \code{rate_rescaling = 1e5} to get rates.} in the \code{epi_df}} \item{suffix}{a character. The suffix added to the column name if -\code{crete_new = TRUE}. Default to "_scaled".} - -\item{columns}{A character string of variable names that will -be populated (eventually) by the \code{terms} argument.} +\code{create_new = TRUE}. Default to "_scaled".} \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked @@ -98,11 +87,10 @@ passed will \emph{divide} the selected variables while the \code{rate_rescaling} argument is a common \emph{multiplier} of the selected variables. } \examples{ -library(epiprocess) -library(epipredict) -jhu <- epiprocess::jhu_csse_daily_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ca", "ny")) \%>\% - dplyr::select(geo_value, time_value, cases) +library(dplyr) +jhu <- jhu_csse_daily_subset \%>\% + filter(time_value > "2021-11-01", geo_value \%in\% c("ca", "ny")) \%>\% + select(geo_value, time_value, cases) pop_data <- data.frame(states = c("ca", "ny"), value = c(20000, 30000)) @@ -127,7 +115,7 @@ f <- frosting() \%>\% df_pop_col = "value" ) -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) \%>\% add_frosting(f) diff --git a/man/step_training_window.Rd b/man/step_training_window.Rd index ce7c0fc74..42f6b9a95 100644 --- a/man/step_training_window.Rd +++ b/man/step_training_window.Rd @@ -7,7 +7,6 @@ step_training_window( recipe, role = NA, - trained = FALSE, n_recent = 50, epi_keys = NULL, id = rand_id("training_window") @@ -17,10 +16,8 @@ step_training_window( \item{recipe}{A recipe object. The step will be added to the sequence of operations for this recipe.} -\item{role}{Not used by this step since no new variables are created.} - -\item{trained}{A logical to indicate if the quantities for -preprocessing have been estimated.} +\item{role}{For model terms created by this step, what analysis role should +they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} \item{n_recent}{An integer value that represents the number of most recent observations that are to be kept in the training window per key @@ -30,7 +27,7 @@ The default value is 50.} to group on. The default, \code{NULL}, ensures that every key combination is limited.} -\item{id}{A character string that is unique to this step to identify it.} +\item{id}{A unique identifier for the step} } \value{ An updated version of \code{recipe} with the new step added to the @@ -47,13 +44,10 @@ Note that \code{step_epi_lead()} and \code{step_epi_lag()} should come after any filtering step. } \examples{ -tib <- tibble::tibble( +tib <- tibble( x = 1:10, y = 1:10, - time_value = rep(seq(as.Date("2020-01-01"), - by = 1, - length.out = 5 - ), times = 2), + time_value = rep(seq(as.Date("2020-01-01"), by = 1, length.out = 5), 2), geo_value = rep(c("ca", "hi"), each = 5) ) \%>\% as_epi_df() @@ -64,7 +58,7 @@ epi_recipe(y ~ x, data = tib) \%>\% bake(new_data = NULL) epi_recipe(y ~ x, data = tib) \%>\% - recipes::step_naomit() \%>\% + step_epi_naomit() \%>\% step_training_window(n_recent = 3) \%>\% prep(tib) \%>\% bake(new_data = NULL) diff --git a/man/tidy.frosting.Rd b/man/tidy.frosting.Rd index 6b28461b4..ba3c0f3d5 100644 --- a/man/tidy.frosting.Rd +++ b/man/tidy.frosting.Rd @@ -37,8 +37,9 @@ method for the operation exists). Note that this is a modified version of the \code{tidy} method for a recipe. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% diff --git a/man/update.layer.Rd b/man/update.layer.Rd index 0f1fe9c22..9604992e1 100644 --- a/man/update.layer.Rd +++ b/man/update.layer.Rd @@ -18,15 +18,15 @@ will replace the elements of the same name in the actual post-processing layer. Analogous to \code{update.step()} from the \code{recipes} package. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% step_epi_naomit() -wf <- epi_workflow(r, parsnip::linear_reg()) \%>\% fit(jhu) -latest <- jhu \%>\% - dplyr::filter(time_value >= max(time_value) - 14) +wf <- epi_workflow(r, linear_reg()) \%>\% fit(jhu) +latest <- jhu \%>\% filter(time_value >= max(time_value) - 14) # Specify a `forecast_date` that is greater than or equal to `as_of` date f <- frosting() \%>\% From d6dff90684a386a807088d72a9e986532e548839 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 17:20:31 -0700 Subject: [PATCH 345/382] all checks pass --- R/arx_classifier.R | 27 ++++++++++++----------- R/layer_add_target_date.R | 2 +- R/layer_population_scaling.R | 5 +++-- R/step_growth_rate.R | 2 +- R/step_lag_difference.R | 1 - R/step_population_scaling.R | 21 ++++++++---------- R/tidy.R | 2 +- man/arx_class_args_list.Rd | 2 +- man/arx_classifier.Rd | 3 ++- man/layer_add_target_date.Rd | 2 +- man/step_lag_difference.Rd | 1 - tests/testthat/test-population_scaling.R | 9 ++++---- tests/testthat/test-step_growth_rate.R | 2 -- tests/testthat/test-step_lag_difference.R | 2 -- 14 files changed, 37 insertions(+), 44 deletions(-) diff --git a/R/arx_classifier.R b/R/arx_classifier.R index d5f5bf05d..ca6a3537b 100644 --- a/R/arx_classifier.R +++ b/R/arx_classifier.R @@ -26,8 +26,9 @@ #' @seealso [arx_class_epi_workflow()], [arx_class_args_list()] #' #' @examples +#' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dplyr::filter(time_value >= as.Date("2021-11-01")) +#' filter(time_value >= as.Date("2021-11-01")) #' #' out <- arx_classifier(jhu, "death_rate", c("case_rate", "death_rate")) #' @@ -130,7 +131,7 @@ arx_class_epi_workflow <- function( # ------- predictors r <- epi_recipe(epi_data) %>% step_growth_rate( - all_of(predictors), + dplyr::all_of(predictors), role = "grp", horizon = args_list$horizon, method = args_list$method, @@ -183,14 +184,15 @@ arx_class_epi_workflow <- function( if (!is.null(args_list$check_enough_data_n)) { r <- check_enough_train_data( r, - all_predictors(), - !!outcome, + recipes::all_predictors(), + recipes::all_outcomes(), n = args_list$check_enough_data_n, epi_keys = args_list$check_enough_data_epi_keys, drop_na = FALSE ) } + forecast_date <- args_list$forecast_date %||% max(epi_data$time_value) target_date <- args_list$target_date %||% (forecast_date + args_list$ahead) @@ -261,7 +263,7 @@ arx_class_args_list <- function( outcome_transform = c("growth_rate", "lag_difference"), breaks = 0.25, horizon = 7L, - method = c("rel_change", "linear_reg", "smooth_spline", "trend_filter"), + method = c("rel_change", "linear_reg"), log_scale = FALSE, additional_gr_args = list(), nafill_buffer = Inf, @@ -271,8 +273,8 @@ arx_class_args_list <- function( rlang::check_dots_empty() .lags <- lags if (is.list(lags)) lags <- unlist(lags) - method <- match.arg(method) - outcome_transform <- match.arg(outcome_transform) + method <- rlang::arg_match(method) + outcome_transform <- rlang::arg_match(outcome_transform) arg_is_scalar(ahead, n_training, horizon, log_scale) arg_is_scalar(forecast_date, target_date, allow_null = TRUE) @@ -284,12 +286,11 @@ arx_class_args_list <- function( if (is.finite(n_training)) arg_is_pos_int(n_training) if (is.finite(nafill_buffer)) arg_is_pos_int(nafill_buffer, allow_null = TRUE) if (!is.list(additional_gr_args)) { - cli::cli_abort( - c("`additional_gr_args` must be a {.cls list}.", - "!" = "This is a {.cls {class(additional_gr_args)}}.", - i = "See `?epiprocess::growth_rate` for available arguments." - ) - ) + cli_abort(c( + "`additional_gr_args` must be a {.cls list}.", + "!" = "This is a {.cls {class(additional_gr_args)}}.", + i = "See `?epiprocess::growth_rate` for available arguments." + )) } arg_is_pos(check_enough_data_n, allow_null = TRUE) arg_is_chr(check_enough_data_epi_keys, allow_null = TRUE) diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 834deb82b..9176fb593 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -22,7 +22,7 @@ #' @examples #' library(dplyr) #' jhu <- case_death_rate_subset %>% -#' dfilter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) +#' filter(time_value > "2021-11-01", geo_value %in% c("ak", "ca", "ny")) #' r <- epi_recipe(jhu) %>% #' step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% #' step_epi_ahead(death_rate, ahead = 7) %>% diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index 1b940b804..a2c56233f 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -139,8 +139,9 @@ slather.layer_population_scaling <- kill_time_value(key_colnames(components$predictions)), colnames(select(object$df, !object$df_pop_col)) ) - hardhat::validate_column_names(components$predictions, object$by) - hardhat::validate_column_names(object$df, object$by) + joinby <- list(x = names(object$by) %||% object$by, y = object$by) + hardhat::validate_column_names(components$predictions, joinby$x) + hardhat::validate_column_names(object$df, joinby$y) # object$df <- object$df %>% # dplyr::mutate(dplyr::across(tidyselect::where(is.character), tolower)) diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index e1950d208..0a8c4118e 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -190,7 +190,7 @@ bake.step_growth_rate <- function(object, new_data, ...) { if (!is.null(object$replace_Inf)) { gr <- gr %>% - mutate(across(all_of(ok), ~ vec_replace_inf(.x, object$replace_Inf))) + mutate(across(!all_of(ok), ~ vec_replace_inf(.x, object$replace_Inf))) } left_join(new_data, gr, by = ok) %>% diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index 009ebe4f5..f3a470c7f 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -27,7 +27,6 @@ step_lag_difference <- function(recipe, ..., role = "predictor", - trained = FALSE, horizon = 7, prefix = "lag_diff_", skip = FALSE, diff --git a/R/step_population_scaling.R b/R/step_population_scaling.R index e5baa837b..f5373647e 100644 --- a/R/step_population_scaling.R +++ b/R/step_population_scaling.R @@ -155,18 +155,15 @@ prep.step_population_scaling <- function(x, training, info = NULL, ...) { } #' @export -bake.step_population_scaling <- function(object, - new_data, - ...) { - stopifnot( - "Only one population column allowed for scaling" = - length(object$df_pop_col) == 1 - ) - - - hardhat::validate_column_names(new_data, object$by) - hardhat::validate_column_names(object$df, object$by) +bake.step_population_scaling <- function(object, new_data, ...) { + object$by <- object$by %||% intersect( + kill_time_value(key_colnames(new_data)), + colnames(select(object$df, !object$df_pop_col)) + ) + joinby <- list(x = names(object$by) %||% object$by, y = object$by) + hardhat::validate_column_names(new_data, joinby$x) + hardhat::validate_column_names(object$df, joinby$y) if (object$suffix != "_scaled" && object$create_new == FALSE) { cli::cli_warn(c( @@ -190,7 +187,7 @@ bake.step_population_scaling <- function(object, ) ) %>% # removed so the models do not use the population column - select(any_of(col_to_remove)) + select(!any_of(col_to_remove)) } #' @export diff --git a/R/tidy.R b/R/tidy.R index a239a8121..61b298411 100644 --- a/R/tidy.R +++ b/R/tidy.R @@ -55,7 +55,7 @@ tidy.frosting <- function(x, number = NA, id = NA, ...) { arg_is_chr_scalar(id, allow_na = TRUE) arg_is_scalar(number, allow_na = TRUE) - arg_is_int(number, allow_na = TRUE) + if (!is.na(number)) arg_is_int(number) if (!is.na(id)) { if (!is.na(number)) { diff --git a/man/arx_class_args_list.Rd b/man/arx_class_args_list.Rd index a1205c71a..311950d62 100644 --- a/man/arx_class_args_list.Rd +++ b/man/arx_class_args_list.Rd @@ -13,7 +13,7 @@ arx_class_args_list( outcome_transform = c("growth_rate", "lag_difference"), breaks = 0.25, horizon = 7L, - method = c("rel_change", "linear_reg", "smooth_spline", "trend_filter"), + method = c("rel_change", "linear_reg"), log_scale = FALSE, additional_gr_args = list(), nafill_buffer = Inf, diff --git a/man/arx_classifier.Rd b/man/arx_classifier.Rd index 36297b00c..c7c2cf059 100644 --- a/man/arx_classifier.Rd +++ b/man/arx_classifier.Rd @@ -48,8 +48,9 @@ This is an autoregressive classification model for that it estimates a class at a particular target horizon. } \examples{ +library(dplyr) jhu <- case_death_rate_subset \%>\% - dplyr::filter(time_value >= as.Date("2021-11-01")) + filter(time_value >= as.Date("2021-11-01")) out <- arx_classifier(jhu, "death_rate", c("case_rate", "death_rate")) diff --git a/man/layer_add_target_date.Rd b/man/layer_add_target_date.Rd index 9dc6abbdd..dc0d2f190 100644 --- a/man/layer_add_target_date.Rd +++ b/man/layer_add_target_date.Rd @@ -39,7 +39,7 @@ in the test data to get the target date. \examples{ library(dplyr) jhu <- case_death_rate_subset \%>\% - dfilter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) + filter(time_value > "2021-11-01", geo_value \%in\% c("ak", "ca", "ny")) r <- epi_recipe(jhu) \%>\% step_epi_lag(death_rate, lag = c(0, 7, 14)) \%>\% step_epi_ahead(death_rate, ahead = 7) \%>\% diff --git a/man/step_lag_difference.Rd b/man/step_lag_difference.Rd index d6bafc4c7..7969ea3a7 100644 --- a/man/step_lag_difference.Rd +++ b/man/step_lag_difference.Rd @@ -8,7 +8,6 @@ step_lag_difference( recipe, ..., role = "predictor", - trained = FALSE, horizon = 7, prefix = "lag_diff_", skip = FALSE, diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index b66bb08c3..d04a6bb43 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -186,7 +186,6 @@ test_that("Postprocessing to get cases from case rate", { test_that("test joining by default columns", { - skip() jhu <- case_death_rate_subset %>% dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% dplyr::select(geo_value, time_value, case_rate) @@ -208,9 +207,9 @@ test_that("test joining by default columns", { recipes::step_naomit(recipes::all_predictors()) %>% recipes::step_naomit(recipes::all_outcomes(), skip = TRUE) - suppressMessages(prep <- prep(r, jhu)) + expect_silent(prep(r, jhu)) - suppressMessages(b <- bake(prep, jhu)) + expect_silent(bake(prep(r, jhu), new_data = NULL)) f <- frosting() %>% layer_predict() %>% @@ -222,13 +221,13 @@ test_that("test joining by default columns", { df_pop_col = "values" ) - suppressMessages( + expect_silent( wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) ) - suppressMessages(p <- forecast(wf)) + expect_silent(forecast(wf)) }) diff --git a/tests/testthat/test-step_growth_rate.R b/tests/testthat/test-step_growth_rate.R index 052141710..29a2fc2f5 100644 --- a/tests/testthat/test-step_growth_rate.R +++ b/tests/testthat/test-step_growth_rate.R @@ -15,11 +15,9 @@ test_that("step_growth_rate validates arguments", { expect_error(step_growth_rate(r, value, prefix = letters[1:2])) expect_error(step_growth_rate(r, value, prefix = 1)) expect_error(step_growth_rate(r, value, id = 1)) - expect_error(step_growth_rate(r, value, trained = 1)) expect_error(step_growth_rate(r, value, log_scale = 1)) expect_error(step_growth_rate(r, value, skip = 1)) expect_error(step_growth_rate(r, value, additional_gr_args_list = 1:5)) - expect_error(step_growth_rate(r, value, columns = letters[1:5])) expect_error(step_growth_rate(r, value, replace_Inf = "c")) expect_error(step_growth_rate(r, value, replace_Inf = c(1, 2))) expect_silent(step_growth_rate(r, value, replace_Inf = NULL)) diff --git a/tests/testthat/test-step_lag_difference.R b/tests/testthat/test-step_lag_difference.R index c0fd377e6..cd92da1fb 100644 --- a/tests/testthat/test-step_lag_difference.R +++ b/tests/testthat/test-step_lag_difference.R @@ -14,9 +14,7 @@ test_that("step_lag_difference validates arguments", { expect_error(step_lag_difference(r, value, prefix = letters[1:2])) expect_error(step_lag_difference(r, value, prefix = 1)) expect_error(step_lag_difference(r, value, id = 1)) - expect_error(step_lag_difference(r, value, trained = 1)) expect_error(step_lag_difference(r, value, skip = 1)) - expect_error(step_lag_difference(r, value, columns = letters[1:5])) }) From 2dbc21288887b40db7947d88e784a7ce5b89c4fd Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 17:29:26 -0700 Subject: [PATCH 346/382] styler --- R/layer_residual_quantiles.R | 2 +- R/step_population_scaling.R | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/R/layer_residual_quantiles.R b/R/layer_residual_quantiles.R index dc53f0f60..eae151905 100644 --- a/R/layer_residual_quantiles.R +++ b/R/layer_residual_quantiles.R @@ -30,7 +30,7 @@ #' layer_residual_quantiles( #' quantile_levels = c(0.0275, 0.975), #' symmetrize = FALSE -#' ) %>% +#' ) %>% #' layer_naomit(.pred) #' wf1 <- wf %>% add_frosting(f) #' diff --git a/R/step_population_scaling.R b/R/step_population_scaling.R index f5373647e..5555bc65c 100644 --- a/R/step_population_scaling.R +++ b/R/step_population_scaling.R @@ -156,7 +156,6 @@ prep.step_population_scaling <- function(x, training, info = NULL, ...) { #' @export bake.step_population_scaling <- function(object, new_data, ...) { - object$by <- object$by %||% intersect( kill_time_value(key_colnames(new_data)), colnames(select(object$df, !object$df_pop_col)) From f394fde1ea3d9466f6680a78cc32e3ccc4fa320c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 17:34:53 -0700 Subject: [PATCH 347/382] fix vignette naming error --- man/layer_residual_quantiles.Rd | 2 +- vignettes/preprocessing-and-models.Rmd | 2 +- vignettes/update.Rmd | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man/layer_residual_quantiles.Rd b/man/layer_residual_quantiles.Rd index d300241d3..39e1ecfbe 100644 --- a/man/layer_residual_quantiles.Rd +++ b/man/layer_residual_quantiles.Rd @@ -55,7 +55,7 @@ f <- frosting() \%>\% layer_residual_quantiles( quantile_levels = c(0.0275, 0.975), symmetrize = FALSE - ) \%>\% + ) \%>\% layer_naomit(.pred) wf1 <- wf \%>\% add_frosting(f) diff --git a/vignettes/preprocessing-and-models.Rmd b/vignettes/preprocessing-and-models.Rmd index d557ed1f7..63a27bd55 100644 --- a/vignettes/preprocessing-and-models.Rmd +++ b/vignettes/preprocessing-and-models.Rmd @@ -478,7 +478,7 @@ r <- epi_recipe(jhu) %>% We will fit the multinomial regression and examine the predictions: ```{r, warning=FALSE} -wf <- epi_workflow(r, parsnip::multinom_reg()) %>% +wf <- epi_workflow(r, multinom_reg()) %>% fit(jhu) forecast(wf) %>% filter(!is.na(.pred_class)) diff --git a/vignettes/update.Rmd b/vignettes/update.Rmd index cb19ce192..fcd3653ca 100644 --- a/vignettes/update.Rmd +++ b/vignettes/update.Rmd @@ -2,7 +2,7 @@ title: "Using the add/update/remove and adjust functions" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{Using the update and adjust functions} + %\VignetteIndexEntry{Using the add/update/remove and adjust functions} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- From 9a7d4336d03645750d585f6def22395f1c5ab738 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 17:54:53 -0700 Subject: [PATCH 348/382] safely remove time value from epi_keys --- R/step_epi_shift.R | 4 ++-- R/step_epi_slide.R | 4 ++-- R/step_growth_rate.R | 6 ++++-- R/step_lag_difference.R | 2 +- vignettes/arx-classifier.Rmd | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/R/step_epi_shift.R b/R/step_epi_shift.R index 616d98f03..465d64e7f 100644 --- a/R/step_epi_shift.R +++ b/R/step_epi_shift.R @@ -228,7 +228,7 @@ bake.step_epi_lag <- function(object, new_data, ...) { ) full_join(new_data, shifted, by = ok) %>% - group_by(across(all_of(ok[-1]))) %>% + group_by(across(all_of(kill_time_value(ok)))) %>% arrange(time_value) %>% ungroup() } @@ -259,7 +259,7 @@ bake.step_epi_ahead <- function(object, new_data, ...) { ) full_join(new_data, shifted, by = ok) %>% - group_by(across(all_of(ok[-1]))) %>% + group_by(across(all_of(kill_time_value(ok)))) %>% arrange(time_value) %>% ungroup() } diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 180be3d51..9714971fa 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -170,7 +170,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { object$columns, c(object$.f), object$f_name, - object$keys[-1], + kill_time_value(object$keys), object$prefix ) } @@ -184,7 +184,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { #' using roughly equivalent tidy select style. #' #' @param fns vector of functions, even if it's length 1. -#' @param group_keys the keys to group by. likely `epi_keys[-1]` (to remove time_value) +#' @param group_keys the keys to group by. likely `epi_keys` (without `time_value`) #' #' @importFrom tidyr crossing #' @importFrom dplyr bind_cols group_by ungroup diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index 0a8c4118e..c7798cee3 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -171,7 +171,7 @@ bake.step_growth_rate <- function(object, new_data, ...) { ok <- object$keys gr <- new_data %>% - group_by(across(all_of(ok[-1]))) %>% + group_by(across(all_of(kill_time_value(ok)))) %>% dplyr::transmute( time_value = time_value, across( @@ -188,13 +188,15 @@ bake.step_growth_rate <- function(object, new_data, ...) { ungroup() %>% mutate(time_value = time_value + object$horizon) # shift x0 right + if (!is.null(object$replace_Inf)) { + browser() gr <- gr %>% mutate(across(!all_of(ok), ~ vec_replace_inf(.x, object$replace_Inf))) } left_join(new_data, gr, by = ok) %>% - group_by(across(all_of(ok[-1]))) %>% + group_by(across(all_of(kill_time_value(ok)))) %>% arrange(time_value) %>% ungroup() } diff --git a/R/step_lag_difference.R b/R/step_lag_difference.R index f3a470c7f..39ae1ba59 100644 --- a/R/step_lag_difference.R +++ b/R/step_lag_difference.R @@ -137,7 +137,7 @@ bake.step_lag_difference <- function(object, new_data, ...) { ) left_join(new_data, shifted, by = ok) %>% - group_by(across(all_of(ok[-1]))) %>% + group_by(across(all_of(kill_time_value(ok)))) %>% arrange(time_value) %>% ungroup() } diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index 089f000df..ae1641cce 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -44,7 +44,7 @@ the 0, 7 and 14 day case rates: ```{r} jhu <- case_death_rate_subset %>% - dplyr::filter( + filter( time_value >= "2021-06-04", time_value <= "2021-12-31", geo_value %in% c("ca", "fl", "tx", "ny", "nj") From aba9fa481445b01fb79ea51fddcf964f2650beaa Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 17:55:38 -0700 Subject: [PATCH 349/382] redocument, remove browser() --- R/step_growth_rate.R | 1 - man/epi_slide_wrapper.Rd | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/R/step_growth_rate.R b/R/step_growth_rate.R index c7798cee3..06f8da4cf 100644 --- a/R/step_growth_rate.R +++ b/R/step_growth_rate.R @@ -190,7 +190,6 @@ bake.step_growth_rate <- function(object, new_data, ...) { if (!is.null(object$replace_Inf)) { - browser() gr <- gr %>% mutate(across(!all_of(ok), ~ vec_replace_inf(.x, object$replace_Inf))) } diff --git a/man/epi_slide_wrapper.Rd b/man/epi_slide_wrapper.Rd index 583d2eacf..0c05b7650 100644 --- a/man/epi_slide_wrapper.Rd +++ b/man/epi_slide_wrapper.Rd @@ -18,7 +18,7 @@ epi_slide_wrapper( \arguments{ \item{fns}{vector of functions, even if it's length 1.} -\item{group_keys}{the keys to group by. likely \code{epi_keys[-1]} (to remove time_value)} +\item{group_keys}{the keys to group by. likely \code{epi_keys} (without \code{time_value})} } \description{ This should simplify somewhat in the future when we can run \code{epi_slide} on From 0976e2778ffb95b599fc2ab7397c0a2ba4c38098 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Tue, 27 Aug 2024 18:07:14 -0700 Subject: [PATCH 350/382] geo then time, no more dropping the first element to remove time_value --- R/epi_recipe.R | 2 +- tests/testthat/test-epi_shift.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/epi_recipe.R b/R/epi_recipe.R index c40fda019..88ba605cd 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -95,7 +95,7 @@ epi_recipe.epi_df <- keys <- key_colnames(x) # we know x is an epi_df var_info <- tibble(variable = vars) - key_roles <- c("time_value", "geo_value", rep("key", length(keys) - 2)) + key_roles <- c("geo_value", "time_value", rep("key", length(keys) - 2)) ## Check and add roles when available if (!is.null(roles)) { diff --git a/tests/testthat/test-epi_shift.R b/tests/testthat/test-epi_shift.R index 245a39c0d..78c9384f1 100644 --- a/tests/testthat/test-epi_shift.R +++ b/tests/testthat/test-epi_shift.R @@ -25,6 +25,6 @@ test_that("epi shift single works, renames", { geo_value = "ca" ) %>% epiprocess::as_epi_df() ess <- epi_shift_single(tib, "x", 1, "test", key_colnames(tib)) - expect_named(ess, c("time_value", "geo_value", "test")) + expect_named(ess, c("geo_value", "time_value", "test")) expect_equal(ess$time_value, tib$time_value + 1) }) From a99a5530ee5cf2ad8949c7a61218e65d07ce5321 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 29 Aug 2024 09:53:15 -0700 Subject: [PATCH 351/382] remove key_colnames.list() --- R/autoplot.R | 6 +++--- R/epi_workflow.R | 5 +---- R/get_test_data.R | 2 +- R/key_colnames.R | 17 ++++++----------- R/layer_cdc_flatline_quantiles.R | 2 +- R/layer_population_scaling.R | 2 +- R/step_population_scaling.R | 2 +- R/step_training_window.R | 2 +- R/utils-misc.R | 6 +++--- 9 files changed, 18 insertions(+), 26 deletions(-) diff --git a/R/autoplot.R b/R/autoplot.R index 1be30dd29..d35850fd6 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -109,7 +109,7 @@ autoplot.epi_workflow <- function( y <- y[, 1] cli_warn("Multiple outcome variables were detected. Displaying only 1.") } - keys <- c("time_value", "geo_value", "key") + keys <- c("geo_value", "time_value", "key") mold_roles <- names(mold$extras$roles) edf <- bind_cols(mold$extras$roles[mold_roles %in% keys], y) if (starts_with_impl("ahead_", names(y))) { @@ -127,7 +127,7 @@ autoplot.epi_workflow <- function( if (!is.null(shift)) { edf <- mutate(edf, time_value = time_value + shift) } - extra_keys <- setdiff(key_colnames(mold), c("time_value", "geo_value")) + extra_keys <- setdiff(key_colnames(object), c("geo_value", "time_value")) if (length(extra_keys) == 0L) extra_keys <- NULL edf <- as_epi_df(edf, as_of = object$fit$meta$as_of, @@ -167,7 +167,7 @@ autoplot.epi_workflow <- function( ) # Now, prepare matching facets in the predictions - ek <- kill_time_value(key_colnames(edf)) + ek <- epi_keys_only(edf) predictions <- predictions %>% mutate( .facets = interaction(!!!rlang::syms(as.list(ek)), sep = "/"), diff --git a/R/epi_workflow.R b/R/epi_workflow.R index f715dc9b0..b059a81d0 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -164,10 +164,7 @@ predict.epi_workflow <- function(object, new_data, type = NULL, opts = list(), . components$forged <- hardhat::forge(new_data, blueprint = components$mold$blueprint ) - components$keys <- grab_forged_keys( - components$forged, - components$mold, new_data - ) + components$keys <- grab_forged_keys(components$forged, object, new_data) components <- apply_frosting(object, components, new_data, type = type, opts = opts, ...) components$predictions } diff --git a/R/get_test_data.R b/R/get_test_data.R index ff3a146ef..694e73b06 100644 --- a/R/get_test_data.R +++ b/R/get_test_data.R @@ -91,7 +91,7 @@ get_test_data <- function( } x <- arrange(x, time_value) - groups <- kill_time_value(key_colnames(recipe)) + groups <- epi_keys_only(recipe) # If we skip NA completion, we remove undesirably early time values # Happens globally, over all groups diff --git a/R/key_colnames.R b/R/key_colnames.R index e16ce1f42..71ab0fd05 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -1,20 +1,15 @@ #' @export key_colnames.recipe <- function(x, ...) { - x$var_info$variable[x$var_info$role %in% c("time_value", "geo_value", "key")] + x$var_info$variable[x$var_info$role %in% c("geo_value", "time_value", "key")] } #' @export key_colnames.epi_workflow <- function(x, ...) { - NextMethod(hardhat::extract_mold(x)) -} - -# a mold is a list extracted from a fitted workflow, gives info about -# training data. But it doesn't have a class -#' @export -key_colnames.list <- function(x, ...) { - keys <- c("time_value", "geo_value", "key") - molded_names <- names(x$extras$roles) - mold_keys <- map(x$extras$roles[molded_names %in% keys], names) + # safer to look at the mold than the preprocessor + mold <- hardhat::extract_mold(x) + keys <- c("geo_value", "time_value", "key") + molded_names <- names(mold$extras$roles) + mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) unname(unlist(mold_keys)) %||% character(0L) } diff --git a/R/layer_cdc_flatline_quantiles.R b/R/layer_cdc_flatline_quantiles.R index 9166d3469..8d16ba32f 100644 --- a/R/layer_cdc_flatline_quantiles.R +++ b/R/layer_cdc_flatline_quantiles.R @@ -169,7 +169,7 @@ slather.layer_cdc_flatline_quantiles <- )) } p <- components$predictions - ek <- kill_time_value(key_colnames(components$mold)) + ek <- epi_keys_only(workflow) r <- grab_residuals(the_fit, components) avail_grps <- character(0L) diff --git a/R/layer_population_scaling.R b/R/layer_population_scaling.R index a2c56233f..9275d910c 100644 --- a/R/layer_population_scaling.R +++ b/R/layer_population_scaling.R @@ -136,7 +136,7 @@ slather.layer_population_scaling <- rlang::check_dots_empty() object$by <- object$by %||% intersect( - kill_time_value(key_colnames(components$predictions)), + epi_keys_only(components$predictions), colnames(select(object$df, !object$df_pop_col)) ) joinby <- list(x = names(object$by) %||% object$by, y = object$by) diff --git a/R/step_population_scaling.R b/R/step_population_scaling.R index 5555bc65c..4e4d3aa26 100644 --- a/R/step_population_scaling.R +++ b/R/step_population_scaling.R @@ -157,7 +157,7 @@ prep.step_population_scaling <- function(x, training, info = NULL, ...) { #' @export bake.step_population_scaling <- function(object, new_data, ...) { object$by <- object$by %||% intersect( - kill_time_value(key_colnames(new_data)), + epi_keys_only(new_data), colnames(select(object$df, !object$df_pop_col)) ) joinby <- list(x = names(object$by) %||% object$by, y = object$by) diff --git a/R/step_training_window.R b/R/step_training_window.R index e66b08365..eafc076c7 100644 --- a/R/step_training_window.R +++ b/R/step_training_window.R @@ -77,7 +77,7 @@ step_training_window_new <- #' @export prep.step_training_window <- function(x, training, info = NULL, ...) { - ekt <- kill_time_value(key_colnames(training)) + ekt <- epi_keys_only(training) ek <- x$epi_keys %||% ekt %||% character(0L) hardhat::validate_column_names(training, ek) diff --git a/R/utils-misc.R b/R/utils-misc.R index c59afc19a..af064b37c 100644 --- a/R/utils-misc.R +++ b/R/utils-misc.R @@ -32,14 +32,14 @@ check_pname <- function(res, preds, object, newname = NULL) { } -grab_forged_keys <- function(forged, mold, new_data) { - keys <- c("time_value", "geo_value", "key") +grab_forged_keys <- function(forged, workflow, new_data) { + keys <- c("geo_value", "time_value", "key") forged_roles <- names(forged$extras$roles) extras <- dplyr::bind_cols(forged$extras$roles[forged_roles %in% keys]) # 1. these are the keys in the test data after prep/bake new_keys <- names(extras) # 2. these are the keys in the training data - old_keys <- key_colnames(mold) + old_keys <- key_colnames(workflow) # 3. these are the keys in the test data as input new_df_keys <- key_colnames(new_data, extra_keys = setdiff(new_keys, keys[1:2])) if (!(setequal(old_keys, new_df_keys) && setequal(new_keys, new_df_keys))) { From dcf778cd4313ec1c22d94cbc57c7504a36256ef7 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 29 Aug 2024 10:19:49 -0700 Subject: [PATCH 352/382] update tests in re @dshemetov comments --- NAMESPACE | 1 - R/key_colnames.R | 11 +++++++---- tests/testthat/test-key_colnames.R | 25 ++++++++++++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 8d08ea12e..23c5adeaf 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -51,7 +51,6 @@ S3method(format,dist_quantiles) S3method(is.na,dist_quantiles) S3method(is.na,distribution) S3method(key_colnames,epi_workflow) -S3method(key_colnames,list) S3method(key_colnames,recipe) S3method(mean,dist_quantiles) S3method(median,dist_quantiles) diff --git a/R/key_colnames.R b/R/key_colnames.R index 71ab0fd05..c69d1a628 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -1,16 +1,19 @@ #' @export key_colnames.recipe <- function(x, ...) { - x$var_info$variable[x$var_info$role %in% c("geo_value", "time_value", "key")] + possible_keys <- c("geo_value", "time_value", "key") + keys <- x$var_info$variable[x$var_info$role %in% possible_keys] + keys[order(match(keys, possible_keys))] %||% character(0L) } #' @export key_colnames.epi_workflow <- function(x, ...) { # safer to look at the mold than the preprocessor mold <- hardhat::extract_mold(x) - keys <- c("geo_value", "time_value", "key") + possible_keys <- c("geo_value", "time_value", "key") molded_names <- names(mold$extras$roles) - mold_keys <- map(mold$extras$roles[molded_names %in% keys], names) - unname(unlist(mold_keys)) %||% character(0L) + keys <- map(mold$extras$roles[molded_names %in% possible_keys], names) + keys <- unname(unlist(keys)) + keys[order(match(keys, possible_keys))] %||% character(0L) } kill_time_value <- function(v) { diff --git a/tests/testthat/test-key_colnames.R b/tests/testthat/test-key_colnames.R index 3fecd9e44..d55a515ca 100644 --- a/tests/testthat/test-key_colnames.R +++ b/tests/testthat/test-key_colnames.R @@ -2,22 +2,21 @@ test_that("Extracts keys from a recipe; roles are NA, giving an empty vector", { expect_equal(key_colnames(recipe(case_death_rate_subset)), character(0L)) }) -test_that("epi_keys_mold extracts time_value and geo_value, but not raw", { +test_that("key_colnames extracts time_value and geo_value, but not raw", { my_recipe <- epi_recipe(case_death_rate_subset) %>% step_epi_ahead(death_rate, ahead = 7) %>% step_epi_lag(death_rate, lag = c(0, 7, 14)) %>% step_epi_lag(case_rate, lag = c(0, 7, 14)) %>% step_epi_naomit() + expect_identical(key_colnames(my_recipe), c("geo_value", "time_value")) + my_workflow <- epi_workflow() %>% add_epi_recipe(my_recipe) %>% add_model(linear_reg()) %>% fit(data = case_death_rate_subset) - expect_setequal( - key_colnames(my_workflow$pre$mold), - c("time_value", "geo_value") - ) + expect_identical(key_colnames(my_workflow), c("geo_value", "time_value")) }) test_that("key_colnames extracts additional keys when they are present", { @@ -34,14 +33,26 @@ test_that("key_colnames extracts additional keys when they are present", { additional_metadata = list(other_keys = c("state", "pol")) ) + expect_identical( + key_colnames(my_data), + c("geo_value", "time_value", "state", "pol") + ) + my_recipe <- epi_recipe(my_data) %>% step_epi_ahead(value, ahead = 7) %>% step_epi_naomit() + # order of the additional keys may be different + expect_setequal( + key_colnames(my_recipe), + c("geo_value", "time_value", "state", "pol") + ) + my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) + # order of the additional keys may be different expect_setequal( - key_colnames(my_workflow$pre$mold), - c("time_value", "geo_value", "state", "pol") + key_colnames(my_workflow), + c("geo_value", "time_value", "state", "pol") ) }) From bec78a280bb35eeefbf98ee1852bccf1281ff598 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 29 Aug 2024 10:35:58 -0700 Subject: [PATCH 353/382] remove / revise some silent tests --- tests/testthat/test-population_scaling.R | 53 +++++++++++++++--------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index d04a6bb43..9860ab08c 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -5,18 +5,25 @@ test_that("Column names can be passed with and without the tidy way", { value = c(1000, 2000, 3000, 4000, 5000, 6000) ) - newdata <- case_death_rate_subset %>% filter(geo_value %in% c("ak", "al", "ar", "as", "az", "ca")) + pop_data2 <- pop_data %>% dplyr::rename(geo_value = states) + + newdata <- case_death_rate_subset %>% + filter(geo_value %in% c("ak", "al", "ar", "as", "az", "ca")) r1 <- epi_recipe(newdata) %>% - step_population_scaling(c("case_rate", "death_rate"), + step_population_scaling( + case_rate, death_rate, df = pop_data, - df_pop_col = "value", by = c("geo_value" = "states") + df_pop_col = "value", + by = c("geo_value" = "states") ) r2 <- epi_recipe(newdata) %>% - step_population_scaling(case_rate, death_rate, - df = pop_data, - df_pop_col = "value", by = c("geo_value" = "states") + step_population_scaling( + case_rate, death_rate, + df = pop_data2, + df_pop_col = "value", + by = "geo_value" ) prep1 <- prep(r1, newdata) @@ -56,9 +63,9 @@ test_that("Number of columns and column names returned correctly, Upper and lowe suffix = "_rate" ) - prep <- prep(r, newdata) + p <- prep(r, newdata) - expect_silent(b <- bake(prep, newdata)) + b <- bake(p, newdata) expect_equal(ncol(b), 7L) expect_true("case_rate" %in% colnames(b)) expect_true("death_rate" %in% colnames(b)) @@ -75,15 +82,15 @@ test_that("Number of columns and column names returned correctly, Upper and lowe create_new = FALSE ) - expect_warning(prep <- prep(r, newdata)) + expect_warning(p <- prep(r, newdata)) - expect_warning(b <- bake(prep, newdata)) + expect_warning(b <- bake(p, newdata)) expect_equal(ncol(b), 5L) }) ## Postprocessing test_that("Postprocessing workflow works and values correct", { - jhu <- epiprocess::jhu_csse_daily_subset %>% + jhu <- jhu_csse_daily_subset %>% dplyr::filter(time_value > "2021-11-01", geo_value %in% c("ca", "ny")) %>% dplyr::select(geo_value, time_value, cases) @@ -207,9 +214,17 @@ test_that("test joining by default columns", { recipes::step_naomit(recipes::all_predictors()) %>% recipes::step_naomit(recipes::all_outcomes(), skip = TRUE) - expect_silent(prep(r, jhu)) + p <- prep(r, jhu) + b <- bake(p, new_data = NULL) + expect_named( + b, + c("geo_value", "time_value", "case_rate", "case_rate_scaled", + paste0("lag_", c(0,7,14), "_case_rate_scaled"), + "ahead_7_case_rate_scaled" + ) + ) + - expect_silent(bake(prep(r, jhu), new_data = NULL)) f <- frosting() %>% layer_predict() %>% @@ -221,13 +236,13 @@ test_that("test joining by default columns", { df_pop_col = "values" ) - expect_silent( - wf <- epi_workflow(r, parsnip::linear_reg()) %>% - fit(jhu) %>% - add_frosting(f) - ) + wf <- epi_workflow(r, parsnip::linear_reg()) %>% + fit(jhu) %>% + add_frosting(f) - expect_silent(forecast(wf)) + fc <- forecast(wf) + expect_named(fc, c("geo_value", "time_value", ".pred", ".pred_scaled")) + expect_equal(fc$.pred_scaled, fc$.pred * c(1 / 20000, 1 / 30000)) }) From 6d8edc03a70c223d3b58dc9343b9c8cedbf7788c Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 29 Aug 2024 12:50:09 -0700 Subject: [PATCH 354/382] styler --- tests/testthat/test-population_scaling.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index 9860ab08c..a94b40b82 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -218,8 +218,9 @@ test_that("test joining by default columns", { b <- bake(p, new_data = NULL) expect_named( b, - c("geo_value", "time_value", "case_rate", "case_rate_scaled", - paste0("lag_", c(0,7,14), "_case_rate_scaled"), + c( + "geo_value", "time_value", "case_rate", "case_rate_scaled", + paste0("lag_", c(0, 7, 14), "_case_rate_scaled"), "ahead_7_case_rate_scaled" ) ) From 985f6a0f143fc829e8cb68d44fc7cb1e31cd6c97 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 4 Sep 2024 13:57:13 -0700 Subject: [PATCH 355/382] feat: expose "method" arg of quantile_reg --- R/make_quantile_reg.R | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index 832ef50f8..f025bf6d6 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -22,7 +22,7 @@ #' rq_spec <- quantile_reg(quantile_levels = c(.2, .8)) %>% set_engine("rq") #' ff <- rq_spec %>% fit(y ~ ., data = tib) #' predict(ff, new_data = tib) -quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0.5) { +quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0.5, method = "br") { # Check for correct mode if (mode != "regression") { cli_abort("`mode` must be 'regression'") @@ -35,7 +35,7 @@ quantile_reg <- function(mode = "regression", engine = "rq", quantile_levels = 0 cli::cli_warn("Sorting `quantile_levels` to increasing order.") quantile_levels <- sort(quantile_levels) } - args <- list(quantile_levels = rlang::enquo(quantile_levels)) + args <- list(quantile_levels = rlang::enquo(quantile_levels), method = rlang::enquo(method)) # Save some empty slots for future parts of the specification parsnip::new_model_spec( @@ -54,9 +54,6 @@ make_quantile_reg <- function() { parsnip::set_new_model("quantile_reg") } parsnip::set_model_mode("quantile_reg", "regression") - - - parsnip::set_model_engine("quantile_reg", "regression", eng = "rq") parsnip::set_dependency("quantile_reg", eng = "rq", pkg = "quantreg") @@ -68,6 +65,14 @@ make_quantile_reg <- function() { func = list(pkg = "quantreg", fun = "rq"), has_submodel = FALSE ) + parsnip::set_model_arg( + model = "quantile_reg", + eng = "rq", + parsnip = "method", + original = "method", + func = list(pkg = "quantreg", fun = "rq"), + has_submodel = FALSE + ) parsnip::set_fit( model = "quantile_reg", @@ -78,7 +83,6 @@ make_quantile_reg <- function() { protect = c("formula", "data", "weights"), func = c(pkg = "quantreg", fun = "rq"), defaults = list( - method = "br", na.action = rlang::expr(stats::na.omit), model = FALSE ) @@ -101,7 +105,6 @@ make_quantile_reg <- function() { object <- parsnip::extract_fit_engine(object) type <- class(object)[1] - # can't make a method because object is second out <- switch(type, rq = dist_quantiles(unname(as.list(x)), object$quantile_levels), # one quantile @@ -117,7 +120,6 @@ make_quantile_reg <- function() { return(data.frame(.pred = out)) } - parsnip::set_pred( model = "quantile_reg", eng = "rq", From 1040633b2569c6eecf646f39cf9a6e6e528629f6 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 4 Sep 2024 15:41:10 -0700 Subject: [PATCH 356/382] doc: document --- R/make_quantile_reg.R | 2 ++ man/quantile_reg.Rd | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/R/make_quantile_reg.R b/R/make_quantile_reg.R index f025bf6d6..4cca17847 100644 --- a/R/make_quantile_reg.R +++ b/R/make_quantile_reg.R @@ -11,6 +11,8 @@ #' "rq" is supported. #' @param quantile_levels A scalar or vector of values in (0, 1) to determine which #' quantiles to estimate (default is 0.5). +#' @param method A fitting method used by [quantreg::rq()]. See the +#' documentation for a list of options. #' #' @export #' diff --git a/man/quantile_reg.Rd b/man/quantile_reg.Rd index 8e576ac84..2101c5a0e 100644 --- a/man/quantile_reg.Rd +++ b/man/quantile_reg.Rd @@ -4,7 +4,12 @@ \alias{quantile_reg} \title{Quantile regression} \usage{ -quantile_reg(mode = "regression", engine = "rq", quantile_levels = 0.5) +quantile_reg( + mode = "regression", + engine = "rq", + quantile_levels = 0.5, + method = "br" +) } \arguments{ \item{mode}{A single character string for the type of model. @@ -15,6 +20,9 @@ The only possible value for this model is "regression".} \item{quantile_levels}{A scalar or vector of values in (0, 1) to determine which quantiles to estimate (default is 0.5).} + +\item{method}{A fitting method used by \code{\link[quantreg:rq]{quantreg::rq()}}. See the +documentation for a list of options.} } \description{ \code{quantile_reg()} generates a quantile regression model \emph{specification} for From dd9c92e3985dd9fa23826a4d65e26d15d9a582a0 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 11 Sep 2024 13:49:15 -0700 Subject: [PATCH 357/382] fix and add test --- R/epi_workflow.R | 4 ++- tests/testthat/_snaps/epi_workflow.md | 12 +++++++++ tests/testthat/test-epi_workflow.R | 37 +++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 tests/testthat/_snaps/epi_workflow.md diff --git a/R/epi_workflow.R b/R/epi_workflow.R index b059a81d0..58b8bafeb 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -102,7 +102,9 @@ fit.epi_workflow <- function(object, data, ..., control = workflows::control_wor ) object$original_data <- data - NextMethod() + res <- NextMethod() + class(res) <- c("epi_workflow", class(res)) + res } #' Predict from an epi_workflow diff --git a/tests/testthat/_snaps/epi_workflow.md b/tests/testthat/_snaps/epi_workflow.md new file mode 100644 index 000000000..abd57da2f --- /dev/null +++ b/tests/testthat/_snaps/epi_workflow.md @@ -0,0 +1,12 @@ +# fit method does not silently drop the class + + epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various step_epi_* functions will not work. + +--- + + Code + ewf_erec_edf %>% fit(tbl) + Condition + Error in `if (new_meta != old_meta) ...`: + ! argument is of length zero + diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index 09dd6fe82..8236a5885 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -105,3 +105,40 @@ test_that("forecast method errors when workflow not fit", { expect_error(forecast(wf)) }) + +test_that("fit method does not silently drop the class", { + # This is issue #363 + + library(recipes) + tbl <- tibble::tibble( + geo_value = 1, + time_value = 1:100, + x = 1:100, + y = x + rnorm(100L) + ) + edf <- as_epi_df(tbl) + + rec_tbl <- recipe(y ~ x, data = tbl) + rec_edf <- recipe(y ~ x, data = edf) + expect_snapshot_warning(erec_tbl <- epi_recipe(y ~ x, data = tbl)) + erec_edf <- epi_recipe(y ~ x, data = edf) + + ewf_rec_tbl <- epi_workflow(rec_tbl, linear_reg()) + ewf_rec_edf <- epi_workflow(rec_edf, linear_reg()) + ewf_erec_edf <- epi_workflow(erec_edf, linear_reg()) + + # above are all epi_workflows: + + expect_s3_class(ewf_rec_tbl, "epi_workflow") + expect_s3_class(ewf_rec_edf, "epi_workflow") + expect_s3_class(ewf_erec_edf, "epi_workflow") + + # but fitting drops the class or generates errors in many cases: + + expect_s3_class(ewf_rec_tbl %>% fit(tbl), "epi_workflow") + expect_s3_class(ewf_rec_tbl %>% fit(edf), "epi_workflow") + expect_s3_class(ewf_rec_edf %>% fit(tbl), "epi_workflow") + expect_s3_class(ewf_rec_edf %>% fit(edf), "epi_workflow") + expect_snapshot(ewf_erec_edf %>% fit(tbl), error = TRUE) + expect_s3_class(ewf_erec_edf %>% fit(edf), "epi_workflow") +}) From 9b47549864ca6e7132e09636a28a23df6b73265d Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Wed, 11 Sep 2024 13:56:27 -0700 Subject: [PATCH 358/382] bump version, news --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 6d1217587..7bdc31a6e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.20 +Version: 0.0.21 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 15aa6de29..ecdf9efe6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -57,3 +57,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Add `step_epi_slide` to produce generic sliding computations over an `epi_df` - Add quantile random forests (via `{grf}`) as a parsnip engine - Replace `epi_keys()` with `epiprocess::key_colnames()`, #352 +- Fix bug where `fit()` drops the `epi_workflow` class, #363 From fbceb88e9fd3307529ec5fff3ec0886592cc37c7 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 12 Sep 2024 15:33:59 -0700 Subject: [PATCH 359/382] try to retain the class to the extent possible --- R/epi_recipe.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 88ba605cd..22ecb0a31 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -63,6 +63,7 @@ epi_recipe.default <- function(x, ...) { #' r epi_recipe.epi_df <- function(x, formula = NULL, ..., vars = NULL, roles = NULL) { + attr(x, "decay_to_tibble") <- FALSE if (!is.null(formula)) { if (!is.null(vars)) { rlang::abort( @@ -160,6 +161,7 @@ epi_recipe.formula <- function(formula, data, ...) { return(recipes::recipe(formula, data, ...)) } + attr(data, "decay_to_tibble") <- FALSE f_funcs <- recipes:::fun_calls(formula, data) if (any(f_funcs == "-")) { abort("`-` is not allowed in a recipe formula. Use `step_rm()` instead.") From 9cf5b8507f01397388c84d6598232aaad3f3aa8f Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 12 Sep 2024 15:36:25 -0700 Subject: [PATCH 360/382] bump version --- DESCRIPTION | 4 ++-- NEWS.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 6d1217587..a59c38327 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.20 +Version: 0.0.21 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), @@ -23,7 +23,7 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.7.5), + epiprocess (>= 0.7.12), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: diff --git a/NEWS.md b/NEWS.md index 15aa6de29..5d1082c2b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -57,3 +57,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Add `step_epi_slide` to produce generic sliding computations over an `epi_df` - Add quantile random forests (via `{grf}`) as a parsnip engine - Replace `epi_keys()` with `epiprocess::key_colnames()`, #352 +- Try to retain the `epi_df` class during baking to the extent possible, #376 From 4d8a24dd45735ae77ba754af169ede46b0e41fa0 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 13 Sep 2024 15:47:00 -0700 Subject: [PATCH 361/382] import rlang checks since checkmate doesn't take an environment --- DESCRIPTION | 2 +- NAMESPACE | 13 + R/epipredict-package.R | 25 +- R/import-standalone-obj-type.R | 363 ++++++++++++++++++++ R/import-standalone-types-check.R | 553 ++++++++++++++++++++++++++++++ 5 files changed, 945 insertions(+), 11 deletions(-) create mode 100644 R/import-standalone-obj-type.R create mode 100644 R/import-standalone-types-check.R diff --git a/DESCRIPTION b/DESCRIPTION index 6d1217587..bccba8ece 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -37,7 +37,7 @@ Imports: hardhat (>= 1.3.0), magrittr, recipes (>= 1.0.4), - rlang (>= 1.0.0), + rlang (>= 1.1.0), stats, tibble, tidyr, diff --git a/NAMESPACE b/NAMESPACE index 23c5adeaf..1a1d3af18 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -272,15 +272,28 @@ importFrom(rlang,":=") importFrom(rlang,abort) importFrom(rlang,arg_match) importFrom(rlang,as_function) +importFrom(rlang,caller_arg) importFrom(rlang,caller_env) importFrom(rlang,enquo) importFrom(rlang,enquos) +importFrom(rlang,env_get_list) importFrom(rlang,expr) importFrom(rlang,global_env) importFrom(rlang,inject) +importFrom(rlang,is_call) +importFrom(rlang,is_character) +importFrom(rlang,is_closure) +importFrom(rlang,is_environment) +importFrom(rlang,is_formula) +importFrom(rlang,is_function) +importFrom(rlang,is_list) importFrom(rlang,is_logical) +importFrom(rlang,is_missing) importFrom(rlang,is_null) +importFrom(rlang,is_string) +importFrom(rlang,is_symbol) importFrom(rlang,is_true) +importFrom(rlang,is_vector) importFrom(rlang,set_names) importFrom(rlang,sym) importFrom(stats,as.formula) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 6460b65e4..0aaf5f0c1 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,15 +1,20 @@ ## usethis namespace: start -#' @importFrom tibble as_tibble +#' @import epiprocess parsnip +#' @importFrom checkmate assert assert_character assert_int assert_scalar +#' @importFrom checkmate assert_integerish assert_date assert_function +#' @importFrom checkmate assert_class assert_logical assert_numeric assert_number +#' @importFrom checkmate assert_integer +#' @importFrom cli cli_abort cli_warn +#' @importFrom dplyr relocate summarise summarize everything +#' @importFrom dplyr filter mutate select left_join rename ungroup full_join +#' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by +#' @importFrom rlang is_logical is_true inject enquo enquos expr sym arg_match #' @importFrom rlang := !! %||% as_function global_env set_names !!! -#' is_logical is_true inject enquo enquos expr sym arg_match +#' @importFrom rlang caller_arg is_missing is_string is_symbol is_call +#' @importFrom rlang env_get_list is_environment is_function is_closure is_formula +#' @importFrom rlang is_character is_vector is_list #' @importFrom stats poly predict lm residuals quantile -#' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by -#' summarize filter mutate select left_join rename ungroup full_join -#' relocate summarise everything -#' @importFrom cli cli_abort cli_warn -#' @importFrom checkmate assert assert_character assert_int assert_scalar -#' assert_logical assert_numeric assert_number assert_integer -#' assert_integerish assert_date assert_function assert_class -#' @import epiprocess parsnip +#' @importFrom tibble as_tibble +na_chr <- NA_character_ ## usethis namespace: end NULL diff --git a/R/import-standalone-obj-type.R b/R/import-standalone-obj-type.R new file mode 100644 index 000000000..646aa33fc --- /dev/null +++ b/R/import-standalone-obj-type.R @@ -0,0 +1,363 @@ +# Standalone file: do not edit by hand +# Source: +# ---------------------------------------------------------------------- +# +# --- +# repo: r-lib/rlang +# file: standalone-obj-type.R +# last-updated: 2024-02-14 +# license: https://unlicense.org +# imports: rlang (>= 1.1.0) +# --- +# +# ## Changelog +# +# 2024-02-14: +# - `obj_type_friendly()` now works for S7 objects. +# +# 2023-05-01: +# - `obj_type_friendly()` now only displays the first class of S3 objects. +# +# 2023-03-30: +# - `stop_input_type()` now handles `I()` input literally in `arg`. +# +# 2022-10-04: +# - `obj_type_friendly(value = TRUE)` now shows numeric scalars +# literally. +# - `stop_friendly_type()` now takes `show_value`, passed to +# `obj_type_friendly()` as the `value` argument. +# +# 2022-10-03: +# - Added `allow_na` and `allow_null` arguments. +# - `NULL` is now backticked. +# - Better friendly type for infinities and `NaN`. +# +# 2022-09-16: +# - Unprefixed usage of rlang functions with `rlang::` to +# avoid onLoad issues when called from rlang (#1482). +# +# 2022-08-11: +# - Prefixed usage of rlang functions with `rlang::`. +# +# 2022-06-22: +# - `friendly_type_of()` is now `obj_type_friendly()`. +# - Added `obj_type_oo()`. +# +# 2021-12-20: +# - Added support for scalar values and empty vectors. +# - Added `stop_input_type()` +# +# 2021-06-30: +# - Added support for missing arguments. +# +# 2021-04-19: +# - Added support for matrices and arrays (#141). +# - Added documentation. +# - Added changelog. +# +# nocov start + +#' Return English-friendly type +#' @param x Any R object. +#' @param value Whether to describe the value of `x`. Special values +#' like `NA` or `""` are always described. +#' @param length Whether to mention the length of vectors and lists. +#' @return A string describing the type. Starts with an indefinite +#' article, e.g. "an integer vector". +#' @noRd +obj_type_friendly <- function(x, value = TRUE) { + if (is_missing(x)) { + return("absent") + } + + if (is.object(x)) { + if (inherits(x, "quosure")) { + type <- "quosure" + } else { + type <- class(x)[[1L]] + } + return(sprintf("a <%s> object", type)) + } + + if (!is_vector(x)) { + return(.rlang_as_friendly_type(typeof(x))) + } + + n_dim <- length(dim(x)) + + if (!n_dim) { + if (!is_list(x) && length(x) == 1) { + if (is_na(x)) { + return(switch( + typeof(x), + logical = "`NA`", + integer = "an integer `NA`", + double = + if (is.nan(x)) { + "`NaN`" + } else { + "a numeric `NA`" + }, + complex = "a complex `NA`", + character = "a character `NA`", + .rlang_stop_unexpected_typeof(x) + )) + } + + show_infinites <- function(x) { + if (x > 0) { + "`Inf`" + } else { + "`-Inf`" + } + } + str_encode <- function(x, width = 30, ...) { + if (nchar(x) > width) { + x <- substr(x, 1, width - 3) + x <- paste0(x, "...") + } + encodeString(x, ...) + } + + if (value) { + if (is.numeric(x) && is.infinite(x)) { + return(show_infinites(x)) + } + + if (is.numeric(x) || is.complex(x)) { + number <- as.character(round(x, 2)) + what <- if (is.complex(x)) "the complex number" else "the number" + return(paste(what, number)) + } + + return(switch( + typeof(x), + logical = if (x) "`TRUE`" else "`FALSE`", + character = { + what <- if (nzchar(x)) "the string" else "the empty string" + paste(what, str_encode(x, quote = "\"")) + }, + raw = paste("the raw value", as.character(x)), + .rlang_stop_unexpected_typeof(x) + )) + } + + return(switch( + typeof(x), + logical = "a logical value", + integer = "an integer", + double = if (is.infinite(x)) show_infinites(x) else "a number", + complex = "a complex number", + character = if (nzchar(x)) "a string" else "\"\"", + raw = "a raw value", + .rlang_stop_unexpected_typeof(x) + )) + } + + if (length(x) == 0) { + return(switch( + typeof(x), + logical = "an empty logical vector", + integer = "an empty integer vector", + double = "an empty numeric vector", + complex = "an empty complex vector", + character = "an empty character vector", + raw = "an empty raw vector", + list = "an empty list", + .rlang_stop_unexpected_typeof(x) + )) + } + } + + vec_type_friendly(x) +} + +vec_type_friendly <- function(x, length = FALSE) { + if (!is_vector(x)) { + abort("`x` must be a vector.") + } + type <- typeof(x) + n_dim <- length(dim(x)) + + add_length <- function(type) { + if (length && !n_dim) { + paste0(type, sprintf(" of length %s", length(x))) + } else { + type + } + } + + if (type == "list") { + if (n_dim < 2) { + return(add_length("a list")) + } else if (is.data.frame(x)) { + return("a data frame") + } else if (n_dim == 2) { + return("a list matrix") + } else { + return("a list array") + } + } + + type <- switch( + type, + logical = "a logical %s", + integer = "an integer %s", + numeric = , + double = "a double %s", + complex = "a complex %s", + character = "a character %s", + raw = "a raw %s", + type = paste0("a ", type, " %s") + ) + + if (n_dim < 2) { + kind <- "vector" + } else if (n_dim == 2) { + kind <- "matrix" + } else { + kind <- "array" + } + out <- sprintf(type, kind) + + if (n_dim >= 2) { + out + } else { + add_length(out) + } +} + +.rlang_as_friendly_type <- function(type) { + switch( + type, + + list = "a list", + + NULL = "`NULL`", + environment = "an environment", + externalptr = "a pointer", + weakref = "a weak reference", + S4 = "an S4 object", + + name = , + symbol = "a symbol", + language = "a call", + pairlist = "a pairlist node", + expression = "an expression vector", + + char = "an internal string", + promise = "an internal promise", + ... = "an internal dots object", + any = "an internal `any` object", + bytecode = "an internal bytecode object", + + primitive = , + builtin = , + special = "a primitive function", + closure = "a function", + + type + ) +} + +.rlang_stop_unexpected_typeof <- function(x, call = caller_env()) { + abort( + sprintf("Unexpected type <%s>.", typeof(x)), + call = call + ) +} + +#' Return OO type +#' @param x Any R object. +#' @return One of `"bare"` (for non-OO objects), `"S3"`, `"S4"`, +#' `"R6"`, or `"S7"`. +#' @noRd +obj_type_oo <- function(x) { + if (!is.object(x)) { + return("bare") + } + + class <- inherits(x, c("R6", "S7_object"), which = TRUE) + + if (class[[1]]) { + "R6" + } else if (class[[2]]) { + "S7" + } else if (isS4(x)) { + "S4" + } else { + "S3" + } +} + +#' @param x The object type which does not conform to `what`. Its +#' `obj_type_friendly()` is taken and mentioned in the error message. +#' @param what The friendly expected type as a string. Can be a +#' character vector of expected types, in which case the error +#' message mentions all of them in an "or" enumeration. +#' @param show_value Passed to `value` argument of `obj_type_friendly()`. +#' @param ... Arguments passed to [abort()]. +#' @inheritParams args_error_context +#' @noRd +stop_input_type <- function(x, + what, + ..., + allow_na = FALSE, + allow_null = FALSE, + show_value = TRUE, + arg = caller_arg(x), + call = caller_env()) { + # From standalone-cli.R + cli <- env_get_list( + nms = c("format_arg", "format_code"), + last = topenv(), + default = function(x) sprintf("`%s`", x), + inherit = TRUE + ) + + if (allow_na) { + what <- c(what, cli$format_code("NA")) + } + if (allow_null) { + what <- c(what, cli$format_code("NULL")) + } + if (length(what)) { + what <- oxford_comma(what) + } + if (inherits(arg, "AsIs")) { + format_arg <- identity + } else { + format_arg <- cli$format_arg + } + + message <- sprintf( + "%s must be %s, not %s.", + format_arg(arg), + what, + obj_type_friendly(x, value = show_value) + ) + + abort(message, ..., call = call, arg = arg) +} + +oxford_comma <- function(chr, sep = ", ", final = "or") { + n <- length(chr) + + if (n < 2) { + return(chr) + } + + head <- chr[seq_len(n - 1)] + last <- chr[n] + + head <- paste(head, collapse = sep) + + # Write a or b. But a, b, or c. + if (n > 2) { + paste0(head, sep, final, " ", last) + } else { + paste0(head, " ", final, " ", last) + } +} + +# nocov end diff --git a/R/import-standalone-types-check.R b/R/import-standalone-types-check.R new file mode 100644 index 000000000..1ca83997d --- /dev/null +++ b/R/import-standalone-types-check.R @@ -0,0 +1,553 @@ +# Standalone file: do not edit by hand +# Source: +# ---------------------------------------------------------------------- +# +# --- +# repo: r-lib/rlang +# file: standalone-types-check.R +# last-updated: 2023-03-13 +# license: https://unlicense.org +# dependencies: standalone-obj-type.R +# imports: rlang (>= 1.1.0) +# --- +# +# ## Changelog +# +# 2024-08-15: +# - `check_character()` gains an `allow_na` argument (@martaalcalde, #1724) +# +# 2023-03-13: +# - Improved error messages of number checkers (@teunbrand) +# - Added `allow_infinite` argument to `check_number_whole()` (@mgirlich). +# - Added `check_data_frame()` (@mgirlich). +# +# 2023-03-07: +# - Added dependency on rlang (>= 1.1.0). +# +# 2023-02-15: +# - Added `check_logical()`. +# +# - `check_bool()`, `check_number_whole()`, and +# `check_number_decimal()` are now implemented in C. +# +# - For efficiency, `check_number_whole()` and +# `check_number_decimal()` now take a `NULL` default for `min` and +# `max`. This makes it possible to bypass unnecessary type-checking +# and comparisons in the default case of no bounds checks. +# +# 2022-10-07: +# - `check_number_whole()` and `_decimal()` no longer treat +# non-numeric types such as factors or dates as numbers. Numeric +# types are detected with `is.numeric()`. +# +# 2022-10-04: +# - Added `check_name()` that forbids the empty string. +# `check_string()` allows the empty string by default. +# +# 2022-09-28: +# - Removed `what` arguments. +# - Added `allow_na` and `allow_null` arguments. +# - Added `allow_decimal` and `allow_infinite` arguments. +# - Improved errors with absent arguments. +# +# +# 2022-09-16: +# - Unprefixed usage of rlang functions with `rlang::` to +# avoid onLoad issues when called from rlang (#1482). +# +# 2022-08-11: +# - Added changelog. +# +# nocov start + +# Scalars ----------------------------------------------------------------- + +.standalone_types_check_dot_call <- .Call + +check_bool <- function(x, + ..., + allow_na = FALSE, + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x) && .standalone_types_check_dot_call(ffi_standalone_is_bool_1.0.7, x, allow_na, allow_null)) { + return(invisible(NULL)) + } + + stop_input_type( + x, + c("`TRUE`", "`FALSE`"), + ..., + allow_na = allow_na, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_string <- function(x, + ..., + allow_empty = TRUE, + allow_na = FALSE, + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + is_string <- .rlang_check_is_string( + x, + allow_empty = allow_empty, + allow_na = allow_na, + allow_null = allow_null + ) + if (is_string) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a single string", + ..., + allow_na = allow_na, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +.rlang_check_is_string <- function(x, + allow_empty, + allow_na, + allow_null) { + if (is_string(x)) { + if (allow_empty || !is_string(x, "")) { + return(TRUE) + } + } + + if (allow_null && is_null(x)) { + return(TRUE) + } + + if (allow_na && (identical(x, NA) || identical(x, na_chr))) { + return(TRUE) + } + + FALSE +} + +check_name <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + is_string <- .rlang_check_is_string( + x, + allow_empty = FALSE, + allow_na = FALSE, + allow_null = allow_null + ) + if (is_string) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a valid name", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +IS_NUMBER_true <- 0 +IS_NUMBER_false <- 1 +IS_NUMBER_oob <- 2 + +check_number_decimal <- function(x, + ..., + min = NULL, + max = NULL, + allow_infinite = TRUE, + allow_na = FALSE, + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (missing(x)) { + exit_code <- IS_NUMBER_false + } else if (0 == (exit_code <- .standalone_types_check_dot_call( + ffi_standalone_check_number_1.0.7, + x, + allow_decimal = TRUE, + min, + max, + allow_infinite, + allow_na, + allow_null + ))) { + return(invisible(NULL)) + } + + .stop_not_number( + x, + ..., + exit_code = exit_code, + allow_decimal = TRUE, + min = min, + max = max, + allow_na = allow_na, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_number_whole <- function(x, + ..., + min = NULL, + max = NULL, + allow_infinite = FALSE, + allow_na = FALSE, + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (missing(x)) { + exit_code <- IS_NUMBER_false + } else if (0 == (exit_code <- .standalone_types_check_dot_call( + ffi_standalone_check_number_1.0.7, + x, + allow_decimal = FALSE, + min, + max, + allow_infinite, + allow_na, + allow_null + ))) { + return(invisible(NULL)) + } + + .stop_not_number( + x, + ..., + exit_code = exit_code, + allow_decimal = FALSE, + min = min, + max = max, + allow_na = allow_na, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +.stop_not_number <- function(x, + ..., + exit_code, + allow_decimal, + min, + max, + allow_na, + allow_null, + arg, + call) { + if (allow_decimal) { + what <- "a number" + } else { + what <- "a whole number" + } + + if (exit_code == IS_NUMBER_oob) { + min <- min %||% -Inf + max <- max %||% Inf + + if (min > -Inf && max < Inf) { + what <- sprintf("%s between %s and %s", what, min, max) + } else if (x < min) { + what <- sprintf("%s larger than or equal to %s", what, min) + } else if (x > max) { + what <- sprintf("%s smaller than or equal to %s", what, max) + } else { + abort("Unexpected state in OOB check", .internal = TRUE) + } + } + + stop_input_type( + x, + what, + ..., + allow_na = allow_na, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_symbol <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_symbol(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a symbol", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_arg <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_symbol(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "an argument name", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_call <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_call(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a defused call", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_environment <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_environment(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "an environment", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_function <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_function(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a function", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_closure <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_closure(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "an R function", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_formula <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_formula(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a formula", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + + +# Vectors ----------------------------------------------------------------- + +# TODO: Figure out what to do with logical `NA` and `allow_na = TRUE` + +check_character <- function(x, + ..., + allow_na = TRUE, + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + + if (!missing(x)) { + if (is_character(x)) { + if (!allow_na && any(is.na(x))) { + abort( + sprintf("`%s` can't contain NA values.", arg), + arg = arg, + call = call + ) + } + + return(invisible(NULL)) + } + + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a character vector", + ..., + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_logical <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is_logical(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a logical vector", + ..., + allow_na = FALSE, + allow_null = allow_null, + arg = arg, + call = call + ) +} + +check_data_frame <- function(x, + ..., + allow_null = FALSE, + arg = caller_arg(x), + call = caller_env()) { + if (!missing(x)) { + if (is.data.frame(x)) { + return(invisible(NULL)) + } + if (allow_null && is_null(x)) { + return(invisible(NULL)) + } + } + + stop_input_type( + x, + "a data frame", + ..., + allow_null = allow_null, + arg = arg, + call = call + ) +} + +# nocov end From 73579e5cceb88395a463c06fc1a9907d3fe966db Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 19 Sep 2024 11:40:30 -0700 Subject: [PATCH 362/382] current tests pass --- R/utils-arg.R | 141 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 113 insertions(+), 28 deletions(-) diff --git a/R/utils-arg.R b/R/utils-arg.R index b4242eaf9..174d016d8 100644 --- a/R/utils-arg.R +++ b/R/utils-arg.R @@ -10,87 +10,172 @@ handle_arg_list <- function(..., .tests) { walk2(names, values, .tests) } -arg_is_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { +arg_is_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, + call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_scalar(value, null.ok = allow_null, na.ok = allow_na, .var.name = name) + ok <- test_scalar(value, null.ok = allow_null, na.ok = allow_na) + if (!ok) { + cli_abort("{.arg {name}} must be a scalar.", call = call) + } }) } -arg_is_lgl <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE) { +arg_is_lgl <- function(..., allow_null = FALSE, allow_na = FALSE, + allow_empty = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_logical(value, null.ok = allow_null, any.missing = allow_na, min.len = as.integer(!allow_empty), .var.name = name) + ok <- test_logical(value, null.ok = allow_null, any.missing = allow_na, + min.len = as.integer(!allow_empty)) + if (!ok) { + cli_abort("{.arg {name}} must be of type {.cls logical}.", call = call) + } }) } -arg_is_lgl_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { +arg_is_lgl_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, + call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_logical(value, null.ok = allow_null, any.missing = allow_na, min.len = 1, max.len = 1, .var.name = name) + ok <- test_logical(value, null.ok = allow_null, any.missing = allow_na, + min.len = 1, max.len = 1) + if (!ok) { + cli_abort( + "{.arg {name}} must be a scalar of type {.cls logical}.", + call = call + ) + } }) } -arg_is_numeric <- function(..., allow_null = FALSE) { +arg_is_numeric <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_numeric(value, null.ok = allow_null, any.missing = FALSE, .var.name = name) + ok <- test_numeric(value, null.ok = allow_null, any.missing = FALSE) + if (!ok) { + cli_abort("{.arg {name}} must be of type {.cls numeric}.", call = call) + } }) } -arg_is_pos <- function(..., allow_null = FALSE) { +arg_is_pos <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_numeric(value, lower = 1, null.ok = allow_null, any.missing = FALSE, .var.name = name) + ok <- test_numeric( + value, lower = .Machine$double.eps, + null.ok = allow_null, any.missing = FALSE + ) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} strictly positive number{?s}.", + call = call + ) + } }) } -arg_is_nonneg <- function(..., allow_null = FALSE) { +arg_is_nonneg <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_numeric(value, lower = 0, null.ok = allow_null, any.missing = FALSE, .var.name = name) + ok <- test_numeric(value, lower = 0, null.ok = allow_null, any.missing = FALSE) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} non-negative number{?s}.", + call = call + ) + } }) } -arg_is_int <- function(..., allow_null = FALSE) { +arg_is_int <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_integerish(value, null.ok = allow_null, .var.name = name) + ok <- test_integerish(value, null.ok = allow_null) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} integer{?s}.", + call = call + ) + } }) } -arg_is_pos_int <- function(..., allow_null = FALSE) { +arg_is_pos_int <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_integerish(value, null.ok = allow_null, lower = 1, any.missing = FALSE, .var.name = name) + ok <- test_integerish(value, null.ok = allow_null, lower = 1, any.missing = FALSE) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} positive integer{?s}.", + call = call + ) + } }) } -arg_is_nonneg_int <- function(..., allow_null = FALSE) { +arg_is_nonneg_int <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_integerish(value, null.ok = allow_null, lower = 0, any.missing = FALSE, .var.name = name) + ok <- test_integerish(value, null.ok = allow_null, lower = 0, any.missing = FALSE) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} non-negative integer{?s}.", + call = call + ) + } }) } -arg_is_date <- function(..., allow_null = FALSE) { +arg_is_date <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_date(value, null.ok = allow_null, .var.name = name) + ok <- test_date(value, null.ok = allow_null) + if (!ok) { + len <- length(value) + cli_abort( + "{.arg {name}} must be {cli::qty(len)} {?a/} date{?s}.", + call = call + ) + } }) } -arg_is_probabilities <- function(..., allow_null = FALSE, allow_na = FALSE) { +arg_is_probabilities <- function(..., allow_null = FALSE, allow_na = FALSE, + call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_numeric(value, lower = 0, upper = 1, null.ok = allow_null, any.missing = allow_na, .var.name = name) + ok <- test_numeric(value, lower = 0, upper = 1, null.ok = allow_null, + any.missing = allow_na) + if (!ok) { + cli_abort("{.arg {name}} must lie in [0, 1].", call = call) + } }) } -arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE) { +arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE, + call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_character(value, null.ok = allow_null, any.missing = allow_na, min.len = as.integer(!allow_empty), .var.name = name) + ok <- test_character(value, null.ok = allow_null, any.missing = allow_na, + min.len = as.integer(!allow_empty)) + if (!ok) { + cli_abort("{.arg {name}} must be of type {.cls character}.", call = call) + } }) } -arg_is_chr_scalar <- function(..., allow_null = FALSE, allow_na = FALSE) { +arg_is_chr_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, + call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_character(value, null.ok = allow_null, any.missing = allow_na, min.len = 1, max.len = 1, .var.name = name) + ok <- test_character(value, null.ok = allow_null, any.missing = allow_na, + len = 1L) + if (!ok) { + cli_abort( + "{.arg {name}} must be a scalar of type {.cls character}.", + call = call) + } }) } -arg_is_function <- function(..., allow_null = FALSE) { +arg_is_function <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - assert_function(value, null.ok = allow_null, .var.name = name) + ok <- test_function(value, null.ok = allow_null) + if (!ok) { + cli_abort("{.arg {name}} must be of type {.cls function}.", call = call) + } }) } From 79c56fccf5338257d7f6079631aa4f4ba826bdee Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 19 Sep 2024 11:41:44 -0700 Subject: [PATCH 363/382] replace expect_error with expect_snapshot to log the message as well --- tests/testthat/test-arg_is_.R | 94 +++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/tests/testthat/test-arg_is_.R b/tests/testthat/test-arg_is_.R index 52a4a16db..c30fc2a78 100644 --- a/tests/testthat/test-arg_is_.R +++ b/tests/testthat/test-arg_is_.R @@ -20,10 +20,10 @@ test_that("logical", { expect_silent(arg_is_lgl(l)) expect_silent(arg_is_lgl(ll)) expect_silent(arg_is_lgl(l, ll)) - expect_error(arg_is_lgl(l, ll, n)) - expect_error(arg_is_lgl(x)) + expect_snapshot(error = TRUE, arg_is_lgl(l, ll, n)) + expect_snapshot(error = TRUE, arg_is_lgl(x)) expect_silent(arg_is_lgl(l, ll, n, allow_null = TRUE)) - expect_error(arg_is_lgl(l, ll, nn)) + expect_snapshot(error = TRUE, arg_is_lgl(l, ll, nn)) expect_silent(arg_is_lgl(l, ll, nn, allow_na = TRUE)) }) @@ -31,115 +31,115 @@ test_that("scalar", { expect_silent(arg_is_scalar(x)) expect_silent(arg_is_scalar(dd)) expect_silent(arg_is_scalar(x, y, dd)) - expect_error(arg_is_scalar(x, y, n)) + expect_snapshot(error = TRUE, arg_is_scalar(x, y, n)) expect_silent(arg_is_scalar(x, y, n, allow_null = TRUE)) - expect_error(arg_is_scalar(x, y, nn)) + expect_snapshot(error = TRUE, arg_is_scalar(x, y, nn)) expect_silent(arg_is_scalar(x, y, nn, allow_na = TRUE)) - expect_error(arg_is_scalar(v, nn)) - expect_error(arg_is_scalar(v, nn, allow_na = TRUE)) - expect_error(arg_is_scalar(v, n, allow_null = TRUE)) - expect_error(arg_is_scalar(nnn, allow_na = TRUE)) + expect_snapshot(error = TRUE, arg_is_scalar(v, nn)) + expect_snapshot(error = TRUE, arg_is_scalar(v, nn, allow_na = TRUE)) + expect_snapshot(error = TRUE, arg_is_scalar(v, n, allow_null = TRUE)) + expect_snapshot(error = TRUE, arg_is_scalar(nnn, allow_na = TRUE)) }) test_that("numeric", { expect_silent(arg_is_numeric(i, j, x, y)) - expect_error(arg_is_numeric(a)) + expect_snapshot(error = TRUE, arg_is_numeric(a)) expect_silent(arg_is_numeric(d)) expect_silent(arg_is_numeric(c(i, j))) expect_silent(arg_is_numeric(i, k)) expect_silent(arg_is_numeric(i, j, n, allow_null = TRUE)) - expect_error(arg_is_numeric(i, j, n)) - expect_error(arg_is_numeric(i, nn)) + expect_snapshot(error = TRUE, arg_is_numeric(i, j, n)) + expect_snapshot(error = TRUE, arg_is_numeric(i, nn)) expect_silent(arg_is_numeric(a = -10:10)) }) test_that("positive", { expect_silent(arg_is_pos(i, j, x, y)) - expect_error(arg_is_pos(a)) + expect_snapshot(error = TRUE, arg_is_pos(a)) expect_silent(arg_is_pos(d)) expect_silent(arg_is_pos(c(i, j))) - expect_error(arg_is_pos(i, k)) + expect_snapshot(error = TRUE, arg_is_pos(i, k)) expect_silent(arg_is_pos(i, j, n, allow_null = TRUE)) - expect_error(arg_is_pos(i, j, n)) - expect_error(arg_is_pos(i, nn)) - expect_error(arg_is_pos(a = 0:10)) + expect_snapshot(error = TRUE, arg_is_pos(i, j, n)) + expect_snapshot(error = TRUE, arg_is_pos(i, nn)) + expect_snapshot(error = TRUE, arg_is_pos(a = 0:10)) }) test_that("nonneg", { expect_silent(arg_is_nonneg(i, j, x, y)) - expect_error(arg_is_nonneg(a)) + expect_snapshot(error = TRUE, arg_is_nonneg(a)) expect_silent(arg_is_nonneg(d)) expect_silent(arg_is_nonneg(c(i, j))) - expect_error(arg_is_nonneg(i, k)) + expect_snapshot(error = TRUE, arg_is_nonneg(i, k)) expect_silent(arg_is_nonneg(i, j, n, allow_null = TRUE)) - expect_error(arg_is_nonneg(i, j, n)) - expect_error(arg_is_nonneg(i, nn)) + expect_snapshot(error = TRUE, arg_is_nonneg(i, j, n)) + expect_snapshot(error = TRUE, arg_is_nonneg(i, nn)) expect_silent(arg_is_nonneg(a = 0:10)) }) test_that("nonneg-int", { - expect_error(arg_is_nonneg_int(a)) - expect_error(arg_is_nonneg_int(d)) + expect_snapshot(error = TRUE, arg_is_nonneg_int(a)) + expect_snapshot(error = TRUE, arg_is_nonneg_int(d)) expect_silent(arg_is_nonneg_int(i, j)) expect_silent(arg_is_nonneg_int(c(i, j))) - expect_error(arg_is_nonneg_int(i, k)) + expect_snapshot(error = TRUE, arg_is_nonneg_int(i, k)) expect_silent(arg_is_nonneg_int(i, j, n, allow_null = TRUE)) - expect_error(arg_is_nonneg_int(i, j, n)) - expect_error(arg_is_nonneg_int(i, nn)) + expect_snapshot(error = TRUE, arg_is_nonneg_int(i, j, n)) + expect_snapshot(error = TRUE, arg_is_nonneg_int(i, nn)) expect_silent(arg_is_nonneg_int(a = 0:10)) }) test_that("date", { expect_silent(arg_is_date(d, dd)) expect_silent(arg_is_date(c(d, dd))) - expect_error(arg_is_date(d, dd, n)) - expect_error(arg_is_date(d, dd, nn)) + expect_snapshot(error = TRUE, arg_is_date(d, dd, n)) + expect_snapshot(error = TRUE, arg_is_date(d, dd, nn)) expect_silent(arg_is_date(d, dd, n, allow_null = TRUE)) # Upstream issue, see: https://github.com/mllg/checkmate/issues/256 # expect_silent(arg_is_date(d, dd, nn, allow_na = TRUE)) - expect_error(arg_is_date(a)) - expect_error(arg_is_date(v)) - expect_error(arg_is_date(ll)) + expect_snapshot(error = TRUE, arg_is_date(a)) + expect_snapshot(error = TRUE, arg_is_date(v)) + expect_snapshot(error = TRUE, arg_is_date(ll)) }) test_that("probabilities", { expect_silent(arg_is_probabilities(i, x)) - expect_error(arg_is_probabilities(a)) - expect_error(arg_is_probabilities(d)) + expect_snapshot(error = TRUE, arg_is_probabilities(a)) + expect_snapshot(error = TRUE, arg_is_probabilities(d)) expect_silent(arg_is_probabilities(c(.4, .7))) - expect_error(arg_is_probabilities(i, 1.1)) + expect_snapshot(error = TRUE, arg_is_probabilities(i, 1.1)) expect_silent(arg_is_probabilities(c(.4, .8), n, allow_null = TRUE)) - expect_error(arg_is_probabilities(c(.4, .8), n)) - expect_error(arg_is_probabilities(c(.4, .8), nn)) + expect_snapshot(error = TRUE, arg_is_probabilities(c(.4, .8), n)) + expect_snapshot(error = TRUE, arg_is_probabilities(c(.4, .8), nn)) }) test_that("chr", { expect_silent(arg_is_chr(a, b)) expect_silent(arg_is_chr(c(a, b))) - expect_error(arg_is_chr(a, b, n)) - expect_error(arg_is_chr(a, b, nn)) + expect_snapshot(error = TRUE, arg_is_chr(a, b, n)) + expect_snapshot(error = TRUE, arg_is_chr(a, b, nn)) expect_silent(arg_is_chr(a, b, n, allow_null = TRUE)) expect_silent(arg_is_chr(a, b, nn, allow_na = TRUE)) - expect_error(arg_is_chr(d)) - expect_error(arg_is_chr(v)) - expect_error(arg_is_chr(ll)) - expect_error(arg_is_chr(z = character(0))) + expect_snapshot(error = TRUE, arg_is_chr(d)) + expect_snapshot(error = TRUE, arg_is_chr(v)) + expect_snapshot(error = TRUE, arg_is_chr(ll)) + expect_snapshot(error = TRUE, arg_is_chr(z = character(0))) expect_silent(arg_is_chr(z = character(0), allow_empty = TRUE)) }) test_that("function", { expect_silent(arg_is_function(f, g, parsnip::linear_reg)) - expect_error(arg_is_function(c(a, b))) - expect_error(arg_is_function(c(f, g))) - expect_error(arg_is_function(f = NULL)) + expect_snapshot(error = TRUE, arg_is_function(c(a, b))) + expect_snapshot(error = TRUE, arg_is_function(c(f, g))) + expect_snapshot(error = TRUE, arg_is_function(f = NULL)) expect_silent(arg_is_function(g, f = NULL, allow_null = TRUE)) }) test_that("coerce scalar to date", { - expect_error(arg_to_date("12345")) + expect_snapshot(error = TRUE, arg_to_date("12345")) expect_s3_class(arg_to_date(12345), "Date") expect_s3_class(arg_to_date("2020-01-01"), "Date") - expect_error(arg_to_date(c("12345", "12345"))) + expect_snapshot(error = TRUE, arg_to_date(c("12345", "12345"))) }) From 0d1064a1399f89564d779c41f1a49bb9b6ea2007 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 19 Sep 2024 11:46:55 -0700 Subject: [PATCH 364/382] adjust imports and document --- NAMESPACE | 17 +++++++---------- R/epipredict-package.R | 7 +++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 1a1d3af18..ea516dbde 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -214,18 +214,15 @@ import(distributional) import(epiprocess) import(parsnip) import(recipes) -importFrom(checkmate,assert) -importFrom(checkmate,assert_character) importFrom(checkmate,assert_class) -importFrom(checkmate,assert_date) -importFrom(checkmate,assert_function) -importFrom(checkmate,assert_int) -importFrom(checkmate,assert_integer) -importFrom(checkmate,assert_integerish) -importFrom(checkmate,assert_logical) -importFrom(checkmate,assert_number) importFrom(checkmate,assert_numeric) -importFrom(checkmate,assert_scalar) +importFrom(checkmate,test_character) +importFrom(checkmate,test_date) +importFrom(checkmate,test_function) +importFrom(checkmate,test_integerish) +importFrom(checkmate,test_logical) +importFrom(checkmate,test_numeric) +importFrom(checkmate,test_scalar) importFrom(cli,cli_abort) importFrom(cli,cli_warn) importFrom(dplyr,across) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 0aaf5f0c1..d473f6d9d 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,9 +1,8 @@ ## usethis namespace: start #' @import epiprocess parsnip -#' @importFrom checkmate assert assert_character assert_int assert_scalar -#' @importFrom checkmate assert_integerish assert_date assert_function -#' @importFrom checkmate assert_class assert_logical assert_numeric assert_number -#' @importFrom checkmate assert_integer +#' @importFrom checkmate assert_class assert_numeric +#' @importFrom checkmate test_scalar test_logical test_numeric test_integerish +#' @importFrom checkmate test_date test_character test_function #' @importFrom cli cli_abort cli_warn #' @importFrom dplyr relocate summarise summarize everything #' @importFrom dplyr filter mutate select left_join rename ungroup full_join From 96d5b9fabf352e5fa411acaabe735e05232d6dec Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 19 Sep 2024 12:11:34 -0700 Subject: [PATCH 365/382] create snapshot tests --- tests/testthat/_snaps/arg_is_.md | 376 +++++++++++++++++++++++++++++++ tests/testthat/test-arg_is_.R | 10 +- 2 files changed, 382 insertions(+), 4 deletions(-) create mode 100644 tests/testthat/_snaps/arg_is_.md diff --git a/tests/testthat/_snaps/arg_is_.md b/tests/testthat/_snaps/arg_is_.md new file mode 100644 index 000000000..f75073767 --- /dev/null +++ b/tests/testthat/_snaps/arg_is_.md @@ -0,0 +1,376 @@ +# logical + + Code + arg_is_lgl(l, ll, n) + Condition + Error: + ! `n` must be of type . + +--- + + Code + arg_is_lgl(x) + Condition + Error: + ! `x` must be of type . + +--- + + Code + arg_is_lgl(l, ll, nn) + Condition + Error: + ! `nn` must be of type . + +# scalar + + Code + arg_is_scalar(x, y, n) + Condition + Error: + ! `n` must be a scalar. + +--- + + Code + arg_is_scalar(x, y, nn) + Condition + Error: + ! `nn` must be a scalar. + +--- + + Code + arg_is_scalar(v, nn) + Condition + Error: + ! `v` must be a scalar. + +--- + + Code + arg_is_scalar(v, nn, allow_na = TRUE) + Condition + Error: + ! `v` must be a scalar. + +--- + + Code + arg_is_scalar(v, n, allow_null = TRUE) + Condition + Error: + ! `v` must be a scalar. + +--- + + Code + arg_is_scalar(nnn, allow_na = TRUE) + Condition + Error: + ! `nnn` must be a scalar. + +# numeric + + Code + arg_is_numeric(a) + Condition + Error: + ! `a` must be of type . + +--- + + Code + arg_is_numeric(i, j, n) + Condition + Error: + ! `n` must be of type . + +--- + + Code + arg_is_numeric(i, nn) + Condition + Error: + ! `nn` must be of type . + +# positive + + Code + arg_is_pos(a) + Condition + Error: + ! `a` must be a strictly positive number. + +--- + + Code + arg_is_pos(i, k) + Condition + Error: + ! `k` must be strictly positive numbers. + +--- + + Code + arg_is_pos(i, j, n) + Condition + Error: + ! `n` must be strictly positive numbers. + +--- + + Code + arg_is_pos(i, nn) + Condition + Error: + ! `nn` must be a strictly positive number. + +--- + + Code + arg_is_pos(a = 0:10) + Condition + Error: + ! `0:10` must be strictly positive numbers. + +# nonneg + + Code + arg_is_nonneg(a) + Condition + Error: + ! `a` must be a non-negative number. + +--- + + Code + arg_is_nonneg(i, k) + Condition + Error: + ! `k` must be non-negative numbers. + +--- + + Code + arg_is_nonneg(i, j, n) + Condition + Error: + ! `n` must be non-negative numbers. + +--- + + Code + arg_is_nonneg(i, nn) + Condition + Error: + ! `nn` must be a non-negative number. + +# nonneg-int + + Code + arg_is_nonneg_int(a) + Condition + Error: + ! `a` must be a non-negative integer. + +--- + + Code + arg_is_nonneg_int(d) + Condition + Error: + ! `d` must be a non-negative integer. + +--- + + Code + arg_is_nonneg_int(i, k) + Condition + Error: + ! `k` must be non-negative integers. + +--- + + Code + arg_is_nonneg_int(i, j, n) + Condition + Error: + ! `n` must be non-negative integers. + +--- + + Code + arg_is_nonneg_int(i, nn) + Condition + Error: + ! `nn` must be a non-negative integer. + +# date + + Code + arg_is_date(d, dd, n) + Condition + Error: + ! `n` must be dates. + +--- + + Code + arg_is_date(d, dd, nn) + Condition + Error: + ! `nn` must be a date. + +--- + + Code + arg_is_date(a) + Condition + Error: + ! `a` must be a date. + +--- + + Code + arg_is_date(v) + Condition + Error: + ! `v` must be dates. + +--- + + Code + arg_is_date(ll) + Condition + Error: + ! `ll` must be dates. + +# probabilities + + Code + arg_is_probabilities(a) + Condition + Error: + ! `a` must lie in [0, 1]. + +--- + + Code + arg_is_probabilities(d) + Condition + Error: + ! `d` must lie in [0, 1]. + +--- + + Code + arg_is_probabilities(i, 1.1) + Condition + Error: + ! `1.1` must lie in [0, 1]. + +--- + + Code + arg_is_probabilities(c(0.4, 0.8), n) + Condition + Error: + ! `n` must lie in [0, 1]. + +--- + + Code + arg_is_probabilities(c(0.4, 0.8), nn) + Condition + Error: + ! `nn` must lie in [0, 1]. + +# chr + + Code + arg_is_chr(a, b, n) + Condition + Error: + ! `n` must be of type . + +--- + + Code + arg_is_chr(a, b, nn) + Condition + Error: + ! `nn` must be of type . + +--- + + Code + arg_is_chr(d) + Condition + Error: + ! `d` must be of type . + +--- + + Code + arg_is_chr(v) + Condition + Error: + ! `v` must be of type . + +--- + + Code + arg_is_chr(ll) + Condition + Error: + ! `ll` must be of type . + +--- + + Code + arg_is_chr(z) + Condition + Error: + ! `z` must be of type . + +# function + + Code + arg_is_function(c(a, b)) + Condition + Error: + ! `c(a, b)` must be of type . + +--- + + Code + arg_is_function(c(f, g)) + Condition + Error: + ! `c(f, g)` must be of type . + +--- + + Code + arg_is_function(f) + Condition + Error: + ! `f` must be of type . + +# coerce scalar to date + + Code + arg_to_date("12345") + Condition + Error in `arg_to_date()`: + ! `x` must be a date. + +--- + + Code + arg_to_date(c("12345", "12345")) + Condition + Error in `arg_to_date()`: + ! `x` must be a scalar. + diff --git a/tests/testthat/test-arg_is_.R b/tests/testthat/test-arg_is_.R index c30fc2a78..84d4ef4cb 100644 --- a/tests/testthat/test-arg_is_.R +++ b/tests/testthat/test-arg_is_.R @@ -125,16 +125,18 @@ test_that("chr", { expect_snapshot(error = TRUE, arg_is_chr(d)) expect_snapshot(error = TRUE, arg_is_chr(v)) expect_snapshot(error = TRUE, arg_is_chr(ll)) - expect_snapshot(error = TRUE, arg_is_chr(z = character(0))) - expect_silent(arg_is_chr(z = character(0), allow_empty = TRUE)) + z <- character(0) + expect_snapshot(error = TRUE, arg_is_chr(z)) + expect_silent(arg_is_chr(z, allow_empty = TRUE)) }) test_that("function", { expect_silent(arg_is_function(f, g, parsnip::linear_reg)) expect_snapshot(error = TRUE, arg_is_function(c(a, b))) expect_snapshot(error = TRUE, arg_is_function(c(f, g))) - expect_snapshot(error = TRUE, arg_is_function(f = NULL)) - expect_silent(arg_is_function(g, f = NULL, allow_null = TRUE)) + f <- NULL + expect_snapshot(error = TRUE, arg_is_function(f)) + expect_silent(arg_is_function(g, f, allow_null = TRUE)) }) test_that("coerce scalar to date", { From 1822985937b61115a8f95cba6c453e74bdc9f0c2 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Thu, 19 Sep 2024 12:16:56 -0700 Subject: [PATCH 366/382] news, bump version, run styler --- DESCRIPTION | 2 +- NEWS.md | 1 + R/utils-arg.R | 36 ++++++++++++++++++++++++------------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index bccba8ece..1f0c22611 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.20 +Version: 0.0.21 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), diff --git a/NEWS.md b/NEWS.md index 15aa6de29..e64638bc4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -57,3 +57,4 @@ Pre-1.0.0 numbering scheme: 0.x will indicate releases, while 0.0.x will indicat - Add `step_epi_slide` to produce generic sliding computations over an `epi_df` - Add quantile random forests (via `{grf}`) as a parsnip engine - Replace `epi_keys()` with `epiprocess::key_colnames()`, #352 +- More descriptive error messages from `arg_is_*()`, #287 diff --git a/R/utils-arg.R b/R/utils-arg.R index 174d016d8..081d153fb 100644 --- a/R/utils-arg.R +++ b/R/utils-arg.R @@ -23,8 +23,10 @@ arg_is_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, arg_is_lgl <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - ok <- test_logical(value, null.ok = allow_null, any.missing = allow_na, - min.len = as.integer(!allow_empty)) + ok <- test_logical(value, + null.ok = allow_null, any.missing = allow_na, + min.len = as.integer(!allow_empty) + ) if (!ok) { cli_abort("{.arg {name}} must be of type {.cls logical}.", call = call) } @@ -34,8 +36,10 @@ arg_is_lgl <- function(..., allow_null = FALSE, allow_na = FALSE, arg_is_lgl_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - ok <- test_logical(value, null.ok = allow_null, any.missing = allow_na, - min.len = 1, max.len = 1) + ok <- test_logical(value, + null.ok = allow_null, any.missing = allow_na, + min.len = 1, max.len = 1 + ) if (!ok) { cli_abort( "{.arg {name}} must be a scalar of type {.cls logical}.", @@ -57,7 +61,8 @@ arg_is_numeric <- function(..., allow_null = FALSE, call = caller_env()) { arg_is_pos <- function(..., allow_null = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { ok <- test_numeric( - value, lower = .Machine$double.eps, + value, + lower = .Machine$double.eps, null.ok = allow_null, any.missing = FALSE ) if (!ok) { @@ -138,8 +143,10 @@ arg_is_date <- function(..., allow_null = FALSE, call = caller_env()) { arg_is_probabilities <- function(..., allow_null = FALSE, allow_na = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - ok <- test_numeric(value, lower = 0, upper = 1, null.ok = allow_null, - any.missing = allow_na) + ok <- test_numeric(value, + lower = 0, upper = 1, null.ok = allow_null, + any.missing = allow_na + ) if (!ok) { cli_abort("{.arg {name}} must lie in [0, 1].", call = call) } @@ -149,8 +156,10 @@ arg_is_probabilities <- function(..., allow_null = FALSE, allow_na = FALSE, arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - ok <- test_character(value, null.ok = allow_null, any.missing = allow_na, - min.len = as.integer(!allow_empty)) + ok <- test_character(value, + null.ok = allow_null, any.missing = allow_na, + min.len = as.integer(!allow_empty) + ) if (!ok) { cli_abort("{.arg {name}} must be of type {.cls character}.", call = call) } @@ -160,12 +169,15 @@ arg_is_chr <- function(..., allow_null = FALSE, allow_na = FALSE, allow_empty = arg_is_chr_scalar <- function(..., allow_null = FALSE, allow_na = FALSE, call = caller_env()) { handle_arg_list(..., .tests = function(name, value) { - ok <- test_character(value, null.ok = allow_null, any.missing = allow_na, - len = 1L) + ok <- test_character(value, + null.ok = allow_null, any.missing = allow_na, + len = 1L + ) if (!ok) { cli_abort( "{.arg {name}} must be a scalar of type {.cls character}.", - call = call) + call = call + ) } }) } From f7fec68c00432fa96f3d7691a1b7e55db6a02ff5 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 25 Sep 2024 11:57:48 -0500 Subject: [PATCH 367/382] make internal versioning accurate --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 6d1217587..a7df5ba5a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,8 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.7.5), + epiprocess (>= 0.8.0), + epiprocess (< 0.9.0), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: From acaca4fd6b72a0a26c91ec1cccf9a31eefc4f3e9 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Fri, 27 Sep 2024 09:33:12 -0700 Subject: [PATCH 368/382] add missing topic --- _pkgdown.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index c6df4c82d..468da62ac 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -76,6 +76,7 @@ reference: contents: - quantile_reg - smooth_quantile_reg + - grf_quantiles - title: Custom panel data forecasting workflows contents: - epi_recipe From 0e7d90f072a6770c209f53d9bcf5ee5b2aef4720 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 25 Sep 2024 19:01:42 -0700 Subject: [PATCH 369/382] fix: update for compatibility with epiprocess==0.9.0 Co-authored-by: Daniel McDonald --- .Rbuildignore | 3 +- DESCRIPTION | 5 +- R/autoplot.R | 2 +- R/cdc_baseline_forecaster.R | 6 +- R/epi_recipe.R | 12 +- R/epi_workflow.R | 3 +- R/flusight_hub_formatter.R | 4 +- R/key_colnames.R | 15 ++- R/step_epi_slide.R | 121 +++++++++--------- R/utils-misc.R | 16 +-- data-raw/grad_employ_subset.R | 2 +- data/grad_employ_subset.rda | Bin 8491 -> 9546 bytes man/autoplot-epipred.Rd | 2 + man/cdc_baseline_forecaster.Rd | 6 +- man/epi_slide_wrapper.Rd | 4 +- man/flusight_hub_formatter.Rd | 4 +- man/step_epi_slide.Rd | 26 ++-- tests/testthat/test-epi_recipe.R | 2 +- tests/testthat/test-key_colnames.R | 14 +- tests/testthat/test-layer_add_forecast_date.R | 2 + tests/testthat/test-layer_add_target_date.R | 2 + tests/testthat/test-pad_to_end.R | 2 +- tests/testthat/test-step_epi_slide.R | 50 ++++---- tests/testthat/test-step_training_window.R | 2 +- vignettes/articles/sliding.Rmd | 55 ++++---- vignettes/arx-classifier.Rmd | 20 ++- vignettes/epipredict.Rmd | 9 +- 27 files changed, 198 insertions(+), 191 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index f1a8c3636..510725267 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -19,4 +19,5 @@ ^DEVELOPMENT\.md$ ^doc$ ^Meta$ -^.lintr$ \ No newline at end of file +^.lintr$ +^.venv$ \ No newline at end of file diff --git a/DESCRIPTION b/DESCRIPTION index a7df5ba5a..37134c160 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.20 +Version: 0.0.21 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), @@ -23,8 +23,7 @@ URL: https://github.com/cmu-delphi/epipredict/, https://cmu-delphi.github.io/epipredict BugReports: https://github.com/cmu-delphi/epipredict/issues/ Depends: - epiprocess (>= 0.8.0), - epiprocess (< 0.9.0), + epiprocess (>= 0.9.0), parsnip (>= 1.0.0), R (>= 3.5.0) Imports: diff --git a/R/autoplot.R b/R/autoplot.R index d35850fd6..648c74e33 100644 --- a/R/autoplot.R +++ b/R/autoplot.R @@ -131,7 +131,7 @@ autoplot.epi_workflow <- function( if (length(extra_keys) == 0L) extra_keys <- NULL edf <- as_epi_df(edf, as_of = object$fit$meta$as_of, - additional_metadata = list(other_keys = extra_keys) + other_keys = extra_keys %||% character() ) if (is.null(predictions)) { return(autoplot( diff --git a/R/cdc_baseline_forecaster.R b/R/cdc_baseline_forecaster.R index 74af5e443..b2e7434e2 100644 --- a/R/cdc_baseline_forecaster.R +++ b/R/cdc_baseline_forecaster.R @@ -29,11 +29,11 @@ #' mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) %>% #' select(-pop, -death_rate) %>% #' group_by(geo_value) %>% -#' epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") %>% +#' epi_slide(~ sum(.$deaths), .window_size = 7, .new_col_name = "deaths_7dsum") %>% #' ungroup() %>% #' filter(weekdays(time_value) == "Saturday") #' -#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths_7dsum") #' preds <- pivot_quantiles_wider(cdc$predictions, .pred_distn) #' #' if (require(ggplot2)) { @@ -47,7 +47,7 @@ #' geom_line(aes(y = .pred), color = "orange") + #' geom_line( #' data = weekly_deaths %>% filter(geo_value %in% four_states), -#' aes(x = time_value, y = deaths) +#' aes(x = time_value, y = deaths_7dsum) #' ) + #' scale_x_date(limits = c(forecast_date - 90, forecast_date + 30)) + #' labs(x = "Date", y = "Weekly deaths") + diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 88ba605cd..0ff9efee8 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -95,7 +95,7 @@ epi_recipe.epi_df <- keys <- key_colnames(x) # we know x is an epi_df var_info <- tibble(variable = vars) - key_roles <- c("geo_value", "time_value", rep("key", length(keys) - 2)) + key_roles <- c("geo_value", rep("key", length(keys) - 2), "time_value") ## Check and add roles when available if (!is.null(roles)) { @@ -499,8 +499,11 @@ prep.epi_recipe <- function( if (!is_epi_df(training)) { # tidymodels killed our class # for now, we only allow step_epi_* to alter the metadata - training <- dplyr::dplyr_reconstruct( - as_epi_df(training), before_template + metadata <- attr(before_template, "metadata") + training <- as_epi_df( + training, + as_of = metadata$as_of, + other_keys = metadata$other_keys %||% character() ) } training <- dplyr::relocate(training, all_of(key_colnames(training))) @@ -579,8 +582,7 @@ bake.epi_recipe <- function(object, new_data, ..., composition = "epi_df") { new_data <- as_epi_df( new_data, as_of = meta$as_of, - # avoid NULL if meta is from saved older epi_df: - additional_metadata = meta$additional_metadata %||% list() + other_keys = meta$other_keys %||% character() ) } new_data diff --git a/R/epi_workflow.R b/R/epi_workflow.R index b059a81d0..f448f4aff 100644 --- a/R/epi_workflow.R +++ b/R/epi_workflow.R @@ -98,7 +98,8 @@ is_epi_workflow <- function(x) { fit.epi_workflow <- function(object, data, ..., control = workflows::control_workflow()) { object$fit$meta <- list( max_time_value = max(data$time_value), - as_of = attributes(data)$metadata$as_of + as_of = attr(data, "metadata")$as_of, + other_keys = attr(data, "metadata")$other_keys ) object$original_data <- data diff --git a/R/flusight_hub_formatter.R b/R/flusight_hub_formatter.R index c91f738ae..3e0eb1aaa 100644 --- a/R/flusight_hub_formatter.R +++ b/R/flusight_hub_formatter.R @@ -67,11 +67,11 @@ abbr_to_location <- function(abbr) { #' mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) %>% #' select(-pop, -death_rate) %>% #' group_by(geo_value) %>% -#' epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") %>% +#' epi_slide(~ sum(.$deaths), .window_size = 7, .new_col_name = "deaths_7dsum") %>% #' ungroup() %>% #' filter(weekdays(time_value) == "Saturday") #' -#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +#' cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths_7dsum") #' flusight_hub_formatter(cdc) #' flusight_hub_formatter(cdc, target = "wk inc covid deaths") #' flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) diff --git a/R/key_colnames.R b/R/key_colnames.R index c69d1a628..b9ebde5dc 100644 --- a/R/key_colnames.R +++ b/R/key_colnames.R @@ -1,19 +1,20 @@ #' @export key_colnames.recipe <- function(x, ...) { - possible_keys <- c("geo_value", "time_value", "key") - keys <- x$var_info$variable[x$var_info$role %in% possible_keys] - keys[order(match(keys, possible_keys))] %||% character(0L) + geo_key <- x$var_info$variable[x$var_info$role %in% "geo_value"] + time_key <- x$var_info$variable[x$var_info$role %in% "time_value"] + keys <- x$var_info$variable[x$var_info$role %in% "key"] + c(geo_key, keys, time_key) %||% character(0L) } #' @export key_colnames.epi_workflow <- function(x, ...) { # safer to look at the mold than the preprocessor mold <- hardhat::extract_mold(x) - possible_keys <- c("geo_value", "time_value", "key") molded_names <- names(mold$extras$roles) - keys <- map(mold$extras$roles[molded_names %in% possible_keys], names) - keys <- unname(unlist(keys)) - keys[order(match(keys, possible_keys))] %||% character(0L) + geo_key <- names(mold$extras$roles[molded_names %in% "geo_value"]$geo_value) + time_key <- names(mold$extras$roles[molded_names %in% "time_value"]$time_value) + keys <- names(mold$extras$roles[molded_names %in% "key"]$key) + c(geo_key, keys, time_key) %||% character(0L) } kill_time_value <- function(v) { diff --git a/R/step_epi_slide.R b/R/step_epi_slide.R index 9714971fa..c7d3f9fbd 100644 --- a/R/step_epi_slide.R +++ b/R/step_epi_slide.R @@ -19,13 +19,18 @@ #' argument must be named `.x`. A common, though very difficult to debug #' error is using something like `function(x) mean`. This will not work #' because it returns the function mean, rather than `mean(x)` -#' @param before,after the size of the sliding window on the left and the right -#' of the center. Usually non-negative integers for data indexed by date, but -#' more restrictive in other cases (see [epiprocess::epi_slide()] for details). -#' @param f_name a character string of at most 20 characters that describes -#' the function. This will be combined with `prefix` and the columns in `...` -#' to name the result using `{prefix}{f_name}_{column}`. By default it will be determined -#' automatically using `clean_f_name()`. +#' @param .window_size the size of the sliding window, required. Usually a +#' non-negative integer will suffice (e.g. for data indexed by date, but more +#' restrictive in other time_type cases (see [epiprocess::epi_slide()] for +#' details). For example, set to 7 for a 7-day window. +#' @param .align a character string indicating how the window should be aligned. +#' By default, this is "right", meaning the slide_window will be anchored with +#' its right end point on the reference date. (see [epiprocess::epi_slide()] +#' for details). +#' @param f_name a character string of at most 20 characters that describes the +#' function. This will be combined with `prefix` and the columns in `...` to +#' name the result using `{prefix}{f_name}_{column}`. By default it will be +#' determined automatically using `clean_f_name()`. #' #' @template step-return #' @@ -37,53 +42,55 @@ #' rec <- epi_recipe(jhu) %>% #' step_epi_slide(case_rate, death_rate, #' .f = \(x) mean(x, na.rm = TRUE), -#' before = 6L +#' .window_size = 7L #' ) #' bake(prep(rec, jhu), new_data = NULL) -step_epi_slide <- - function(recipe, - ..., - .f, - before = 0L, - after = 0L, - role = "predictor", - prefix = "epi_slide_", - f_name = clean_f_name(.f), - skip = FALSE, - id = rand_id("epi_slide")) { - if (!is_epi_recipe(recipe)) { - cli_abort("This recipe step can only operate on an {.cls epi_recipe}.") - } - .f <- validate_slide_fun(.f) - epiprocess:::validate_slide_window_arg(before, attributes(recipe$template)$metadata$time_type) - epiprocess:::validate_slide_window_arg(after, attributes(recipe$template)$metadata$time_type) - arg_is_chr_scalar(role, prefix, id) - arg_is_lgl_scalar(skip) +step_epi_slide <- function(recipe, + ..., + .f, + .window_size = NULL, + .align = c("right", "center", "left"), + role = "predictor", + prefix = "epi_slide_", + f_name = clean_f_name(.f), + skip = FALSE, + id = rand_id("epi_slide")) { + if (!is_epi_recipe(recipe)) { + cli_abort("This recipe step can only operate on an {.cls epi_recipe}.") + } + .f <- validate_slide_fun(.f) + if (is.null(.window_size)) { + cli_abort("step_epi_slide: `.window_size` must be specified.") + } + epiprocess:::validate_slide_window_arg(.window_size, attributes(recipe$template)$metadata$time_type) + .align <- rlang::arg_match(.align) + arg_is_chr_scalar(role, prefix, id) + arg_is_lgl_scalar(skip) - recipes::add_step( - recipe, - step_epi_slide_new( - terms = enquos(...), - before = before, - after = after, - .f = .f, - f_name = f_name, - role = role, - trained = FALSE, - prefix = prefix, - keys = key_colnames(recipe), - columns = NULL, - skip = skip, - id = id - ) + recipes::add_step( + recipe, + step_epi_slide_new( + terms = enquos(...), + .window_size = .window_size, + .align = .align, + .f = .f, + f_name = f_name, + role = role, + trained = FALSE, + prefix = prefix, + keys = key_colnames(recipe), + columns = NULL, + skip = skip, + id = id ) - } + ) +} step_epi_slide_new <- function(terms, - before, - after, + .window_size, + .align, .f, f_name, role, @@ -96,8 +103,8 @@ step_epi_slide_new <- recipes::step( subclass = "epi_slide", terms = terms, - before = before, - after = after, + .window_size = .window_size, + .align = .align, .f = .f, f_name = f_name, role = role, @@ -119,8 +126,8 @@ prep.step_epi_slide <- function(x, training, info = NULL, ...) { step_epi_slide_new( terms = x$terms, - before = x$before, - after = x$after, + .window_size = x$.window_size, + .align = x$.align, .f = x$.f, f_name = x$f_name, role = x$role, @@ -165,8 +172,8 @@ bake.step_epi_slide <- function(object, new_data, ...) { # } epi_slide_wrapper( new_data, - object$before, - object$after, + object$.window_size, + object$.align, object$columns, c(object$.f), object$f_name, @@ -190,7 +197,7 @@ bake.step_epi_slide <- function(object, new_data, ...) { #' @importFrom dplyr bind_cols group_by ungroup #' @importFrom epiprocess epi_slide #' @keywords internal -epi_slide_wrapper <- function(new_data, before, after, columns, fns, fn_names, group_keys, name_prefix) { +epi_slide_wrapper <- function(new_data, .window_size, .align, columns, fns, fn_names, group_keys, name_prefix) { cols_fns <- tidyr::crossing(col_name = columns, fn_name = fn_names, fn = fns) # Iterate over the rows of cols_fns. For each row number, we will output a # transformed column. The first result returns all the original columns along @@ -204,10 +211,10 @@ epi_slide_wrapper <- function(new_data, before, after, columns, fns, fn_names, g result <- new_data %>% group_by(across(all_of(group_keys))) %>% epi_slide( - before = before, - after = after, - new_col_name = result_name, - f = function(slice, geo_key, ref_time_value) { + .window_size = .window_size, + .align = .align, + .new_col_name = result_name, + .f = function(slice, geo_key, ref_time_value) { fn(slice[[col_name]]) } ) %>% diff --git a/R/utils-misc.R b/R/utils-misc.R index af064b37c..b4d1c28b7 100644 --- a/R/utils-misc.R +++ b/R/utils-misc.R @@ -33,15 +33,14 @@ check_pname <- function(res, preds, object, newname = NULL) { grab_forged_keys <- function(forged, workflow, new_data) { - keys <- c("geo_value", "time_value", "key") forged_roles <- names(forged$extras$roles) - extras <- dplyr::bind_cols(forged$extras$roles[forged_roles %in% keys]) + extras <- dplyr::bind_cols(forged$extras$roles[forged_roles %in% c("geo_value", "time_value", "key")]) # 1. these are the keys in the test data after prep/bake new_keys <- names(extras) # 2. these are the keys in the training data old_keys <- key_colnames(workflow) # 3. these are the keys in the test data as input - new_df_keys <- key_colnames(new_data, extra_keys = setdiff(new_keys, keys[1:2])) + new_df_keys <- key_colnames(new_data, extra_keys = setdiff(new_keys, c("geo_value", "time_value"))) if (!(setequal(old_keys, new_df_keys) && setequal(new_keys, new_df_keys))) { cli::cli_warn(c( "Not all epi keys that were present in the training data are available", @@ -49,12 +48,11 @@ grab_forged_keys <- function(forged, workflow, new_data) { )) } if (is_epi_df(new_data)) { - extras <- as_epi_df(extras) - attr(extras, "metadata") <- attr(new_data, "metadata") - } else if (all(keys[1:2] %in% new_keys)) { - l <- list() - if (length(new_keys) > 2) l <- list(other_keys = new_keys[-c(1:2)]) - extras <- as_epi_df(extras, additional_metadata = l) + meta <- attr(new_data, "metadata") + extras <- as_epi_df(extras, as_of = meta$as_of, other_keys = meta$other_keys %||% character()) + } else if (all(c("geo_value", "time_value") %in% new_keys)) { + if (length(new_keys) > 2) other_keys <- new_keys[!new_keys %in% c("geo_value", "time_value")] + extras <- as_epi_df(extras, other_keys = other_keys %||% character()) } extras } diff --git a/data-raw/grad_employ_subset.R b/data-raw/grad_employ_subset.R index ae063d22f..38719a02e 100644 --- a/data-raw/grad_employ_subset.R +++ b/data-raw/grad_employ_subset.R @@ -101,6 +101,6 @@ ncol(gemploy) grad_employ_subset <- gemploy %>% as_epi_df( as_of = "2022-07-19", - additional_metadata = list(other_keys = c("age_group", "edu_qual")) + other_keys = c("age_group", "edu_qual") ) usethis::use_data(grad_employ_subset, overwrite = TRUE) diff --git a/data/grad_employ_subset.rda b/data/grad_employ_subset.rda index 3d74741cbd65cfcd114a7a224baa610478ee49e0..9380b43b5072674686e79ae494d9be9af2afc14a 100644 GIT binary patch literal 9546 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 z z85yoWT8f6(HJ6xjFt*z zyxDFMCX@qg6jVt?NwEba8Yv`Agv6OF%w$3e0~Scdu`^_>8Zu}`AW9&O{UyoH5e{Q? zSaV!UyK}nkYo>^d1xjMuiEE@;nIb5{LX1}~ms|m2cU>k(N(hLYx&(nG2#Qji=pcfE zl)@GJ#>G zC`v>lQ$bClWXMT|Bus>iQV{|K0+S^q4Jgr=ymwfH0Fp@&CYS_Nn25zOn*|U87GP-8 zB*baqbW)N938Mxy%4tkvAjZKF-E?gbk`p5m6DW{2GE9iUnGCW}Af$M3iZK!a8JJY? z>IoW(WZ1D9n!Qhj$P}l1W5JM3j_c45LO!Ws#9GCW#c0jDVIT#6^@U0!tvN zV8&otNs=^#l1+dN0Y){56s8E4QjHN1Ln2^NjTDG#HZ*Kf=V}UKLYSmT#8VQ9OBBOF zvV#i-jT$0I(<~%xR8ff1G>n>L<-kZ8F&Zj1G|8sL0i;VMNEDMPCQ}he(J?3p#F{cj zreKL7ATN@=8^AtEuP+nVm~8z#YkN+`)jj8nUEqa}pYX(1yN z5T=PKD2!3DsM2j3PxET3{;#%ww$--w>Os%D6Jm$Yd4aoexSvPP;zSkN1>BEd9kv;= zB=_Bd0&JcC=kPqesAyv_cBW<8IRrrU;k1PA|F-K@B6J=p#>EI_xn~%XIbr#nXEPj$#os1!VpesA^RD`TqMMDBE8}O7KjKyAQpra60l?;BP0=MLMKT<3i-%`Xg`?T zSpXONhy~n!Yv|e-BdPqxC!Qh4!slzh&(RP*qhU8L^Z;3Q3vMWLvjXzmB+vFdV_RA zNigfcv;_;u`*HN$|EK#-uH24+ae(0OP8X@?TJ z0$QSVVhZdKB>?474pjsdtxhT56*#wUfK?O=X~E#oPB&+HP%gIs5G@Don&`wqv<9#c z3rHYWU=R>~A}E$!Q)AsauMz(a+<2|jQ98F&+kj)0K?5(@uxEF{op-y4rpdO{!IOB|=br3BgiRXwbyHKw90~qLCP`Jyf1VFk7H4T!~;O}XQYoM@+ z_W|uL-A8O4MreY&M7rycy>%21l86;pk3QqUaAP zieqJ&zfn^mK!Ub5XoGQR2sAdKwe)XV9b>T$h#JI)7a2hegA!!)M7o?a=65==C4+Df zakXfQ1@u6OgOUh7iQ$)5uI8x+$k^WH1C4B|wH_-NK7k9CFR{8ymBB8hzgyXSt;k-` zG&#W&oEANKp`7*RdoBL+@?Z3okVe1A4i z7f1WsS&sXJy-YX_&+hFE63sf}wFAwm81jL1Z&9(u4pJ99v=b zgca0Jh5|b#M51NrkR$qjpu+OZUv{Ru19dcsuedgy#QJ^LpEx_)d z%c=lyYE40q=zb8koRHD;Vb)9w>kKr5c`&$8Kg+;v1}1j_uZ39I{}gHvR7Fa3QnZ4r zpLJbc3}WFjK&T->)C1ph^|%yJam&0c_bw)I1zowGiu3W#E4V1u__PDke$KFQj&L8t1_0KBjp_lT1WkURsOB#fyW?j(Cn5yeb z`XMrjl2oKZ%6+$yOZZ2JHKEF|rzIgHe77{Pq=^vElJc=D@CyP?AvJAESyPlQ#W>8d z@{AyLM6OXzoAf_)kvrIF7-vtiMrEf@0|L2_n4C+5PLxN6<62ppEe`Y@WpgVCwUAL+ z5Vk)@0c#9r(wbAoU#Psh$FCevDctKAok}(n*}+FEG)3US*cNWUhr*{_ePPcK`k25w z3+iKI8)b)?zPy&osY#Vm=Q=TZtO?6^JzR!~MaBojaMgu7O0d|@?_a>Hq02-!_IamX z^KhQhTy>>c>mvf^2s~v`mb9TNwL+djEat*Sz9~*rcDsa+@k3G=7r=i{T(-3>W;Hlk zy&P~7wLh67pKCK!0H(gTBZc97iDU;inmiqS9I6=2G&oJO!j3PcJ;8M<3dbpxqk58r z3qNtc@!2$S3#E0UC72TF;Wi1?1Hn$+&@9>qC0;xl(|=E8ER4r07~Ppf_~WQBR z)pnk0^wJiYozRKzs7$>6K;aW}B zyH=^qoD3rPS7PyBJX%5Rj9y@JY{u5)dDT8{t|pfgYQ6(eS@XONJi36kP23aVQffz@ zJnTf+leB_imZBP3|BE(+N%Z5;wl$XjS5PgP6@+w3C4Hwp{|0+Kz5zsZ+%W=8aLZ*F zp+xbysBruporTjCGqRaI>8~*4BTH%AL_?^wIJ@;;MZ6wr$S5w95GXK!%cdaAC&DQM zlyx=UGc=`cCEE!W4KB|BhNSPfHfR%p3E18v0VG2Z*ED_%V|T4$Yl|Rx*>`p!5=K@Q zVPMM~W<^XMUOiM?$s(C#fO6-=d$4oR`zEA?3zs!TgrurR?>_*b#UOUBD&mxnNAF=I zJv~2ke!T~`K1BxXnU)6T09rBX%#5B^MJjwZsNWxMrK-->+DRxaewT8&G^iHL9mA6- zZI}j~V)tth>}SI{v=eiZ7uRwZ!qDzgCg*V(K--Yqr%xc;jfYZh7J;`T-S)roQl51R z{mg}*u{>XQ+keHDt!5kfC5k$|_8}=#b$H1Llp=lzE9jV;>wD5C0;8U@Ni+h6d!A_w zWpjf?&ug4O(KFymWKT#ON)px_nr7icc%DwLdPtQXsxD$TwNogxm$^ttKr)i1m|$=f z)4>8t22f0{07jWa>YNlZqq?U$wm5*O2j3!}&n{QB@*LRj2h=aU%X29+q#X6>T&aEq zCLsRZ8jQ<6H_QVxgW-Q*2nc>gz$gX`Bp?tnU=$7Eq-okgn==%bS+nR%xlq1^@c_Tu z&9<{VmI7$f1YjH}nz*F{6f*TfCK0Z#T`-I~9v4LD)TVEsXJ`5MOyq|UGs+pv&| zCwIdRA-^+Zyl>6;6xQ}M4g%o}1y9!ayAKc8@xER^SEK3i%Bkx++T`QcQI**nGs_E_ zCWxNq(ed#cq3;8DPCexDa)9&UM)OCAEsfRPjSEhPW~mO%{!{*@{K}95^c2|uC`Dz2 zWS~J;ke>hYJFT(E_J5L6Kp;wqAPtN5N%D^&;+ELFW$hQ{FZ~ymFjQ@kbnND~y7odN zm7+XpzRX2Bw!n`DX#ts)hqm>L#zpe|*wdS(5Q=gATF?ykFiBiAo#t^i>N=C|*K>}T zK@OpOjLq1pfYPc@%Fr|b0)oxV9W)lBw;0GMURGgS7aMZ75Yn8qSf1pgN&bCz99KP< zmh|+LM;B$UWuIg-qVyQ46v>|zCTR41GadesQ^m z5uu?&(6*0dCR}*sN~%YjqPl2thU9#OlS%*+o1UWSzpz0oM2(_Qn=3_{Els*uwM^tW zDvjSE#r%$)#(2)3oAMrbq)9y3NHJo~*;f$I3v-giF_#Z2h(s>kR&`pC$KbB*fWx0y z5L=)vT6+F8({E2NPE2n=;RUJ%hH%-1yP9hz(;q}C?pjhh2YxT9d38-|-Q%p@xc zez8?R#fHXem3?Si^^*%%1cxf0T4c!403(BcC>Tk+&o9W|zn>!{G6N&p5Hbvm^xQe_ z;z=jz=sPU-cVAD^p7u{e<5RWx9V}$PhVu-GTm--wPVK=Vly1xrCCm?0V1Wvq^7dP@ zmE9-M{4WP~7L&i=5cjm9y>dd;_j(yQErvXQy~o|Dap~2 zFrd5Si+=Jl95||!i){eUj8N}1cj-tDc{!R94A_Vq?zVubqW6?R-vkijx-?LFet|Sv zsAPl%Bl^9AQWQ0NEgb+ETLGAr4KAKW-Yualiv{#Z4PZ}zoh5`raMFGkP zfyv4W3z9%i^RU*|gp$P!3`D`A5<-AsVkV1*5tK&>1aw>_5jW6NeD*NKP#@HS@4EUR zJo8AD5MF1ili&E%rHTrB2r3wj{Q*ov1P|ZcX7Cu60GODdZ^JSYh>j)-@65^BN0$x%>gnDu8B@N0rI=J*UCnZn#7VE{bT}G%DVN1#d7!JW@h3inu}oUWHi#gbb_^y=t^8l46DALAWBF?c&i#euMeUOS9%`{C_Gb*$IAGiA8ia-L2 zNCof!1BT!Ld(~ch-h&XJ8C5^pGyu?}g^fU~n21%yTl*BMh z8kscpPevn5nrdo1lM(7;Q)#K>^+ukaM9>;-1vZS6)Wm6%Bg%RZ5RpwMihD^t7)?x? zd8iLm*qKME`lq3$r=b}%Xk^4>XaEfZKxohbqd;Ud(9xgL6RH{;gK^OoN00LkD5t9G_0GI#(01=SHFaRb1000000003n z000DFKq8Vrg)ym#klKwj@TQtHZ6g{8XwxT&JxvV(qX8N;13(5rq3RlFG}A*PO*Cj| z0Lh>RfDJMRO#o;B02*irl!Y`VM9Jvb2#RJhHldI-n3VMWNv4{fQ}mgMPg5h*(?*&b zQ`Buh4X7TF!g(@{sQpvadYdHK3F(y6M#4=D${SIkk?J(`jXbBR>KjwkdY-4L>UxHs z1zwb+7D_(tsKzyOT)QJtXg7CU?&>Nn-E>EHUEQ}`+eXx9bsKJ#1#WH1Hlu7rMRRS; zZ8^r~Hs;-!&gj=FEpvvE*F{e1jm~a&b|*Ty!(7)3yMm5sb;YF7$k#DPE1cY`oW&Jh zVd2=k5o3kQxm>PxZtJAj>2Tb+u1z>QuI|h)2JmX|S9ccne-8(TIlH=ZtX?N|9tGDN zyPcs!mUE=KcXkNox^nLBMUG>;i>23dlIy#+n+T;0bd$8)-Ob4Pb> z@owbs<8nKlySqnl?Cy+rbaR=>*Ctm^?n|!e-LCGgxhF2@ySXLO>!$8HM~p7cO@*i@9~x!=&r8sUy3&+1XvkaYU2~p$R0CB&3o- zB!M5HG#P~^j{yd7q`$6k#IY!P$Z*zM$y6ktnE^4RvvtR-AmuYKZTUo_f4uoPy2v1h zUAcoD!9-!9Ftt-6GNyDoSB3|}kg3hA^F3wMrFC~^#6N7)aU||mkpYOE*9Pu18V$Lo zT(Q{SOf(UNb*1!Oaf>tv)(OEJol#_x;h1dSGe%cz96v1Wi-Lm*M_@GAXSTdoQ%<RAJ(wDYIgTSMU57F~0Etyj$~6D%FBG~_#Doxkgg)F}r})fdvwEoNu9_4aLE zrf{mU7$0`{@E5}^ce>ho+Az;nxgoCkGe(jvT~l#U{v#faV}$6onf39{`LpF0*~8=< z42^C4sm{RGR-x8@3kTkPB^tP#+bx`B)ZDhqHm=VIuyPk#yDhDtCR(_r#U5mjUmOePuatA`AeWpEnOlcRiGSv-sc`)&yld8j6AQfRWB+EJ&xFDB= z)Cq9gl5#V2YLQv7fC|a=y8Y{Z#H#JCen5_w+0OFytp#t2ec@M^8|(ThYx%Y;MhhER zau-II@###w>5e9P#qRK9)u`zbbm4cELAq!gpf>P@|s) zjr1w2#t>$_@4I9`3!H3YSpP^z6;9O%)2KEzO?m5ggV$DRTm!YgDL4bD*$4( zMySsnGn&>#gFghJ)ki@7C)_TQ*mkEp;uhh z-6X3n4)p(6MJ@dY*CKN4iDElmP2w$#9jij}P(FZ^pvP#QeFEobY0-J3ah$&^<*cGo zR;DOhx~U#rbAQ4RJ~{#@PR`THqWRCR&+@MV6&Vc6KU`fgC}p!Cu49O znKGwYM3`-)-vk#Jycu@)3zf{4H-{>sg{x~YYGl(G9tzA2+Krm-J9osuKbBgEQyB;I zehRr-Z6+X{_nie78w%?w1rcB#SWy7eKQ7GMOTofeMWQhPwP|5zFw)LX{&G``3;^Vl1)Z z;`>f_hjL<51oBXw@gURFUkBK3qpd zmFgzi?asl#b)Ag|S3u-dBCD@QGuC@!#+7lWjTEm8zc%Ldj7V6`at5rA7=%M~qTL(I zML8OpW%X90c}Pn!pV6k?smCk_5{L;$u(iz*$>lb-KB9>}2sRg~=-pMaCxJA|RHT!G zF?m8Ppg@?WsT|R)44cNGPm2m*?v#1l3s_*&8f}(8kVjdmu^V?u5V~$^rO6spddxW( zaBxygE3SODvE}khvv2P6T07k!Yd?fG+c9}j?KP;zTSanb4>-$-aNfBox}GZxZAU6< ztg9{*cm?gQ(W#)KAn|b1XlbNM=_^sI`P2o{1Q7dxiFgPg1P53VC8-?ij!G*o85L({ z=8eBqWv7{!7o0BuKi62+=C+8iyiOK>achDk!Z6Sak}|60t%1u{67Dgx%UPv^y0hB1 zuyS1xNFwir=LIE}1Y;QsHJbx_JH#`h(?tpHUa%ptSlJ64B{HgI4wtHo&g9Livb;1B zSf*J`-NCV(*I6;Wp12=F4`gyEHN~Kt=2JEZXJ-u4Tg?V|t-4$@VQ9kl#)kl)q=VoyD?x(EnQ3NV(F)`;ItnK<%jY9```)r5x{xr05e5@b!CG*E z6_^f~Gdq`Tj2@-Hb+B~cx{)FSD_BLUSwf3#;CPLXpI)pRTivhs}@Su#)v zN%E$;rGip2!q!Eq55Xcy8meg2k}KB$)Pf{RphT;HLa0%aBtlXJt60c@6`v+01Xmkl zB!q1RgBdaEJZrcKM!MnBQql4=GhEFC z1<7Wqr$k0_c$<7hbT&;Hn|qes66LQG$?f7BcqNw2G+Qe>TWch^j}M=C+iTqAH>N@IhA$ zKt(%R_?1>bL&d}3aI3Rj&RVR@b{yMku|WeHq)-z~q9=f;r}7}Cqy-A-DY=cDR_q{1NFX*H7|4Ml#sV!QBmpD@4rWF^KF=?6 zRg$fBUaiQI5tC}$%4Qg^9je=*G5(8fjYf!-U(2S(Rw#}>x>Fz&&Wj-ul{5tlAyp)# zmut(gr6iQ`%#luNedc z?qYFuf$zV@N*v2Tlb#KP-|m6Q5flI!*+NJne@=N@*!b2eD0UAXQ4mx-9}~~!RtDQ9 zf-BdMP*FXkQ2DR`E1BNnkKpHqaDVXUg@B-E1Qi2*XF!CQL*;ro{wWJU=aEHn7i)%U z#`qKkE67nx;FwbQGbp&rtqGcVU7x`Ir_lN~DvQ4zsh$U6za6uT3$=9zY#UueY)DAs zBALN8Gv;xqyogu_2JHj@--k@AJzG2pVp(>KfX|7h7ZXPbBCWRnYfGx%kq)!&>Ph2$wa6>Rc`Qm~~eV zgV3$uy6idgp^%QT>GUsCGocOD;4(OmQ0~vL_!^Ew=q+jOPRwXzu|~sRh$y2bID<>3W^D`hPh587{SZnpy2zqB}~LCE40l zc)pW_x>cO1LJPlO(6057spMU0b+xh{;NqU)qwV5*e=J+GB4ya!;rDtw9OJIYqWC?Y zw8(*h^3tdFRrEG({%MXE)VyAuyC$j731P{Q*)|u%f_Sg9Jl^(RepX<%*wSxW6r@?? z+f~w_tC3b-JcDmw+@i;4XB1?aUyoF?_e9pi8|I!y%b&My;m$yf_M-% z6}pb@JxH%jg;fIvkGFV2Lw$b*8fH&)L!?=YU6uGEcYxgWcQpKfSf*0?!%tR z-v_Pdx7);$l$t_iq_SayGYrf^2x2mrB$$d>H5sLnB+$boWLPu?rjSXc5sM~8BQd0a z(gPA%7|BBt0g3>d1|b_LNFz~znS?YNDKT0CD2TCyWMf8yAu@>>Xo#?4q}C}hg9)G+ zqM$Jp%0nec7Bp)jU?E6}h9tpnTXfJw%>-j?ltzjz6__SWhy+O)B8bEwWHo|~8VpoL z3`j;{MI|MA^Qg}5w>c=xQ**BCoZT#J6(JS7x-}a!2}+7fcXiwWib*-SpaOHUP2IX_ zk}!*#r4ls=g52OpkeLF+P*Nt5BNS&hW{j9*rddNIVrG;hP%=$-ZqkVo3Q3ldW+^5i zxpXNI2xzgnxFZsYicKU5Bt~GOY(Nzr9lD5&3>ZlmlO{?rWRWb;WYjQb z8Yoi&z!=byQHV4|n-M9aW>O;{P>^JyNkln#cv|d4VP;5z8Z00NQjrp1Vwn*oiV_S` zXu?oIi~=T1hD?BwiI`1<#$;%ug2q5HCSjDNG-OId!jh4qjTA;SV`3>N!4N>rfee-` zP!TX;69_W|Ofn>r#)Q;N2$KUbWWf=%#I(w3Xv~n%N-45N2q=*;5GA650VOg~kfRZh zsHBP_G=`)ogfk?g6lelFxrA((jRci4NXCX3DKr)$!4)MK(+nFVVx)vDSfZu{NYaoD zhCrhPRLq2wjFOTpVv@;{0!j$X)LTVK2G}rYlLj!FCTtYSB8rU~Brz6)7BW$w3{j#P zj7mmA2%s$nzXq#s!>wz4j@sA6*TnCUZ6Y_8mm!_|seuvAm?#L$xpy)hI-q7K;=U|Z(s3A{3{icZw!ihN5j84_(<&zds=ExOT2+<^h+imcNY1_!-`(;eReBnc)1frrK5b4qE4h;Na|kE`#uyVnSF z|6_1IkcKgqV@euwg>OmPR@Gkev{F=f6tA@_YZkz_9_e=vylYNK%#V#T;Y5Gsiw zBxHgu2t@qVRjbZaOCKD)TtFWrfMeg1Ej#(-fkZK?Dr~@OionJ`dW!8qTSY{LM2~<` zXwC(3)bRlo2#8K=0?S^awDk1t#wZ%)6{td_b~q{+rXq1B)^TNG^`K@Vtj0b`P&Ciy^2a5!NLMTm9=Wfjt0@KBkxDVAq@@G?W20+tV$ zu0Fg0a}c$!y&#lsbYkY>-%il0c1!hX3V}V5rVd3pyz+o)uDy{WVEvE3Q zv2DZ`_WT-MC#fiwnp1WWHg+w za1c_l%NhX{RXC|rdE(EJrNCfA~nj*cvhIi(pHNU zf)G}cqD&PiOz)O;J6D zye(sfNI=M-0?M)NA|b-)Y(PUS2xFwoIN)P|0gi@B8M>B@kRmxO6kMDGMQQ?|ro^k- zn$j{!vR*p!dH3J)n*)q`3==MG4*5V$odFTo?G+Pony8dEZqKULAV-a`Iec@1xeBXv z+NJ(i2#!MV4pLEZl@lH)u4pS265672M#Hk%b?+{*Jiga^bS@hI9|L2s$OCY(+;Rdt zg1Znz`?6y2=M`BdQ7PqFg&7$wsgt~?D}_E-XJJwv6K}utHud^-UFqdh{Hsd3u< z)}1~iY~EO8og~@${jJPDN~VzVZ{xxIwi9R8`<=LbC(uIMk6p&8(#eYx9$J6T&E z-D2WGK2)BeH$cKP#le0KYQNQGmCx-lY%KCAiwQAG9yZf)-_az0yTabfV4iMKaWhlo z3>Iu}*kZ(`0Xb?P*GL&cPA?WXej@vV&z8&{>QYI7u21&&9}Zt>vuscgN)?pNXqG0? zrPe8AZ|o8|u=kXEe|LPnQpw}#4%)u&tjLpMifq+?Mmg&rUWH=j59iZ|=_Ql#Ar~(0 z{=&U%2j~&w6gS$!9Bd`(z8=N$FqY?k0n|I32G5K{4CP&J&!EnbWJv{L@fY zR?%oo^j=%QKJUu%i|R=w2s73P@Hgf10Bd39xa`p=&(J8Fm}X5YfwHl(z^H|&X6us_@QxGKF>DeS&Eg2O zc#3wkD-qfd%%qa1w%=;U)N@*V)n|v#Eh3aY+LZjP<;z+Kmm;Ij-VT#t=1?u1bj?KK>1EB~b1|(IsK3`j zJjx3MMimERgN9X9gHAfE2%3PzjMcSfaV9S#gp8LZYf5@juxez1CeIIJHsg+R#s+ap zVA%m^XxdTXPDdU{D;otzMky!g_m)2%b{4^#6@-LteiyI zt=1i>HkY(Tf}6$ch^b*~7qk@#6>7&JF$!wUR~Jg&$fha<2{Q9eWr;Eoi~rLsBzT%cQHpj?td+fwKy!rfm_ z>CWtwr9L0ueJ@ULM;r`65b+J;Kn|16qAk#eN9=U)Nn56A1``5SVA3W9t4PBVN?<0D zhEdXCx(;O%Z@W#=SI#F*1l!If=G#{2xE8{zX6Tf6O}aM8@i%S4tC8E>l-1l3jXdaX z5+SEGKhvb_z8pJa(yFeql%%dx=aRcMa$MsRp44J9zP6OBIhePMDCe8Q>Pn62Fu=FH z4eUN8eH?ee2Z!c#oAa!&Qs$WwfxgotOKj6F5Q%Ln4jyO zJ=wx@_$7S@1)?3theGoVL5liSq_`RzZ6U!X&E33QXGz*o-LUC7{l_87>-0q}zS6E6^g4N4GDDZmO~zAphkJ6z^_cHcV#rFzma ze3p_$nCcPV`r>kv4^NBLNUZz%ayf#&?55!;ofnBDb4#0EA$QTl=QFs;Mp!c<)Tm09 zZ`xyt#90@P4{GW$G!sL#40*m+TAwbFafECO^1m;>v8&a;ks_T3&77IkZ!5z zVf##GA|%wzB;YHMGEt<{^Q9Nq!lGd;u=B5=oh+v2PFBv@y|I1528yCx5|pusr5edW zG6@^v6D#@;NSziUY23471G_b)Xyi#$1Y}H!F=It_0+SwMTFI@WGCrzF%0-#B-G5`% zySJ6vbQ@lSCeysb@qBMdzR-F%}8CI(fN%q?u9B5N4o`mVkXmUZbM`kPS6?QA@xdCl6TRR(e%D%+y{kwFz$9oWSzz9zjLIo)T8lccp3Bfs{1Qh0qf(m7e z46}{=DPuy8jldU5*tQAUz+yfJEqilia_+9t4{d$wWhG3s8 z{yvP<2%`+9#`BYLGwEona3owrRH*>1U<&}QB!y}~mH`0oP^I_?0KY&7Y*-RhFRuF~ z5Nhj4wMmd`88TM(wWN_N0uXO?qeNWTiRo%BvY|}UBIfE*UNiyUkWlIQM?pj6^*#2e z+7;ljK>CmnIZ;6`1Q&u|C@FM;oc{=Kg-YIF4vTz}f)_$4cG@@U5HH0I7X1_+i$y4a zZbB;VeNzTV3D+90Gb=F>DNE;`BCX`AStu7pfdfC$VoWjxVz<}}iNQfj;{NKaMi_<+axn_U0^ diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 27bfdf5f7..10236eb98 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -121,4 +121,6 @@ arx <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), args_list = arx_args_list(ahead = 14L) ) autoplot(arx, .max_facets = 6) +NULL + } diff --git a/man/cdc_baseline_forecaster.Rd b/man/cdc_baseline_forecaster.Rd index cd3c4ed67..0c7f1e436 100644 --- a/man/cdc_baseline_forecaster.Rd +++ b/man/cdc_baseline_forecaster.Rd @@ -44,11 +44,11 @@ weekly_deaths <- case_death_rate_subset \%>\% mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) \%>\% select(-pop, -death_rate) \%>\% group_by(geo_value) \%>\% - epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") \%>\% + epi_slide(~ sum(.$deaths), .window_size = 7, .new_col_name = "deaths_7dsum") \%>\% ungroup() \%>\% filter(weekdays(time_value) == "Saturday") -cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths_7dsum") preds <- pivot_quantiles_wider(cdc$predictions, .pred_distn) if (require(ggplot2)) { @@ -62,7 +62,7 @@ if (require(ggplot2)) { geom_line(aes(y = .pred), color = "orange") + geom_line( data = weekly_deaths \%>\% filter(geo_value \%in\% four_states), - aes(x = time_value, y = deaths) + aes(x = time_value, y = deaths_7dsum) ) + scale_x_date(limits = c(forecast_date - 90, forecast_date + 30)) + labs(x = "Date", y = "Weekly deaths") + diff --git a/man/epi_slide_wrapper.Rd b/man/epi_slide_wrapper.Rd index 0c05b7650..d67db1c88 100644 --- a/man/epi_slide_wrapper.Rd +++ b/man/epi_slide_wrapper.Rd @@ -6,8 +6,8 @@ \usage{ epi_slide_wrapper( new_data, - before, - after, + .window_size, + .align, columns, fns, fn_names, diff --git a/man/flusight_hub_formatter.Rd b/man/flusight_hub_formatter.Rd index b43bc0ac2..b2be9b4fe 100644 --- a/man/flusight_hub_formatter.Rd +++ b/man/flusight_hub_formatter.Rd @@ -52,11 +52,11 @@ weekly_deaths <- case_death_rate_subset \%>\% mutate(deaths = pmax(death_rate / 1e5 * pop * 7, 0)) \%>\% select(-pop, -death_rate) \%>\% group_by(geo_value) \%>\% - epi_slide(~ sum(.$deaths), before = 6, new_col_name = "deaths") \%>\% + epi_slide(~ sum(.$deaths), .window_size = 7, .new_col_name = "deaths_7dsum") \%>\% ungroup() \%>\% filter(weekdays(time_value) == "Saturday") -cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths") +cdc <- cdc_baseline_forecaster(weekly_deaths, "deaths_7dsum") flusight_hub_formatter(cdc) flusight_hub_formatter(cdc, target = "wk inc covid deaths") flusight_hub_formatter(cdc, target = paste(horizon, "wk inc covid deaths")) diff --git a/man/step_epi_slide.Rd b/man/step_epi_slide.Rd index 46bb386ad..242f8e312 100644 --- a/man/step_epi_slide.Rd +++ b/man/step_epi_slide.Rd @@ -8,8 +8,8 @@ step_epi_slide( recipe, ..., .f, - before = 0L, - after = 0L, + .window_size = NULL, + .align = c("right", "center", "left"), role = "predictor", prefix = "epi_slide_", f_name = clean_f_name(.f), @@ -41,19 +41,25 @@ argument must be named \code{.x}. A common, though very difficult to debug error is using something like \code{function(x) mean}. This will not work because it returns the function mean, rather than \code{mean(x)}} -\item{before, after}{the size of the sliding window on the left and the right -of the center. Usually non-negative integers for data indexed by date, but -more restrictive in other cases (see \code{\link[epiprocess:epi_slide]{epiprocess::epi_slide()}} for details).} +\item{.window_size}{the size of the sliding window, required. Usually a +non-negative integer will suffice (e.g. for data indexed by date, but more +restrictive in other time_type cases (see \code{\link[epiprocess:epi_slide]{epiprocess::epi_slide()}} for +details). For example, set to 7 for a 7-day window.} + +\item{.align}{a character string indicating how the window should be aligned. +By default, this is "right", meaning the slide_window will be anchored with +its right end point on the reference date. (see \code{\link[epiprocess:epi_slide]{epiprocess::epi_slide()}} +for details).} \item{role}{For model terms created by this step, what analysis role should they be assigned? \code{lag} is default a predictor while \code{ahead} is an outcome.} \item{prefix}{A character string that will be prefixed to the new column.} -\item{f_name}{a character string of at most 20 characters that describes -the function. This will be combined with \code{prefix} and the columns in \code{...} -to name the result using \verb{\{prefix\}\{f_name\}_\{column\}}. By default it will be determined -automatically using \code{clean_f_name()}.} +\item{f_name}{a character string of at most 20 characters that describes the +function. This will be combined with \code{prefix} and the columns in \code{...} to +name the result using \verb{\{prefix\}\{f_name\}_\{column\}}. By default it will be +determined automatically using \code{clean_f_name()}.} \item{skip}{A logical. Should the step be skipped when the recipe is baked by \code{\link[=bake]{bake()}}? While all operations are baked @@ -80,7 +86,7 @@ jhu <- case_death_rate_subset \%>\% rec <- epi_recipe(jhu) \%>\% step_epi_slide(case_rate, death_rate, .f = \(x) mean(x, na.rm = TRUE), - before = 6L + .window_size = 7L ) bake(prep(rec, jhu), new_data = NULL) } diff --git a/tests/testthat/test-epi_recipe.R b/tests/testthat/test-epi_recipe.R index ed27d88c0..a4cbb00b4 100644 --- a/tests/testthat/test-epi_recipe.R +++ b/tests/testthat/test-epi_recipe.R @@ -59,7 +59,7 @@ test_that("epi_recipe formula works", { time_value = seq(as.Date("2020-01-01"), by = 1, length.out = 5), geo_value = "ca", z = "dummy_key" - ) %>% epiprocess::as_epi_df(additional_metadata = list(other_keys = "z")) + ) %>% epiprocess::as_epi_df(other_keys = "z") # with an additional key r <- epi_recipe(y ~ x + geo_value, tib) diff --git a/tests/testthat/test-key_colnames.R b/tests/testthat/test-key_colnames.R index d55a515ca..3b3118740 100644 --- a/tests/testthat/test-key_colnames.R +++ b/tests/testthat/test-key_colnames.R @@ -30,12 +30,12 @@ test_that("key_colnames extracts additional keys when they are present", { value = 1:length(geo_value) + 0.01 * rnorm(length(geo_value)) ) %>% as_epi_df( - additional_metadata = list(other_keys = c("state", "pol")) + other_keys = c("state", "pol") ) expect_identical( key_colnames(my_data), - c("geo_value", "time_value", "state", "pol") + c("geo_value", "state", "pol", "time_value") ) my_recipe <- epi_recipe(my_data) %>% @@ -43,16 +43,10 @@ test_that("key_colnames extracts additional keys when they are present", { step_epi_naomit() # order of the additional keys may be different - expect_setequal( - key_colnames(my_recipe), - c("geo_value", "time_value", "state", "pol") - ) + expect_equal(key_colnames(my_recipe), c("geo_value", "state", "pol", "time_value")) my_workflow <- epi_workflow(my_recipe, linear_reg()) %>% fit(my_data) # order of the additional keys may be different - expect_setequal( - key_colnames(my_workflow), - c("geo_value", "time_value", "state", "pol") - ) + expect_equal(key_colnames(my_workflow), c("geo_value", "state", "pol", "time_value")) }) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 9595b47b6..915804d6b 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -93,6 +93,8 @@ test_that("forecast date works for daily", { unclass() %>% as.data.frame() %>% mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% + group_by(geo_value, time_value) %>% + summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups="drop") %>% as_epi_df() expect_error(predict(wf1, latest_yearly)) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index e5349839b..f1fa3f217 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -104,6 +104,8 @@ test_that("target date works for daily and yearly", { unclass() %>% as.data.frame() %>% mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% + group_by(geo_value, time_value) %>% + summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups = "drop") %>% as_epi_df() expect_error(predict(wf1, latest_bad)) diff --git a/tests/testthat/test-pad_to_end.R b/tests/testthat/test-pad_to_end.R index 0ea6244b0..6949f06ac 100644 --- a/tests/testthat/test-pad_to_end.R +++ b/tests/testthat/test-pad_to_end.R @@ -32,6 +32,6 @@ test_that("test set padding works", { # make sure it maintains the epi_df dat <- dat %>% dplyr::rename(geo_value = gr1) %>% - as_epi_df() + as_epi_df(other_keys = "gr2") expect_s3_class(pad_to_end(dat, "geo_value", 2), "epi_df") }) diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 29e046eae..e90c317f8 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -7,32 +7,23 @@ edf <- data.frame( value = c(2:21, 3:22) ) %>% as_epi_df() - r <- epi_recipe(edf) -rolled_before <- edf %>% - group_by(geo_value) %>% - epi_slide(value = mean(value), before = 3L) %>% - pull(value) -rolled_after <- edf %>% - group_by(geo_value) %>% - epi_slide(value = mean(value), after = 3L) %>% - pull(value) test_that("epi_slide errors when needed", { # not an epi_recipe - expect_error(recipe(edf) %>% step_epi_slide(value, .f = mean, before = 6L)) + expect_error(recipe(edf) %>% step_epi_slide(value, .f = mean, .window_size = 7L)) # non-scalar args - expect_error(r %>% step_epi_slide(value, .f = mean, before = c(3L, 6L))) - expect_error(r %>% step_epi_slide(value, .f = mean, after = c(3L, 6L))) + expect_error(r %>% step_epi_slide(value, .f = mean, .window_size = c(3L, 6L))) + expect_error(r %>% step_epi_slide(value, .f = mean, .align = c("right", "left"))) expect_error(r %>% step_epi_slide(value, .f = mean, skip = c(TRUE, FALSE))) expect_error(r %>% step_epi_slide(value, .f = mean, role = letters[1:2])) expect_error(r %>% step_epi_slide(value, .f = mean, prefix = letters[1:2])) expect_error(r %>% step_epi_slide(value, .f = mean, id = letters[1:2])) # wrong types - expect_error(r %>% step_epi_slide(value, .f = mean, before = 1.5)) - expect_error(r %>% step_epi_slide(value, .f = mean, after = 1.5)) + expect_error(r %>% step_epi_slide(value, .f = mean, .window_size = 1.5)) + expect_error(r %>% step_epi_slide(value, .f = mean, .align = 1.5)) expect_error(r %>% step_epi_slide(value, .f = mean, skip = "a")) expect_error(r %>% step_epi_slide(value, .f = mean, role = 1)) expect_error(r %>% step_epi_slide(value, .f = mean, prefix = 1)) @@ -45,31 +36,40 @@ test_that("epi_slide errors when needed", { test_that("epi_slide handles different function specs", { cfun <- r %>% - step_epi_slide(value, .f = "mean", before = 3L) %>% + step_epi_slide(value, .f = "mean", .window_size = 4L) %>% prep(edf) %>% bake(new_data = NULL) + expected_out <- edf %>% + group_by(geo_value) %>% + epi_slide(~ mean(.x$value), .window_size = 4L) %>% + ungroup() %>% + rename(epi_slide__.f_value = slide_value) + expect_equal(cfun, expected_out) ffun <- r %>% - step_epi_slide(value, .f = mean, before = 3L) %>% + step_epi_slide(value, .f = mean, .window_size = 4L) %>% prep(edf) %>% bake(new_data = NULL) + expect_equal(ffun, expected_out) # formula NOT currently supported expect_error( lfun <- r %>% - step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L), + step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), .window_size = 4L), regexp = "cannot be a formula." ) + # expect_equal(lfun, rolled_before) blfun <- r %>% - step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), before = 3L) %>% + step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), .window_size = 4L) %>% prep(edf) %>% bake(new_data = NULL) + expected_out <- edf %>% + group_by(geo_value) %>% + epi_slide(~ mean(.x$value, na.rm = TRUE), .window_size = 4L) %>% + ungroup() %>% + rename(epi_slide__.f_value = slide_value) + expect_equal(blfun, expected_out) nblfun <- r %>% - step_epi_slide(value, .f = \(x) mean(x, na.rm = TRUE), before = 3L) %>% + step_epi_slide(value, .f = \(x) mean(x, na.rm = TRUE), .window_size = 4L) %>% prep(edf) %>% bake(new_data = NULL) - - expect_equal(cfun[[4]], rolled_before) - expect_equal(ffun[[4]], rolled_before) - # expect_equal(lfun[[4]], rolled_before) - expect_equal(blfun[[4]], rolled_before) - expect_equal(nblfun[[4]], rolled_before) + expect_equal(nblfun, expected_out) }) diff --git a/tests/testthat/test-step_training_window.R b/tests/testthat/test-step_training_window.R index f49668a40..a9f2170d3 100644 --- a/tests/testthat/test-step_training_window.R +++ b/tests/testthat/test-step_training_window.R @@ -84,7 +84,7 @@ test_that("step_training_window works with multiple keys", { expect_equal(nrow(p4), 12L) expect_equal(ncol(p4), 5L) expect_s3_class(p4, "epi_df") - expect_named(p4, c("geo_value", "time_value", "additional_key", "x", "y")) + expect_named(p4, c("geo_value", "additional_key", "time_value", "x", "y")) expect_equal( p4$time_value, rep(c( diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index ec6f67359..31cc7b9b0 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -54,7 +54,7 @@ applying `epi_slide()` to the latest snapshot of the data. First, we download the version history (ie. archive) of the percentage of doctor's visits with CLI (COVID-like illness) computed from medical insurance claims and the number of new confirmed COVID-19 cases per 100,000 population -(daily) for all 50 states from the COVIDcast API. +(daily) for all 50 states from the COVIDcast API.
    @@ -69,7 +69,6 @@ versions for the less up-to-date input archive. theme_set(theme_bw()) y <- readRDS("all_states_covidcast_signals.rds") - y <- purrr::map(y, ~ select(.x, geo_value, time_value, version = issue, value)) x <- epix_merge( @@ -93,15 +92,11 @@ output. ```{r arx-kweek-preliminaries, warning = FALSE} # Latest snapshot of data, and forecast dates -x_latest <- epix_as_of(x, max_version = max(x$versions_end)) -fc_time_values <- seq( - from = as.Date("2020-08-01"), - to = as.Date("2021-11-01"), - by = "1 month" -) +x_latest <- epix_as_of(x, version = max(x$versions_end)) +fc_time_values <- seq(from = as.Date("2021-11-01"), to = as.Date("2021-11-01"), by = "1 month") aheads <- c(7, 14, 21, 28) -k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { +forecast_k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { epi_slide( epi_df, ~ arx_forecaster( @@ -109,9 +104,9 @@ k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { args_list = arx_args_list(ahead = ahead) )$predictions %>% select(-geo_value), - before = 120 - 1, - ref_time_values = fc_time_values, - new_col_name = "fc" + .window_size = 120, + .ref_time_values = fc_time_values, + .new_col_name = "fc" ) %>% select(geo_value, time_value, starts_with("fc")) %>% mutate(engine_type = engine$engine) @@ -121,22 +116,22 @@ k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { ```{r make-arx-kweek} # Generate the forecasts and bind them together fc <- bind_rows( - map( - aheads, - ~ k_week_ahead( - x_latest, "case_rate", c("case_rate", "percent_cli"), .x, - engine = linear_reg() - ) - ) %>% list_rbind(), - map( - aheads, - ~ k_week_ahead( - x_latest, "case_rate", c("case_rate", "percent_cli"), .x, - engine = rand_forest(mode = "regression") - ) - ) %>% list_rbind() -) %>% - pivot_quantiles_wider(fc_.pred_distn) + map(aheads, ~ forecast_k_week_ahead( + x_latest, + outcome = "case_rate", + predictors = c("case_rate", "percent_cli"), + ahead = .x, + engine = linear_reg() + )), + map(aheads, ~ forecast_k_week_ahead( + x_latest, + outcome = "case_rate", + predictors = c("case_rate", "percent_cli"), + ahead = .x, + engine = rand_forest(mode = "regression") + )) +) +pivot_quantiles_wider(fc_.pred_distn) ``` Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the @@ -235,11 +230,11 @@ can_latest <- epix_as_of(can, max_version = max(can$DT$version)) can_fc <- bind_rows( map( aheads, - ~ k_week_ahead(can_latest, "cr_7dav", "cr_7dav", .x, linear_reg()) + ~ forecast_k_week_ahead(can_latest, "cr_7dav", "cr_7dav", .x, linear_reg()) ) %>% list_rbind(), map( aheads, - ~ k_week_ahead( + ~ forecast_k_week_ahead( can_latest, "cr_7dav", "cr_7dav", .x, boost_tree(mode = "regression", trees = 20) ) diff --git a/vignettes/arx-classifier.Rmd b/vignettes/arx-classifier.Rmd index ae1641cce..b2a2bbf8e 100644 --- a/vignettes/arx-classifier.Rmd +++ b/vignettes/arx-classifier.Rmd @@ -50,10 +50,7 @@ jhu <- case_death_rate_subset %>% geo_value %in% c("ca", "fl", "tx", "ny", "nj") ) -out <- arx_classifier(jhu, - outcome = "case_rate", - predictors = "case_rate" -) +out <- arx_classifier(jhu, outcome = "case_rate", predictors = "case_rate") out$predictions ``` @@ -93,7 +90,8 @@ relying on the default of 0.25. We can do this by passing 0.5 to the `breaks` argument in `arx_class_args_list()` as follows: ```{r} -out_break_0.5 <- arx_classifier(jhu, +out_break_0.5 <- arx_classifier( + jhu, outcome = "case_rate", predictors = "case_rate", args_list = arx_class_args_list( @@ -142,8 +140,8 @@ the present? To answer this question, we can create a predictive model for upswings and downswings of case rates rather than the raw case rates themselves. For this situation, our target is to predict whether there is an increase in case rates -or not. Following -[McDonald, Bien, Green, Hu, et al.(2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), +or not. Following +[McDonald, Bien, Green, Hu, et al.(2021)](https://www.pnas.org/doi/full/10.1073/pnas.2111453118), we look at the relative change between $Y_{l,t}$ and $Y_{l, t+a}$, where the former is the case rate at location $l$ at time $t$ and the latter is the rate for that location at @@ -152,7 +150,7 @@ with two classes $$\begin{align} Z_{l,t} = \left\{\begin{matrix} -\text{up,} & \text{if } Y_{l,t}^\Delta > 0.25\\ +\text{up,} & \text{if } Y_{l,t}^\Delta > 0.25\\ \text{not up,} & \text{otherwise} \end{matrix}\right. \end{align}$$ @@ -166,7 +164,7 @@ $$\begin{align} \pi_{\text{up}}(x) &= Pr(Z_{l, t} = \text{up}|x) = \frac{e^{g_{\text{up}}(x)}}{1 + e^{g_{\text{up}}(x)}}, \\ \pi_{\text{not up}}(x)&= Pr(Z_{l, t} = \text{not up}|x) = 1 - Pr(Z_{l, t} = \text{up}|x) = \frac{1}{1 + e^{g_{\text{up}}(x)}} \end{align}$$ -where +where $$ g_{\text{up}}(x) = \log\left ( \frac{\Pr(Z_{l, t} = \text{up} \vert x)}{\Pr(Z_{l, t} = \text{not up} \vert x)} \right ) = \beta_{10} + \beta_{11}Y_{l,t}^\Delta + \beta_{12}Y_{l,t-7}^\Delta + \beta_{13}Y_{l,t-14}^\Delta. @@ -223,7 +221,7 @@ require access to the training data. The other optional arguments for controlling the growth rate calculation (that can be inputted as `additional_gr_args`) can be found in the documentation for -`epiprocess::growth_rate()` and the related +`epiprocess::growth_rate()` and the related `vignette("growth_rate", package = "epiprocess")`. ### Visualizing the results @@ -280,4 +278,4 @@ to start with using the built-in classifier for ostensibly simple projects and begin to implement your own when the modelling project takes a complicated turn. To get some practice on coding up a classifier by hand, consider translating this binary classification model example to an `epi_workflow`, akin to that in -`vignette("preprocessing-and-models")`. +`vignette("preprocessing-and-models")`. diff --git a/vignettes/epipredict.Rmd b/vignettes/epipredict.Rmd index 7e24b04c6..1925de2fb 100644 --- a/vignettes/epipredict.Rmd +++ b/vignettes/epipredict.Rmd @@ -110,8 +110,6 @@ the *same set* of `geo_value`'s and `time_value`'s could actually be different. For more details, see [`{epiprocess}`](https://cmu-delphi.github.io/epiprocess/articles/epiprocess.html). - - ## Why doesn't this package already exist? As described above: @@ -121,7 +119,7 @@ preprocessing, training, and prediction, bound together, through a package calle `{workflows}`. We built `{epipredict}` on top of that setup. In this way, you CAN use almost everything they provide. -* However, `{workflows}` doesn't do postprocessing. And nothing in the -verse +* However, `{workflows}` doesn't do postprocessing. And nothing in the -verse handles _panel data_. * The tidy-team doesn't have plans to do either of these things. (We checked). @@ -131,7 +129,7 @@ handles _panel data_. etc.[^2] Our group has not prioritized these sorts of models for epidemic forecasting, but one could also integrate these methods into our framework. -[^2]: These are [`{timetk}`](https://business-science.github.io/timetk/index.html) +[^2]: These are [`{timetk}`](https://business-science.github.io/timetk/index.html) and [`{modeltime}`](https://business-science.github.io/timetk/index.html). There are *lots* of useful methods there than can be used to do fairly complex machine learning methodology, though not directly for panel data and not for direct @@ -327,6 +325,7 @@ the `time_value`, `geo_value`, and any additional keys so that these are availab when necessary. The `epi_recipe` from `out_gb` can be extracted from the result: + ```{r} extract_recipe(out_gb$epi_workflow) ``` @@ -441,7 +440,7 @@ But ideally, a user could create their own forecasters by building up the components we provide. In other vignettes, we try to walk through some of these customizations. -To illustrate everything above, here is (roughly) the code for the +To illustrate everything above, here is (roughly) the code for the `flatline_forecaster()` applied to the `case_rate`. ```{r} From b3e3189da970ac341fa0294b02cf49ee3899b0ac Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 27 Sep 2024 14:16:28 -0700 Subject: [PATCH 370/382] styler: style --- tests/testthat/test-layer_add_forecast_date.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 915804d6b..6d0e637c8 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -94,7 +94,7 @@ test_that("forecast date works for daily", { as.data.frame() %>% mutate(time_value = as.POSIXlt(time_value)$year + 1900L) %>% group_by(geo_value, time_value) %>% - summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups="drop") %>% + summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups = "drop") %>% as_epi_df() expect_error(predict(wf1, latest_yearly)) From 374cb2f1673529e13571cb6e1fe11a920f385d02 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 27 Sep 2024 15:52:18 -0700 Subject: [PATCH 371/382] doc: fix vignettes --- R/layer_add_forecast_date.R | 1 + R/layer_add_target_date.R | 1 + 2 files changed, 2 insertions(+) diff --git a/R/layer_add_forecast_date.R b/R/layer_add_forecast_date.R index 02395f960..3d5ea010b 100644 --- a/R/layer_add_forecast_date.R +++ b/R/layer_add_forecast_date.R @@ -104,6 +104,7 @@ slather.layer_add_forecast_date <- function(object, components, workflow, workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type if (expected_time_type == "week") expected_time_type <- "day" + if (expected_time_type == "integer") expected_time_type <- "year" validate_date( forecast_date, expected_time_type, call = rlang::expr(layer_add_forecast_date()) diff --git a/R/layer_add_target_date.R b/R/layer_add_target_date.R index 9176fb593..094ec8501 100644 --- a/R/layer_add_target_date.R +++ b/R/layer_add_target_date.R @@ -90,6 +90,7 @@ slather.layer_add_target_date <- function(object, components, workflow, workflows::extract_preprocessor(workflow)$template, "metadata" )$time_type if (expected_time_type == "week") expected_time_type <- "day" + if (expected_time_type == "integer") expected_time_type <- "year" if (!is.null(object$target_date)) { target_date <- object$target_date From 93a405ec1622897e9ce24ae4d667465b57dd5d50 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Fri, 27 Sep 2024 20:58:56 -0700 Subject: [PATCH 372/382] doc: fix sliding article and verify others --- vignettes/articles/sliding.Rmd | 180 ++++++++++++------------- vignettes/articles/smooth-qr.Rmd | 27 ++-- vignettes/articles/symptom-surveys.Rmd | 12 +- 3 files changed, 107 insertions(+), 112 deletions(-) diff --git a/vignettes/articles/sliding.Rmd b/vignettes/articles/sliding.Rmd index 31cc7b9b0..1556c4a72 100644 --- a/vignettes/articles/sliding.Rmd +++ b/vignettes/articles/sliding.Rmd @@ -25,27 +25,21 @@ library(purrr) # Demonstrations of sliding AR and ARX forecasters -A key function from the epiprocess package is `epi_slide()`, which allows the -user to apply a function or formula-based computation over variables in an -`epi_df` over a running window of `n` time steps (see the following `epiprocess` -vignette to go over the basics of the function: ["Slide a computation over -signal values"](https://cmu-delphi.github.io/epiprocess/articles/slide.html)). -The equivalent sliding method for an `epi_archive` object can be called by using -the wrapper function `epix_slide()` (refer to the following vignette for the -basics of the function: ["Work with archive objects and data -revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)). The -key difference from `epi_slide()` is that it performs version-aware -computations. That is, the function only uses data that would have been -available as of time t for that reference time. - -In this vignette, we use `epi_slide()` and `epix_slide()` for backtesting our -`arx_forecaster` on historical COVID-19 case data from the US and from Canada. -More precisely, we first demonstrate using `epi_slide()` to slide ARX -forecasters over an `epi_df` object and compare the results obtained from using -different forecasting engines. We then compare the results from version-aware -and unaware forecasting, where the former is obtained from applying -`epix_slide()` to the `epi_archive` object, while the latter is obtained from -applying `epi_slide()` to the latest snapshot of the data. +A key function from the epiprocess package is `epix_slide()` (refer to the +following vignette for the basics of the function: ["Work with archive objects +and data +revisions"](https://cmu-delphi.github.io/epiprocess/articles/archive.html)) +which allows performing version-aware computations. That is, the function only +uses data that would have been available as of time t for that reference time. + +In this vignette, we use `epix_slide()` for backtesting our `arx_forecaster` on +historical COVID-19 case data from the US and from Canada. We first examine the +results from a version-unaware forecaster, comparing two different fitting +engines and then we contrast this with version-aware forecasting. The former +will proceed by constructing an `epi_archive` that erases its version +information and then use `epix_slide()` to forecast the future. The latter will +keep the versioned data and proceed similarly by using `epix_slide()` to +forecast the future. ## Comparing different forecasting engines @@ -60,16 +54,16 @@ claims and the number of new confirmed COVID-19 cases per 100,000 population Load a data archive -We process as before, with the -modification that we use `sync = locf` in `epix_merge()` so that the last -version of each observation can be carried forward to extrapolate unavailable -versions for the less up-to-date input archive. +We process as before, with the modification that we use `sync = locf` in +`epix_merge()` so that the last version of each observation can be carried +forward to extrapolate unavailable versions for the less up-to-date input +archive. ```{r grab-epi-data} theme_set(theme_bw()) -y <- readRDS("all_states_covidcast_signals.rds") -y <- purrr::map(y, ~ select(.x, geo_value, time_value, version = issue, value)) +y <- readRDS("all_states_covidcast_signals.rds") %>% + purrr::map(~ select(.x, geo_value, time_value, version = issue, value)) x <- epix_merge( y[[1]] %>% rename(percent_cli = value) %>% as_epi_archive(compactify = FALSE), @@ -82,34 +76,36 @@ rm(y)
    -After obtaining the latest snapshot of the data, we produce forecasts on that -data using the default engine of simple linear regression and compare to a -random forest. - -Note that all of the warnings about the forecast date being less than the most -recent update date of the data have been suppressed to avoid cluttering the -output. +We then obtaining the latest snapshot of the data and proceed to fake the +version information by setting `version = time_value`. This has the effect of +obtaining data that arrives exactly at the day of the time_value. ```{r arx-kweek-preliminaries, warning = FALSE} # Latest snapshot of data, and forecast dates -x_latest <- epix_as_of(x, version = max(x$versions_end)) -fc_time_values <- seq(from = as.Date("2021-11-01"), to = as.Date("2021-11-01"), by = "1 month") +x_latest <- epix_as_of(x, version = max(x$versions_end)) %>% + mutate(version = time_value) %>% + as_epi_archive() +fc_time_values <- seq( + from = as.Date("2020-08-01"), + to = as.Date("2021-11-01"), + by = "1 month" +) aheads <- c(7, 14, 21, 28) -forecast_k_week_ahead <- function(epi_df, outcome, predictors, ahead = 7, engine) { - epi_slide( - epi_df, - ~ arx_forecaster( - .x, outcome, predictors, engine, - args_list = arx_args_list(ahead = ahead) - )$predictions %>% - select(-geo_value), - .window_size = 120, - .ref_time_values = fc_time_values, - .new_col_name = "fc" - ) %>% - select(geo_value, time_value, starts_with("fc")) %>% - mutate(engine_type = engine$engine) +forecast_k_week_ahead <- function(epi_archive, outcome, predictors, ahead = 7, engine) { + epi_archive %>% + epix_slide( + .f = function(x, gk, rtv) { + arx_forecaster( + x, outcome, predictors, engine, + args_list = arx_args_list(ahead = ahead) + )$predictions %>% + mutate(engine_type = engine$engine) %>% + pivot_quantiles_wider(.pred_distn) + }, + .before = 120, + .versions = fc_time_values + ) } ``` @@ -131,7 +127,6 @@ fc <- bind_rows( engine = rand_forest(mode = "regression") )) ) -pivot_quantiles_wider(fc_.pred_distn) ``` Here, `arx_forecaster()` does all the heavy lifting. It creates leads of the @@ -148,18 +143,22 @@ sense of the model performance while keeping the graphic simple. Code for plotting ```{r plot-arx, message = FALSE, warning = FALSE} -fc_cafl <- fc %>% filter(geo_value %in% c("ca", "fl")) -x_latest_cafl <- x_latest %>% filter(geo_value %in% c("ca", "fl")) - -p1 <- ggplot(fc_cafl, aes(fc_target_date, group = time_value, fill = engine_type)) + +fc_cafl <- fc %>% + tibble() %>% + filter(geo_value %in% c("ca", "fl")) +x_latest_cafl <- x_latest$DT %>% + tibble() %>% + filter(geo_value %in% c("ca", "fl")) + +p1 <- ggplot(fc_cafl, aes(target_date, group = forecast_date, fill = engine_type)) + geom_line( data = x_latest_cafl, aes(x = time_value, y = case_rate), inherit.aes = FALSE, color = "gray50" ) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`), alpha = 0.4) + - geom_line(aes(y = fc_.pred)) + - geom_point(aes(y = fc_.pred), size = 0.5) + - geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + + geom_line(aes(y = .pred)) + + geom_point(aes(y = .pred), size = 0.5) + + geom_vline(aes(xintercept = forecast_date), linetype = 2, alpha = 0.5) + facet_grid(vars(geo_value), vars(engine_type), scales = "free") + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + scale_fill_brewer(palette = "Set1") + @@ -216,31 +215,30 @@ linear regression with those from using boosted regression trees. can <- readRDS(system.file( "extdata", "can_prov_cases.rds", package = "epipredict", mustWork = TRUE -)) - -can <- can %>% +)) %>% group_by(version, geo_value) %>% arrange(time_value) %>% mutate(cr_7dav = RcppRoll::roll_meanr(case_rate, n = 7L)) %>% as_epi_archive(compactify = TRUE) -can_latest <- epix_as_of(can, max_version = max(can$DT$version)) +can_latest <- epix_as_of(can, version = max(can$DT$version)) %>% + mutate(version = time_value) %>% + as_epi_archive() # Generate the forecasts, and bind them together can_fc <- bind_rows( map( aheads, ~ forecast_k_week_ahead(can_latest, "cr_7dav", "cr_7dav", .x, linear_reg()) - ) %>% list_rbind(), + ), map( aheads, ~ forecast_k_week_ahead( can_latest, "cr_7dav", "cr_7dav", .x, boost_tree(mode = "regression", trees = 20) ) - ) %>% list_rbind() -) %>% - pivot_quantiles_wider(fc_.pred_distn) + ) +) ``` The figures below shows the results for all of the provinces. @@ -248,19 +246,19 @@ The figures below shows the results for all of the provinces. ```{r plot-can-fc-lr, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 12} ggplot( can_fc %>% filter(engine_type == "lm"), - aes(x = fc_target_date, group = time_value) + aes(x = target_date, group = forecast_date) ) + coord_cartesian(xlim = lubridate::ymd(c("2020-12-01", NA))) + geom_line( - data = can_latest, aes(x = time_value, y = cr_7dav), + data = can_latest$DT %>% tibble(), aes(x = time_value, y = cr_7dav), inherit.aes = FALSE, color = "gray50" ) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`, fill = geo_value), alpha = 0.4 ) + - geom_line(aes(y = fc_.pred)) + - geom_point(aes(y = fc_.pred), size = 0.5) + - geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + + geom_line(aes(y = .pred)) + + geom_point(aes(y = .pred), size = 0.5) + + geom_vline(aes(xintercept = forecast_date), linetype = 2, alpha = 0.5) + facet_wrap(~geo_value, scales = "free_y", ncol = 3) + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + labs( @@ -273,19 +271,19 @@ ggplot( ```{r plot-can-fc-boost, message = FALSE, warning = FALSE, fig.width = 9, fig.height = 12} ggplot( can_fc %>% filter(engine_type == "xgboost"), - aes(x = fc_target_date, group = time_value) + aes(x = target_date, group = forecast_date) ) + coord_cartesian(xlim = lubridate::ymd(c("2020-12-01", NA))) + geom_line( - data = can_latest, aes(x = time_value, y = cr_7dav), + data = can_latest$DT %>% tibble(), aes(x = time_value, y = cr_7dav), inherit.aes = FALSE, color = "gray50" ) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`, fill = geo_value), alpha = 0.4 ) + - geom_line(aes(y = fc_.pred)) + - geom_point(aes(y = fc_.pred), size = 0.5) + - geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + + geom_line(aes(y = .pred)) + + geom_point(aes(y = .pred), size = 0.5) + + geom_vline(aes(xintercept = forecast_date), linetype = 2, alpha = 0.5) + facet_wrap(~geo_value, scales = "free_y", ncol = 3) + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + labs( @@ -313,9 +311,7 @@ have been available in real-time) to forecast the 7 day average of future COVID-19 case rates from current and past COVID-19 case rates and death rates for all states. That is, we can make forecasts on the archive, `x`, and compare those to forecasts on the latest data, `x_latest` using the same general set-up -as above. For version-aware forecasting, note that `x` is fed into -`epix_slide()`, while for version-unaware forecasting, `x_latest` is fed into -`epi_slide()`. Note that in this example, we use a geo-pooled approach (using +as above. Note that in this example, we use a geo-pooled approach (using combined data from all US states and territories) to train our model.
    @@ -352,21 +348,19 @@ deaths_incidence_prop <- pub_covidcast( as_epi_archive(compactify = FALSE) -x <- epix_merge(confirmed_incidence_prop, deaths_incidence_prop, - sync = "locf" -) +x <- epix_merge(confirmed_incidence_prop, deaths_incidence_prop, sync = "locf") x <- x %>% epix_slide( - before = 365000L, ref_time_values = fc_time_values, + .versions = fc_time_values, function(x, gk, rtv) { x %>% group_by(geo_value) %>% - epi_slide_mean(case_rate, before = 6L) %>% + epi_slide_mean(case_rate, .window_size = 7L) %>% rename(case_rate_7d_av = slide_value_case_rate) %>% - epi_slide_mean(death_rate, before = 6L) %>% - ungroup() %>% - rename(death_rate_7d_av = slide_value_death_rate) + epi_slide_mean(death_rate, ..window_size = 7L) %>% + rename(death_rate_7d_av = slide_value_death_rate) %>% + ungroup() } ) %>% rename(version = time_value) %>% @@ -419,14 +413,14 @@ epi archive and store it as `x_latest`. ```{r running-arx-forecaster} arx_preds <- x %>% - epix_slide(~ forecaster(.x), - before = 120, ref_time_values = fc_time_values, - names_sep = NULL + epix_slide( + ~ forecaster(.x), + .before = 120, .versions = fc_time_values ) %>% mutate(engine_type = quantile_reg()$engine) %>% mutate(ahead_val = target_date - forecast_date) -x_latest <- epix_as_of(x, max_version = max(x$versions_end)) +x_latest <- epix_as_of(x, version = max(x$versions_end)) ``` Now we plot both the actual and predicted 7 day average of the death rate for @@ -443,7 +437,7 @@ fc_states <- arx_preds %>% x_latest_states <- x_latest %>% filter(geo_value %in% states_to_show) -p2 <- ggplot(fc_states, aes(target_date, group = time_value)) + +p2 <- ggplot(fc_states, aes(target_date, group = forecast_date)) + geom_ribbon(aes(ymin = `0.05`, ymax = `0.95`, fill = geo_value), alpha = 0.4) + geom_line( data = x_latest_states, aes(x = time_value, y = death_rate_7d_av), @@ -451,7 +445,7 @@ p2 <- ggplot(fc_states, aes(target_date, group = time_value)) + ) + geom_line(aes(y = .pred, color = geo_value)) + geom_point(aes(y = .pred, color = geo_value), size = 0.5) + - geom_vline(aes(xintercept = time_value), linetype = 2, alpha = 0.5) + + geom_vline(aes(xintercept = forecast_date), linetype = 2, alpha = 0.5) + facet_wrap(~geo_value, scales = "free_y", ncol = 1L) + scale_x_date(minor_breaks = "month", date_labels = "%b %y") + scale_fill_brewer(palette = "Set1") + diff --git a/vignettes/articles/smooth-qr.Rmd b/vignettes/articles/smooth-qr.Rmd index 07e237181..3d626b2e1 100644 --- a/vignettes/articles/smooth-qr.Rmd +++ b/vignettes/articles/smooth-qr.Rmd @@ -25,8 +25,8 @@ Whereas other time-series forecasting examples in this package have used epidemiological applications where decisions are based on the trend of a signal. The idea underlying smooth quantile regression is that set forecast targets can -be approximated by a smooth curve. This novel approach from -[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) +be approximated by a smooth curve. This novel approach from +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723) enforces smoothness across the horizons and can be applied to point estimation by regression or interval prediction by quantile regression. Our focus in this vignette is the latter. @@ -62,9 +62,9 @@ The `degree` parameter indicates the degree of the polynomials used for smoothing of the response. It should be no more than the number of aheads. If the degree is precisely equal to the number of aheads, then there is no smoothing. To better understand this parameter and how it works, we should look -to its origins and how it is used in the model. +to its origins and how it is used in the model. -# Model form +# Model form Smooth quantile regression is linear auto-regressive, with the key feature being a transformation that forces the coefficients to satisfy a smoothing constraint. @@ -77,8 +77,8 @@ be no greater than the number of responses. This is a tuning parameter, and so it can be chosen by performing a grid search with cross-validation. Intuitively, $d = 1$ corresponds to the constant model, $d = 2$ gives straight line forecasts, while $d = 3$ gives quadratic forecasts. Since a degree of 3 was -found to work well in the tested applications (see Section 9 of -[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723)), +found to work well in the tested applications (see Section 9 of +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723)), it is the default value. # Demonstration of smooth quantile regression @@ -169,7 +169,7 @@ regression, which has three main arguments - the quantiles, aheads, and degree. After creating our `epi_workflow` with these components, we get our test data based on longest lag period and make the predictions. -We input our forecaster into a function for ease of use. +We input our forecaster into a function for ease of use. ```{r} smooth_fc <- function(x, aheads = 1:28, degree = 3L, quantiles = 0.5, fd) { @@ -337,7 +337,8 @@ naturally related over time by a smooth curve. To get the basic quantile regression results we can utilize the forecaster that we've already built. We can simply set the degree to be the number of ahead -values to re-run the code without smoothing. +values to re-run the code without smoothing. + ```{r, warning = FALSE} baseline_preds <- smooth_fc( edf, @@ -397,15 +398,15 @@ that the smooth quantile regression model and baseline models perform very similarly overall, with the smooth quantile regression model only slightly beating the baseline model in terms of overall average MAE. -One other commonly used metric is the Weighted Interval Score -(WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), +One other commonly used metric is the Weighted Interval Score +(WIS, [Bracher et al., 2021](https://arxiv.org/pdf/2005.12881.pdf)), which a scoring rule that is based on the population quantiles. The point is to score the interval, whereas MAE only evaluates the accuracy of the point forecast. Let $F$ be a forecast composed of predicted quantiles $q_{\tau}$ for the set of quantile levels $\tau$. Then, in terms of the predicted quantiles, the WIS for -target variable $Y$ is represented as follows +target variable $Y$ is represented as follows ([McDonald etal., 2021](https://www.pnas.org/doi/full/10.1073/pnas.2111453118)): $$ @@ -515,5 +516,5 @@ smooth curve. # Attribution -The information presented on smooth quantile regression is from -[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). +The information presented on smooth quantile regression is from +[Tuzhilina et al., 2022](https://arxiv.org/abs/2202.09723). diff --git a/vignettes/articles/symptom-surveys.Rmd b/vignettes/articles/symptom-surveys.Rmd index e8d4a8228..f480db575 100644 --- a/vignettes/articles/symptom-surveys.Rmd +++ b/vignettes/articles/symptom-surveys.Rmd @@ -48,7 +48,7 @@ most recent versions of the datasets). Now, we will delve into the forecasting problem set-up and code followed by a discussion of the results. -## Problem Setup +## Problem Setup Our goal is to predict county-level COVID-19 case incidence rates for 1 and 2 weeks ahead. For this, we restrict our attention to the 442 counties that had at @@ -437,7 +437,7 @@ knitr::kable( format = "html", table.attr = "style='width:70%;'" ) ``` -$$\\[0.01in]$$ +$$\\[0.01in]$$ Are these differences in median scaled errors significant? Some basic hypothesis testing suggests that some probably are: Below we conduct a sign test for whether the difference in the "Cases" model’s scaled error and each other @@ -662,7 +662,7 @@ knitr::kable( format = "html", table.attr = "style='width:70%;'", digits = 3 ) ``` -$$\\[0.01in]$$ +$$\\[0.01in]$$ Thanks to the extended length of the test period, we can also plot the trajectories of the median scaled errors over time, as we do below, with the @@ -731,7 +731,7 @@ knitr::kable( format = "html", table.attr = "style='width:50%;'" ) ``` -$$\\[0.01in]$$ +$$\\[0.01in]$$ If we stratify and recompute p-values by forecast date, the bulk of p-values are quite small. @@ -788,7 +788,7 @@ res <- case_fb_mods(dates, leads) We obtain and plot the median scaled errors for the "Cases" and "Cases + Facebook" models for different number of days ahead for the forecast target. This is done over May 20 through August 27 for the forecast dates that are -common to the two models. +common to the two models. ```{r} err_by_lead <- res %>% @@ -884,4 +884,4 @@ gets pulled "as of" the forecast date (this requires specifying the parameter Hopefully these preliminary findings have gotten you excited about the possible uses of this symptom survey data. For further practice, try your hand at implementing the suggested improvements or develop your own novel analytic -approach to extract insights from this data. +approach to extract insights from this data. From 1caa5490931fc61302d6fd93a64261c89421ea80 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 30 Sep 2024 12:32:12 -0700 Subject: [PATCH 373/382] error if not an epidf in epirecipe --- NAMESPACE | 1 + R/epi_recipe.R | 24 +++++++++--------------- R/epipredict-package.R | 13 +++++++------ man/epi_recipe.Rd | 2 +- tests/testthat/_snaps/epi_recipe.md | 24 ++++++++++++++++++++++++ tests/testthat/_snaps/epi_workflow.md | 6 +++++- tests/testthat/test-epi_recipe.R | 23 ++++------------------- tests/testthat/test-epi_workflow.R | 2 +- 8 files changed, 52 insertions(+), 43 deletions(-) create mode 100644 tests/testthat/_snaps/epi_recipe.md diff --git a/NAMESPACE b/NAMESPACE index 23c5adeaf..5dea128ac 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -272,6 +272,7 @@ importFrom(rlang,":=") importFrom(rlang,abort) importFrom(rlang,arg_match) importFrom(rlang,as_function) +importFrom(rlang,caller_arg) importFrom(rlang,caller_env) importFrom(rlang,enquo) importFrom(rlang,enquos) diff --git a/R/epi_recipe.R b/R/epi_recipe.R index 88ba605cd..0cc142602 100644 --- a/R/epi_recipe.R +++ b/R/epi_recipe.R @@ -16,15 +16,10 @@ epi_recipe <- function(x, ...) { #' @rdname epi_recipe #' @export epi_recipe.default <- function(x, ...) { - ## if not a formula or an epi_df, we just pass to recipes::recipe - if (is.matrix(x) || is.data.frame(x) || tibble::is_tibble(x)) { - x <- x[1, , drop = FALSE] - } - cli_warn( - "epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various - step_epi_* functions will not work." - ) - recipes::recipe(x, ...) + cli_abort(paste( + "`x` must be an {.cls epi_df} or a {.cls formula},", + "not a {.cls {class(x)[[1]]}}." + )) } #' @rdname epi_recipe @@ -153,16 +148,15 @@ epi_recipe.formula <- function(formula, data, ...) { data <- data[1, ] # check for minus: if (!epiprocess::is_epi_df(data)) { - cli_warn( - "epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various - step_epi_* functions will not work." - ) - return(recipes::recipe(formula, data, ...)) + cli_abort(paste( + "`epi_recipe()` has been called with a non-{.cls epi_df} object.", + "Use `recipe()` instead." + )) } f_funcs <- recipes:::fun_calls(formula, data) if (any(f_funcs == "-")) { - abort("`-` is not allowed in a recipe formula. Use `step_rm()` instead.") + cli_abort("`-` is not allowed in a recipe formula. Use `step_rm()` instead.") } # Check for other in-line functions diff --git a/R/epipredict-package.R b/R/epipredict-package.R index 6460b65e4..733ab9755 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,15 +1,16 @@ ## usethis namespace: start #' @importFrom tibble as_tibble -#' @importFrom rlang := !! %||% as_function global_env set_names !!! -#' is_logical is_true inject enquo enquos expr sym arg_match +#' @importFrom rlang := !! %||% as_function global_env set_names !!! caller_arg +#' @importFrom rlang is_logical is_true inject enquo enquos expr sym arg_match #' @importFrom stats poly predict lm residuals quantile #' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by -#' summarize filter mutate select left_join rename ungroup full_join -#' relocate summarise everything +#' @importFrom dplyr summarize filter mutate select left_join rename ungroup +#' @importFrom dplyr full_join relocate summarise everything #' @importFrom cli cli_abort cli_warn #' @importFrom checkmate assert assert_character assert_int assert_scalar -#' assert_logical assert_numeric assert_number assert_integer -#' assert_integerish assert_date assert_function assert_class +#' @importFrom checkmate assert_logical assert_numeric assert_number +#' @importFrom checkmate assert_integer assert_integerish +#' @importFrom checkmate assert_date assert_function assert_class #' @import epiprocess parsnip ## usethis namespace: end NULL diff --git a/man/epi_recipe.Rd b/man/epi_recipe.Rd index d0105d1ec..c31133ab4 100644 --- a/man/epi_recipe.Rd +++ b/man/epi_recipe.Rd @@ -9,7 +9,7 @@ \usage{ epi_recipe(x, ...) -\method{epi_recipe}{default}(x, ...) +\method{epi_recipe}{default}(x, ..., arg = caller_arg(x)) \method{epi_recipe}{epi_df}(x, formula = NULL, ..., vars = NULL, roles = NULL) diff --git a/tests/testthat/_snaps/epi_recipe.md b/tests/testthat/_snaps/epi_recipe.md new file mode 100644 index 000000000..3d797461d --- /dev/null +++ b/tests/testthat/_snaps/epi_recipe.md @@ -0,0 +1,24 @@ +# epi_recipe produces error if not an epi_df + + Code + epi_recipe(tib) + Condition + Error in `epi_recipe()`: + ! `x` must be an or a , not a . + +--- + + Code + epi_recipe(y ~ x, tib) + Condition + Error in `epi_recipe()`: + ! `epi_recipe()` has been called with a non- object. Use `recipe()` instead. + +--- + + Code + epi_recipe(m) + Condition + Error in `epi_recipe()`: + ! `x` must be an or a , not a . + diff --git a/tests/testthat/_snaps/epi_workflow.md b/tests/testthat/_snaps/epi_workflow.md index abd57da2f..d46dad6c1 100644 --- a/tests/testthat/_snaps/epi_workflow.md +++ b/tests/testthat/_snaps/epi_workflow.md @@ -1,6 +1,10 @@ # fit method does not silently drop the class - epi_recipe has been called with a non-epi_df object, returning a regular recipe. Various step_epi_* functions will not work. + Code + epi_recipe(y ~ x, data = tbl) + Condition + Error in `epi_recipe()`: + ! `epi_recipe()` has been called with a non- object. Use `recipe()` instead. --- diff --git a/tests/testthat/test-epi_recipe.R b/tests/testthat/test-epi_recipe.R index ed27d88c0..106c68845 100644 --- a/tests/testthat/test-epi_recipe.R +++ b/tests/testthat/test-epi_recipe.R @@ -1,27 +1,12 @@ -test_that("epi_recipe produces default recipe", { - # these all call recipes::recipe(), but the template will always have 1 row +test_that("epi_recipe produces error if not an epi_df", { tib <- tibble( x = 1:5, y = 1:5, time_value = seq(as.Date("2020-01-01"), by = 1, length.out = 5) ) - expected_rec <- recipes::recipe(tib) - expected_rec$template <- expected_rec$template[1, ] - expect_warning(rec <- epi_recipe(tib), regexp = "epi_recipe has been called with a non-epi_df object") - expect_identical(expected_rec, rec) - expect_equal(nrow(rec$template), 1L) - - expected_rec <- recipes::recipe(y ~ x, tib) - expected_rec$template <- expected_rec$template[1, ] - expect_warning(rec <- epi_recipe(y ~ x, tib), regexp = "epi_recipe has been called with a non-epi_df object") - expect_identical(expected_rec, rec) - expect_equal(nrow(rec$template), 1L) - + expect_snapshot(error = TRUE, epi_recipe(tib)) + expect_snapshot(error = TRUE, epi_recipe(y ~ x, tib)) m <- as.matrix(tib) - expected_rec <- recipes::recipe(m) - expected_rec$template <- expected_rec$template[1, ] - expect_warning(rec <- epi_recipe(m), regexp = "epi_recipe has been called with a non-epi_df object") - expect_identical(expected_rec, rec) - expect_equal(nrow(rec$template), 1L) + expect_snapshot(error = TRUE, epi_recipe(m)) }) test_that("epi_recipe formula works", { diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index 8236a5885..01eff4209 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -120,7 +120,7 @@ test_that("fit method does not silently drop the class", { rec_tbl <- recipe(y ~ x, data = tbl) rec_edf <- recipe(y ~ x, data = edf) - expect_snapshot_warning(erec_tbl <- epi_recipe(y ~ x, data = tbl)) + expect_snapshot(error = TRUE, epi_recipe(y ~ x, data = tbl)) erec_edf <- epi_recipe(y ~ x, data = edf) ewf_rec_tbl <- epi_workflow(rec_tbl, linear_reg()) From 37d2352446142b55ba0b79590d8a104de8ed0e6e Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 12:34:16 -0700 Subject: [PATCH 374/382] test: snapshot step_* errors --- tests/testthat/_snaps/arg_is_.md | 8 +++++ tests/testthat/test-arg_is_.R | 9 +++++- tests/testthat/test-step_epi_naomit.R | 2 +- tests/testthat/test-step_epi_shift.R | 13 ++++---- tests/testthat/test-step_epi_slide.R | 36 +++++++++++------------ tests/testthat/test-step_growth_rate.R | 30 +++++++++---------- tests/testthat/test-step_lag_difference.R | 18 ++++++------ 7 files changed, 66 insertions(+), 50 deletions(-) diff --git a/tests/testthat/_snaps/arg_is_.md b/tests/testthat/_snaps/arg_is_.md index f75073767..fcb823f2a 100644 --- a/tests/testthat/_snaps/arg_is_.md +++ b/tests/testthat/_snaps/arg_is_.md @@ -374,3 +374,11 @@ Error in `arg_to_date()`: ! `x` must be a scalar. +# simple surface step test + + Code + epi_recipe(jhu_csse_daily_subset) %>% step_epi_lag(death_rate, lag = "hello") + Condition + Error in `step_epi_lag()`: + ! `lag` must be a non-negative integer. + diff --git a/tests/testthat/test-arg_is_.R b/tests/testthat/test-arg_is_.R index 84d4ef4cb..89c2c936f 100644 --- a/tests/testthat/test-arg_is_.R +++ b/tests/testthat/test-arg_is_.R @@ -15,6 +15,7 @@ dd <- Sys.Date() - 5 v <- 1:5 l <- TRUE ll <- c(TRUE, FALSE) +z <- character(0) test_that("logical", { expect_silent(arg_is_lgl(l)) @@ -125,7 +126,6 @@ test_that("chr", { expect_snapshot(error = TRUE, arg_is_chr(d)) expect_snapshot(error = TRUE, arg_is_chr(v)) expect_snapshot(error = TRUE, arg_is_chr(ll)) - z <- character(0) expect_snapshot(error = TRUE, arg_is_chr(z)) expect_silent(arg_is_chr(z, allow_empty = TRUE)) }) @@ -145,3 +145,10 @@ test_that("coerce scalar to date", { expect_s3_class(arg_to_date("2020-01-01"), "Date") expect_snapshot(error = TRUE, arg_to_date(c("12345", "12345"))) }) + +test_that("simple surface step test", { + expect_snapshot( + error = TRUE, + epi_recipe(jhu_csse_daily_subset) %>% step_epi_lag(death_rate, lag = "hello") + ) +}) diff --git a/tests/testthat/test-step_epi_naomit.R b/tests/testthat/test-step_epi_naomit.R index 2fb173f01..0e5e1750f 100644 --- a/tests/testthat/test-step_epi_naomit.R +++ b/tests/testthat/test-step_epi_naomit.R @@ -17,7 +17,7 @@ r <- epi_recipe(x) %>% step_epi_lag(death_rate, lag = c(0, 7, 14)) test_that("Argument must be a recipe", { - expect_error(step_epi_naomit(x)) + expect_snapshot(error = TRUE, step_epi_naomit(x)) }) z1 <- step_epi_naomit(r) diff --git a/tests/testthat/test-step_epi_shift.R b/tests/testthat/test-step_epi_shift.R index da04fd0f2..1f83120b3 100644 --- a/tests/testthat/test-step_epi_shift.R +++ b/tests/testthat/test-step_epi_shift.R @@ -20,7 +20,8 @@ slm_fit <- function(recipe, data = x) { } test_that("Values for ahead and lag must be integer values", { - expect_error( + expect_snapshot( + error = TRUE, r1 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = 3.6) %>% step_epi_lag(death_rate, lag = 1.9) @@ -28,7 +29,8 @@ test_that("Values for ahead and lag must be integer values", { }) test_that("A negative lag value should should throw an error", { - expect_error( + expect_snapshot( + error = TRUE, r2 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = 7) %>% step_epi_lag(death_rate, lag = -7) @@ -36,7 +38,8 @@ test_that("A negative lag value should should throw an error", { }) test_that("A nonpositive ahead value should throw an error", { - expect_error( + expect_snapshot( + error = TRUE, r3 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = -7) %>% step_epi_lag(death_rate, lag = 7) @@ -48,9 +51,7 @@ test_that("Values for ahead and lag cannot be duplicates", { step_epi_ahead(death_rate, ahead = 7) %>% step_epi_lag(death_rate, lag = 7) %>% step_epi_lag(death_rate, lag = 7) - expect_error( - slm_fit(r4) - ) + expect_snapshot(error = TRUE, slm_fit(r4)) }) test_that("Check that epi_lag shifts applies the shift", { diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index 29e046eae..5130d1eb3 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -21,25 +21,25 @@ rolled_after <- edf %>% test_that("epi_slide errors when needed", { # not an epi_recipe - expect_error(recipe(edf) %>% step_epi_slide(value, .f = mean, before = 6L)) + expect_snapshot(error = TRUE, recipe(edf) %>% step_epi_slide(value, .f = mean, before = 6L)) # non-scalar args - expect_error(r %>% step_epi_slide(value, .f = mean, before = c(3L, 6L))) - expect_error(r %>% step_epi_slide(value, .f = mean, after = c(3L, 6L))) - expect_error(r %>% step_epi_slide(value, .f = mean, skip = c(TRUE, FALSE))) - expect_error(r %>% step_epi_slide(value, .f = mean, role = letters[1:2])) - expect_error(r %>% step_epi_slide(value, .f = mean, prefix = letters[1:2])) - expect_error(r %>% step_epi_slide(value, .f = mean, id = letters[1:2])) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = c(3L, 6L))) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, after = c(3L, 6L))) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, skip = c(TRUE, FALSE))) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, role = letters[1:2])) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, prefix = letters[1:2])) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, id = letters[1:2])) # wrong types - expect_error(r %>% step_epi_slide(value, .f = mean, before = 1.5)) - expect_error(r %>% step_epi_slide(value, .f = mean, after = 1.5)) - expect_error(r %>% step_epi_slide(value, .f = mean, skip = "a")) - expect_error(r %>% step_epi_slide(value, .f = mean, role = 1)) - expect_error(r %>% step_epi_slide(value, .f = mean, prefix = 1)) - expect_error(r %>% step_epi_slide(value, .f = mean, id = 1)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1.5)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1.5)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, skip = "a")) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, role = 1)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, prefix = 1)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = mean, before = 1L, after = 1L, id = 1)) # function problems - expect_error(r %>% step_epi_slide(value)) - expect_error(r %>% step_epi_slide(value, .f = 1)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = 1)) }) @@ -53,10 +53,10 @@ test_that("epi_slide handles different function specs", { prep(edf) %>% bake(new_data = NULL) # formula NOT currently supported - expect_error( + expect_snapshot( + error = TRUE, lfun <- r %>% - step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L), - regexp = "cannot be a formula." + step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), before = 3L) ) blfun <- r %>% step_epi_slide(value, .f = function(x) mean(x, na.rm = TRUE), before = 3L) %>% diff --git a/tests/testthat/test-step_growth_rate.R b/tests/testthat/test-step_growth_rate.R index 29a2fc2f5..f2845d812 100644 --- a/tests/testthat/test-step_growth_rate.R +++ b/tests/testthat/test-step_growth_rate.R @@ -1,25 +1,25 @@ test_that("step_growth_rate validates arguments", { df <- data.frame(time_value = 1:5, geo_value = rep("a", 5), value = 6:10) r <- recipes::recipe(df) - expect_error(step_growth_rate(r)) + expect_snapshot(error = TRUE, step_growth_rate(r)) edf <- as_epi_df(df) r <- epi_recipe(edf) - expect_error(step_growth_rate(r, value, role = 1)) - expect_error(step_growth_rate(r, value, method = "abc")) - expect_error(step_growth_rate(r, value, horizon = 0)) - expect_error(step_growth_rate(r, value, horizon = c(1, 2))) - expect_error(step_growth_rate(r, value, prefix = letters[1:2])) - expect_error(step_growth_rate(r, value, id = letters[1:2])) - expect_error(step_growth_rate(r, value, prefix = letters[1:2])) - expect_error(step_growth_rate(r, value, prefix = 1)) - expect_error(step_growth_rate(r, value, id = 1)) - expect_error(step_growth_rate(r, value, log_scale = 1)) - expect_error(step_growth_rate(r, value, skip = 1)) - expect_error(step_growth_rate(r, value, additional_gr_args_list = 1:5)) - expect_error(step_growth_rate(r, value, replace_Inf = "c")) - expect_error(step_growth_rate(r, value, replace_Inf = c(1, 2))) + expect_snapshot(error = TRUE, step_growth_rate(r, value, role = 1)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, method = "abc")) + expect_snapshot(error = TRUE, step_growth_rate(r, value, horizon = 0)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, horizon = c(1, 2))) + expect_snapshot(error = TRUE, step_growth_rate(r, value, prefix = letters[1:2])) + expect_snapshot(error = TRUE, step_growth_rate(r, value, id = letters[1:2])) + expect_snapshot(error = TRUE, step_growth_rate(r, value, prefix = letters[1:2])) + expect_snapshot(error = TRUE, step_growth_rate(r, value, prefix = 1)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, id = 1)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, log_scale = 1)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, skip = 1)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, additional_gr_args_list = 1:5)) + expect_snapshot(error = TRUE, step_growth_rate(r, value, replace_Inf = "c")) + expect_snapshot(error = TRUE, step_growth_rate(r, value, replace_Inf = c(1, 2))) expect_silent(step_growth_rate(r, value, replace_Inf = NULL)) expect_silent(step_growth_rate(r, value, replace_Inf = NA)) }) diff --git a/tests/testthat/test-step_lag_difference.R b/tests/testthat/test-step_lag_difference.R index cd92da1fb..6ff9884a7 100644 --- a/tests/testthat/test-step_lag_difference.R +++ b/tests/testthat/test-step_lag_difference.R @@ -1,20 +1,20 @@ test_that("step_lag_difference validates arguments", { df <- data.frame(time_value = 1:5, geo_value = rep("a", 5), value = 6:10) r <- recipes::recipe(df) - expect_error(step_lag_difference(r)) + expect_snapshot(error = TRUE, step_lag_difference(r)) edf <- as_epi_df(df) r <- epi_recipe(edf) - expect_error(step_lag_difference(r, value, role = 1)) - expect_error(step_lag_difference(r, value, horizon = 0)) + expect_snapshot(error = TRUE, step_lag_difference(r, value, role = 1)) + expect_snapshot(error = TRUE, step_lag_difference(r, value, horizon = 0)) expect_silent(step_lag_difference(r, value, horizon = c(1, 2))) - expect_error(step_lag_difference(r, value, prefix = letters[1:2])) - expect_error(step_lag_difference(r, value, id = letters[1:2])) - expect_error(step_lag_difference(r, value, prefix = letters[1:2])) - expect_error(step_lag_difference(r, value, prefix = 1)) - expect_error(step_lag_difference(r, value, id = 1)) - expect_error(step_lag_difference(r, value, skip = 1)) + expect_snapshot(error = TRUE, step_lag_difference(r, value, prefix = letters[1:2])) + expect_snapshot(error = TRUE, step_lag_difference(r, value, id = letters[1:2])) + expect_snapshot(error = TRUE, step_lag_difference(r, value, prefix = letters[1:2])) + expect_snapshot(error = TRUE, step_lag_difference(r, value, prefix = 1)) + expect_snapshot(error = TRUE, step_lag_difference(r, value, id = 1)) + expect_snapshot(error = TRUE, step_lag_difference(r, value, skip = 1)) }) From 78fbaa0aed72b5142ab479c67b40cd58d84d8652 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 12:41:35 -0700 Subject: [PATCH 375/382] repo: bump version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7819a08d2..b7bb35de9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.21 +Version: 0.0.22 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From bffc03be01c450645cfa2ba4be47cb61b46bedf5 Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 30 Sep 2024 12:45:45 -0700 Subject: [PATCH 376/382] redocument --- man/epi_recipe.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/epi_recipe.Rd b/man/epi_recipe.Rd index c31133ab4..d0105d1ec 100644 --- a/man/epi_recipe.Rd +++ b/man/epi_recipe.Rd @@ -9,7 +9,7 @@ \usage{ epi_recipe(x, ...) -\method{epi_recipe}{default}(x, ..., arg = caller_arg(x)) +\method{epi_recipe}{default}(x, ...) \method{epi_recipe}{epi_df}(x, formula = NULL, ..., vars = NULL, roles = NULL) From 65385e2ee2e7fa56a5f7314cae4d422a2691b258 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 12:46:42 -0700 Subject: [PATCH 377/382] test: add new snapshots --- tests/testthat/_snaps/step_epi_naomit.md | 8 ++ tests/testthat/_snaps/step_epi_shift.md | 36 ++++++ tests/testthat/_snaps/step_epi_slide.md | 129 +++++++++++++++++++ tests/testthat/_snaps/step_growth_rate.md | 121 +++++++++++++++++ tests/testthat/_snaps/step_lag_difference.md | 72 +++++++++++ 5 files changed, 366 insertions(+) create mode 100644 tests/testthat/_snaps/step_epi_naomit.md create mode 100644 tests/testthat/_snaps/step_epi_shift.md create mode 100644 tests/testthat/_snaps/step_epi_slide.md create mode 100644 tests/testthat/_snaps/step_growth_rate.md create mode 100644 tests/testthat/_snaps/step_lag_difference.md diff --git a/tests/testthat/_snaps/step_epi_naomit.md b/tests/testthat/_snaps/step_epi_naomit.md new file mode 100644 index 000000000..653e84d0e --- /dev/null +++ b/tests/testthat/_snaps/step_epi_naomit.md @@ -0,0 +1,8 @@ +# Argument must be a recipe + + Code + step_epi_naomit(x) + Condition + Error in `step_epi_naomit()`: + ! inherits(recipe, "recipe") is not TRUE + diff --git a/tests/testthat/_snaps/step_epi_shift.md b/tests/testthat/_snaps/step_epi_shift.md new file mode 100644 index 000000000..44c828118 --- /dev/null +++ b/tests/testthat/_snaps/step_epi_shift.md @@ -0,0 +1,36 @@ +# Values for ahead and lag must be integer values + + Code + r1 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = 3.6) %>% + step_epi_lag(death_rate, lag = 1.9) + Condition + Error in `step_epi_ahead()`: + ! `ahead` must be a non-negative integer. + +# A negative lag value should should throw an error + + Code + r2 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = 7) %>% step_epi_lag( + death_rate, lag = -7) + Condition + Error in `step_epi_lag()`: + ! `lag` must be a non-negative integer. + +# A nonpositive ahead value should throw an error + + Code + r3 <- epi_recipe(x) %>% step_epi_ahead(death_rate, ahead = -7) %>% step_epi_lag( + death_rate, lag = 7) + Condition + Error in `step_epi_ahead()`: + ! `ahead` must be a non-negative integer. + +# Values for ahead and lag cannot be duplicates + + Code + slm_fit(r4) + Condition + Error in `bake()`: + ! Name collision occured in + The following variable name already exists: "lag_7_death_rate". + diff --git a/tests/testthat/_snaps/step_epi_slide.md b/tests/testthat/_snaps/step_epi_slide.md new file mode 100644 index 000000000..27ca908b7 --- /dev/null +++ b/tests/testthat/_snaps/step_epi_slide.md @@ -0,0 +1,129 @@ +# epi_slide errors when needed + + Code + recipe(edf) %>% step_epi_slide(value, .f = mean, .window_size = 7L) + Condition + Error in `step_epi_slide()`: + ! This recipe step can only operate on an . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = c(3L, 6L)) + Condition + Error in `epiprocess:::validate_slide_window_arg()`: + ! Slide function expected `.window_size` to be a non-null, scalar integer >= 1. + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .align = c("right", "left")) + Condition + Error in `step_epi_slide()`: + ! step_epi_slide: `.window_size` must be specified. + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, skip = c(TRUE, FALSE)) + Condition + Error in `step_epi_slide()`: + ! `skip` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, role = letters[1:2]) + Condition + Error in `step_epi_slide()`: + ! `role` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, prefix = letters[1:2]) + Condition + Error in `step_epi_slide()`: + ! `prefix` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, id = letters[1:2]) + Condition + Error in `step_epi_slide()`: + ! `id` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1.5) + Condition + Error in `epiprocess:::validate_slide_window_arg()`: + ! Slide function expected `.window_size` to be a difftime with units in days or non-negative integer or Inf. + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, .align = 1.5) + Condition + Error in `step_epi_slide()`: + ! `.align` must be a character vector, not the number 1.5. + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, skip = "a") + Condition + Error in `step_epi_slide()`: + ! `skip` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, role = 1) + Condition + Error in `step_epi_slide()`: + ! `role` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, prefix = 1) + Condition + Error in `step_epi_slide()`: + ! `prefix` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value, .f = mean, .window_size = 1L, id = 1) + Condition + Error in `step_epi_slide()`: + ! `id` must be a scalar of type . + +--- + + Code + r %>% step_epi_slide(value) + Condition + Error in `step_epi_slide()`: + ! argument ".f" is missing, with no default + +--- + + Code + r %>% step_epi_slide(value, .f = 1) + Condition + Error in `validate_slide_fun()`: + ! In, `step_epi_slide()`, `.f` must be a function. + +# epi_slide handles different function specs + + Code + lfun <- r %>% step_epi_slide(value, .f = ~ mean(.x, na.rm = TRUE), + .window_size = 4L) + Condition + Error in `validate_slide_fun()`: + ! In, `step_epi_slide()`, `.f` cannot be a formula. + diff --git a/tests/testthat/_snaps/step_growth_rate.md b/tests/testthat/_snaps/step_growth_rate.md new file mode 100644 index 000000000..5a3ac6f44 --- /dev/null +++ b/tests/testthat/_snaps/step_growth_rate.md @@ -0,0 +1,121 @@ +# step_growth_rate validates arguments + + Code + step_growth_rate(r) + Condition + Error in `step_growth_rate()`: + ! This recipe step can only operate on an . + +--- + + Code + step_growth_rate(r, value, role = 1) + Condition + Error in `step_growth_rate()`: + ! `role` must be of type . + +--- + + Code + step_growth_rate(r, value, method = "abc") + Condition + Error in `step_growth_rate()`: + ! `method` must be one of "rel_change" or "linear_reg", not "abc". + +--- + + Code + step_growth_rate(r, value, horizon = 0) + Condition + Error in `step_growth_rate()`: + ! `horizon` must be a positive integer. + +--- + + Code + step_growth_rate(r, value, horizon = c(1, 2)) + Condition + Error in `step_growth_rate()`: + ! `horizon` must be a scalar. + +--- + + Code + step_growth_rate(r, value, prefix = letters[1:2]) + Condition + Error in `step_growth_rate()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, id = letters[1:2]) + Condition + Error in `step_growth_rate()`: + ! `id` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, prefix = letters[1:2]) + Condition + Error in `step_growth_rate()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, prefix = 1) + Condition + Error in `step_growth_rate()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, id = 1) + Condition + Error in `step_growth_rate()`: + ! `id` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, log_scale = 1) + Condition + Error in `step_growth_rate()`: + ! `log_scale` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, skip = 1) + Condition + Error in `step_growth_rate()`: + ! `skip` must be a scalar of type . + +--- + + Code + step_growth_rate(r, value, additional_gr_args_list = 1:5) + Condition + Error in `step_growth_rate()`: + ! `additional_gr_args_list` must be a . + i See `?epiprocess::growth_rate` for available options. + +--- + + Code + step_growth_rate(r, value, replace_Inf = "c") + Condition + Error in `step_growth_rate()`: + ! `replace_Inf` must be of type . + +--- + + Code + step_growth_rate(r, value, replace_Inf = c(1, 2)) + Condition + Error in `step_growth_rate()`: + ! replace_Inf must be a scalar. + diff --git a/tests/testthat/_snaps/step_lag_difference.md b/tests/testthat/_snaps/step_lag_difference.md new file mode 100644 index 000000000..4edc9c287 --- /dev/null +++ b/tests/testthat/_snaps/step_lag_difference.md @@ -0,0 +1,72 @@ +# step_lag_difference validates arguments + + Code + step_lag_difference(r) + Condition + Error in `step_lag_difference()`: + ! This recipe step can only operate on an . + +--- + + Code + step_lag_difference(r, value, role = 1) + Condition + Error in `step_lag_difference()`: + ! `role` must be of type . + +--- + + Code + step_lag_difference(r, value, horizon = 0) + Condition + Error in `step_lag_difference()`: + ! `horizon` must be a positive integer. + +--- + + Code + step_lag_difference(r, value, prefix = letters[1:2]) + Condition + Error in `step_lag_difference()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_lag_difference(r, value, id = letters[1:2]) + Condition + Error in `step_lag_difference()`: + ! `id` must be a scalar of type . + +--- + + Code + step_lag_difference(r, value, prefix = letters[1:2]) + Condition + Error in `step_lag_difference()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_lag_difference(r, value, prefix = 1) + Condition + Error in `step_lag_difference()`: + ! `prefix` must be a scalar of type . + +--- + + Code + step_lag_difference(r, value, id = 1) + Condition + Error in `step_lag_difference()`: + ! `id` must be a scalar of type . + +--- + + Code + step_lag_difference(r, value, skip = 1) + Condition + Error in `step_lag_difference()`: + ! `skip` must be a scalar of type . + From addb2ae187442b61450e7476aeb3b8cbbfc64967 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 13:12:29 -0700 Subject: [PATCH 378/382] repo: bump version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7bdc31a6e..7e12a5dc6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.21 +Version: 0.0.23 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From 434262ab56727fbb3f5a2d4e73ec40f6d1e1b5ef Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 13:33:20 -0700 Subject: [PATCH 379/382] repo: bump version --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index c0e9e7656..26093014c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.23 +Version: 0.0.24 Authors@R: c( person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), From cebc6723270a1e01caf4047852d054cc572f4bfd Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 14:39:06 -0700 Subject: [PATCH 380/382] repo: fix imports and remove unused standalone files --- DESCRIPTION | 1 + NAMESPACE | 12 - R/epipredict-package.R | 10 +- R/import-standalone-lifecycle.R | 254 -------------- R/import-standalone-obj-type.R | 363 -------------------- R/import-standalone-types-check.R | 553 ------------------------------ R/pivot_quantiles.R | 2 +- man/autoplot-epipred.Rd | 2 - 8 files changed, 7 insertions(+), 1190 deletions(-) delete mode 100644 R/import-standalone-lifecycle.R delete mode 100644 R/import-standalone-obj-type.R delete mode 100644 R/import-standalone-types-check.R diff --git a/DESCRIPTION b/DESCRIPTION index 26093014c..c76280d45 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,6 +35,7 @@ Imports: ggplot2, glue, hardhat (>= 1.3.0), + lifecycle, magrittr, recipes (>= 1.0.4), rlang (>= 1.1.0), diff --git a/NAMESPACE b/NAMESPACE index ea516dbde..e815203eb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -273,24 +273,12 @@ importFrom(rlang,caller_arg) importFrom(rlang,caller_env) importFrom(rlang,enquo) importFrom(rlang,enquos) -importFrom(rlang,env_get_list) importFrom(rlang,expr) importFrom(rlang,global_env) importFrom(rlang,inject) -importFrom(rlang,is_call) -importFrom(rlang,is_character) -importFrom(rlang,is_closure) -importFrom(rlang,is_environment) -importFrom(rlang,is_formula) -importFrom(rlang,is_function) -importFrom(rlang,is_list) importFrom(rlang,is_logical) -importFrom(rlang,is_missing) importFrom(rlang,is_null) -importFrom(rlang,is_string) -importFrom(rlang,is_symbol) importFrom(rlang,is_true) -importFrom(rlang,is_vector) importFrom(rlang,set_names) importFrom(rlang,sym) importFrom(stats,as.formula) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index adde4967d..ad0f95295 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,13 +1,13 @@ ## usethis namespace: start #' @import epiprocess parsnip -#' @importFrom checkmate assert assert_character assert_int assert_scalar -#' @importFrom checkmate assert_logical assert_numeric assert_number -#' @importFrom checkmate assert_integer assert_integerish -#' @importFrom checkmate assert_date assert_function assert_class +#' @importFrom checkmate assert_class assert_numeric +#' @importFrom checkmate test_character test_date test_function +#' @importFrom checkmate test_integerish test_logical +#' @importFrom checkmate test_numeric test_scalar #' @importFrom cli cli_abort cli_warn #' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by -#' @importFrom dplyr summarize filter mutate select left_join rename ungroup #' @importFrom dplyr full_join relocate summarise everything +#' @importFrom dplyr summarize filter mutate select left_join rename ungroup #' @importFrom rlang := !! %||% as_function global_env set_names !!! caller_arg #' @importFrom rlang is_logical is_true inject enquo enquos expr sym arg_match #' @importFrom stats poly predict lm residuals quantile diff --git a/R/import-standalone-lifecycle.R b/R/import-standalone-lifecycle.R deleted file mode 100644 index a1be17134..000000000 --- a/R/import-standalone-lifecycle.R +++ /dev/null @@ -1,254 +0,0 @@ -# Standalone file: do not edit by hand -# Source: -# ---------------------------------------------------------------------- -# -# --- -# repo: r-lib/rlang -# file: standalone-lifecycle.R -# last-updated: 2023-02-23 -# license: https://unlicense.org -# imports: rlang (>= 1.0.0) -# --- -# -# This file serves as a reference for currently unexported rlang -# lifecycle functions. These functions require rlang in your `Imports` -# DESCRIPTION field but you don't need to import rlang in your -# namespace. -# -# ## Changelog -# -# 2023-02-23 -# -# - Updated the API and internals to match modern lifecycle tools. -# -# -# 2021-04-19 -# -# - Removed `lifecycle()` function. You can now use the following in -# your roxygen documentation to inline a badge: -# -# ``` -# `r lifecycle::badge()` -# ``` -# -# This is a build-time dependency on lifecycle so there is no need -# to add lifecycle to Imports just to use badges. See also -# `?usethis::use_lifecycle()` for importing or updating the badge -# images in your package. -# -# - Soft-namespaced private objects. -# -# nocov start - - -#' Signal deprecation -#' -#' @description -#' These functions provide two levels of verbosity for deprecation -#' warnings. -#' -#' * `deprecate_soft()` warns only if called directly: from the global -#' environment (so the user can change their script) or from the -#' package currently being tested (so the package developer can fix -#' the package). -#' -#' * `deprecate_warn()` warns unconditionally. -#' -#' * `deprecate_stop()` fails unconditionally. -#' -#' Both functions warn only once per session by default to avoid -#' overwhelming the user with repeated warnings. -#' -#' @param msg The deprecation message. -#' @param id The id of the deprecation. A warning is issued only once -#' for each `id`. Defaults to `msg`, but you should give a unique ID -#' when the message is built programmatically and depends on inputs. -#' @param user_env The environment in which the deprecated function -#' was called. The verbosity depends on whether the deprecated -#' feature was called directly, see [rlang::env_is_user_facing()] and the -#' documentation in the lifecycle package. -#' -#' @section Controlling verbosity: -#' -#' The verbosity of retirement warnings can be controlled with global -#' options. You'll generally want to set these options locally with -#' one of these helpers: -#' -#' * `with_lifecycle_silence()` disables all soft-deprecation and -#' deprecation warnings. -#' -#' * `with_lifecycle_warnings()` enforces warnings for both -#' soft-deprecated and deprecated functions. The warnings are -#' repeated rather than signalled once per session. -#' -#' * `with_lifecycle_errors()` enforces errors for both -#' soft-deprecated and deprecated functions. -#' -#' All the `with_` helpers have `scoped_` variants that are -#' particularly useful in testthat blocks. -#' -#' @noRd -NULL - -deprecate_soft <- function(msg, - id = msg, - user_env = rlang::caller_env(2)) { - .rlang_lifecycle_signal_stage(msg, "deprecated") - - id <- paste(id, collapse = "\n") - verbosity <- .rlang_lifecycle_verbosity() - - invisible(switch( - verbosity, - quiet = NULL, - warning = , - default = - if (rlang::env_is_user_facing(user_env)) { - always <- verbosity == "warning" - trace <- rlang::trace_back(bottom = caller_env()) - .rlang_lifecycle_deprecate_warn0( - msg, - id = id, - trace = trace, - always = always - ) - }, - error = deprecate_stop(msg) - )) -} - -deprecate_warn <- function(msg, - id = msg, - always = FALSE, - user_env = rlang::caller_env(2)) { - .rlang_lifecycle_signal_stage(msg, "deprecated") - - id <- paste(id, collapse = "\n") - verbosity <- .rlang_lifecycle_verbosity() - - invisible(switch( - verbosity, - quiet = NULL, - warning = , - default = { - direct <- rlang::env_is_user_facing(user_env) - always <- direct && (always || verbosity == "warning") - - trace <- tryCatch( - rlang::trace_back(bottom = rlang::caller_env()), - error = function(...) NULL - ) - - .rlang_lifecycle_deprecate_warn0( - msg, - id = id, - trace = trace, - always = always - ) - }, - error = deprecate_stop(msg), - )) -} - -.rlang_lifecycle_deprecate_warn0 <- function(msg, - id = msg, - trace = NULL, - always = FALSE, - call = rlang::caller_env()) { - if (always) { - freq <- "always" - } else { - freq <- "regularly" - } - - rlang::warn( - msg, - class = "lifecycle_warning_deprecated", - .frequency = freq, - .frequency_id = id - ) -} - -deprecate_stop <- function(msg) { - msg <- cli::format_error(msg) - .rlang_lifecycle_signal_stage(msg, "deprecated") - - stop(rlang::cnd( - c("defunctError", "error", "condition"), - old = NULL, - new = NULL, - package = NULL, - message = msg - )) -} - -.rlang_lifecycle_signal_stage <- function(msg, stage) { - rlang::signal(msg, "lifecycle_stage", stage = stage) -} - -expect_deprecated <- function(expr, regexp = NULL, ...) { - rlang::local_options(lifecycle_verbosity = "warning") - - if (!is.null(regexp) && rlang::is_na(regexp)) { - rlang::abort("`regexp` can't be `NA`.") - } - - testthat::expect_warning( - {{ expr }}, - regexp = regexp, - class = "lifecycle_warning_deprecated", - ... - ) -} - -local_lifecycle_silence <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "quiet" - ) -} -with_lifecycle_silence <- function(expr) { - local_lifecycle_silence() - expr -} - -local_lifecycle_warnings <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "warning" - ) -} -with_lifecycle_warnings <- function(expr) { - local_lifecycle_warnings() - expr -} - -local_lifecycle_errors <- function(frame = rlang::caller_env()) { - rlang::local_options( - .frame = frame, - lifecycle_verbosity = "error" - ) -} -with_lifecycle_errors <- function(expr) { - local_lifecycle_errors() - expr -} - -.rlang_lifecycle_verbosity <- function() { - opt <- getOption("lifecycle_verbosity", "default") - - if (!rlang::is_string(opt, c("quiet", "default", "warning", "error"))) { - options(lifecycle_verbosity = "default") - rlang::warn(glue::glue( - " - The `lifecycle_verbosity` option must be set to one of: - \"quiet\", \"default\", \"warning\", or \"error\". - Resetting to \"default\". - " - )) - } - - opt -} - -# nocov end diff --git a/R/import-standalone-obj-type.R b/R/import-standalone-obj-type.R deleted file mode 100644 index 646aa33fc..000000000 --- a/R/import-standalone-obj-type.R +++ /dev/null @@ -1,363 +0,0 @@ -# Standalone file: do not edit by hand -# Source: -# ---------------------------------------------------------------------- -# -# --- -# repo: r-lib/rlang -# file: standalone-obj-type.R -# last-updated: 2024-02-14 -# license: https://unlicense.org -# imports: rlang (>= 1.1.0) -# --- -# -# ## Changelog -# -# 2024-02-14: -# - `obj_type_friendly()` now works for S7 objects. -# -# 2023-05-01: -# - `obj_type_friendly()` now only displays the first class of S3 objects. -# -# 2023-03-30: -# - `stop_input_type()` now handles `I()` input literally in `arg`. -# -# 2022-10-04: -# - `obj_type_friendly(value = TRUE)` now shows numeric scalars -# literally. -# - `stop_friendly_type()` now takes `show_value`, passed to -# `obj_type_friendly()` as the `value` argument. -# -# 2022-10-03: -# - Added `allow_na` and `allow_null` arguments. -# - `NULL` is now backticked. -# - Better friendly type for infinities and `NaN`. -# -# 2022-09-16: -# - Unprefixed usage of rlang functions with `rlang::` to -# avoid onLoad issues when called from rlang (#1482). -# -# 2022-08-11: -# - Prefixed usage of rlang functions with `rlang::`. -# -# 2022-06-22: -# - `friendly_type_of()` is now `obj_type_friendly()`. -# - Added `obj_type_oo()`. -# -# 2021-12-20: -# - Added support for scalar values and empty vectors. -# - Added `stop_input_type()` -# -# 2021-06-30: -# - Added support for missing arguments. -# -# 2021-04-19: -# - Added support for matrices and arrays (#141). -# - Added documentation. -# - Added changelog. -# -# nocov start - -#' Return English-friendly type -#' @param x Any R object. -#' @param value Whether to describe the value of `x`. Special values -#' like `NA` or `""` are always described. -#' @param length Whether to mention the length of vectors and lists. -#' @return A string describing the type. Starts with an indefinite -#' article, e.g. "an integer vector". -#' @noRd -obj_type_friendly <- function(x, value = TRUE) { - if (is_missing(x)) { - return("absent") - } - - if (is.object(x)) { - if (inherits(x, "quosure")) { - type <- "quosure" - } else { - type <- class(x)[[1L]] - } - return(sprintf("a <%s> object", type)) - } - - if (!is_vector(x)) { - return(.rlang_as_friendly_type(typeof(x))) - } - - n_dim <- length(dim(x)) - - if (!n_dim) { - if (!is_list(x) && length(x) == 1) { - if (is_na(x)) { - return(switch( - typeof(x), - logical = "`NA`", - integer = "an integer `NA`", - double = - if (is.nan(x)) { - "`NaN`" - } else { - "a numeric `NA`" - }, - complex = "a complex `NA`", - character = "a character `NA`", - .rlang_stop_unexpected_typeof(x) - )) - } - - show_infinites <- function(x) { - if (x > 0) { - "`Inf`" - } else { - "`-Inf`" - } - } - str_encode <- function(x, width = 30, ...) { - if (nchar(x) > width) { - x <- substr(x, 1, width - 3) - x <- paste0(x, "...") - } - encodeString(x, ...) - } - - if (value) { - if (is.numeric(x) && is.infinite(x)) { - return(show_infinites(x)) - } - - if (is.numeric(x) || is.complex(x)) { - number <- as.character(round(x, 2)) - what <- if (is.complex(x)) "the complex number" else "the number" - return(paste(what, number)) - } - - return(switch( - typeof(x), - logical = if (x) "`TRUE`" else "`FALSE`", - character = { - what <- if (nzchar(x)) "the string" else "the empty string" - paste(what, str_encode(x, quote = "\"")) - }, - raw = paste("the raw value", as.character(x)), - .rlang_stop_unexpected_typeof(x) - )) - } - - return(switch( - typeof(x), - logical = "a logical value", - integer = "an integer", - double = if (is.infinite(x)) show_infinites(x) else "a number", - complex = "a complex number", - character = if (nzchar(x)) "a string" else "\"\"", - raw = "a raw value", - .rlang_stop_unexpected_typeof(x) - )) - } - - if (length(x) == 0) { - return(switch( - typeof(x), - logical = "an empty logical vector", - integer = "an empty integer vector", - double = "an empty numeric vector", - complex = "an empty complex vector", - character = "an empty character vector", - raw = "an empty raw vector", - list = "an empty list", - .rlang_stop_unexpected_typeof(x) - )) - } - } - - vec_type_friendly(x) -} - -vec_type_friendly <- function(x, length = FALSE) { - if (!is_vector(x)) { - abort("`x` must be a vector.") - } - type <- typeof(x) - n_dim <- length(dim(x)) - - add_length <- function(type) { - if (length && !n_dim) { - paste0(type, sprintf(" of length %s", length(x))) - } else { - type - } - } - - if (type == "list") { - if (n_dim < 2) { - return(add_length("a list")) - } else if (is.data.frame(x)) { - return("a data frame") - } else if (n_dim == 2) { - return("a list matrix") - } else { - return("a list array") - } - } - - type <- switch( - type, - logical = "a logical %s", - integer = "an integer %s", - numeric = , - double = "a double %s", - complex = "a complex %s", - character = "a character %s", - raw = "a raw %s", - type = paste0("a ", type, " %s") - ) - - if (n_dim < 2) { - kind <- "vector" - } else if (n_dim == 2) { - kind <- "matrix" - } else { - kind <- "array" - } - out <- sprintf(type, kind) - - if (n_dim >= 2) { - out - } else { - add_length(out) - } -} - -.rlang_as_friendly_type <- function(type) { - switch( - type, - - list = "a list", - - NULL = "`NULL`", - environment = "an environment", - externalptr = "a pointer", - weakref = "a weak reference", - S4 = "an S4 object", - - name = , - symbol = "a symbol", - language = "a call", - pairlist = "a pairlist node", - expression = "an expression vector", - - char = "an internal string", - promise = "an internal promise", - ... = "an internal dots object", - any = "an internal `any` object", - bytecode = "an internal bytecode object", - - primitive = , - builtin = , - special = "a primitive function", - closure = "a function", - - type - ) -} - -.rlang_stop_unexpected_typeof <- function(x, call = caller_env()) { - abort( - sprintf("Unexpected type <%s>.", typeof(x)), - call = call - ) -} - -#' Return OO type -#' @param x Any R object. -#' @return One of `"bare"` (for non-OO objects), `"S3"`, `"S4"`, -#' `"R6"`, or `"S7"`. -#' @noRd -obj_type_oo <- function(x) { - if (!is.object(x)) { - return("bare") - } - - class <- inherits(x, c("R6", "S7_object"), which = TRUE) - - if (class[[1]]) { - "R6" - } else if (class[[2]]) { - "S7" - } else if (isS4(x)) { - "S4" - } else { - "S3" - } -} - -#' @param x The object type which does not conform to `what`. Its -#' `obj_type_friendly()` is taken and mentioned in the error message. -#' @param what The friendly expected type as a string. Can be a -#' character vector of expected types, in which case the error -#' message mentions all of them in an "or" enumeration. -#' @param show_value Passed to `value` argument of `obj_type_friendly()`. -#' @param ... Arguments passed to [abort()]. -#' @inheritParams args_error_context -#' @noRd -stop_input_type <- function(x, - what, - ..., - allow_na = FALSE, - allow_null = FALSE, - show_value = TRUE, - arg = caller_arg(x), - call = caller_env()) { - # From standalone-cli.R - cli <- env_get_list( - nms = c("format_arg", "format_code"), - last = topenv(), - default = function(x) sprintf("`%s`", x), - inherit = TRUE - ) - - if (allow_na) { - what <- c(what, cli$format_code("NA")) - } - if (allow_null) { - what <- c(what, cli$format_code("NULL")) - } - if (length(what)) { - what <- oxford_comma(what) - } - if (inherits(arg, "AsIs")) { - format_arg <- identity - } else { - format_arg <- cli$format_arg - } - - message <- sprintf( - "%s must be %s, not %s.", - format_arg(arg), - what, - obj_type_friendly(x, value = show_value) - ) - - abort(message, ..., call = call, arg = arg) -} - -oxford_comma <- function(chr, sep = ", ", final = "or") { - n <- length(chr) - - if (n < 2) { - return(chr) - } - - head <- chr[seq_len(n - 1)] - last <- chr[n] - - head <- paste(head, collapse = sep) - - # Write a or b. But a, b, or c. - if (n > 2) { - paste0(head, sep, final, " ", last) - } else { - paste0(head, " ", final, " ", last) - } -} - -# nocov end diff --git a/R/import-standalone-types-check.R b/R/import-standalone-types-check.R deleted file mode 100644 index 1ca83997d..000000000 --- a/R/import-standalone-types-check.R +++ /dev/null @@ -1,553 +0,0 @@ -# Standalone file: do not edit by hand -# Source: -# ---------------------------------------------------------------------- -# -# --- -# repo: r-lib/rlang -# file: standalone-types-check.R -# last-updated: 2023-03-13 -# license: https://unlicense.org -# dependencies: standalone-obj-type.R -# imports: rlang (>= 1.1.0) -# --- -# -# ## Changelog -# -# 2024-08-15: -# - `check_character()` gains an `allow_na` argument (@martaalcalde, #1724) -# -# 2023-03-13: -# - Improved error messages of number checkers (@teunbrand) -# - Added `allow_infinite` argument to `check_number_whole()` (@mgirlich). -# - Added `check_data_frame()` (@mgirlich). -# -# 2023-03-07: -# - Added dependency on rlang (>= 1.1.0). -# -# 2023-02-15: -# - Added `check_logical()`. -# -# - `check_bool()`, `check_number_whole()`, and -# `check_number_decimal()` are now implemented in C. -# -# - For efficiency, `check_number_whole()` and -# `check_number_decimal()` now take a `NULL` default for `min` and -# `max`. This makes it possible to bypass unnecessary type-checking -# and comparisons in the default case of no bounds checks. -# -# 2022-10-07: -# - `check_number_whole()` and `_decimal()` no longer treat -# non-numeric types such as factors or dates as numbers. Numeric -# types are detected with `is.numeric()`. -# -# 2022-10-04: -# - Added `check_name()` that forbids the empty string. -# `check_string()` allows the empty string by default. -# -# 2022-09-28: -# - Removed `what` arguments. -# - Added `allow_na` and `allow_null` arguments. -# - Added `allow_decimal` and `allow_infinite` arguments. -# - Improved errors with absent arguments. -# -# -# 2022-09-16: -# - Unprefixed usage of rlang functions with `rlang::` to -# avoid onLoad issues when called from rlang (#1482). -# -# 2022-08-11: -# - Added changelog. -# -# nocov start - -# Scalars ----------------------------------------------------------------- - -.standalone_types_check_dot_call <- .Call - -check_bool <- function(x, - ..., - allow_na = FALSE, - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x) && .standalone_types_check_dot_call(ffi_standalone_is_bool_1.0.7, x, allow_na, allow_null)) { - return(invisible(NULL)) - } - - stop_input_type( - x, - c("`TRUE`", "`FALSE`"), - ..., - allow_na = allow_na, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_string <- function(x, - ..., - allow_empty = TRUE, - allow_na = FALSE, - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - is_string <- .rlang_check_is_string( - x, - allow_empty = allow_empty, - allow_na = allow_na, - allow_null = allow_null - ) - if (is_string) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a single string", - ..., - allow_na = allow_na, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -.rlang_check_is_string <- function(x, - allow_empty, - allow_na, - allow_null) { - if (is_string(x)) { - if (allow_empty || !is_string(x, "")) { - return(TRUE) - } - } - - if (allow_null && is_null(x)) { - return(TRUE) - } - - if (allow_na && (identical(x, NA) || identical(x, na_chr))) { - return(TRUE) - } - - FALSE -} - -check_name <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - is_string <- .rlang_check_is_string( - x, - allow_empty = FALSE, - allow_na = FALSE, - allow_null = allow_null - ) - if (is_string) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a valid name", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -IS_NUMBER_true <- 0 -IS_NUMBER_false <- 1 -IS_NUMBER_oob <- 2 - -check_number_decimal <- function(x, - ..., - min = NULL, - max = NULL, - allow_infinite = TRUE, - allow_na = FALSE, - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (missing(x)) { - exit_code <- IS_NUMBER_false - } else if (0 == (exit_code <- .standalone_types_check_dot_call( - ffi_standalone_check_number_1.0.7, - x, - allow_decimal = TRUE, - min, - max, - allow_infinite, - allow_na, - allow_null - ))) { - return(invisible(NULL)) - } - - .stop_not_number( - x, - ..., - exit_code = exit_code, - allow_decimal = TRUE, - min = min, - max = max, - allow_na = allow_na, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_number_whole <- function(x, - ..., - min = NULL, - max = NULL, - allow_infinite = FALSE, - allow_na = FALSE, - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (missing(x)) { - exit_code <- IS_NUMBER_false - } else if (0 == (exit_code <- .standalone_types_check_dot_call( - ffi_standalone_check_number_1.0.7, - x, - allow_decimal = FALSE, - min, - max, - allow_infinite, - allow_na, - allow_null - ))) { - return(invisible(NULL)) - } - - .stop_not_number( - x, - ..., - exit_code = exit_code, - allow_decimal = FALSE, - min = min, - max = max, - allow_na = allow_na, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -.stop_not_number <- function(x, - ..., - exit_code, - allow_decimal, - min, - max, - allow_na, - allow_null, - arg, - call) { - if (allow_decimal) { - what <- "a number" - } else { - what <- "a whole number" - } - - if (exit_code == IS_NUMBER_oob) { - min <- min %||% -Inf - max <- max %||% Inf - - if (min > -Inf && max < Inf) { - what <- sprintf("%s between %s and %s", what, min, max) - } else if (x < min) { - what <- sprintf("%s larger than or equal to %s", what, min) - } else if (x > max) { - what <- sprintf("%s smaller than or equal to %s", what, max) - } else { - abort("Unexpected state in OOB check", .internal = TRUE) - } - } - - stop_input_type( - x, - what, - ..., - allow_na = allow_na, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_symbol <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_symbol(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a symbol", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_arg <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_symbol(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "an argument name", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_call <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_call(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a defused call", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_environment <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_environment(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "an environment", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_function <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_function(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a function", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_closure <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_closure(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "an R function", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_formula <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_formula(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a formula", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - - -# Vectors ----------------------------------------------------------------- - -# TODO: Figure out what to do with logical `NA` and `allow_na = TRUE` - -check_character <- function(x, - ..., - allow_na = TRUE, - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - - if (!missing(x)) { - if (is_character(x)) { - if (!allow_na && any(is.na(x))) { - abort( - sprintf("`%s` can't contain NA values.", arg), - arg = arg, - call = call - ) - } - - return(invisible(NULL)) - } - - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a character vector", - ..., - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_logical <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is_logical(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a logical vector", - ..., - allow_na = FALSE, - allow_null = allow_null, - arg = arg, - call = call - ) -} - -check_data_frame <- function(x, - ..., - allow_null = FALSE, - arg = caller_arg(x), - call = caller_env()) { - if (!missing(x)) { - if (is.data.frame(x)) { - return(invisible(NULL)) - } - if (allow_null && is_null(x)) { - return(invisible(NULL)) - } - } - - stop_input_type( - x, - "a data frame", - ..., - allow_null = allow_null, - arg = arg, - call = call - ) -} - -# nocov end diff --git a/R/pivot_quantiles.R b/R/pivot_quantiles.R index c8601b4f6..f014961e6 100644 --- a/R/pivot_quantiles.R +++ b/R/pivot_quantiles.R @@ -148,7 +148,7 @@ pivot_quantiles <- function(.data, ...) { "{.fn pivot_quantiles} was deprecated in {.pkg epipredict} 0.0.6", i = "Please use {.fn pivot_quantiles_wider} instead." ) - deprecate_stop(msg) + lifecycle::deprecate_stop(msg) } validate_pivot_quantiles <- function(.data, ...) { diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 10236eb98..27bfdf5f7 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -121,6 +121,4 @@ arx <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), args_list = arx_args_list(ahead = 14L) ) autoplot(arx, .max_facets = 6) -NULL - } From f588f0a28f9bcac1612bd7fc3e7016e5fd28ec71 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Mon, 30 Sep 2024 13:37:51 -0700 Subject: [PATCH 381/382] tests: snapshot tests on errors --- NAMESPACE | 12 -- R/epipredict-package.R | 8 +- man/autoplot-epipred.Rd | 2 - tests/testthat/_snaps/arx_args_list.md | 152 ++++++++++++++++++ tests/testthat/_snaps/arx_cargs_list.md | 92 +++++++++++ tests/testthat/_snaps/bake-method.md | 9 ++ tests/testthat/_snaps/check-training-set.md | 20 +++ .../_snaps/check_enough_train_data.md | 46 ++++++ tests/testthat/_snaps/dist_quantiles.md | 56 +++++++ tests/testthat/_snaps/enframer.md | 32 ++++ tests/testthat/_snaps/epi_recipe.md | 8 + tests/testthat/_snaps/epi_workflow.md | 17 ++ tests/testthat/_snaps/extract_argument.md | 72 +++++++++ tests/testthat/_snaps/flatline_args_list.md | 128 +++++++++++++++ tests/testthat/_snaps/frosting.md | 16 ++ tests/testthat/_snaps/get_test_data.md | 66 ++++++++ .../_snaps/layer_add_forecast_date.md | 42 +++++ .../testthat/_snaps/layer_add_target_date.md | 8 + tests/testthat/_snaps/layer_predict.md | 8 + .../_snaps/layer_residual_quantiles.md | 18 +++ tests/testthat/_snaps/layers.md | 24 +++ tests/testthat/_snaps/parse_period.md | 32 ++++ .../_snaps/parsnip_model_validation.md | 18 +++ tests/testthat/_snaps/pivot_quantiles.md | 51 ++++++ tests/testthat/_snaps/population_scaling.md | 16 ++ tests/testthat/_snaps/shuffle.md | 8 + tests/testthat/_snaps/step_epi_slide.md | 16 ++ tests/testthat/_snaps/wis-dist-quantiles.md | 17 ++ tests/testthat/test-arx_args_list.R | 36 ++--- tests/testthat/test-arx_cargs_list.R | 22 +-- tests/testthat/test-bake-method.R | 2 +- tests/testthat/test-check-training-set.R | 4 +- tests/testthat/test-check_enough_train_data.R | 21 +-- tests/testthat/test-dist_quantiles.R | 14 +- tests/testthat/test-enframer.R | 8 +- tests/testthat/test-epi_recipe.R | 2 +- tests/testthat/test-epi_workflow.R | 4 +- tests/testthat/test-extract_argument.R | 18 +-- tests/testthat/test-flatline_args_list.R | 30 ++-- tests/testthat/test-frosting.R | 4 +- tests/testthat/test-get_test_data.R | 16 +- tests/testthat/test-layer_add_forecast_date.R | 10 +- tests/testthat/test-layer_add_target_date.R | 2 +- tests/testthat/test-layer_predict.R | 2 +- .../testthat/test-layer_residual_quantiles.R | 8 +- tests/testthat/test-layers.R | 6 +- tests/testthat/test-parse_period.R | 8 +- .../testthat/test-parsnip_model_validation.R | 4 +- tests/testthat/test-pivot_quantiles.R | 12 +- tests/testthat/test-population_scaling.R | 5 +- tests/testthat/test-shuffle.R | 2 +- tests/testthat/test-step_epi_slide.R | 2 + tests/testthat/test-wis-dist-quantiles.R | 4 +- 53 files changed, 1102 insertions(+), 138 deletions(-) create mode 100644 tests/testthat/_snaps/arx_args_list.md create mode 100644 tests/testthat/_snaps/arx_cargs_list.md create mode 100644 tests/testthat/_snaps/bake-method.md create mode 100644 tests/testthat/_snaps/check-training-set.md create mode 100644 tests/testthat/_snaps/check_enough_train_data.md create mode 100644 tests/testthat/_snaps/dist_quantiles.md create mode 100644 tests/testthat/_snaps/enframer.md create mode 100644 tests/testthat/_snaps/extract_argument.md create mode 100644 tests/testthat/_snaps/flatline_args_list.md create mode 100644 tests/testthat/_snaps/frosting.md create mode 100644 tests/testthat/_snaps/get_test_data.md create mode 100644 tests/testthat/_snaps/layer_add_forecast_date.md create mode 100644 tests/testthat/_snaps/layer_add_target_date.md create mode 100644 tests/testthat/_snaps/layer_predict.md create mode 100644 tests/testthat/_snaps/layer_residual_quantiles.md create mode 100644 tests/testthat/_snaps/layers.md create mode 100644 tests/testthat/_snaps/parse_period.md create mode 100644 tests/testthat/_snaps/parsnip_model_validation.md create mode 100644 tests/testthat/_snaps/pivot_quantiles.md create mode 100644 tests/testthat/_snaps/population_scaling.md create mode 100644 tests/testthat/_snaps/shuffle.md create mode 100644 tests/testthat/_snaps/wis-dist-quantiles.md diff --git a/NAMESPACE b/NAMESPACE index ea516dbde..e815203eb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -273,24 +273,12 @@ importFrom(rlang,caller_arg) importFrom(rlang,caller_env) importFrom(rlang,enquo) importFrom(rlang,enquos) -importFrom(rlang,env_get_list) importFrom(rlang,expr) importFrom(rlang,global_env) importFrom(rlang,inject) -importFrom(rlang,is_call) -importFrom(rlang,is_character) -importFrom(rlang,is_closure) -importFrom(rlang,is_environment) -importFrom(rlang,is_formula) -importFrom(rlang,is_function) -importFrom(rlang,is_list) importFrom(rlang,is_logical) -importFrom(rlang,is_missing) importFrom(rlang,is_null) -importFrom(rlang,is_string) -importFrom(rlang,is_symbol) importFrom(rlang,is_true) -importFrom(rlang,is_vector) importFrom(rlang,set_names) importFrom(rlang,sym) importFrom(stats,as.formula) diff --git a/R/epipredict-package.R b/R/epipredict-package.R index adde4967d..b6550c6b4 100644 --- a/R/epipredict-package.R +++ b/R/epipredict-package.R @@ -1,9 +1,9 @@ ## usethis namespace: start #' @import epiprocess parsnip -#' @importFrom checkmate assert assert_character assert_int assert_scalar -#' @importFrom checkmate assert_logical assert_numeric assert_number -#' @importFrom checkmate assert_integer assert_integerish -#' @importFrom checkmate assert_date assert_function assert_class +#' @importFrom checkmate assert_class assert_numeric +#' @importFrom checkmate test_character test_date test_function +#' @importFrom checkmate test_integerish test_logical +#' @importFrom checkmate test_numeric test_scalar #' @importFrom cli cli_abort cli_warn #' @importFrom dplyr arrange across all_of any_of bind_cols bind_rows group_by #' @importFrom dplyr summarize filter mutate select left_join rename ungroup diff --git a/man/autoplot-epipred.Rd b/man/autoplot-epipred.Rd index 10236eb98..27bfdf5f7 100644 --- a/man/autoplot-epipred.Rd +++ b/man/autoplot-epipred.Rd @@ -121,6 +121,4 @@ arx <- arx_forecaster(jhu, "death_rate", c("case_rate", "death_rate"), args_list = arx_args_list(ahead = 14L) ) autoplot(arx, .max_facets = 6) -NULL - } diff --git a/tests/testthat/_snaps/arx_args_list.md b/tests/testthat/_snaps/arx_args_list.md new file mode 100644 index 000000000..959a5e25b --- /dev/null +++ b/tests/testthat/_snaps/arx_args_list.md @@ -0,0 +1,152 @@ +# arx_args checks inputs + + Code + arx_args_list(ahead = c(0, 4)) + Condition + Error in `arx_args_list()`: + ! `ahead` must be a scalar. + +--- + + Code + arx_args_list(n_training = c(28, 65)) + Condition + Error in `arx_args_list()`: + ! `n_training` must be a scalar. + +--- + + Code + arx_args_list(ahead = -1) + Condition + Error in `arx_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + arx_args_list(ahead = 1.5) + Condition + Error in `arx_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + arx_args_list(n_training = -1) + Condition + Error in `arx_args_list()`: + ! `n_training` must be a strictly positive number. + +--- + + Code + arx_args_list(n_training = 1.5) + Condition + Error in `arx_args_list()`: + ! `n_training` must be a positive integer. + +--- + + Code + arx_args_list(lags = c(-1, 0)) + Condition + Error in `arx_args_list()`: + ! `lags` must be non-negative integers. + +--- + + Code + arx_args_list(lags = list(c(1:5, 6.5), 2:8)) + Condition + Error in `arx_args_list()`: + ! `lags` must be non-negative integers. + +--- + + Code + arx_args_list(symmetrize = 4) + Condition + Error in `arx_args_list()`: + ! `symmetrize` must be of type . + +--- + + Code + arx_args_list(nonneg = 4) + Condition + Error in `arx_args_list()`: + ! `nonneg` must be of type . + +--- + + Code + arx_args_list(quantile_levels = -0.1) + Condition + Error in `arx_args_list()`: + ! `quantile_levels` must lie in [0, 1]. + +--- + + Code + arx_args_list(quantile_levels = 1.1) + Condition + Error in `arx_args_list()`: + ! `quantile_levels` must lie in [0, 1]. + +--- + + Code + arx_args_list(target_date = "2022-01-01") + Condition + Error in `arx_args_list()`: + ! `target_date` must be a date. + +--- + + Code + arx_args_list(n_training_min = "de") + Condition + Error in `arx_args_list()`: + ! `...` must be empty. + x Problematic argument: + * n_training_min = "de" + +--- + + Code + arx_args_list(epi_keys = 1) + Condition + Error in `arx_args_list()`: + ! `...` must be empty. + x Problematic argument: + * epi_keys = 1 + +# arx forecaster disambiguates quantiles + + Code + compare_quantile_args(alist, tlist) + Condition + Error in `compare_quantile_args()`: + ! You have specified different, non-default, quantiles in the trainier and `arx_args` options. + i Please only specify quantiles in one location. + +# arx_lags_validator handles named & unnamed lists as expected + + Code + arx_lags_validator(pred_vec, lags_finit_fn_switch2) + Condition + Error in `arx_lags_validator()`: + ! You have requested 2 predictor(s) but 3 different lags. + i Lags must be a vector or a list with length == number of predictors. + +--- + + Code + arx_lags_validator(pred_vec, lags_init_other_name) + Condition + Error in `arx_lags_validator()`: + ! If lags is a named list, then all predictors must be present. + i The predictors are `death_rate` and `case_rate`. + i So lags is missing `case_rate`'. + diff --git a/tests/testthat/_snaps/arx_cargs_list.md b/tests/testthat/_snaps/arx_cargs_list.md new file mode 100644 index 000000000..30ccb4d36 --- /dev/null +++ b/tests/testthat/_snaps/arx_cargs_list.md @@ -0,0 +1,92 @@ +# arx_class_args checks inputs + + Code + arx_class_args_list(ahead = c(0, 4)) + Condition + Error in `arx_class_args_list()`: + ! `ahead` must be a scalar. + +--- + + Code + arx_class_args_list(n_training = c(28, 65)) + Condition + Error in `arx_class_args_list()`: + ! `n_training` must be a scalar. + +--- + + Code + arx_class_args_list(ahead = -1) + Condition + Error in `arx_class_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + arx_class_args_list(ahead = 1.5) + Condition + Error in `arx_class_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + arx_class_args_list(n_training = -1) + Condition + Error in `arx_class_args_list()`: + ! `n_training` must be a strictly positive number. + +--- + + Code + arx_class_args_list(n_training = 1.5) + Condition + Error in `arx_class_args_list()`: + ! `n_training` must be a positive integer. + +--- + + Code + arx_class_args_list(lags = c(-1, 0)) + Condition + Error in `arx_class_args_list()`: + ! `lags` must be non-negative integers. + +--- + + Code + arx_class_args_list(lags = list(c(1:5, 6.5), 2:8)) + Condition + Error in `arx_class_args_list()`: + ! `lags` must be non-negative integers. + +--- + + Code + arx_class_args_list(target_date = "2022-01-01") + Condition + Error in `arx_class_args_list()`: + ! `target_date` must be a date. + +--- + + Code + arx_class_args_list(n_training_min = "de") + Condition + Error in `arx_class_args_list()`: + ! `...` must be empty. + x Problematic argument: + * n_training_min = "de" + +--- + + Code + arx_class_args_list(epi_keys = 1) + Condition + Error in `arx_class_args_list()`: + ! `...` must be empty. + x Problematic argument: + * epi_keys = 1 + diff --git a/tests/testthat/_snaps/bake-method.md b/tests/testthat/_snaps/bake-method.md new file mode 100644 index 000000000..eee28cc4b --- /dev/null +++ b/tests/testthat/_snaps/bake-method.md @@ -0,0 +1,9 @@ +# bake method works in all cases + + Code + bake(prep(r, edf), NULL, composition = "matrix") + Condition + Error in `hardhat::recompose()`: + ! `data` must only contain numeric columns. + i These columns aren't numeric: "geo_value" and "time_value". + diff --git a/tests/testthat/_snaps/check-training-set.md b/tests/testthat/_snaps/check-training-set.md new file mode 100644 index 000000000..e5eec7e7c --- /dev/null +++ b/tests/testthat/_snaps/check-training-set.md @@ -0,0 +1,20 @@ +# training set validation works + + Code + validate_meta_match(t1, template, "geo_type", "abort") + Condition + Error in `validate_meta_match()`: + ! The `geo_type` of the training data appears to be different from that + used to construct the recipe. This may result in unexpected consequences. + i Training `geo_type` is 'county'. + i Originally, it was 'state'. + +--- + + Code + epi_check_training_set(t4, rec) + Condition + Error in `epi_check_training_set()`: + ! The recipe specifies keys which are not in the training data. + i The training set is missing columns for missing_col. + diff --git a/tests/testthat/_snaps/check_enough_train_data.md b/tests/testthat/_snaps/check_enough_train_data.md new file mode 100644 index 000000000..8f2389acb --- /dev/null +++ b/tests/testthat/_snaps/check_enough_train_data.md @@ -0,0 +1,46 @@ +# check_enough_train_data works on pooled data + + Code + epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n + 1, + drop_na = FALSE) %>% prep(toy_epi_df) %>% bake(new_data = NULL) + Condition + Error in `prep()`: + ! The following columns don't have enough data to predict: x and y. + +--- + + Code + epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 1, + drop_na = TRUE) %>% prep(toy_epi_df) %>% bake(new_data = NULL) + Condition + Error in `prep()`: + ! The following columns don't have enough data to predict: x and y. + +# check_enough_train_data works on unpooled data + + Code + epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = n + 1, epi_keys = "geo_value", + drop_na = FALSE) %>% prep(toy_epi_df) %>% bake(new_data = NULL) + Condition + Error in `prep()`: + ! The following columns don't have enough data to predict: x and y. + +--- + + Code + epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 3, + epi_keys = "geo_value", drop_na = TRUE) %>% prep(toy_epi_df) %>% bake(new_data = NULL) + Condition + Error in `prep()`: + ! The following columns don't have enough data to predict: x and y. + +# check_enough_train_data works with all_predictors() downstream of constructed terms + + Code + epi_recipe(toy_epi_df) %>% step_epi_lag(x, lag = c(1, 2)) %>% + check_enough_train_data(all_predictors(), y, n = 2 * n - 5) %>% prep( + toy_epi_df) %>% bake(new_data = NULL) + Condition + Error in `prep()`: + ! The following columns don't have enough data to predict: lag_1_x, lag_2_x, and y. + diff --git a/tests/testthat/_snaps/dist_quantiles.md b/tests/testthat/_snaps/dist_quantiles.md new file mode 100644 index 000000000..da7e50100 --- /dev/null +++ b/tests/testthat/_snaps/dist_quantiles.md @@ -0,0 +1,56 @@ +# constructor returns reasonable quantiles + + Code + new_quantiles(rnorm(5), rnorm(5)) + Condition + Error in `new_quantiles()`: + ! `quantile_levels` must lie in [0, 1]. + +--- + + Code + new_quantiles(sort(rnorm(5)), sort(runif(2))) + Condition + Error in `new_quantiles()`: + ! length(values) == length(quantile_levels) is not TRUE + +--- + + Code + new_quantiles(c(2, 1, 3, 4, 5), c(0.1, 0.1, 0.2, 0.5, 0.8)) + Condition + Error in `new_quantiles()`: + ! !vctrs::vec_duplicate_any(quantile_levels) is not TRUE + +--- + + Code + new_quantiles(c(2, 1, 3, 4, 5), c(0.1, 0.15, 0.2, 0.5, 0.8)) + Condition + Error in `new_quantiles()`: + ! `values[order(quantile_levels)]` produces unsorted quantiles. + +--- + + Code + new_quantiles(c(1, 2, 3), c(0.1, 0.2, 3)) + Condition + Error in `new_quantiles()`: + ! `quantile_levels` must lie in [0, 1]. + +# arithmetic works on quantiles + + Code + sum(dstn) + Condition + Error in `mapply()`: + ! You can't perform arithmetic between two distributions like this. + +--- + + Code + suppressWarnings(dstn + distributional::dist_normal()) + Condition + Error: + ! non-numeric argument to binary operator + diff --git a/tests/testthat/_snaps/enframer.md b/tests/testthat/_snaps/enframer.md new file mode 100644 index 000000000..4b05dbff3 --- /dev/null +++ b/tests/testthat/_snaps/enframer.md @@ -0,0 +1,32 @@ +# enframer errors/works as needed + + Code + enframer(1:5, letters[1]) + Condition + Error in `enframer()`: + ! is.data.frame(df) is not TRUE + +--- + + Code + enframer(data.frame(a = 1:5), 1:3) + Condition + Error in `enframer()`: + ! `x` must be of type . + +--- + + Code + enframer(data.frame(a = 1:5), letters[1:3]) + Condition + Error in `enframer()`: + ! In enframer: some new cols match existing column names + +--- + + Code + enframer(data.frame(aa = 1:5), letters[1:2], fill = 1:4) + Condition + Error in `enframer()`: + ! length(fill) == 1 || length(fill) == nrow(df) is not TRUE + diff --git a/tests/testthat/_snaps/epi_recipe.md b/tests/testthat/_snaps/epi_recipe.md index 3d797461d..24b046678 100644 --- a/tests/testthat/_snaps/epi_recipe.md +++ b/tests/testthat/_snaps/epi_recipe.md @@ -22,3 +22,11 @@ Error in `epi_recipe()`: ! `x` must be an or a , not a . +# add/update/adjust/remove epi_recipe works as intended + + Code + workflows::extract_preprocessor(wf)$steps + Condition + Error in `workflows::extract_preprocessor()`: + ! The workflow does not have a preprocessor. + diff --git a/tests/testthat/_snaps/epi_workflow.md b/tests/testthat/_snaps/epi_workflow.md index d46dad6c1..006333423 100644 --- a/tests/testthat/_snaps/epi_workflow.md +++ b/tests/testthat/_snaps/epi_workflow.md @@ -1,3 +1,20 @@ +# model can be added/updated/removed from epi_workflow + + Code + extract_spec_parsnip(wf) + Condition + Error in `extract_spec_parsnip()`: + ! The workflow does not have a model spec. + +# forecast method errors when workflow not fit + + Code + forecast(wf) + Condition + Error in `forecast()`: + ! You cannot `forecast()` a that has not been trained. + i Please use `fit()` before forecasting. + # fit method does not silently drop the class Code diff --git a/tests/testthat/_snaps/extract_argument.md b/tests/testthat/_snaps/extract_argument.md new file mode 100644 index 000000000..d4ff44c95 --- /dev/null +++ b/tests/testthat/_snaps/extract_argument.md @@ -0,0 +1,72 @@ +# layer argument extractor works + + Code + extract_argument(f$layers[[1]], "uhoh", "bubble") + Condition + Error in `extract_argument()`: + ! Requested "uhoh" not found. This is a(n) . + +--- + + Code + extract_argument(f$layers[[1]], "layer_predict", "bubble") + Condition + Error in `extract_argument()`: + ! Requested argument "bubble" not found in "layer_predict". + +--- + + Code + extract_argument(f, "layer_thresh", "quantile_levels") + Condition + Error in `extract_argument()`: + ! frosting object does not contain a "layer_thresh". + +--- + + Code + extract_argument(epi_workflow(), "layer_residual_quantiles", "quantile_levels") + Condition + Error in `extract_frosting()`: + ! The epi_workflow does not have a postprocessor. + +--- + + Code + extract_argument(wf, "layer_predict", c("type", "opts")) + Condition + Error in `FUN()`: + ! `arg` must be a scalar of type . + +# recipe argument extractor works + + Code + extract_argument(r$steps[[1]], "uhoh", "bubble") + Condition + Error in `extract_argument()`: + ! Requested "uhoh" not found. This is a . + +--- + + Code + extract_argument(r$steps[[1]], "step_epi_lag", "bubble") + Condition + Error in `extract_argument()`: + ! Requested argument "bubble" not found in "step_epi_lag". + +--- + + Code + extract_argument(r, "step_lightly", "quantile_levels") + Condition + Error in `extract_argument()`: + ! recipe object does not contain a "step_lightly". + +--- + + Code + extract_argument(epi_workflow(), "step_epi_lag", "lag") + Condition + Error in `extract_argument()`: + ! The workflow must have a recipe preprocessor. + diff --git a/tests/testthat/_snaps/flatline_args_list.md b/tests/testthat/_snaps/flatline_args_list.md new file mode 100644 index 000000000..02053f95b --- /dev/null +++ b/tests/testthat/_snaps/flatline_args_list.md @@ -0,0 +1,128 @@ +# flatline_args_list checks inputs + + Code + flatline_args_list(ahead = c(0, 4)) + Condition + Error in `flatline_args_list()`: + ! `ahead` must be a scalar. + +--- + + Code + flatline_args_list(n_training = c(28, 65)) + Condition + Error in `flatline_args_list()`: + ! `n_training` must be a scalar. + +--- + + Code + flatline_args_list(ahead = -1) + Condition + Error in `flatline_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + flatline_args_list(ahead = 1.5) + Condition + Error in `flatline_args_list()`: + ! `ahead` must be a non-negative integer. + +--- + + Code + flatline_args_list(n_training = -1) + Condition + Error in `flatline_args_list()`: + ! `n_training` must be a strictly positive number. + +--- + + Code + flatline_args_list(n_training = 1.5) + Condition + Error in `flatline_args_list()`: + ! `n_training` must be a positive integer. + +--- + + Code + flatline_args_list(lags = c(-1, 0)) + Condition + Error in `flatline_args_list()`: + ! `...` must be empty. + x Problematic argument: + * lags = c(-1, 0) + +--- + + Code + flatline_args_list(lags = list(c(1:5, 6.5), 2:8)) + Condition + Error in `flatline_args_list()`: + ! `...` must be empty. + x Problematic argument: + * lags = list(c(1:5, 6.5), 2:8) + +--- + + Code + flatline_args_list(symmetrize = 4) + Condition + Error in `flatline_args_list()`: + ! `symmetrize` must be of type . + +--- + + Code + flatline_args_list(nonneg = 4) + Condition + Error in `flatline_args_list()`: + ! `nonneg` must be of type . + +--- + + Code + flatline_args_list(quantile_levels = -0.1) + Condition + Error in `flatline_args_list()`: + ! `quantile_levels` must lie in [0, 1]. + +--- + + Code + flatline_args_list(quantile_levels = 1.1) + Condition + Error in `flatline_args_list()`: + ! `quantile_levels` must lie in [0, 1]. + +--- + + Code + flatline_args_list(target_date = "2022-01-01") + Condition + Error in `flatline_args_list()`: + ! `target_date` must be a date. + +--- + + Code + flatline_args_list(n_training_min = "de") + Condition + Error in `flatline_args_list()`: + ! `...` must be empty. + x Problematic argument: + * n_training_min = "de" + +--- + + Code + flatline_args_list(epi_keys = 1) + Condition + Error in `flatline_args_list()`: + ! `...` must be empty. + x Problematic argument: + * epi_keys = 1 + diff --git a/tests/testthat/_snaps/frosting.md b/tests/testthat/_snaps/frosting.md new file mode 100644 index 000000000..daf7f1ed7 --- /dev/null +++ b/tests/testthat/_snaps/frosting.md @@ -0,0 +1,16 @@ +# frosting validators / constructors work + + Code + wf %>% add_postprocessor(list()) + Condition + Error: + ! `postprocessor` must be a frosting object. + +# frosting can be created/added/updated/adjusted/removed + + Code + frosting(layers = 1:5) + Condition + Error in `frosting()`: + ! Currently, no arguments to `frosting()` are allowed to be non-null. + diff --git a/tests/testthat/_snaps/get_test_data.md b/tests/testthat/_snaps/get_test_data.md new file mode 100644 index 000000000..e65b0715c --- /dev/null +++ b/tests/testthat/_snaps/get_test_data.md @@ -0,0 +1,66 @@ +# expect insufficient training data error + + Code + get_test_data(recipe = r, x = case_death_rate_subset) + Condition + Error in `get_test_data()`: + ! You supplied insufficient recent data for this recipe. + ! You need at least 367 days of data, + ! but `x` contains only 365. + +# expect error that geo_value or time_value does not exist + + Code + get_test_data(recipe = r, x = wrong_epi_df) + Condition + Error in `get_test_data()`: + ! `x` must be an `epi_df`. + +# NA fill behaves as desired + + Code + get_test_data(r, df, "A") + Condition + Error in `get_test_data()`: + ! `fill_locf` must be of type . + +--- + + Code + get_test_data(r, df, TRUE, -3) + Condition + Error in `get_test_data()`: + ! `n_recent` must be a positive integer. + +--- + + Code + get_test_data(r, df2, TRUE) + Condition + Error in `if (recipes::is_trained(recipe)) ...`: + ! argument is of length zero + +# forecast date behaves + + Code + get_test_data(r, df, TRUE, forecast_date = 9) + Condition + Error in `get_test_data()`: + ! `forecast_date` must be the same class as `x$time_value`. + +--- + + Code + get_test_data(r, df, TRUE, forecast_date = 9L) + Condition + Error in `get_test_data()`: + ! `forecast_date` must be no earlier than `max(x$time_value)` + +--- + + Code + get_test_data(r, df, forecast_date = 9L) + Condition + Error in `get_test_data()`: + ! `forecast_date` must be no earlier than `max(x$time_value)` + diff --git a/tests/testthat/_snaps/layer_add_forecast_date.md b/tests/testthat/_snaps/layer_add_forecast_date.md new file mode 100644 index 000000000..9e829be91 --- /dev/null +++ b/tests/testthat/_snaps/layer_add_forecast_date.md @@ -0,0 +1,42 @@ +# layer validation works + + Code + layer_add_forecast_date(f, c("2022-05-31", "2022-05-31")) + Condition + Error in `layer_add_forecast_date()`: + ! `forecast_date` must be a scalar. + +--- + + Code + layer_add_forecast_date(f, "2022-05-31", id = 2) + Condition + Error in `layer_add_forecast_date()`: + ! `id` must be a scalar of type . + +--- + + Code + layer_add_forecast_date(f, "2022-05-31", id = c("a", "b")) + Condition + Error in `layer_add_forecast_date()`: + ! `id` must be a scalar of type . + +# forecast date works for daily + + Code + predict(wf1, latest_yearly) + Condition + Error: + ! Can't convert `data$time_value` to match type of `time_value` . + +--- + + Code + predict(wf3, latest) + Condition + Error in `layer_add_forecast_date()`: + ! The `forecast_date` was given as a "year" while the + ! `time_type` of the training data was "day". + i See `?epiprocess::epi_df` for descriptions of these are determined. + diff --git a/tests/testthat/_snaps/layer_add_target_date.md b/tests/testthat/_snaps/layer_add_target_date.md new file mode 100644 index 000000000..805a4205d --- /dev/null +++ b/tests/testthat/_snaps/layer_add_target_date.md @@ -0,0 +1,8 @@ +# target date works for daily and yearly + + Code + predict(wf1, latest_bad) + Condition + Error: + ! Can't convert `data$time_value` to match type of `time_value` . + diff --git a/tests/testthat/_snaps/layer_predict.md b/tests/testthat/_snaps/layer_predict.md new file mode 100644 index 000000000..5c353eb4c --- /dev/null +++ b/tests/testthat/_snaps/layer_predict.md @@ -0,0 +1,8 @@ +# layer_predict dots validation + + Code + predict(wf_bad_arg, latest) + Condition + Error: + ! argument "..3" is missing, with no default + diff --git a/tests/testthat/_snaps/layer_residual_quantiles.md b/tests/testthat/_snaps/layer_residual_quantiles.md new file mode 100644 index 000000000..41aa0448d --- /dev/null +++ b/tests/testthat/_snaps/layer_residual_quantiles.md @@ -0,0 +1,18 @@ +# Errors when used with a classifier + + Code + forecast(wf) + Condition + Error in `grab_residuals()`: + ! For meaningful residuals, the predictor should be a regression model. + +# flatline_forecaster correctly errors when n_training < ahead + + Code + flatline_forecaster(jhu, "death_rate", args_list = flatline_args_list(ahead = 10, + n_training = 9)) + Condition + Error in `slather()`: + ! Residual quantiles could not be calculated due to missing residuals. + i This may be due to `n_train` < `ahead` in your . + diff --git a/tests/testthat/_snaps/layers.md b/tests/testthat/_snaps/layers.md new file mode 100644 index 000000000..a0474eab6 --- /dev/null +++ b/tests/testthat/_snaps/layers.md @@ -0,0 +1,24 @@ +# A layer can be updated in frosting + + Code + update(f$layers[[1]], lower = 100) + Condition + Error in `recipes:::update_fields()`: + ! The step you are trying to update, `layer_predict()`, does not have the lower field. + +--- + + Code + update(f$layers[[3]], lower = 100) + Condition + Error in `f$layers[[3]]`: + ! subscript out of bounds + +--- + + Code + update(f$layers[[2]], bad_param = 100) + Condition + Error in `recipes:::update_fields()`: + ! The step you are trying to update, `layer_threshold()`, does not have the bad_param field. + diff --git a/tests/testthat/_snaps/parse_period.md b/tests/testthat/_snaps/parse_period.md new file mode 100644 index 000000000..bc782dea7 --- /dev/null +++ b/tests/testthat/_snaps/parse_period.md @@ -0,0 +1,32 @@ +# parse_period works + + Code + parse_period(c(1, 2)) + Condition + Error in `parse_period()`: + ! `x` must be a scalar. + +--- + + Code + parse_period(c(1.3)) + Condition + Error in `parse_period()`: + ! rlang::is_integerish(x) is not TRUE + +--- + + Code + parse_period("1 year") + Condition + Error in `parse_period()`: + ! incompatible timespan in `aheads`. + +--- + + Code + parse_period("2 weeks later") + Condition + Error in `parse_period()`: + ! incompatible timespan in `aheads`. + diff --git a/tests/testthat/_snaps/parsnip_model_validation.md b/tests/testthat/_snaps/parsnip_model_validation.md new file mode 100644 index 000000000..365e6b2b8 --- /dev/null +++ b/tests/testthat/_snaps/parsnip_model_validation.md @@ -0,0 +1,18 @@ +# forecaster can validate parsnip model + + Code + get_parsnip_mode(l) + Condition + Error in `get_parsnip_mode()`: + ! `trainer` must be a `parsnip` model. + i This trainer has class: . + +--- + + Code + is_classification(l) + Condition + Error in `get_parsnip_mode()`: + ! `trainer` must be a `parsnip` model. + i This trainer has class: . + diff --git a/tests/testthat/_snaps/pivot_quantiles.md b/tests/testthat/_snaps/pivot_quantiles.md new file mode 100644 index 000000000..184eb62a6 --- /dev/null +++ b/tests/testthat/_snaps/pivot_quantiles.md @@ -0,0 +1,51 @@ +# quantile pivotting wider behaves + + Code + pivot_quantiles_wider(tib, a) + Condition + Error in `UseMethod()`: + ! no applicable method for 'family' applied to an object of class "c('integer', 'numeric')" + +--- + + Code + pivot_quantiles_wider(tib, c) + Condition + Error in `validate_pivot_quantiles()`: + ! Variables(s) `c` are not `dist_quantiles`. Cannot pivot them. + +--- + + Code + pivot_quantiles_wider(tib, d1) + Condition + Error in `pivot_quantiles_wider()`: + ! Quantiles must be the same length and have the same set of taus. + i Check failed for variables(s) `d1`. + +# quantile pivotting longer behaves + + Code + pivot_quantiles_longer(tib, a) + Condition + Error in `UseMethod()`: + ! no applicable method for 'family' applied to an object of class "c('integer', 'numeric')" + +--- + + Code + pivot_quantiles_longer(tib, c) + Condition + Error in `validate_pivot_quantiles()`: + ! Variables(s) `c` are not `dist_quantiles`. Cannot pivot them. + +--- + + Code + pivot_quantiles_longer(tib, d1, d3) + Condition + Error in `pivot_quantiles_longer()`: + ! Some selected columns contain different numbers of quantiles. + The result would be a very long . + To do this anyway, rerun with `.ignore_length_check = TRUE`. + diff --git a/tests/testthat/_snaps/population_scaling.md b/tests/testthat/_snaps/population_scaling.md new file mode 100644 index 000000000..9263e8e1e --- /dev/null +++ b/tests/testthat/_snaps/population_scaling.md @@ -0,0 +1,16 @@ +# expect error if `by` selector does not match + + Code + wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) + Condition + Error in `hardhat::validate_column_names()`: + ! The following required columns are missing: 'a'. + +--- + + Code + forecast(wf) + Condition + Error in `hardhat::validate_column_names()`: + ! The following required columns are missing: 'nothere'. + diff --git a/tests/testthat/_snaps/shuffle.md b/tests/testthat/_snaps/shuffle.md new file mode 100644 index 000000000..53eea9b92 --- /dev/null +++ b/tests/testthat/_snaps/shuffle.md @@ -0,0 +1,8 @@ +# shuffle works + + Code + shuffle(matrix(NA, 2, 2)) + Condition + Error in `shuffle()`: + ! is.vector(x) is not TRUE + diff --git a/tests/testthat/_snaps/step_epi_slide.md b/tests/testthat/_snaps/step_epi_slide.md index 27ca908b7..a4b9d64c8 100644 --- a/tests/testthat/_snaps/step_epi_slide.md +++ b/tests/testthat/_snaps/step_epi_slide.md @@ -118,6 +118,22 @@ Error in `validate_slide_fun()`: ! In, `step_epi_slide()`, `.f` must be a function. +--- + + Code + r %>% step_epi_slide(value) + Condition + Error in `step_epi_slide()`: + ! argument ".f" is missing, with no default + +--- + + Code + r %>% step_epi_slide(value, .f = 1) + Condition + Error in `validate_slide_fun()`: + ! In, `step_epi_slide()`, `.f` must be a function. + # epi_slide handles different function specs Code diff --git a/tests/testthat/_snaps/wis-dist-quantiles.md b/tests/testthat/_snaps/wis-dist-quantiles.md new file mode 100644 index 000000000..fb9cfbdf6 --- /dev/null +++ b/tests/testthat/_snaps/wis-dist-quantiles.md @@ -0,0 +1,17 @@ +# wis dispatches and produces the correct values + + Code + weighted_interval_score(1:10, 10) + Condition + Error in `weighted_interval_score()`: + ! Weighted interval score can only be calculated if `x` + has class . + +--- + + Code + weighted_interval_score(dist_quantiles(list(1:4, 8:11), 1:4 / 5), 1:3) + Condition + Error in `weighted_interval_score()`: + ! Can't recycle `x` (size 2) to match `actual` (size 3). + diff --git a/tests/testthat/test-arx_args_list.R b/tests/testthat/test-arx_args_list.R index 9d81be024..03cbc0025 100644 --- a/tests/testthat/test-arx_args_list.R +++ b/tests/testthat/test-arx_args_list.R @@ -1,30 +1,30 @@ test_that("arx_args checks inputs", { expect_s3_class(arx_args_list(), c("arx_fcast", "alist")) - expect_error(arx_args_list(ahead = c(0, 4))) - expect_error(arx_args_list(n_training = c(28, 65))) + expect_snapshot(error = TRUE, arx_args_list(ahead = c(0, 4))) + expect_snapshot(error = TRUE, arx_args_list(n_training = c(28, 65))) - expect_error(arx_args_list(ahead = -1)) - expect_error(arx_args_list(ahead = 1.5)) - expect_error(arx_args_list(n_training = -1)) - expect_error(arx_args_list(n_training = 1.5)) - expect_error(arx_args_list(lags = c(-1, 0))) - expect_error(arx_args_list(lags = list(c(1:5, 6.5), 2:8))) + expect_snapshot(error = TRUE, arx_args_list(ahead = -1)) + expect_snapshot(error = TRUE, arx_args_list(ahead = 1.5)) + expect_snapshot(error = TRUE, arx_args_list(n_training = -1)) + expect_snapshot(error = TRUE, arx_args_list(n_training = 1.5)) + expect_snapshot(error = TRUE, arx_args_list(lags = c(-1, 0))) + expect_snapshot(error = TRUE, arx_args_list(lags = list(c(1:5, 6.5), 2:8))) - expect_error(arx_args_list(symmetrize = 4)) - expect_error(arx_args_list(nonneg = 4)) + expect_snapshot(error = TRUE, arx_args_list(symmetrize = 4)) + expect_snapshot(error = TRUE, arx_args_list(nonneg = 4)) - expect_error(arx_args_list(quantile_levels = -.1)) - expect_error(arx_args_list(quantile_levels = 1.1)) + expect_snapshot(error = TRUE, arx_args_list(quantile_levels = -.1)) + expect_snapshot(error = TRUE, arx_args_list(quantile_levels = 1.1)) expect_type(arx_args_list(quantile_levels = NULL), "list") - expect_error(arx_args_list(target_date = "2022-01-01")) + expect_snapshot(error = TRUE, arx_args_list(target_date = "2022-01-01")) expect_identical( arx_args_list(target_date = as.Date("2022-01-01"))$target_date, as.Date("2022-01-01") ) - expect_error(arx_args_list(n_training_min = "de")) - expect_error(arx_args_list(epi_keys = 1)) + expect_snapshot(error = TRUE, arx_args_list(n_training_min = "de")) + expect_snapshot(error = TRUE, arx_args_list(epi_keys = 1)) expect_warning(arx_args_list( forecast_date = as.Date("2022-01-01"), @@ -58,7 +58,7 @@ test_that("arx forecaster disambiguates quantiles", { sort(unique(tlist)) ) alist <- c(.1, .3, .5, .7, .9) # neither default, and different, - expect_error(compare_quantile_args(alist, tlist)) + expect_snapshot(error = TRUE, compare_quantile_args(alist, tlist)) }) test_that("arx_lags_validator handles named & unnamed lists as expected", { @@ -94,7 +94,7 @@ test_that("arx_lags_validator handles named & unnamed lists as expected", { ) # More lags than predictors - Error - expect_error(arx_lags_validator(pred_vec, lags_finit_fn_switch2)) + expect_snapshot(error = TRUE, arx_lags_validator(pred_vec, lags_finit_fn_switch2)) # Unnamed list of lags lags_init_un <- list(c(0, 7, 14), c(0, 1, 2, 3, 7, 14)) @@ -115,5 +115,5 @@ test_that("arx_lags_validator handles named & unnamed lists as expected", { # Try use a name not in predictors - Error lags_init_other_name <- list(death_rate = c(0, 7, 14), test_var = c(0, 1, 2, 3, 7, 14)) - expect_error(arx_lags_validator(pred_vec, lags_init_other_name)) + expect_snapshot(error = TRUE, arx_lags_validator(pred_vec, lags_init_other_name)) }) diff --git a/tests/testthat/test-arx_cargs_list.R b/tests/testthat/test-arx_cargs_list.R index d225cf62a..12087e45f 100644 --- a/tests/testthat/test-arx_cargs_list.R +++ b/tests/testthat/test-arx_cargs_list.R @@ -1,24 +1,24 @@ test_that("arx_class_args checks inputs", { expect_s3_class(arx_class_args_list(), c("arx_class", "alist")) - expect_error(arx_class_args_list(ahead = c(0, 4))) - expect_error(arx_class_args_list(n_training = c(28, 65))) + expect_snapshot(error = TRUE, arx_class_args_list(ahead = c(0, 4))) + expect_snapshot(error = TRUE, arx_class_args_list(n_training = c(28, 65))) - expect_error(arx_class_args_list(ahead = -1)) - expect_error(arx_class_args_list(ahead = 1.5)) - expect_error(arx_class_args_list(n_training = -1)) - expect_error(arx_class_args_list(n_training = 1.5)) - expect_error(arx_class_args_list(lags = c(-1, 0))) - expect_error(arx_class_args_list(lags = list(c(1:5, 6.5), 2:8))) + expect_snapshot(error = TRUE, arx_class_args_list(ahead = -1)) + expect_snapshot(error = TRUE, arx_class_args_list(ahead = 1.5)) + expect_snapshot(error = TRUE, arx_class_args_list(n_training = -1)) + expect_snapshot(error = TRUE, arx_class_args_list(n_training = 1.5)) + expect_snapshot(error = TRUE, arx_class_args_list(lags = c(-1, 0))) + expect_snapshot(error = TRUE, arx_class_args_list(lags = list(c(1:5, 6.5), 2:8))) - expect_error(arx_class_args_list(target_date = "2022-01-01")) + expect_snapshot(error = TRUE, arx_class_args_list(target_date = "2022-01-01")) expect_identical( arx_class_args_list(target_date = as.Date("2022-01-01"))$target_date, as.Date("2022-01-01") ) - expect_error(arx_class_args_list(n_training_min = "de")) - expect_error(arx_class_args_list(epi_keys = 1)) + expect_snapshot(error = TRUE, arx_class_args_list(n_training_min = "de")) + expect_snapshot(error = TRUE, arx_class_args_list(epi_keys = 1)) expect_warning(arx_class_args_list( forecast_date = as.Date("2022-01-01"), diff --git a/tests/testthat/test-bake-method.R b/tests/testthat/test-bake-method.R index 0e2746cf2..06f861012 100644 --- a/tests/testthat/test-bake-method.R +++ b/tests/testthat/test-bake-method.R @@ -25,5 +25,5 @@ test_that("bake method works in all cases", { expect_s3_class(bake(prep(r, edf), NULL, composition = "tibble"), "tbl_df") expect_s3_class(bake(prep(r, edf), NULL, composition = "data.frame"), "data.frame") # can't be a matrix because time_value/geo_value aren't numeric - expect_error(bake(prep(r, edf), NULL, composition = "matrix")) + expect_snapshot(error = TRUE, bake(prep(r, edf), NULL, composition = "matrix")) }) diff --git a/tests/testthat/test-check-training-set.R b/tests/testthat/test-check-training-set.R index 0f9246282..64d4d6945 100644 --- a/tests/testthat/test-check-training-set.R +++ b/tests/testthat/test-check-training-set.R @@ -7,7 +7,7 @@ test_that("training set validation works", { expect_silent(validate_meta_match(template, template, "time_type", "blah")) attr(t1, "metadata")$geo_type <- "county" expect_warning(validate_meta_match(t1, template, "geo_type"), "county") - expect_error(validate_meta_match(t1, template, "geo_type", "abort"), "county") + expect_snapshot(error = TRUE, validate_meta_match(t1, template, "geo_type", "abort")) expect_identical(template, epi_check_training_set(template, rec)) @@ -25,5 +25,5 @@ test_that("training set validation works", { expect_warning(t4 <- epi_check_training_set(t3, rec)) expect_identical(rec$template, t4) attr(rec$template, "metadata")$other_keys <- "missing_col" - expect_error(epi_check_training_set(t4, rec), "missing_col") + expect_snapshot(error = TRUE, epi_check_training_set(t4, rec)) }) diff --git a/tests/testthat/test-check_enough_train_data.R b/tests/testthat/test-check_enough_train_data.R index 502ea06f1..9b2ef5f34 100644 --- a/tests/testthat/test-check_enough_train_data.R +++ b/tests/testthat/test-check_enough_train_data.R @@ -23,15 +23,16 @@ test_that("check_enough_train_data works on pooled data", { bake(new_data = NULL) ) # Check both column don't have enough data - expect_error( + expect_snapshot( + error = TRUE, epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n + 1, drop_na = FALSE) %>% prep(toy_epi_df) %>% - bake(new_data = NULL), - regexp = "The following columns don't have enough data" + bake(new_data = NULL) ) # Check drop_na works - expect_error( + expect_snapshot( + error = TRUE, epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 1, drop_na = TRUE) %>% prep(toy_epi_df) %>% @@ -48,15 +49,16 @@ test_that("check_enough_train_data works on unpooled data", { bake(new_data = NULL) ) # Check one column don't have enough data - expect_error( + expect_snapshot( + error = TRUE, epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = n + 1, epi_keys = "geo_value", drop_na = FALSE) %>% prep(toy_epi_df) %>% - bake(new_data = NULL), - regexp = "The following columns don't have enough data" + bake(new_data = NULL) ) # Check drop_na works - expect_error( + expect_snapshot( + error = TRUE, epi_recipe(toy_epi_df) %>% check_enough_train_data(x, y, n = 2 * n - 3, epi_keys = "geo_value", drop_na = TRUE) %>% prep(toy_epi_df) %>% @@ -114,7 +116,8 @@ test_that("check_enough_train_data works with all_predictors() downstream of con prep(toy_epi_df) %>% bake(new_data = NULL) ) - expect_error( + expect_snapshot( + error = TRUE, epi_recipe(toy_epi_df) %>% step_epi_lag(x, lag = c(1, 2)) %>% check_enough_train_data(all_predictors(), y, n = 2 * n - 5) %>% diff --git a/tests/testthat/test-dist_quantiles.R b/tests/testthat/test-dist_quantiles.R index 66456ef80..8112326dc 100644 --- a/tests/testthat/test-dist_quantiles.R +++ b/tests/testthat/test-dist_quantiles.R @@ -1,13 +1,13 @@ library(distributional) test_that("constructor returns reasonable quantiles", { - expect_error(new_quantiles(rnorm(5), rnorm(5))) + expect_snapshot(error = TRUE, new_quantiles(rnorm(5), rnorm(5))) expect_silent(new_quantiles(sort(rnorm(5)), sort(runif(5)))) - expect_error(new_quantiles(sort(rnorm(5)), sort(runif(2)))) + expect_snapshot(error = TRUE, new_quantiles(sort(rnorm(5)), sort(runif(2)))) expect_silent(new_quantiles(1:5, 1:5 / 10)) - expect_error(new_quantiles(c(2, 1, 3, 4, 5), c(.1, .1, .2, .5, .8))) - expect_error(new_quantiles(c(2, 1, 3, 4, 5), c(.1, .15, .2, .5, .8))) - expect_error(new_quantiles(c(1, 2, 3), c(.1, .2, 3))) + expect_snapshot(error = TRUE, new_quantiles(c(2, 1, 3, 4, 5), c(.1, .1, .2, .5, .8))) + expect_snapshot(error = TRUE, new_quantiles(c(2, 1, 3, 4, 5), c(.1, .15, .2, .5, .8))) + expect_snapshot(error = TRUE, new_quantiles(c(1, 2, 3), c(.1, .2, 3))) }) @@ -106,6 +106,6 @@ test_that("arithmetic works on quantiles", { expect_identical(dstn / 4, dstn2) expect_identical((1 / 4) * dstn, dstn2) - expect_error(sum(dstn)) - expect_error(suppressWarnings(dstn + distributional::dist_normal())) + expect_snapshot(error = TRUE, sum(dstn)) + expect_snapshot(error = TRUE, suppressWarnings(dstn + distributional::dist_normal())) }) diff --git a/tests/testthat/test-enframer.R b/tests/testthat/test-enframer.R index c555ea9b2..0926c587b 100644 --- a/tests/testthat/test-enframer.R +++ b/tests/testthat/test-enframer.R @@ -1,11 +1,11 @@ test_that("enframer errors/works as needed", { template1 <- data.frame(aa = 1:5, a = NA, b = NA, c = NA) template2 <- data.frame(aa = 1:5, a = 2:6, b = 2:6, c = 2:6) - expect_error(enframer(1:5, letters[1])) - expect_error(enframer(data.frame(a = 1:5), 1:3)) - expect_error(enframer(data.frame(a = 1:5), letters[1:3])) + expect_snapshot(error = TRUE, enframer(1:5, letters[1])) + expect_snapshot(error = TRUE, enframer(data.frame(a = 1:5), 1:3)) + expect_snapshot(error = TRUE, enframer(data.frame(a = 1:5), letters[1:3])) expect_identical(enframer(data.frame(aa = 1:5), letters[1:3]), template1) - expect_error(enframer(data.frame(aa = 1:5), letters[1:2], fill = 1:4)) + expect_snapshot(error = TRUE, enframer(data.frame(aa = 1:5), letters[1:2], fill = 1:4)) expect_identical( enframer(data.frame(aa = 1:5), letters[1:3], fill = 2:6), template2 diff --git a/tests/testthat/test-epi_recipe.R b/tests/testthat/test-epi_recipe.R index f8933b018..1b06cf24c 100644 --- a/tests/testthat/test-epi_recipe.R +++ b/tests/testthat/test-epi_recipe.R @@ -155,6 +155,6 @@ test_that("add/update/adjust/remove epi_recipe works as intended", { wf <- remove_epi_recipe(wf) - expect_error(workflows::extract_preprocessor(wf)$steps) + expect_snapshot(error = TRUE, workflows::extract_preprocessor(wf)$steps) expect_equal(wf$pre$actions$recipe$recipe, NULL) }) diff --git a/tests/testthat/test-epi_workflow.R b/tests/testthat/test-epi_workflow.R index 01eff4209..8bb58b0bc 100644 --- a/tests/testthat/test-epi_workflow.R +++ b/tests/testthat/test-epi_workflow.R @@ -59,7 +59,7 @@ test_that("model can be added/updated/removed from epi_workflow", { expect_equal(class(model_spec2), c("linear_reg", "model_spec")) wf <- remove_model(wf) - expect_error(extract_spec_parsnip(wf)) + expect_snapshot(error = TRUE, extract_spec_parsnip(wf)) expect_equal(wf$fit$actions$model$spec, NULL) }) @@ -103,7 +103,7 @@ test_that("forecast method errors when workflow not fit", { step_epi_naomit() wf <- epi_workflow(r, parsnip::linear_reg()) - expect_error(forecast(wf)) + expect_snapshot(error = TRUE, forecast(wf)) }) test_that("fit method does not silently drop the class", { diff --git a/tests/testthat/test-extract_argument.R b/tests/testthat/test-extract_argument.R index 3250b2991..7434763e7 100644 --- a/tests/testthat/test-extract_argument.R +++ b/tests/testthat/test-extract_argument.R @@ -4,27 +4,27 @@ test_that("layer argument extractor works", { layer_residual_quantiles(quantile_levels = c(0.0275, 0.975), symmetrize = FALSE) %>% layer_naomit(.pred) - expect_error(extract_argument(f$layers[[1]], "uhoh", "bubble")) - expect_error(extract_argument(f$layers[[1]], "layer_predict", "bubble")) + expect_snapshot(error = TRUE, extract_argument(f$layers[[1]], "uhoh", "bubble")) + expect_snapshot(error = TRUE, extract_argument(f$layers[[1]], "layer_predict", "bubble")) expect_identical( extract_argument(f$layers[[2]], "layer_residual_quantiles", "quantile_levels"), c(0.0275, 0.9750) ) - expect_error(extract_argument(f, "layer_thresh", "quantile_levels")) + expect_snapshot(error = TRUE, extract_argument(f, "layer_thresh", "quantile_levels")) expect_identical( extract_argument(f, "layer_residual_quantiles", "quantile_levels"), c(0.0275, 0.9750) ) wf <- epi_workflow(postprocessor = f) - expect_error(extract_argument(epi_workflow(), "layer_residual_quantiles", "quantile_levels")) + expect_snapshot(error = TRUE, extract_argument(epi_workflow(), "layer_residual_quantiles", "quantile_levels")) expect_identical( extract_argument(wf, "layer_residual_quantiles", "quantile_levels"), c(0.0275, 0.9750) ) - expect_error(extract_argument(wf, "layer_predict", c("type", "opts"))) + expect_snapshot(error = TRUE, extract_argument(wf, "layer_predict", c("type", "opts"))) }) test_that("recipe argument extractor works", { @@ -41,19 +41,19 @@ test_that("recipe argument extractor works", { step_naomit(all_outcomes(), skip = TRUE) - expect_error(extract_argument(r$steps[[1]], "uhoh", "bubble")) - expect_error(extract_argument(r$steps[[1]], "step_epi_lag", "bubble")) + expect_snapshot(error = TRUE, extract_argument(r$steps[[1]], "uhoh", "bubble")) + expect_snapshot(error = TRUE, extract_argument(r$steps[[1]], "step_epi_lag", "bubble")) expect_identical(extract_argument(r$steps[[2]], "step_epi_ahead", "ahead"), 7L) - expect_error(extract_argument(r, "step_lightly", "quantile_levels")) + expect_snapshot(error = TRUE, extract_argument(r, "step_lightly", "quantile_levels")) expect_identical( extract_argument(r, "step_epi_lag", "lag"), list(c(0L, 7L, 14L), c(0L, 7L, 14L)) ) wf <- epi_workflow(preprocessor = r) - expect_error(extract_argument(epi_workflow(), "step_epi_lag", "lag")) + expect_snapshot(error = TRUE, extract_argument(epi_workflow(), "step_epi_lag", "lag")) expect_identical( extract_argument(wf, "step_epi_lag", "lag"), list(c(0L, 7L, 14L), c(0L, 7L, 14L)) diff --git a/tests/testthat/test-flatline_args_list.R b/tests/testthat/test-flatline_args_list.R index 86f42a208..6359afc27 100644 --- a/tests/testthat/test-flatline_args_list.R +++ b/tests/testthat/test-flatline_args_list.R @@ -1,30 +1,30 @@ test_that("flatline_args_list checks inputs", { expect_s3_class(flatline_args_list(), c("flat_fcast", "alist")) - expect_error(flatline_args_list(ahead = c(0, 4))) - expect_error(flatline_args_list(n_training = c(28, 65))) + expect_snapshot(error = TRUE, flatline_args_list(ahead = c(0, 4))) + expect_snapshot(error = TRUE, flatline_args_list(n_training = c(28, 65))) - expect_error(flatline_args_list(ahead = -1)) - expect_error(flatline_args_list(ahead = 1.5)) - expect_error(flatline_args_list(n_training = -1)) - expect_error(flatline_args_list(n_training = 1.5)) - expect_error(flatline_args_list(lags = c(-1, 0))) - expect_error(flatline_args_list(lags = list(c(1:5, 6.5), 2:8))) + expect_snapshot(error = TRUE, flatline_args_list(ahead = -1)) + expect_snapshot(error = TRUE, flatline_args_list(ahead = 1.5)) + expect_snapshot(error = TRUE, flatline_args_list(n_training = -1)) + expect_snapshot(error = TRUE, flatline_args_list(n_training = 1.5)) + expect_snapshot(error = TRUE, flatline_args_list(lags = c(-1, 0))) + expect_snapshot(error = TRUE, flatline_args_list(lags = list(c(1:5, 6.5), 2:8))) - expect_error(flatline_args_list(symmetrize = 4)) - expect_error(flatline_args_list(nonneg = 4)) + expect_snapshot(error = TRUE, flatline_args_list(symmetrize = 4)) + expect_snapshot(error = TRUE, flatline_args_list(nonneg = 4)) - expect_error(flatline_args_list(quantile_levels = -.1)) - expect_error(flatline_args_list(quantile_levels = 1.1)) + expect_snapshot(error = TRUE, flatline_args_list(quantile_levels = -.1)) + expect_snapshot(error = TRUE, flatline_args_list(quantile_levels = 1.1)) expect_type(flatline_args_list(quantile_levels = NULL), "list") - expect_error(flatline_args_list(target_date = "2022-01-01")) + expect_snapshot(error = TRUE, flatline_args_list(target_date = "2022-01-01")) expect_identical( flatline_args_list(target_date = as.Date("2022-01-01"))$target_date, as.Date("2022-01-01") ) - expect_error(flatline_args_list(n_training_min = "de")) - expect_error(flatline_args_list(epi_keys = 1)) + expect_snapshot(error = TRUE, flatline_args_list(n_training_min = "de")) + expect_snapshot(error = TRUE, flatline_args_list(epi_keys = 1)) # Detect mismatched ahead and target_date - forecast_date difference expect_warning(flatline_args_list( diff --git a/tests/testthat/test-frosting.R b/tests/testthat/test-frosting.R index 5cab9c494..1bdce3b5a 100644 --- a/tests/testthat/test-frosting.R +++ b/tests/testthat/test-frosting.R @@ -7,7 +7,7 @@ test_that("frosting validators / constructors work", { expect_false(has_postprocessor_frosting(wf)) expect_silent(wf %>% add_frosting(new_frosting())) expect_silent(wf %>% add_postprocessor(new_frosting())) - expect_error(wf %>% add_postprocessor(list())) + expect_snapshot(error = TRUE, wf %>% add_postprocessor(list())) wf <- wf %>% add_frosting(new_frosting()) expect_true(has_postprocessor(wf)) @@ -16,7 +16,7 @@ test_that("frosting validators / constructors work", { test_that("frosting can be created/added/updated/adjusted/removed", { f <- frosting() - expect_error(frosting(layers = 1:5)) + expect_snapshot(error = TRUE, frosting(layers = 1:5)) wf <- epi_workflow() %>% add_frosting(f) expect_true(has_postprocessor_frosting(wf)) wf1 <- update_frosting(wf, frosting() %>% layer_predict() %>% layer_threshold(.pred)) diff --git a/tests/testthat/test-get_test_data.R b/tests/testthat/test-get_test_data.R index 035fc6463..aa799150b 100644 --- a/tests/testthat/test-get_test_data.R +++ b/tests/testthat/test-get_test_data.R @@ -25,7 +25,7 @@ test_that("expect insufficient training data error", { step_naomit(all_predictors()) %>% step_naomit(all_outcomes(), skip = TRUE) - expect_error(get_test_data(recipe = r, x = case_death_rate_subset)) + expect_snapshot(error = TRUE, get_test_data(recipe = r, x = case_death_rate_subset)) }) @@ -39,7 +39,7 @@ test_that("expect error that geo_value or time_value does not exist", { wrong_epi_df <- case_death_rate_subset %>% dplyr::select(-geo_value) - expect_error(get_test_data(recipe = r, x = wrong_epi_df)) + expect_snapshot(error = TRUE, get_test_data(recipe = r, x = wrong_epi_df)) }) @@ -60,15 +60,15 @@ test_that("NA fill behaves as desired", { expect_silent(tt <- get_test_data(r, df)) expect_s3_class(tt, "epi_df") - expect_error(get_test_data(r, df, "A")) - expect_error(get_test_data(r, df, TRUE, -3)) + expect_snapshot(error = TRUE, get_test_data(r, df, "A")) + expect_snapshot(error = TRUE, get_test_data(r, df, TRUE, -3)) df2 <- df df2$x1[df2$geo_value == "ca"] <- NA td <- get_test_data(r, df2) expect_true(any(is.na(td))) - expect_error(get_test_data(r, df2, TRUE)) + expect_snapshot(error = TRUE, get_test_data(r, df2, TRUE)) df1 <- df2 df1$x1[1:4] <- 1:4 @@ -93,9 +93,9 @@ test_that("forecast date behaves", { step_epi_ahead(x1, ahead = 3) %>% step_epi_lag(x1, x2, lag = c(1, 3)) - expect_error(get_test_data(r, df, TRUE, forecast_date = 9)) # class error - expect_error(get_test_data(r, df, TRUE, forecast_date = 9L)) # fd too early - expect_error(get_test_data(r, df, forecast_date = 9L)) # fd too early + expect_snapshot(error = TRUE, get_test_data(r, df, TRUE, forecast_date = 9)) # class error + expect_snapshot(error = TRUE, get_test_data(r, df, TRUE, forecast_date = 9L)) # fd too early + expect_snapshot(error = TRUE, get_test_data(r, df, forecast_date = 9L)) # fd too early ndf <- get_test_data(r, df, TRUE, forecast_date = 12L) expect_equal(max(ndf$time_value), 11L) # max lag was 1 diff --git a/tests/testthat/test-layer_add_forecast_date.R b/tests/testthat/test-layer_add_forecast_date.R index 6d0e637c8..428922f46 100644 --- a/tests/testthat/test-layer_add_forecast_date.R +++ b/tests/testthat/test-layer_add_forecast_date.R @@ -11,9 +11,9 @@ latest <- jhu %>% test_that("layer validation works", { f <- frosting() - expect_error(layer_add_forecast_date(f, c("2022-05-31", "2022-05-31"))) # multiple forecast_dates - expect_error(layer_add_forecast_date(f, "2022-05-31", id = 2)) # id is not a character - expect_error(layer_add_forecast_date(f, "2022-05-31", id = c("a", "b"))) # multiple ids + expect_snapshot(error = TRUE, layer_add_forecast_date(f, c("2022-05-31", "2022-05-31"))) # multiple forecast_dates + expect_snapshot(error = TRUE, layer_add_forecast_date(f, "2022-05-31", id = 2)) # id is not a character + expect_snapshot(error = TRUE, layer_add_forecast_date(f, "2022-05-31", id = c("a", "b"))) # multiple ids expect_silent(layer_add_forecast_date(f, "2022-05-31")) expect_silent(layer_add_forecast_date(f)) expect_silent(layer_add_forecast_date(f, as.Date("2022-05-31"))) @@ -96,7 +96,7 @@ test_that("forecast date works for daily", { group_by(geo_value, time_value) %>% summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups = "drop") %>% as_epi_df() - expect_error(predict(wf1, latest_yearly)) + expect_snapshot(error = TRUE, predict(wf1, latest_yearly)) # forecast_date is a string, gets correctly converted to date wf2 <- add_frosting( @@ -110,5 +110,5 @@ test_that("forecast date works for daily", { wf, adjust_frosting(f, "layer_add_forecast_date", forecast_date = 2022L) ) - expect_error(predict(wf3, latest)) + expect_snapshot(error = TRUE, predict(wf3, latest)) }) diff --git a/tests/testthat/test-layer_add_target_date.R b/tests/testthat/test-layer_add_target_date.R index f1fa3f217..53506ad07 100644 --- a/tests/testthat/test-layer_add_target_date.R +++ b/tests/testthat/test-layer_add_target_date.R @@ -107,7 +107,7 @@ test_that("target date works for daily and yearly", { group_by(geo_value, time_value) %>% summarize(case_rate = mean(case_rate), death_rate = mean(death_rate), .groups = "drop") %>% as_epi_df() - expect_error(predict(wf1, latest_bad)) + expect_snapshot(error = TRUE, predict(wf1, latest_bad)) # target_date is a string (gets correctly converted to Date) wf1 <- add_frosting( diff --git a/tests/testthat/test-layer_predict.R b/tests/testthat/test-layer_predict.R index 041516b29..70e76e593 100644 --- a/tests/testthat/test-layer_predict.R +++ b/tests/testthat/test-layer_predict.R @@ -48,7 +48,7 @@ test_that("layer_predict dots validation", { # We don't detect completely-bogus arg names until predict time: expect_no_error(f_bad_arg <- frosting() %>% layer_predict(bogus_argument = "something")) wf_bad_arg <- wf %>% add_frosting(f_bad_arg) - expect_error(predict(wf_bad_arg, latest)) + expect_snapshot(error = TRUE, predict(wf_bad_arg, latest)) # ^ (currently with a awful error message, due to an extra comma in parsnip::check_pred_type_dots) # Some argument names only apply for some prediction `type`s; we don't check diff --git a/tests/testthat/test-layer_residual_quantiles.R b/tests/testthat/test-layer_residual_quantiles.R index e3668b249..09ef7c9d3 100644 --- a/tests/testthat/test-layer_residual_quantiles.R +++ b/tests/testthat/test-layer_residual_quantiles.R @@ -46,7 +46,7 @@ test_that("Errors when used with a classifier", { layer_predict() %>% layer_residual_quantiles() wf <- wf %>% add_frosting(f) - expect_error(forecast(wf)) + expect_snapshot(error = TRUE, forecast(wf)) }) @@ -99,8 +99,8 @@ test_that("Canned forecasters work with / without", { }) test_that("flatline_forecaster correctly errors when n_training < ahead", { - expect_error( - flatline_forecaster(jhu, "death_rate", args_list = flatline_args_list(ahead = 10, n_training = 9)), - "This may be due to `n_train` < `ahead`" + expect_snapshot( + error = TRUE, + flatline_forecaster(jhu, "death_rate", args_list = flatline_args_list(ahead = 10, n_training = 9)) ) }) diff --git a/tests/testthat/test-layers.R b/tests/testthat/test-layers.R index 13f859ac3..6e2d80111 100644 --- a/tests/testthat/test-layers.R +++ b/tests/testthat/test-layers.R @@ -11,7 +11,7 @@ test_that("A layer can be updated in frosting", { expect_equal(length(f$layers), 2) expect_equal(f$layers[[1]], fold$layers[[1]]) expect_equal(f$layers[[2]]$lower, 100) - expect_error(update(f$layers[[1]], lower = 100)) - expect_error(update(f$layers[[3]], lower = 100)) - expect_error(update(f$layers[[2]], bad_param = 100)) + expect_snapshot(error = TRUE, update(f$layers[[1]], lower = 100)) + expect_snapshot(error = TRUE, update(f$layers[[3]], lower = 100)) + expect_snapshot(error = TRUE, update(f$layers[[2]], bad_param = 100)) }) diff --git a/tests/testthat/test-parse_period.R b/tests/testthat/test-parse_period.R index 0adbcec3d..10dd5692d 100644 --- a/tests/testthat/test-parse_period.R +++ b/tests/testthat/test-parse_period.R @@ -1,8 +1,8 @@ test_that("parse_period works", { - expect_error(parse_period(c(1, 2))) - expect_error(parse_period(c(1.3))) - expect_error(parse_period("1 year")) - expect_error(parse_period("2 weeks later")) + expect_snapshot(error = TRUE, parse_period(c(1, 2))) + expect_snapshot(error = TRUE, parse_period(c(1.3))) + expect_snapshot(error = TRUE, parse_period("1 year")) + expect_snapshot(error = TRUE, parse_period("2 weeks later")) expect_identical(parse_period(1), 1L) expect_identical(parse_period("1 day"), 1L) expect_identical(parse_period("1 days"), 1L) diff --git a/tests/testthat/test-parsnip_model_validation.R b/tests/testthat/test-parsnip_model_validation.R index 02ed94fe0..605fad817 100644 --- a/tests/testthat/test-parsnip_model_validation.R +++ b/tests/testthat/test-parsnip_model_validation.R @@ -4,12 +4,12 @@ test_that("forecaster can validate parsnip model", { trainer2 <- parsnip::logistic_reg() trainer3 <- parsnip::rand_forest() - expect_error(get_parsnip_mode(l)) + expect_snapshot(error = TRUE, get_parsnip_mode(l)) expect_equal(get_parsnip_mode(trainer1), "regression") expect_equal(get_parsnip_mode(trainer2), "classification") expect_equal(get_parsnip_mode(trainer3), "unknown") - expect_error(is_classification(l)) + expect_snapshot(error = TRUE, is_classification(l)) expect_true(is_regression(trainer1)) expect_false(is_classification(trainer1)) expect_true(is_classification(trainer2)) diff --git a/tests/testthat/test-pivot_quantiles.R b/tests/testthat/test-pivot_quantiles.R index d1f092c0e..1639058e2 100644 --- a/tests/testthat/test-pivot_quantiles.R +++ b/tests/testthat/test-pivot_quantiles.R @@ -1,14 +1,14 @@ test_that("quantile pivotting wider behaves", { tib <- tibble::tibble(a = 1:5, b = 6:10) - expect_error(pivot_quantiles_wider(tib, a)) + expect_snapshot(error = TRUE, pivot_quantiles_wider(tib, a)) tib$c <- rep(dist_normal(), 5) - expect_error(pivot_quantiles_wider(tib, c)) + expect_snapshot(error = TRUE, pivot_quantiles_wider(tib, c)) d1 <- c(dist_quantiles(1:3, 1:3 / 4), dist_quantiles(2:5, 1:4 / 5)) # different quantiles tib <- tib[1:2, ] tib$d1 <- d1 - expect_error(pivot_quantiles_wider(tib, d1)) + expect_snapshot(error = TRUE, pivot_quantiles_wider(tib, d1)) d1 <- c(dist_quantiles(1:3, 1:3 / 4), dist_quantiles(2:4, 2:4 / 4)) tib$d1 <- d1 @@ -36,9 +36,9 @@ test_that("pivotting wider still works if there are duplicates", { test_that("quantile pivotting longer behaves", { tib <- tibble::tibble(a = 1:5, b = 6:10) - expect_error(pivot_quantiles_longer(tib, a)) + expect_snapshot(error = TRUE, pivot_quantiles_longer(tib, a)) tib$c <- rep(dist_normal(), 5) - expect_error(pivot_quantiles_longer(tib, c)) + expect_snapshot(error = TRUE, pivot_quantiles_longer(tib, c)) d1 <- c(dist_quantiles(1:3, 1:3 / 4), dist_quantiles(2:5, 1:4 / 5)) # different quantiles @@ -64,7 +64,7 @@ test_that("quantile pivotting longer behaves", { tib$d3 <- c(dist_quantiles(2:5, 2:5 / 6), dist_quantiles(3:6, 2:5 / 6)) # now the cols have different numbers of quantiles - expect_error(pivot_quantiles_longer(tib, d1, d3)) + expect_snapshot(error = TRUE, pivot_quantiles_longer(tib, d1, d3)) expect_length( pivot_quantiles_longer(tib, d1, d3, .ignore_length_check = TRUE), 6L diff --git a/tests/testthat/test-population_scaling.R b/tests/testthat/test-population_scaling.R index a94b40b82..6337a2ea8 100644 --- a/tests/testthat/test-population_scaling.R +++ b/tests/testthat/test-population_scaling.R @@ -279,7 +279,8 @@ test_that("expect error if `by` selector does not match", { df_pop_col = "values" ) - expect_error( + expect_snapshot( + error = TRUE, wf <- epi_workflow(r, parsnip::linear_reg()) %>% fit(jhu) %>% add_frosting(f) @@ -311,7 +312,7 @@ test_that("expect error if `by` selector does not match", { fit(jhu) %>% add_frosting(f) - expect_error(forecast(wf)) + expect_snapshot(error = TRUE, forecast(wf)) }) diff --git a/tests/testthat/test-shuffle.R b/tests/testthat/test-shuffle.R index 94bc1aa3b..f05e8be3d 100644 --- a/tests/testthat/test-shuffle.R +++ b/tests/testthat/test-shuffle.R @@ -1,5 +1,5 @@ test_that("shuffle works", { - expect_error(shuffle(matrix(NA, 2, 2))) + expect_snapshot(error = TRUE, shuffle(matrix(NA, 2, 2))) expect_length(shuffle(1:10), 10L) expect_identical(sort(shuffle(1:10)), 1:10) }) diff --git a/tests/testthat/test-step_epi_slide.R b/tests/testthat/test-step_epi_slide.R index c1e72501d..27f362ad6 100644 --- a/tests/testthat/test-step_epi_slide.R +++ b/tests/testthat/test-step_epi_slide.R @@ -31,6 +31,8 @@ test_that("epi_slide errors when needed", { # function problems expect_snapshot(error = TRUE, r %>% step_epi_slide(value)) expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = 1)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value)) + expect_snapshot(error = TRUE, r %>% step_epi_slide(value, .f = 1)) }) diff --git a/tests/testthat/test-wis-dist-quantiles.R b/tests/testthat/test-wis-dist-quantiles.R index 93f7c50eb..937793189 100644 --- a/tests/testthat/test-wis-dist-quantiles.R +++ b/tests/testthat/test-wis-dist-quantiles.R @@ -26,7 +26,7 @@ test_that("wis dispatches and produces the correct values", { ) # errors for non distributions - expect_error(weighted_interval_score(1:10, 10)) + expect_snapshot(error = TRUE, weighted_interval_score(1:10, 10)) expect_warning(w <- weighted_interval_score(dist_normal(1), 10)) expect_true(all(is.na(w))) expect_warning(w <- weighted_interval_score( @@ -36,7 +36,7 @@ test_that("wis dispatches and produces the correct values", { expect_equal(w, c(NA, wis_one_pred(1:5, 1:5 / 6, 10))) # errors if sizes don't match - expect_error(weighted_interval_score( + expect_snapshot(error = TRUE, weighted_interval_score( dist_quantiles(list(1:4, 8:11), 1:4 / 5), # length 2 1:3 )) From aa418276c345319360eacabd1e6c9e9aa6e2305e Mon Sep 17 00:00:00 2001 From: "Daniel J. McDonald" Date: Mon, 30 Sep 2024 16:24:26 -0700 Subject: [PATCH 382/382] bump version, promote authors, add funder --- DESCRIPTION | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c76280d45..5cd468fb9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,13 +1,14 @@ Package: epipredict Title: Basic epidemiology forecasting methods -Version: 0.0.24 +Version: 0.1.0 Authors@R: c( - person("Daniel", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), + person("Daniel J.", "McDonald", , "daniel@stat.ubc.ca", role = c("aut", "cre")), person("Ryan", "Tibshirani", , "ryantibs@cmu.edu", role = "aut"), + person("Dmitry", "Shemetov", email = "dshemeto@andrew.cmu.edu", role = "aut"), + person("David", "Weber", email = "davidweb@andrew.cmu.edu", role = "aut"), + person("CMU's Delphi Research Group", role = c("cph", "fnd")), person("Logan", "Brooks", role = "aut"), person("Rachel", "Lobay", role = "aut"), - person("Dmitry", "Shemetov", email = "dshemeto@andrew.cmu.edu", role = "ctb"), - person("David", "Weber", email = "davidweb@andrew.cmu.edu", role = "ctb"), person("Maggie", "Liu", role = "ctb"), person("Ken", "Mawer", role = "ctb"), person("Chloe", "You", role = "ctb"),

    D~^cWP>)lJv@!?{OFe>@8IcyJW&KlISokr-nqgO_*xK zMD~`bh?r)k0qAd%6zgo;&Was)EIPaMo_$hd=%Q`jz3uTqcR}WL!={LN2aQSnyR&sx zEz>|`k93bc!dFcWT0A?ripNi&0~+FkjBmebWi$Nwn2Pew^B*4rX{Cmo zo9hE<@y}iv7clM5H?g)}k1n+m6s#Vt@+9XpWfW--XVw2THpcMF<09ZMoRjB<0`chk zd|0TLFX7u`>t*P>=@KeBk>jDQthg_#3mrV6dCCZ<-y;9vkhhUf@My+{N%v>n%ftC& zfhG!+(U{4uP|W6n>Qy@zE}u%J3UVjGR2Hu89OBCzCO&*+Y^#+m+_@ ztNI;C!B3gwI7d|k@at}nc4n>)mgzRVZAoj`&fgkV*Pl!I9OCCP+kx@{=r4YGSRzPt z<9|3Y=0>N60KV}>Q#Y4oA~OzjX5vK9NhbpjnQfnP&HJXNrttP4R|JI`yF>>Y6DzA# zeZWl+5&~*nGy+U*HRbdffX*1`pAb11ws-Z)$_g2a2HP0wD<30N0nSkqlvd$FGJG6R z2m!Wy${-2)LMR#U7ympIf zJDXTz zZ@AoX2K0pIWX)z*v$AF0#m{{Im!5E<%1`{0LA#F)uWTy`AqUavQ&=2Vf^KozDid85 z`JrC^VWUo)L0#qPlZ+$0#+-Rm+HrH<0dhExv)%)0H|XhS5kVwm{gD4d)kjQ3#9*it z?(K(%hr@=#9m%+*&H`lj&QX`zvgrdE&NYTZbd-$n6(BrrSj()#=b|2EoO7Zbxix_b z36$GF>%IP?RSCsS!=|LA_&_dAWdmSx59qdgva|sXCf^p_nC*ldsZi_dOF)DEm+n5W zelDrY0J++WU^2=i9CU zS@If@u%NVM30Qdu$#UdzA^eVoOerARlTsNjN%;Sh|8ipKA8o7usT=IbeWoD*2{6>I z!hR@nKmLcm5)z=jTDdshC|4`>67#=2)X8~KE+OeYC^&&kFrfU-UF28Rw$aO1uZSqP zp7eFS9u0p0pHvVA*;cmpq~*-3;nfm8){J-3qyTgQtMFhq$`W(RIu3^xlT7a=?X%v)%;hOmK6V_HTPN!P@JX z$#*Po?Nc|7aM@ZspyHqhL-uK$%4nh7_Un+|ZfzwjQ#tFpa|+7eG&?6+L>M@95y|e| z4Z~)N^mJ4-pC{s2C5BAxi$#f{6SE8}f+WYqWp~eNv>Xhf2xGFy%;U1FE z$shhmt;xOn5UHfSHvf0>LlWYR=lk#cg_rl8qRij5pY4Pu*` zkeedX+ss5K_0Hh`cG=A02+W$yL5PnIHj|Yvok{qvKe2+pE-Atz!C%07=U0>AFS7|= zjICGOeyeX1@7pv9goI6eZ(}(7a8~@?WqPsWugr~(e4me)KZo}l^dZiu4<6rd?^kPb z0;@fPH$$q}L-`YExBOW#?TLxtv0346lAna)LI1?wM?~1~0`9t~ywUP{VcXXb`eP+8 z(O4$T-TabA2sv8u4{9%orwEU7tnkd~K!uuHnHN3=EQ^jJG~9OA|FsGew>5XHe)PXF z@G;ewN~*0(Ll#dfK%Qm!Am^#{*E}FOF-Rv!cO2=DS7`B-tep&vTsk&A_VDQi8lyFtAD1jTUCzT8+*u*@=sjp1)@fJ z0tG0Wo;+8JI7`6$D?WFx0zSkUVFjAp9TAG0tN9UsepB3pw;mvBhB=JblJ;! zg%|37er)8-KD0NE6Ju~Djr-gC$^DMquov^l0k=mYQGC%ED-67(!*3?YS)sS3a^yIutVV)<;s><@n?L}_A8TI9771iXQnvFhQDeoFaIDP3h(hl#@7 zHk%ro<2hfx#If|`HY$bxOwlfx_K4kmq4bZui;v&bIx|l6ZpJa|BWOYha+XZ6=xW4D z+|MDjWz%(4nySxU$a3!d4N0B?B-x9^7u>*G`wLOr@yT>*3_BmK3JSz$|H^*AdC+68 zhaW!)nuFTt7TmYbfKd`0lR%PCZD+$?D0wcQ=)F{pDC!peuGswXgBP)iH~}y-k=4^t zfeOYzY-K1uo9&F?9$h2XY6T zz~=$UhLQ(AulFD4z>}k_W#Wqhzf>vsKO*OEF=uUYbkdY7Ry{R)$n6ZnbuRDn^3J_!$bnbDnz zuY{ck)g+yEzpIx@>b*{_C%!;f4LfwOnB^u?PUk0%^hrD|)qZccdnq1~TXRKeIMVfg zS?;(@9odX!-+>V1)T*O)Z!%cBVHK4y$En%Jsv7>Y<6YvoiHUh2Y z5%rSm_}B$XtQ5$1@ZKat&KtFR9-Gj-exX?id(%hojUxSC9CETpz#!f}gSYSm9s=5? zHx9$(m`DRBZ6l6zg`vABmf81AAj8ZR8r35tNCybY{eK;D{tft@Z)-&)Ad`f=+McV8 z=OLhuoCFU9fAbu6JN*&lqkRw~c(xfnS~(7X;OGj*MhqTGa>E@i<#@aJkMFY#3!llHz*_#*NNIzLsv;DtqDuM@Rd5~ah(e(09D+P-5{K2?o- zLghIdDWr?$8u0S2DC>wJWGp*HcscqSjm{2KYE;_nZpF7~_vvh`atEORLNfzte z@YJNP<)ooTuFt!NwSC4i3_A+>s&Kqdqa44jS$C+A31W`Wy|lQ_%(qt2NYy+Xlci5S zoxQe-Uz%fG>kh2FGFhR3Ycmx=)mlW7!!8rN2x~7D93?S<39t{4pmucZ!Xd`RM?8xV zDrIUx*Lwyfv|?_ts!OP}F44Uqmm}z`wdG(}KJK+hpo_T?q!NfyfUBJ=ZEyZQ>Wd-Qu)IT2#>o6I z+0x6&B&c&X;$D#p^Yf zct&FaUa$~QU@HWB8Q%z+!drnEh7k@)WZG`)ox=G#n4+klc+l&t-yF5Ck;=E(?O$O1 z=pGVn3jDbjVi#)B(H>9N?O3q{EfITjbdU%p>0aJ7j!PCHSb`Ql_Ex?W0sh+7)ncH5 z!L2~Y!%HWIyMYp)9q>G9>Z|s};El4k4MlfWUE=pDGB*Qw+3Jdgzj;}{;?sL?5&!#= z!9!4d_<5?gL3_E<25k%`$q1X+5R~MdV--j}B}Av^k>K9y3{b#-268sGVZ#|DYKR&1P!an%TKK` zmj&jb73~cqmG|x5WwDose+W2A!}2gHL-$H$s?UESzFGT4@u;=jaV(N2zWv1So+$A1 zDg=Q;G@^+N2t3py*9B^AgHn&(~786h3(#cyx8L|HmG9%Wem(;}jm`-K~8A0IEJ`UBD+9PXvQ5ViCuYCF7%K;hs2GemT2e;#3WGj6!u>^!NyU+~tcIs(dQgd5&e}LTa1Dj<{r)yyUHkTq`(hkAE868Sw8pFuLGsnO4mRP5{GwhOH@OH!Hm zy?E9~0~s+!E#<#iEB#j;fVJ{R&mVWuRuknPix_)?G8AG`xF|bpT^av4b>@)v8ZET( zL%ss&X3IpBzZq@McoLou$h&SFs}N<(u3MNyI5o@5ZM#ekdCsxG;6;DEHFkB@{iM-x z+TIs*#@kajYSHUuz|p&Vn40`D>6^8%Bi#@`t*n2i=|Y(1xgT;gSimb})-jGMtHH(k zH}LgX1|mc?A%c5(bmkh&!C?5_GI>-_*AieztflnUwRBZkNDcX}Giyuk=oe?PPk%n| zMClE=!Rvni$Z+!sf9L1#nT|Kt4(Je({5XRRuEa1|gShMC2tgF_3>OG9k?3Dfuh8bF z3MRkXQbA!UrLU6s2TL$rvJQo70G_^)5-Vg zoKmvbzla^^c7?s2#W(pY;Pk_V+OIUZ^?N^Ms6-$~$YiG!l3oR@_ySr&<^LD=Fn^0u z|B0N#%&YPBCLrZqlsB$ij+CDa`!C*s@WczLBM^a3@I^hyqjU7a-*tOoE_4Vi*fTtW zu#v$g_1z;u>m>MA4?ZO~UkbCG^f*;|Mvd1JvqLg3oTsVw=EUWzrcAnmct0(;Z9CsFtpT*5Yb=KJ&Ld40_&UXyfxI1+{UUs|xB6E-bKi zGBzH7`ImizV^tIQRIby~ZMrV&CHFB;*YWP48ItYu5&~zFuSW6XP`-rYtKYP{p-0M2 z%u6w9Ng5{~y}hUyQ2`b!iQBSoc?&Pr9 z^j1TrdG$ODWDwvHRu`BTYj|^`vW(6ja-vbJArclBq|(4$IM&JT2H33%WtA3JK{2YBUH*arR7cb7c$Bs=1X=- z_Xtuf zhos?|wk%9Qv|h`T$AzSY>k&3u`rZTQFZ~$i(bN};M_S8eX~ZxPn7OzfrKt*H8F+zQ z7WFX$;RpjSd1b3mMCYRmu~&jYdsF$+K*7P=Yhp{ZOKO~xNd@eu4ix@`BkSVYin&Lt z9iCn^eELHBymqO*ZDstWkINMU@*~GVqNaQZd)TK<)d=NU5R&D{|In#-jAyE$dkv?I?Ia? z@l2 zGqJOq15W^?5z4pU02L~X&(1tYw;9TSONCRBq-wU8nV1#`58AUG(|2Fe8Z=6#^R6@+ zXsxv7Qi+EEA7x?iYuD832|5PagvscrG8)fnotfgIvQNfwiWa&>C2zU{+!731!ogPghAQZ-6cj zDX@g}+hTxCSi1Go>)xK~#A@Lxem~1RX19GPYz|ue44XboZTm+qwFkOfO~xS}M&GG#D!|k((@55(9ejS;zKt^_sbXuf&fc8) zYv3?qg%mco0~b*pxB(^dW~C3Ib`A1{eUBt2^S^3Ty8|iImfzUXBjX&y@Mw6!b6Id# zOb1`%)^Ps;gCB5nJf*Z=9N6xZl^R_AybQMY{nIT8M2s-fe)fhIdxbt!u;+R*SZ4Pc z_bh0>WzCa#CUBnJNT7+JG8;jU`nBhiF=%~SHnI)V@UGEo5I*_qPEXBiNTjQw zyBSW$%t@;4dTZKFj(=an`3JV@+g(&b8rAo+LEHpdD!gC{yu8YCUAw!x zATQ9BBwOdy3tjm^DIe1K5&?xf;EbF1GzujcRAx;adNMHGOV3Lt;i>;4Z=g@mmAC=I zxQ0Dd2Qi@Astx1<73Pq}AdszuHq)M;{pOTv9PJTdt#WafEIQFf7VII0U*yfjUaT6SG|@pjA{2li*z`8D+C& z=FnWqcOtL_K@Siq5^&rCieegE$@rhU`%E))ulo1Zv31iD4gR9sw@SZ^hGoWa&pYMm zZ4$jH?(9zs&KLa!11B{uNY2{tPON#|e-5Q1bUVJ6T`&mpss^?gq@8Vabc zM8KYv6PltRx^j&ATV9a5u@q1euk9K?-1}m6O>B1S+bf!8e8+zzXS5t@?7ta~UQZhW z|3PrfcdCZ|eQjM`h(!o(zsnV;{queq8{?D|{kM$i#AMdot;9bO{rEeS54P#i$%b#A zm`IlqQ={1i!!lnD0im$x@LuXXB9L88Ih#D3u_&7=0<2o;;3Ayu}b zZ)vtBbjwfX;WY%Pfc4NCEPY862vOL2`4wDGBWKT!E3X23;v}p zBNMP=3p!o~1_m`H8uv;zy|6QYLfBkrl@K4hb?Dg@#B!klkVxmdD6!KhL3M$lTFov- zHUB)uz;hMnMn6&7HuSrLriRGQ^rRcu*%+U=_n1~Pd|CixbvKP!CQO{@r`!l^8F{l-a z*YqAkPGq0{=Gg3|>X6$MZw_uRw8l=1B$bvh7gsx09OgPrw|$G}GJW~)TXDu(1cG}m zAd-=l^(xO+$WX%&ub#O4XOtK%*$lPM)&1q7@{4@a*<;)FPk?JS9Te;nd&XW+Q+_l4 zmhJL0rLqm7oy^Rtdvghq_Q{Dh`ad#1?~Fh%H{N9IyP!guCF9QBpGl`{(G~9e%5NO_ zh+RNr5LbcFC_Qmz>#0=;FEd*8JBOxXt5Y&Tgle-+K%Uya|DQ&_9;z)H$~} zRL*pW;cL%{UV>ss`DkvlN45VLloBSsZ)IjfjnH}J=$8KrbJt|D<;u*q`Qot)bp6D8LC-&L)i7V3z z&TjP-m8d&~3I@AV0{qj&@aK@op)0jhG@t_g`~9%;x9`8Z5vsHewu&0pI_ zk8{U<|JGWA_HDlGz{c+m-)A)1he^bn!$Nu+DsGt$mKvd6Mc>B7=8;mRS3!?qY>7`3^=^tG7*P_yW z!qoDJ_?BG_wLm*whk`_9Vd5)S(2l(!Yte;O9vLYWnG(M))`jdoXOWRVb9J^foa63U z6Y_}{6S#Q7TkE8o)W;PBMtp{S%+c)*b%ONPMPV}6M2A-fDE1n8lt=bf8(GqQKmu*m zFBM{(VQgX|K#oh!8?Wa2%CXz(5((!)$ltO7`eGJiOG-3p7J$#*1mn)~Kgaw$XlvW#V_R|Qj29V`4LH=TBK>qNQ&cLeNhUfmw(^DsRtyTy(*kbkgI!cTKq{KIZK&h0@#w;)(00i8f zAi%r19Vs4U77N%_SI#%-%9D&LHj8I9p3oHw4hmXKlX15;abk#asNOzuvV0&#Kv!rd zxYSu)cW(bV%LR3XehV8Hr-r?IXOF&6S0n@BVAZdwVLNS441{Y;;tlR@NE=%~{r~mZjj?)NF!Q2OEB-!M5QK6SY~x0? z`e!|vLZ#8;jL@)Lcft4{B`n?{YR8vdy0rDQMOjc}W*_JI;4zzr6#LS0DeJj_QVKYq z=9`ql{781>Ua8}@Im&C5H)U`I{m$D>)24j$1IFr$K-We$RRYVPpwL1Y?-@0hm>enb z(=x)FMLhDh^n3I7H_#oY9lrXO?wl9gbKk@5j4WPD(rvSm&w3D53_~+HIXOp#0p3sn zZcj4z1^uIgnLZH5!awr(qrhu%0+{!mZN5of(PAUS(ggO0qILyPLdJfPj~D*|Ktt6` zb(@EmN~jNHK4-U6a|;-+5VT2WEzZU7;1|SwEgP%Z#6KDx;&5+aXir&v4>G2Zj&q=v zCP?(;p7Zs_st>1mebvo|gMB?uMcqu*D=5@#IUce|HFAcOWTVob@=L4p7+Zmwf?b~5 zrj+CShry4LocX!aQ@zJWzL@+FtcaHwc;)ieP`!(OZv>vf+L%$jOohG}K&cq8fozNg zL8bC#;zO!C7_wui=)O!b(8^w~*IYh<2(6+}g64@P_dmh&yp&6}sIY=J6YZ~K=iHY( zCK&!${z~lCFR7H5E>b-9%nACA|E)WXd%J~2scPdkIw5m8pYN`%?Z;PLIoa8qCIgDy zqOZOun-UpquM}h(64!iuB}-zG^00ifeH-;J{}J8#?EKvfhGOlg7mf`Xzpm)eu*D2D ziizC)T=h8e(j;y`?2_%G?|#s2Wz_m?S7Yu90!~3=PKP27@*#;3=E6J(`=oEt>u}#u zsIHe7-`Jk!2Pm@D*>MdEp0BXI##MTxjk^Mfz65lE(=TjV8x(Pb@beglbDg?OHqdht zQ4$Z66=q1R=l6EFf_>g4{y|G{r@8NO-~nHrwWAT3ogbp0n9Jty%Sb6$f=XIidb$3p zA6_1vV4n@WVYe=Tz=BR+<3KWb%9mbAVh@IfyQ>KC1vyq&O8w z=6{4Vv>>k^fFsOv6=1$%$2n$UL7%HY5E%n@Q_SuI{;_b_!{%ydLkQd2qjO`2^_V|p zJ}qV6@)v5-*}Iznw5W6+m`vPQ=--6wBd>qK zjru{rhp@0>v(YMWzCaH2xp?z_2fNc)RZ!K}pfH-Q(%D0&p<2^1)So#N>{%^nzu(|} zT!hN-qfAYX98u+JQD0>7&YXlpkm_UNIvS!Bs>k{CQ)iE6xx8AmP%hoJUQ-wTGtETk+v9yt# zyv%IRN6Zt2sDU}}Q#S=e2kP;!Co{YKw6aQFeu7c*D?BE}HQ&bb%OonC@A4Jq%U1~O z9{>e*8t(N{Z%zU=fnKi$_9daTl=vc#wftTo8cVc@E`Li{!Ack+f zRYZp(Q?uqBaBA^0uax`iXrSFG>R43dg1 zC#?VJy2Sh!4Y8*)ZLxK*wc`>eqea2}J9nz!#~e(#>|ghno52}|-D?E)oGte!baA0& zE6R9Z%X7W|9vWF*xr>gqaD}@^EUmV{6P~S_BJN6jy>WH-t6ZInS<4S!Z{N^tdn0Yj z*Y0u#F@OtU>~$C!O$1J|WJtb2NyBNMl@)v_S1C@Ke zFLw@%8D`UHXyRew5Z0qSf!yM>yR_rGNW@PFx1>BS?7i@=yaQFF!$u}CUtY@gJOSB< zxgS?{5!vTlQ35-bdF@aHaZHUi#_GAsrK_0ssWXAI26BFreK36k|6~jF#Y>PX1vg?6 zsR@A33BQ~Z8}WZdpg-mIjv4YZ=W6xGu}1}_*P5&}YUd2@>d87fI&QNZ51}th-xWST z?)N=a&}yS3`;38i=#Tj~1X{MP3~lFLRkmVf6Z_=WNj4l86#n2s3h?%7`Ind=+^pY? z=vjHU3SV_tCZCN9K|CoCLm}@y_8;&dUVfv(g<0jsL*+sxnZcKfL-acOQ{802c*e#p zgL@nCrRa3Jw_^bwU4Drv8e*-797TTkL6J$_$^{^O#s-3_Y~x&8NmtDIsVt%vRVAP>_F|Hc1UJpc)z6&anzO{F~H zxXXf%DbTRuk@(rKIbVZUq~q%JPvpt2)g>@dUM4G0RT-?$X4R?o9V2CCfE~G`7VaCT zxNeH^-JR$?F(kN>C2I|s3IXG1iVYOcta~56>&f0kmBDIq*U8S1IM5G(mkjFjLdvt! zzC5Y86~o#}kx_ZGTSR&vg6gN=-bkste_vEz@!YO3`7Mqlv^hjz&P zO<$JnF15H+#BFmMyrm;PRps+y4IoYQ)COaAkq0-b8BP%4eN;qgCm1PMKZG4#uCd^h zg8nonc8!@ePqB@!$@u#@OHaB}n<>@jUL;ZU)86V#rqq}CPt({Y&?<136FwBPT8I5~ z(;s;2P=ZH-h9ohaXnBhYheocw&hn+we!lKIDfT0Rr0HkB zqzy1OWM{XR%As4or@@Qs`@5g^BFaE4K@dxB;m^=}e`s+0@)gWt6XejlPp(SwC@d=F zcCBCq^hQwdFKclBKU%~4$(7Huila&EIhVQ^etXKaS>eo)NpK;;Ee^;6HWYu>g-2*k z#3?RQW$?bg4`>lb@5vkUl2snmZl&`eoAI*SuEZO(_^a`)uQgZi;^up$Tv9s!#puV2 z-6|a&8d`S8@0pRKy0Y9+Z=N&$>E(8Ad_VwF$d5ptk zVC8};>XGj`7Oth?S8<+1{LZ&Vy|d3;q+rw8_)$Mia5}{;>OUP*-i6Z=Ztn8|PPHpE z<$Ycsf{wjkVYz<#kE3qF1>C>S5&R}Ri+zmAq=p4Mg0ft|!lSu2tfnAVkLdkQQnDG| z{d^tYa-FuTBlFr;Lz%2n4(F15hPTAR56+~|@*6_R+0-tUx_e0}Q$axww7z}QZ4tdt zeJk~Z@ar&$ig^5&U}-9ata^a8C$eH{%S(aCB38dU`3$wT-D}*qIWqYpPaOWg41<9A z@bV66A^W)PHQ5SWCi1wEBOPH;i@<$&3>JvI{8F|U4w!P6_FsU$2?6x}-6GWiBiH4N z$AZpXJX#~KLlf^DktAhx&VZ6C+4o$exM1<)(pAf9$~3K|?qo{5tA~eItQTwUh0W#Q zhoY!i$s=*U!-fRBNK6qBFt7_x6!c|RX--&W*ZO~j-e@I}PWlihtWInw#MUlV?4ACHPzNvpG5 zuQBn(1M_y`$J7^IzZ=EcyB|Qe$fPwMH3b;ZTE6T7>qmvOXhlM^7e2sYI=^=url4Bf z9p2)dJ>f?Emr)eaZQUFE^mtC)>5I-7CVlX?yU4qyKli@KczA0t@qtzWH32sDjPzr5 zH&i|AMl=f6<`&tra6j;6)RL=j=;>MPZXr;Dg?IJo<~v=TFaS~q9Q&$OCFSLIE+G!b z%G-*YwV1v#<2ye|(Dl)Y-Qn+A96CgNX;$2=Lwi{^2jvde!TC{z@G%OMq<2qH)3JpD z(2mxVy+zMOcIw!BH5pf5#fOV#u8$Conrk_b39vp;R^0{|pRR)Ux{_CZVHEBT9XWxc z8@tk6=Epdnw&bw;u?Ua6UaL5 zw4@APc#3`95vFKq&A7*OPaYhLrnlVyw%K~851Q$IfQxHcsN7NyHkKW%keQ{Mm=aR6 zK0GEjg=(NB$ab%R(~0IdG_;MJdR@&i*YBY|a72CQcDe-r#IzR=IrT|5S(B-gIu_webc3jKM5MFh(o`Thl{8q@MFT&ql)J7J9JC7dbJFTu_r(~Df z5xF5D)5F8;R7IDPh2pk`+uT0fkna4s>@>g~_^w(yR=DLVc?FoIUegeE z6B}xT6#lf?&gUFpYxvxu!%t6GlrhnTeB-9tdkS!Iz#JrONH+?*o8umYy4*O|Zh<7k zDAYR8y}-{)4aSEC#a;6A46b2>)@k{D>#7Tv_i>%)ex^>>Fj8J1PJ2m$T=kOaaI1{g!#G5 z8Q9a@OKZ_lP{hEP^-I0L8m-4`L^wqGlA55Za<@8z(tgZimnxU}+UwtsL8)Paxa6DX zTe6PqZh-J!)M04QuN?3FD#AaHi$cq&Xh-l^u5`Kmlp5OW=e-&ntdjd&^^e_}8x0w0 z{hxvqmS>1W-I;sMvX+y(&k1XBcMrTt=#U7f$&q3nfbNyfOIvAbEEjY-Ni-Dpnzvp8 z<3$l)n4OtK-mUNy&{b(9R-3XIve_+Eiyg|gRu(j<43y98>J9lW?Y~$JH{3}`9T4{F zUcUK}yD$RC|h)}zn4ir7z1?siCV7y`Z=ZS&V<)t&OlVHiSC&84r{6)UN39@B;$039Zh0b-UdoOoW zKq151Il*O(^HDA!oj^ObC8Rw3Yi-P7j= ziZaviJyAlfIk5M)mCdUyZU`uf|Mp6#$xg@Yn93v|5ArcvNTlxYHjgpqhTj~ zQHaM;XM+{%($RETy+J|UJ|whp*4>%lCZFw(O1U&hXPh$TqvkI1l;3zw_WSOa-aiS~ zQm=#u|Hn0~9g|A-?)lz?-(#3ffyDC9*Z<cXb!ql9B|?Tbxf?wGQA1!i{wBQ_+7|4HLqF(itE4UQN+; zOjo;~64z)_`t9Iezg zQxC-^CsgDCb^H%DavD)b;F(;r&yp%75UQ%EXhT`x=`G4NHJ8WQ-L_U^AI5vSjhoR7 z((*qwV{`>Os=w_7f2ObdRJ?3iWIr)lL_w9*FP36|hrH)93RT%WcmFDa*ksg0Ik7Ii zOd;9ARS8L;r`Y6$vO_Gcx%yxE?GOfYYPIG%9WAy`2D3VAD~POFJ8t>~PJK}IYPfCF zN|GCUB{zlODgB>L;jWSanblP5ecXF5pZRlQeg6QATOi%h{X~|B#j@?0X8_GJWVB7v z!s{Vp12kXZllm{G@c(QM28wcT4-avzs7;>}iCz>fW(cfDEtkq*V@RL0I(BgYo-pz2 zJzn3`Pb-D?I_tc9VfhBha{S9tOKLup}#azq^YHyqYp?uww(A9Iui zaPV~BVSOMmAP6|HpqB=|x4oYH=`QRXj^OQUE#I-Ao)h9pg~YEJubcN18naVVEie5j z+iCTMv{W0tRK&|^)DmJk0YYamkjePAXWkp5aeaMG|p3d*0ZQb?FR9!vjeET|8M z*zKKHs;mbyGjldQ!wul4+GUi}u^W~Yy%1kDoXgXlI0r78?Qu@jj0U^=v`;-O8EVwb zQe+IS@gg-;_2M*7Ej%fekfK1D-oNs`C;}3}6SO=K4hD=M65rV%H4$oQI<}#RlLXla zN@(IXq%68njlC1zpp{x-b(#Sunp-JA&sX(*&`jhlO67#futxRF*DG2@WS{cKie19_ z66T*itSx*MnMiRiN%bC?1y2M}s&YSDF_F>zS1b8d-~vw9Y;BSJ8B#vuo$d5xx^_T| zhpHHc6P&y5a+6qgbPQia0 zCsyOYmAlisPa!Jbyrojgj)~ZB?&s)ArreU6tSJ#R9sn2eBVA{yyBQ+Nr~VJ6+d})7 zb$aN?)Wygs3@=}ZLvRX;z{Gkf3(;*IgwL=>eBTxhm|}#qs0BO>-X94f7~KxRa+Ts9 z-Q3~b>97U?rx&%;mP*hNF~RM(q3X+;)w|!-kexZV^>JgznVv3Be$VI)O?OrbySUL} z$fLR1<0LY?3VTfip_+Ot!z>H?Q$eq?sgWPW9qO{xq0ZjPAaaT5fv<_o#?5L4{SoZZ zQZhWdwv9jSYd_?n5Do5s>va$R1JFqox{6#v;d&E`UDE?QK_?p-;@2A%dHcf&8QqTx z(%SVHn6o7*iV6zqoyNH1<;K{SHc0R3`WQ+DzscuZ*lHB?BXDD#YUG!Qa>}+l_vwI_ zW;@qPIcN36hoFMc#NL*5)|GwjB_+#M zB@_sNLZFEn6B;tDX@8#Fv0EpA=(6?t732y67obE$7{&LBpdv$CNsUz_g5e^-sy8_y z*VjKf-PjSQX`yYnS(jdqwrnBuOOst|o?ua|Y7$61Czog5f}_ALMEqLaEA48#AU~$D zMm);+H@L|*WV<*;Xdh$!MEjiA-HIPHJM)1jRU1&k#QPg_Ss$-Y_S5s8OZ>0V4ufp~ zj!as`f|0rsDnWe&-~zXtspdPkO6pZ*w&>G=Q)BKNM5uMsM)Y8R&-~+z@yG+I_%)ol zNu&Pajm&IAj*GPMf(pE9V@hK{J_`pmFi@d@O)FQfTp{B!87Ox-02POGXU`7o1|B%L z!!C>rXg(mEx|1hUfU#q4ZVroVl}$^bubK}3Z09z!D1knCs zymBQ*ERYsdPRw<6CzUmu)whAmX$X)T|jeH_1xjx0zLpJ-P zx5m?RxFcVD7X(Xf+uhse(j6#jDH)w!oMCCes{sK8s2)R`A`M6wl9ImV z`ivcwL4D@NCFkSg8ua2fvnV^prsT01UAJ z>;S%x3oO908MNv-E%h^S=`zpRhq=&}Y@dh9%+@I3G$A(Za&2@pG@V6pXs?!_C=h(c z$dd33vrI#{<8vUMrhni%-$AP9Eg2%W8TlJJQ=NUPGz>HTT7LYKRthbRh8d-t`mNN3 zolF*_#e+j%9$m`N7GllrqhQHE)6wM(Eytc)ppsV9q$sA3{idrR|CCEI)W5G6{|%-J z=&6yQC_!^EI?r)?HGkMynHWzg7!jGUVi#g!Vlu9Fzw}!7Y>Gn0Vtc$7&&B9pu&jt5 zWQ9NngKIZYGMo;rV&!bCM1_3OSKA(fdo&`Y>|a-0$ERuK=-Whn$+=gHhxa5SPDwYy z^4p=3ZJ;EXZnYs+dL0W(2TDvh02#Jk&Y}Oyfr(-Z<<{O%kEPbg=l*h9J;0?x32mPPHVjG+JEoCze zAjLv+y>xU6O838D+h_U$vR3e$Cka@NMZ`DV997sj-uhVtx)H{`**dQKH-oM;R*kn< zleZM6rhdEY-a_8WPv5jhvD3YVBPk}SoKFKP*N^y_X`lbP$^Q^z`wUsP=_j~f&}*bt zV!JZY7!o0wP(6AZ7PE;E@sIP2q~#Bx8yb{AFX#UK`>?Gz&t&kaq9UDGK-crZQU@DY z;-li>L(bj4F<@r^=19q*?{CP<&b|u!!WtSI1FtohTsPB+P%88ldW*^~4Nz)eYDSQ2#w{G$?e*w*fgbEFyx5pb7}d&_;(Z*fG=8 z+#JDe@x{F9DsZ@Ar&O?&d$J?EBUKepc#Lj0LV~nx%T6XBP-s76>l~JqhUp$TKSjK7 z@LU-iPtvCHzF1C0>aYTKHHqoCRN)1-ckiv?WM69`FTTRiu@`P>6!FQF*`@M~?k~}m zeC8`xe&&D(^F)YxtuIAC?EVEefe0yj`}!`ney)Z$1Pf%xdCbS_-*Y)GgG%KvWtyav zR1~|8IQVgG?YOyXx;el$&b#Mz9y)ei+fJ214up;`rm>A|C0rS*axR^jw`D=~_()O~ z88{X6FC6ZqW#^bM&=`JVNw%4Zy8z{n^ALCMKxmoR(Q=beer4g_V^ zeJ~O~{$GlgmS5@KX=rFr@L1lqoc2!KkzKpq zIDe4#T}*>^(U>pqd8VgvYafqTHwf&ESKV=VpB+H_hhR~|ast`LtH6`u z;WTLRjznG$PBOX^efY0BVVO27XnO#!`_idnuPTX2NjK{R_g8>N3sfFryp%2;u&nkd zxs9dE80>uTi0)>%x(Q+O_I;tZtWdvzx3xA+F8zKb5#{Iwy=Unk+2)(D@H?kgU46?) zv*WffF^|9tb$C(#2(md!WAB2Qlz+{1)G5}!;)tOugH4Y%11~(N34l!s$HwI3o&5tO zOAoqc6m}%_ng_C#OWF5Vd>1}(p2Zs-I<`UoiD(N8JNf!@q-OS}2R&aP93J2ug!=oB z7( zbio0bj`H?_s~}WAb_Zr}_I$s=05#PY4J_`Ls_zN!MxB_%{U^G8)gU;b&^}OTu>^OZ zeGYNWKxPio0$ZE366z}Vm?qgox_Bm>E$1g_A#25qvB_81z4~kem*8DEJ2-6B80A_ge)&-BqaKH#!4ng>zm{%iKXtI^57~2FKJJa`l{zB$?&%hl-@&U5~g8)20P2-p23*)2D-wU$syll z(W8oC36^UfR8#GnRTJeJ_sjQEa+_;|D>JoKgjMb;myko8@iPInp4|5V0qvlml8v^7 z&|{i4f;x<0gDh6i;^&~aNJW`2FHc96`5zfuj1y~pqeTn9LbnGjlhn@I{e?LIJA2%A zb9mk1tpGw@r!Gi}y2JS{<}rTG0Lm8XaL}NGs%PtQ1R4*onxFVWr2aFr_<-Gb)7A@T ztjK}F+6x$!*x;qW)v?H#>9qNoVo$bMJuWV;fD@F5)iAN>wc%>_(-IOAJ2MGU;gxHm zrCp1*c5?THv!HFz>t6?9a@bUC~oCiUxA^Ur4riMsQ zEnHb~mvtaxn;Qc(i3w*vLqak(HfH+N*fjzhvC{10)ipEZa~I_@z)6n$N69H8B|W*b zvlG;ovjv`Wh5>bDsxSTSZJ~nRO=2gcR4!yDEBMCfi!mx%;(S-`OxFS=Gh44kG@-_N zQjIh^c0jlWb)?C};^C#TYX{~C!6-?suS6qe^ca_{>8HO!*8{7iLTsMEGS{6dA1*ls z;;0ag(o6=6ZkY_+zH+51Cg9VjS)Tc(k2m85^8q=bg=as5Ax)?D5&m?^yxzk+zzsYVT)bdBlGW=4yv2(LCH;WbuTN;p2imc)obNO{BcDK z(nv`Ks%5i5U%$?UagVB$Sy&~@cz}wJN3_FCZH45@Jf;H|)0IIoxrQeer6n#~9YI>;b6T=2%B zKobd3cedN#wM*%GuJAr?c>e(lzljPl-mA(?5I%y$AW69uqO(JLoEYqze`agD_4bde z&f60qs69P;&51}{b#imTIwRs5h#e$aT4%7sTP-qx8CxmWB z&`vIYGR}WI;>=V?|)>lIC5qgsBA~c$qPJd7%!h6oOMQb>$5); zcS*M{Dbw`yl-66H{>)!x+`lk933I+{&tmVU|7Ja!fsvAn~ryW{{^%r@eSXS^rN*+<5BP z@rg;?^O2I}|6Y_V5SD#65)(ppg&eE#>p&jT}DV|FZruoZNb3{=s8-Cl!gE0XwM!xS`${o5=O|8fq|K~ zB=A-1-x-)rFp2UK7oXFh{TeN8tu}iS6?6Fv(@^`VVE!f|? z9XC(^SJnXKvK6Z@8w>VxejOp-@e^}R!dWlpT6E2wQcF`lIG;mjC{U^ispte1@rCQ} z*cBqwQ`BZcex%5yDW5oYTxT4&)18yjpL{S*oCedoIqagokF&FR(0w5m?%}M}ffG?1 zb}yG(7=}6a4b%ge?W{HmU^E-b(rfdG;AgA1!W>eR{*=>C-r>&DP_B}g%JCpMgwr%s zKT&aWBO4|k4hwpO4uwm9vNXe*b*#@}fT+o^C-wTxo6?=d;`9Ze0m)(b%Kk+1FNTx7 zfwsw8fY3Jgh8od-`otSwhn*eQ+eB3_O|%4nlxfu?Dn%k!hP+*(o21-2Hn@#DTFM*Z zi9)Oo=(zrLcTa%AX#{B{sOGcG#S(gGjn(?3FW^%-O7DF}0fH8Ppk9qaJ;6oV{jNiQ zcIE^U%5V%IlIV*)nZiX{Yk#^vTX`igWO-+D#XK?Dz1q=EpxO}qEan)F73i7C;0eM z@bg6DO**`#JuJn}OWOSEn48f?@n|5ezaT552~3W_C=K@4H~MGaQ=yI=mUe8{IbEDa zb37lJ3V`)eL=`Og_}#zTNkD@4dD8f?X}axa>k>&lpJ9L`={~(VdX3pC7*{tpH&IHv zxbT~>xgA*NA#1z&jE%s&d|`}?U&+yR1E=fzr$U{4d!5}eWZp+{hNNf}C!Iqmv|)Ym zz_OS(Yc(VM`Pg^fC8Oc8QbP!wLw0s{@qP{U^@`crV$bGQX-}@MTBNk7@Ft|*CA(Tn zQ+~lD^&#tnEmK${|C0oM(w)0|3W4{-PMriPZgyQsXmt1uURB{yxjnE~PP@ znbx(kbtlvE;*}tpgV5FDou$q|IJCS(nkvn6#*FZTg-)Rb-An@)zLtyi!ibndR$T2QQ|_HorVsG3u&? z(YN`&`sU_R$YntIamoIhO7H~i<<@~YVMtorzY0OWAcJ|a&#IT=)S06%9(KH68I^ly z^VV%k`%cTIatZ&8jZ3)m=0WXKOR`h+j{@R=ud4@2njtLe)`OGf<`ZaGr7R;OW5gLo zO`w~z9bq%Hf?@mx6#pvm8RLvC>_Db=k9! zFQdItEKu!4=7Ueyxjor)cx&?FBn~{uB%6G+x4IaPeq&0ChYz$YP+K2*VjE}y(|qZS zI{yad5%!8oR63%fjX4oX(`q}zI zr-%Ao&apV!+FEEiPEQY&?qrnj7s0SJWQkC-dCC|JD=12T^%;T#1%9crqGBkm+&}&2 z<=1Y)@h~Df2jwJ~(6pV24*~0L(zO5uRbbKP05AcnfBy5XzL|{ZIhN|02bH)5 zDAXAqv*V75jfIbaiE}FT5P7-(NY8=3csf1-`8B-G+T*&tT2ogyyiPMJ0~IMaQlzl# zP89)K)-a4@G6A9UpMLRF;WKH2W3N7glTj_QO!_t@5AXN4rG9b7>rGXayePz7Qe^*w z2HV*Q5Qzbtf0ec^)dA#tGmMF9hTaTw$sO6NuM{lj8wQgs~fQnp?7*knG1SVuwZZr%ba>- zXN`zT;7O`UR<4gqkXvs?g)dN=vOQCo{!W%rn`&Lxn8JSIT^d?k+%dwysrcRHK|X=F zzvqSo$3~AG#x;b=8Pz*-OJ0b6?g8X5$JP935ziAWcB`*CB?}*Qko8ZDGGhJ0>gs>F zPS;k5|EkqF7tiefkS{$0A60w!QAPng&?LnGuOc!fd5gM4#GZ4ak zR#ilT-$KvuzHKy6!TX)JZny2NujVZ;SqLcHWYfUY2@urBP{ao1*gX@mVu)& zLaYQ_wTGY^^M|(AOTZ~ z;r<`-HSv&i(AbhDV6hO6@S`t8?P?ahe@2WxtVKcBLFj-H9st|xVfj7waAV^ZKv`?)a^0M3zzF=`nn3At5%h`oe)q9Y;V%bLv|e2@a|OCE zNZ>ReEPRqccr2lj@rkn!smi`-*c^Q9U0gYjTgwKG(0@Q&`gT5nCx3tUi_pqc6_b(* zLFT(*utQ(fYtanry1tY(K7gnl^%vtxLd}M%i;ETqFA~bu+eJXB>WUnk4CQnb+n>0j z6E7@N`qi%bPZsQdrsukWz!w%#FxsZlWj04IPJY;|%bN{C-VjzpXhc_b<2u(RFb#Wc z4%^-CW~7Vb*qCBk_?W{`?l^Sa9#Udq#r~DXRk!1FlH`0Tsdw*tNU5>Wvwu<=>uN>w z^agsc<*x=+&|IJzLwLNn8I#NkJaEQl4uQf_GIEA!T!K(|o+cJs6nIKZF z2{_I<98$3LyH2NhXu_!LC&*7lx96n}lsfr5?=GM#E7P}yS|UQ~ndgnTWzh&TJ6m@(+npcAD(t)}d*?z$UO=V|Eoj@C^16e*@aaS{;(!HKw8$kw}LcUZrF} zJl=$j&O)F7?YEzI6d=4LF$+W`r3K-ggM^s%AeA2NO8aqJc^2HY`hUF;OJSs zxZjaIIL36W1XJKnQz`XN$HC!8B=`5=?f@yOhWHt zUKN>gLb9}M4@>6|0f-O(#asmUlYun-e=!%X*GqoJT@0U#-DxggSfLo_f(F=Nrp7CK zF23+lC{vZL+3&-e-DqVvT~vijXA2DsthR=?jr4L0WuM$lId;J6bhZWddX8b-wxw#<&8!2(`L_ts;w;#2F-xT)D zI#Q(<CAhdxh)J4xdTRVlXh+I(}&H@%Gr1d(Y3||59**8eCV~`{+~KP)cPbeg<}NfAgp-b!a&oTR%3O7$@yAGd?*9JA!~) zfK1)PYOXnRxO^8fl)Yy~197I`6=nSin6ON~t8k`PrbH+KZB{bG$%wppuM{JF`J!tw z!Hj|*VWcV$Nu?*f6xd@52FC?Q)cp`K6I5%8KOsJd zZ0rKUI*+FTiu>nJy6_x9x%t7}xrvajWYi-M$r>Lph1&2xPI^N_6A53a>3h@exUfqh zJTj7*;0}y#Etc(=q&4E8qS=k$hr7LoZ{H(C3?cO1>{P%bpu4%&mN1JTaSk;t`gZ7! zzYc=?|G>M<$T(j^s@{qH#tnyq2c05qth% zk|IMQ;d8347M=vR0k$LkCo1B6h&(`L1MfC?ct3DS1Y&K$1j&EYfNPM_u%=kJV|!7A zCV~*Y=IsXrk#*M$&t_w2)m1@e=i%MHPIVFl9OAAh?nfbIS#W$CgsVGaMnD$?!b=4V zAqua&6UwNXB{P-elbD^!}4a;PtWFbf;OcMzSYg4A~)a7E3LL(`V8adlPf_9u?fjy=F-Ksg_zSA&I$ zzp^rTlAu_vVBz60`^%kdyan>0#E?LUcLKU%a)~^ycCZb}?qV)np%TjyEnVodtL4^A zuxOhJE@y#PDfWzu{s6RQrdndy3GP5zsmNwJ4*Lv)2d8-z%b&1<&(z1^wV+i@`w{mx zB+n^$kHQq_D`5!S=W^^btnU2CxTM(k zTx33CJfiE;s}NFZmL=#TgncDX`U<8BcBQLzdm5Ov##TTO-yl2*U4WFx%46l=`00tc znIav)nA*uqa72q5b->VIB_ZL3HqKOjcvWv>O!yVZ)YLTBybW9W!v2xc@`CRBiYmvLkKBU{cYM->k+)eu^wM5=VEtY>bMI;hLGpj*@(*S&gOv>ZNT9%yVyDwqS^lqjUS zyIbuQ=p>+hqYanh`=|$fdyDIu$@rA&kKC@p5ZP1AZUV~bT`(I@mh=@ghr)!Dt&LxR zY0z*P$#2(~^rFQ`@w|V0&-m`Blh=<39@0w$bd0)x`}Xa6C(#}H>-lO&!+h?Q2IIWY z&FW>8;D~HGb?Ow4;4O{;m-+rnUa1tVOo{Eu#P}A;M{ZYK<;SboUsK7yB>x?UVn+dw z;Cj{#b&Eawnp*R+PYu&Hj<0dmH>YtMO}I~ZJh|R#`Y7>ThH9ek*49kMkC?r(ro@Bb z^%|0oUT;^Xiws(c5*ZWs^=8X5PVenX-kwarG`bWTs5f0n_x1>}O6Q$65JvMoI1~Lb zk{VM*eq83=k!6Om6TucD@N(LxPvf0uVnTXlc?9k~CUSFup$;0$*-+4GjOORLE_MXu z-W=V+qNrnoJjEO4>(Dn0^|^X5o32m zd|JoN8UeCRe4+=0v;x`$C=t>ur01ui!elA`4lScBGSdM8_^65CSI;MB-1P((z1(Mh z__RoB5{c!7l$H0Dg7RN2@%fQXeeeq)ao(@Fc+?Hc^yEmX#eYWQqs#UlMK-nMnCrMh_v!*DF>?QF4&s;hV z#-8tUDH(#gSX}HiU~6(POkf3fKQFQ0j=n<^={|x*9@?cF)HCp+xyy&_vQU>wWk76t z@tY^q_uH#*XaIBN*qmLoGx&psG!Y zsKnQm-xIz2;)(1Cwg=(ubC8V8B>o-xW5n`xA9BQwT$FCv^__ucknFfpGC0M`8w$6z z76uR4^}35%F255eqpUxe`&*?s-!`BnI&R*g!LjNp$^u4Nv&sdo( z+ctls=KYDt4i;Q$Vl%Sf&kBN{z;>EJa;2fRwzUwvFlG^2;&0GY)OsVMg8omp-5cn; zj1|7zsf>dxf5dxTR+#NLMNg@f0|k$3=X}D4WKM^3X%7C66){wD@_(#|4og~4Ev@Px zp+}lUIKA601~*`%v>(&Yhud_oBVpQWzAupJMR_pP1_-Qn3L8WhCZ$yk(d|$EJO!M% zg_5Xs*@2n;B(Gk#Hb*n<(%t!_`}52mA!*G4uM;Pgqc7FhM{`A-Gyz=}f@6kQDcjo* z_m^(K(`-R{A+XMkAM)zX2a4Y+XCtuU#m6N$Iy>oBV82@i@*j2A4eOTr){%ZUSM>g~ z$pG`sRHdPr?cajOEg|SO1%_g7EqI#M}dXA|xv9a`AL z6&Fj9+dw)0nEj-SO}f61tBEfsj=)EKGQ~8wmwis0&B7Ndy&t&LNm>E`Wuq_g?4vbKw%)IG1JuW8w4LD!cv zn~?@;TDGklXj`#$%hu)uZz^U$P3`d)6kaJ}es zD^3OuJ*@saivMG6Y(LldUu)wc&jnHWuUt&~bK*0>#Ci4$%2Vfk>R+7eW`v#f*SkVe z27i`*9PryWuR}0)6s{%RtJ(Ddm2%@>hfZ*CPk;QdI^TCPeYUAA($ABw`-2OO*7aYJ z8uSQKgYHwnyQUI->4Z#ECf|dgV176udY-+#@2`Z97zr>?SZ}*`1Vk*con^za!XM^r zg~{9%AHKQ1&K8XeNkp@QP^Uc1gI-u#fgvX|G}!MUw)bBLO!`N^p+M3_yY5ajNc6my^Zoq!j?Z;x(e9Hjk+fcO8# ze#BO5fU!8VAHd)2uTbxOlHPy|rC8iYY*Y;k4N^D8L=jI%meFomRSHFR;#-S=>lCs4 zQxeOH%jC@qCAoCAyiW<#8;vA4=-OXR^w2i$Y*GAc+3ceY2d_LG(}_-X)yI37nYBfa z>9xI%!B_D&cU^0u`TIIj*l%2-poUTBxKrlPyvh6mjnG#8=Hl6jalW5atDk#LK`r#teyGH8nkE|yGIqmi) z%1_-U71}dusS*8HTtwJ}i4KU`2u;V7K8{W6NIlDy=te@mFZEKqbiN+Lzbrkpjv?@{ zP--fwx#{xb@$2CvYpk#IIKw8t#JYx$L?QG3)|qZ5#LR<9FSEnt)4xvDvFOnQ==k9) zL)yZ~H6>_0Z9p6XH4ud4-c4;Tfd*8*#ey*T#|ZnY{AB?Kf&V<)ZtRFt3iUdb2SbPZ zXgAsHl8lgGfJ^3{%+;DhXGyv@C+xj7zQ7}XX7oF;3s0a8yKTDQt1g(|8bZHDVJ;w= zo{IeCL6PZAG*e3*;|9qHyq9aQi$FC5k41%)CZLG3;5EdpzFr^a1+hmV3q;xQ%?`YN zhPNi$tM>ifE*YA2`}UexWc7+>-#TkOlw3~yT;?Q&f^zf^4M61Cd=ot^h7I1!}pY5J&}MY$5F2 zStwd0KF6H~+5M+apTgfO+n+Z_ChLK0Z~0!ehs2p*!3IBNG+Gqd=~!-!sR@ak`K8zE z){>(ot7xPaUp=tyA=dH5v!pxp6>Edj#+<~12gVTW-MxDks()`zo<-Zut0uOqY)2A! z_{YSQLGc_W84C09_3393o#pt<=gRp4+anuqb7xay}l#Vq&6qego1S$h`uj?BnYTG*vER@Gfm(Jafuw-sDT`?W2K;ZWro?L?>Jt@S|#r z_7d06&IBj&@DIFhpM$;h%TmLZ_Pp)QyY6;s#EqG9A002rFt zKMz>}&<~2b{`3xX6ktHQN~w4`tswe&%zQ!iF7}==d}X8kdl|uUS zk=(!Z2#QTW_yOt810(lFDqe!{4%A;@&}h@RpD-OIr9IHH^#gZFUqP~=8>Rz(e|5ab zZoa;y#r_seLc*IpdSb+Czppp8Mw&31lZQVifDuJ8h;+y>s_ljO6Ee6%o`dT9#DHK*u;>;_bDw)frBc+LCRTBNfals$s-`ZVyBRg`wJl%erP!lgm2uEZTAgYUhS|4I zpMC-qoe?mkxuKFGK+qRX2m!MIl0XA1IaaS3C8(iwVz(YJETkY9;rc*y=(1Fn7!nJKm0w(uE$UYzYe|*(t%k^5uI)IO7{ZOgPDHDwKL}wh za9ECOn6ToDM)FaR(;6v#QvLocvfF_Qh4zFV;1uB6r%#{0AE2Ap4|P;pO3JBH6QIf` z=4V4gLXZ~%YxNXfg)YbbBIaPxi=1iBu82{B*z+PteXsngTVNS5MUR3`uQ{mU6_tuVaF7_Ty-wed6ftXVBLG!c-40M=#_jEb=eax%pj9y!w7v%f@zo*WoB2@9)i1nXplO_9uN@o)%?=MmkCDyuuZMbB|HhmWpOVJ$LsG?Ne<+|r~N?z!nH!m0}$DfLe zb-8|j9@tv|>q=Ie`K2xg*6F_U@rf3Az5={wlYSNhfnAZy&e}9Zu``TK^IpPgyoK8oaGZ1h+0 zoj4WsQk1?ly7ApeE@dDX+{sNf5_;14U1n1+C})93?V%h-2yLb=PfC~(0gXU{8$CJ` zrsH05TR;i%82$un2ufkP1_nyglOQ8b4@$la1Tf1LPO;-eMC)ZEPihondcDQ$HyduKgm_FO{6oi@(y)0st+p8K7$kA__Ot5{Z9ro_8kd2;mwV5rVD_l@v*VBV zOT(e(Dg#LP$ZoalXUovZBw8>D85fEHU3k)k^Tdx8<}QG0t~^-v_dim0df&Z7@Cv-Q z5Pl;e8+*r7T9^nRBID~Eo};@{1IHiJ=FHmt-Y-hQe~#K*ahZcmb`qoBOvBhzV#2_> zn~>Jo%v?#b*F!{*#r^0!7{Zz+p}B3vmw$mk(#4fORO`CoI#WQ()jKg=b;%liEQt#B z|2SZ8Um386p`OrRQhQA}C?Ft?#*dmS1@>EB@myvNoi)9#zW&f&+xz!12YBGDltOw| zNwyAgeef4Nn{BlXh76q8f?taP2heF_V)87?N;Sc`ysX)LiyLD+(ZL!~b6F}$C!IX1 z&jn7~{jbF&MD#)f`n%J!7|86hFLJ=0Xji>0SNd`aDSJ=_E2&vQ4A|TYo%Yyl%k_>( zUwCY5qO@I>irU&Y+-EF#H~Z4s8lsxfixT{sCW33PKWc_5aL`+@u`I4HV-n43hga)@ zhAQ3QqAxG-^7gt|Ko8)%40-iphfLTV*e*5bgac>n3B?qBQ6;bIMD?CFBr*iP4yEA; z-fgj43~t0f9n@2kF`)cdmHYA+m-tu0LXK|VQZ_rkJ*~XE+(k4WA6H+fa+2oOw_^UA zCOxe#7I4N#3Ku?K)!(d;lMz&~yp)+K%q5?1GyT)&91nA8zGKuCzEWm`*NzEp-^;rm zL5VQ91>ZRo(^S1W+X)@7LeZytSz8r$Q)Oa=C~j_iQ%#3a>2~x=q{P3wGhzbH=M!OL z;-uoffK+OJjylU`%R&dl=Y>8BHKHcsRW#SQPWPvWWv2t03^|+ z-yFeTwvGVoZa?gzG{gmZg@n3Ns_lcjXCMLjIC(0thC8eD4KL1;HW$)9S_PN33T>oT9e@LXwtTkf8MPWMG}VT9cqyYahd30o!l1P?e;lIB0cZw_5OX@Nc?0BeLum8 z6D*6=mqaWcNO~SG8q|b93BHt-9l&`7*O-!$vLBfPqN%DnV{uD8C1wvAFPZn~Jj(w% zRaoOm=^YJ>#@pg7X0OQn_>U81<3}#`I$w7eCQrC%>3wG^Yb>_TMNzQr(b$Fr3F1q zuIs^^JAwmz=efUe;Y)ryr*!|=9NyIvEA^byiC+y^Se{OPv$U5w$rXC;B$;b7K7q%# z?eCZM+M-DaZoK~0$9}~-C;gGmf@8%6YS$VS!Sg@7I~~It-g`G9(E42B=XhtoBbMe2F*WxGk2+^NSZ%6Cs! zJ(8-aep9_acA{aHeo5nir#@Nbrk@m)>QtHBkK%X17!>B`6{cNuv4{`=yl&5ii^)cu zCy^~P!N)kfLbO5Zp_T}+L=k4>+G7v%Hc&Wd&@OQUjW{DA)y1H1Ka0y zs_ZQ@Y9$y!GJp@$X)?AXqi;R3aaL$1 zT$jYWdXXOAr?@ha*NC4)WV&VZSeLU*@+7*kvGEgOOJ_%BX-;kDIB3{YpjQ5(3>xeS($k(3if=V&DPC93Hc6$HA z;KFu`YJXu+SdbZZ{TkuM3Xf@@{E+8qd}10Z0f%o41Tc^t`H0{j#=bkr3fg<7J&vq- ztP7+RX9}M@E0Z=J3i-g+H>?fbU%v7lG#Tn$65z1eDT@DoktKpl^JC;H zPTP%~FZ<&vYH#W2gl>Vq=SlCHWO{?b`o3?T zTbR~wR?vVEU3_RNpn5umW}-k(DAw@q&u{lGI_Il#1u{+p#mll7Pw%q!VemjMktpF> zl__>k!MzEXWrJiaqy%^4gRuUU2h^EB-=LKU^i6yTzv7V!L<;vrX4c0iYy@q~fLh?@ z_8ah9ciZC(zF)Y5cRR^NyeivXywhh@Z?S+n+ibAU<+?#LjY^1lDTA;u2122ft;0eUrR}rfD4_K@kP$ zBGyUpfHa+1@~|IU!GK*U%44cFROP`Jw=~V?j#e4ce%ULlxf;9KYCGH6Woa~WRp^1c4nY+3b!{vTV*uyq)cVz2 z+_It0e8T&!$E}p+0P0Rx|WFGP{E5)M*esgPQ^&%NDaM8$_q~Q!h1QjBAj5UHh$;E1vCemax)?}!9_)<(o z%;+eo>ER!LH3h#=O-GpEBgoFq4w3>ezbm90_@V*J8rn|vus04>0FlJ6^r>fqjL(|X z;7}#Y02~C)<6O0%mF?~tCWRG4bT^u~Vq41LINgcW7A?|lpCqP~0=At_1lV>6z+d3g zU0L*iR1pj954R7HSJ(?E@6ZqfiOK$N>&gpIjAdrEsc3cmr1+7DIF5fIe;lSPWRz^E z{s`qV{HY6RRdCePKc)=)%kSGCnEv>Cqhx$n!GNgH3IcQpz}3S!#}XjM)NfzQ}z1_(Swxp zX^OM-2TPui?0t$P4RTHD8XE;5^0W$l%Z^yXz(ardAO52+gmRg#%nU5K`z?F#YSbr8Ccf=lW$-% zD@`i|?-g>;(A@w~C`s~??Jak=cAOHqGMNVm0VcxW0OKgYlCOQg@a9U5G<227O8r-4 z%mNCyOHmE%Vc9$65;;DDhZY4XFU~janzSUKzrDTkHa^1FhsXyMVSkgKgM>C!aN)HA zsm`x7?n1rt(GaCDPVa8RqCQ!12_k^jtKM}fGz}h~>0D1T+-IB8jO20*Z&%r{n;pnn zZ>4lZaMh{>3tz2*8)ZFT({B2u@)(Qw&CEX~q2>L%%K`dqhw91qCIC*altjtD>Ex^$ z4|)cwsP1K0V7GpDzg8EAq37?pOOw8V(KxU9v3?)c6Ybn4f+0?iRJ;gJXk5?MN(z=3 zi*NIye4tz=w0Wo|F6^E7;==O~Cj({UjydiJ;)EZ?8J4yL9(*- z=Y!{2`x@`Q#3@;wp^5!?68vH3cw&6zyOHHBA~=KJ!oW2q8-)T8x7#-!9fdEBdi5Ts zK(iTva0CB-R{qg!{!`{q{NDJqg$X=z@{@N84$rZfXe83unOYaR77SS^c!VAOKKkUG z5M4Y?L&=){ZDn+nfO0p3L-PdXL)CpR1Xw@JeIRf`4(DQ)U}*jK3vmp-Mtr%h&(Z+J z$Mit&04%~zoudzL${t;7HUdpf@NT~hncehOgzYo(13ZYNGygX6$Nrf3E(wvUD{>@fiEq$gf7&c8knzdmCGN?IU#jt~rpUA_lWk`ubHha}M zCIk#Es@z-}w6|d4r&_zi9Ar{F-^Wud@u8X}^3Z0P&%$lGV9{1(w>*C@O3(Y3|V0ym64HeI93q|hh0g=^&_a`)vdQx3- zpV?ZU7hdc&Z>l(<1Q05>z`A41a=a8`mWK-juz}nEE>e(os;ziQ}X*=x7trJsC6e@)Y88eevs*?xAjXix-buZCtgdzo`*!L@CRKLmFadq z-kb+ch`!<9W27z;pU!WLR9H;?y<|z&Gd*BjoirEaY)iq%+Pb&TiWbW@Qa+Ai*Th~L z$L3FND#bS-8W=UcPo6-5-=8C%+6q3m>OEgCxti~ob!?5)kWNc3`tSK5*c-E=@PNcFM3y!`v{!0p^MSAxd2;KY0SS5kk32-x8;LA7WpVE%Ed05v%h+I<3QnX!v_t774Y=x&UkkZJQzm;Z&hb>YN$)<2LO;2y z{n#bl`;Kf!2F3PrSmJ`AL*lN@VYqLkMwZ=q=}Z4=ljcb-&*L7X`ovB`hT2KtPe@bV zA6lqSAQ*=P;r5#6=@5}~5q4iqeGezNs-$69gXK)AfshMh8Fx|h1N%oBXtcyY# zyhkOfr>2u%#?1A6IgG8b^f`H_*-VE1z}b-N;9%~2%2W--71h2D%lck|>s$|va}e1q z9!gA*P6Q!dltup%IE!#O$~F@;Z$iwM#TcH0%43t$xL zx9}$Ni5wcE2&|QPIeHP=P%(s1z1c?K|qt%RfS@AvP(Ze)f%q$8s5+(yK`&#l{C zg!fmH8HSi-kQOyzgpYk6ZE&kxKlhpPN%wlvqZRsBol^N2v4)0H!mjR)N>8&1vQNF? zBHM4ECkH+qmg9Z{Ww z7i+dMigmo)km^Vja1ih_SiNeLXkjwaT~UteFjvSJWq>D?QoKQpRKucgM1u1HI~c|M zI7}7$RZfch2KyV(Zor(uHi2Z9-oSO3 zr`0!pd>}cn?Hrp&H-23<{aS8DzqjD&Hk2Lw)Z2pJ8489ZWlO_*>^W?ok3B^UvgpbV zNp_(UFKY0y3<^$85W9wn$!|?=AfA>OZLcL9K(fAL7j_$`LMSy@Bw|V?IxR6uR{L+d zD9$UZqxW`g)tc3tw04_5jW#G@lxtVVxHN`*Ru^M5pVzA7Dg)HC+KpqS)~4;t~j) zA2!T62);D|Oz!vl!Wev59Roj8e)Mm;INs;wij=C#5V9N^s#LTkK>VKlT)(a#!g5g~bV7tt3AlN}Rha&rFR{{Kk>3jBY61+Nq*I ztDiYH!~1J!s1m_0JwC(B-)yTU6YniMLQ8#lFL`PoOWKugtcRR1?qqpMCKq{kAYDO_ zi|FuDspkt|lewQtigdoN1lmf%&uy>52p5nSUzE%cA#smL%dZt$EtvQrW~XhEJ2c_P*L6?;vD5?m#99OXS`8r7OVegz@lqbf1IW8zjoSUg zo|k)1xR9mb?*7R9W`tN|x!-A==w)ga#0wT7#k;MX9&s}AEMtX5~ZfRIJ}r<3r#rrdv#@MkO5RALkv~5o5CMi`nQ?;T+$+2+@KrWs{bTPA| zwEaXT{f`kySH`-Vws<4h%IHi}veacUm3S`JWPLDHDEITc0(lgsaAvyWV4+fxk%10g zlzXW|f?dZ8IuuuX!JK!7jQV+m&$X^CDe<(023RK4akyCNx%9A55L> zRW@{sv)OaY4;m^GX8jfejW6PApTze2JP2_sGiwM>-L98ZpRaxHx0w^Rg`-atY(KuY zn@E|W^ms<7hj;RP`b_eu1N{*=A;5N?!P?H|WvrQykp>&Tg9u>~0%@6;UeCK7k0zs) zGw$ne>AAy7t@xTDJWpqFAuusWF0!}S;yxzqtp&p2&V3C?P%-b*0BN@IxB4&7eSUYO zg2D9A^hhcY)m^(xjtM++vI0gd!NCcAwE2v-x5`tVf=Ne)9+tN#UK=W1Y!|Ih?lp-h zbhta14}tp~e_a~h<>sl~P8QBxp@E%d?26QG0-hkRi*!+P(XkHOleHhO-VIbXtoLfu{Ta-*s>tdnHC&Fm!ODFqoud9${0l ztHX|9cw)l_PjlxU9Bdv8QGblX%=zv@FE=B%Ir@q&H=?ycHBoOhkUrvFeKW zxx`w#jt#GKW`b{fB}-jcfTNKMMA8Vy2ypX7=Khu7*POd(=$wc$kXSauU^X({(dLw{LrAw^swH-Y;sG1zx7nmO@ zQj6a_H^889dX4I2ieXH9|Fv(pC=nvWZ3G|x3905II%G};YU!mMo3X0#4Hf8%D!=wT z!7d8o+E{&+{~Hss=chq=Xh9N?w^yx$J@OfzbjX}X8raW2B5l&{U9AAO*eK}#;#`r9 ze|`cvzGT;Lp&`L>ogj7UbID^RpJ$54P$K@YQ`TBo`_$3xE{L*yi#nU(=H#NJ`7Qe2 z{mo})7TZgv(Cno`mamaEke2hC8+2X0E&Uf5bZ>99Y^oHz7AsL5&|qTiXepxTnI9MG zQy#lAJJoS$Y8IzV*IBVyMX6clBgs_?dm0CnqmysDZ25MEH!w>%8F}i;shVel!ulA; z%!JL)$>$AEWosX96^Ear1ycF!tFvJ-mvtEaAK zNip?5JTEkS?Y~aC14S?QvHjzSod)Ee${)53yi?Q&2{fJ{_d%y3zbJ*+IL3yRxarve zM3uQYrgY8osrgiNOU9PM#E{fK4WEO&0%eE+odpwu`YLK;+!o!OfA9HGlzl$(k3(_6 z;6oBOaa|_s>@|BtA$t5Z{%})-2J_(3yqTR+-On_h`L8hH!18WZ1<~XE#e44M+U$rw zXq8m>K@B;bUnvD823a5up==8~;s(foC=k31m%d^SPMvkvb;*VB2B9h3e_Bkp)HO(J zcMENeyaZ`J$U2MPy^Exfp#r7?LaQLl%siiGkd540t*vZjFyuMB{GXuXD& zRhLGYXID7+r_9ytQ0XDjlvX1h z0pXb9=Yx69<)F_#9259S^DMuPNCUCd9&?*H;7VaP4Icxf@X>W=8q(#6XfvP@P~C{+ zF?T)Ko`RYMKWGb{<0;O&qo>kbTl)-HCMa5{s`ixuX&v+WUNnyQDsAQ^BTRyg~b(mZU^VDp7tg@-%KCC8w`fD{4E+Vk^5&=%3Kj% z5$4Auozx&H1?7RoN)q9R5)x-&LiXNjjC;cbHE6bg7#%2pI_+&)77cz34$gT};eix6 zpoWn)(hUN?`^IOxKR)O$&EJcO>;|sa`M>?%d4mr^t2+V8z>N@ejVwlXF;-q<3BSrv2*@9W7c*^ z17~)->ZfqudCzgisA(ReuZJh}qXw06yP|!VYrYO}#Xus|GnSz82=(a85&;bpg@CX_ zk)aDpe1r=iXv+g4;_&^MGiM~>bw0j*y8;sTMYgk(r6aH&2GDvBTHTlq4o#}K^&taf zeQe$LFM;Ki-T(Aq5B+y&Tn0Ru!w|F)=_* zZTOIxmWbY+O9c=}Z0h+-z)zYF1m8gz3N}rY zbRug5n$^7L+wIw(H{-oGnUP&<%VQNObg)V^LJ5*6{>TA6axr5R8*)qR57~fwWFrbt zP>Ps4t&3?o8=~zZT7J4+Wu4mkD?VHU|VND~-63#I)Gjlf7)r(6zu&B6u`jF@DVIL7{}R#o{*6v0UVk0 z>GxN|dy_mhe)I@z0@uCtPW%4-`yj<#w!fhkSjR|k=jqc?=qtUspN{7(YQ@^%m|Ck6 zn^yJa@=0@nuPxCs0%ZImE_!+^IR7|&#BMh{@$U<`^Z@VnEs&q;NR|V=swM$FL{`bG{eI)9U*Y9k9z7QHGABn zHQl}+X!d`cO-T%=HIHs@ZzEE4^es`m)=;vW(C7ss7&@;VuH_ncF91)(Vov|)^bb%d zEdbL14gdKT=lS{hMHKKg_3fI6a~BjdKHDyKB^Zj{Chfai1#kIphZ97JxEeWH(7R%7 z-B)SCT?VJp!Z_f5FclZ7b-=AyBdVc&TINpHRQA)hNa5@gQ}n`A?bs)a;U861z>i+cyF42Pqj3&r1nkL5O1`ra z0I6=UkwYtJsG2sq_=ks|U0S)BH}x}@oed+-OL5fl?)dWhow49{<_TP(CJp;55IbF&T{*XfVr4cq~O!YWf9BPHFI6B{uIomJ*OuEiG%^gWqiz8twpEZ(x z&zzPv=(UfJcFLyaD=q5Q1D5koWHj?-N6>Si-${9Dq(hVI>{($`9q<@_>Yu2`kVDhT zAbyQ6ZR(b!RM4%cmW-h=Eo~*mh?=g*&J0hbyiG}HnfMb*1^p=IyZLYnq}N}{7q_Lp{`gMi6PmwZ;nZ<{TjEN8%Q$$iOu5BB~!n0iE5f?l!v-ZxPSqR*^Px3 z2chAr39ES!Z-l)r2xGaS)e5>-q{PnN^A8TDaDRs@dFGX2WG-FPpVE?JoK{$;)#{J3 zFcOQpmCt@WF$Jn;h`bO;X}R=F-~#tqwOrP`z!!kX@2gvYNLhUm%-Q(vBCD=W)6b@D}U&AyK5t@{J+kr`>;znpA7YhiIUGA z;Ljaq7g?S11(0@vyqL__1KNu! zIiNk9=o!?|sNdf4%fhSe1AJ=Z16HlLV- zLc1y41Fiau;q8HO76biZPqpE*=XxS=#h83pY{bs|$}tFyzIt$5$}UH zdC7;)Guh&wxGDK1KV%!+?R;r&<>*cd!|dC#o~-uDYs^^Gacjzn&Z$Mm;N-L3PZA=M zM5hzX_kdbV+3AB83YI!|aHl}$aSZ4vI0F{Ua8_D!O?t^{-{JmJcde+(iMbEstq!f) zZhi4a$Ug3wxq-w|eTN!5-2RaMLVCXJf7mFu<<}GIB)4ql-T$4X!&PGU@I^wWH@^-m zG}lksM%0W3Fz16IlrJ|9{Q!Alq2wBD4}U$ zGK5{v9ZGW*WX9aw2hJ|%Po}4=;qH1JGhgn4Nugtc(%$$rqhYza&|wbxSnk6Fplk43 zBkburZdr%s!$6aKxrhnfpEBx2#N$*2LtCh;XuIyO8_Kv!|0K2$OF}*a02*o?~lJJ_0#)aEw8NL{N*r?P5C2XIATC{=!dy&`Gm-n7NjxP6#Pl< zC+|L)3iI4cC+qaxypBRukLP>>DT#8C4nrvSwcGawmJl*;IJa33ziNY^H z8MQ^pKN`WL`9CP*VHEC?f9~etV_zo3?|~;={plm_W9(3P=ZPSJT&io>)WP$k_EAuj zpUHWyr(Zn-vJqFU-(2EOpIRjKXKUQAp=brVHNeN52?o!yh-9)c{95Zo#~r z&5AOZ0R?jDw1SQuf?*;7p9cm8U~XJZO-&568N+ecxmA>03$=eQW8p_6=jZ#GpX*K` zETZY1fv)2hLxs4OhFgT&i}Zj+6t(TMHteSi#l%Ow^SBkayybX)`Cvfqbd~t{vHj#9 zb5oJ~&#hKcA9X!*OMP{3t!ED6H2KC<3SRKfa5G`oW7E+}GgE#|aSE~VS79(gptwa% z>J+~FNI{g7X;+U;V%A(ybF-i-5$&)b1CO6?G6k(13qu}Z3d}h`6iy*z04-jS{DN>F zHcm?831mtJAcf}Ok$W(tAu!?2I*(Qs^qGJo!lqe#>l@c@>^}^{krlUii^v?~fUg%B z@>Q_GXnQA1$r!!)qur101I4bj(d(iMCu`GVDd?c(tK6ZO`!tl9kHxuG9+D|aY(Uv^ z9z{i?-=3dA=#kFKM>EcP>N|(%-{&2}teDeMTx<_Q{rxRqkwHF)@M}0UpMjiz2g`rZ zfR~`>lO9qCvG3MASqa*?O$8(Va87G?%dWGu9P5_d_GM{6Pu;ibm5Dm^8c>k39>P9M zhvLZ~r07!p^svN(k`;EtmN0FgL@lz8;45pkHD!YFhxiH;mjH)+Wy;OdbabWAfKpss z4C9n`muu+#{QP(#n;=bsME`r+tE($3(1b@zJ+tpge(DsAs_+Hy&`qjHH>35QYR~+-y7)Afu6RXTE%JE zYoVM*%gf6YZmQ6a4PPm;>b4*LmHAS<(=-|%Ax(VawV`sbBJ=j8(J%cihW^-M`?%$O zI0e=TtWkW4(yQ1%ib<}-4#Ct!qGR~rc-aHO$*?(!{x8p5QaAlz2obsGQ2*y?*d2F*6Hndx4Gy1)?Kppam;p$%*8idA6=SkHfajfZ9RuQY|ik4E! zSbOJIEH>{1!yz59E$-t`@_wSu4XHVBsZizOuqjJ+LU3D2vg~iUgDmMcEKl?IW6f(H zVe$UCMgyyilbmaU^?I!t3+9-rO=oPJ8O_{*Ci`Rh5YqnOHvY*<&;~x#KSh`fQn(|y zw#VInBoUTsWrDT>zE!>`4Y@T%P2oAKGcg!GA+l&I`Gw(^%& z*ZyVbGU0K(uS}6#4J!N$y#XM71PB3^BMW(^SRxvY@QeNkpjn-u zh2`(=r^ImYO0-qE0)O{Ef~2^o3azrGZ$k4Xp4tYz;* zq@uxq>S&=yN<)Phco&1|_*by=>fhIlZf9q9Rtf)hf9mj_;!hR}uKXxz_!CmR z8~Kw!v0{EV_Gd{TPw)Txk~sEV6QGD{xtW4b&tTrr6B=&7cd@`u{Z-x|9iV2Q#LD~y zo19>f{g?9&;6>Z?r!%UZFGqNx5x{buDS(xQ#YOFs-`oJmi^Zl3hUU6hZVT5ZUwM0x z+Ao8WEKx)3Iu(}j@GGP!P&wUnfhZnT3GWEo&fqKtJL*a!LUrTV{X6OpLZbd1XM3cS z`;RCdUzjj06aCINoj>xc<}?My!Mkr0K#lirv5PO>wXa9AA5|`!Hi^c(fL13|xxvij zp&}77785TBX{*d%OARH&%DA`d3tx@sVJ{u5^|)@@-W6X!862GStyN5B?L?L;>>cWQ zdv%o%L2>BViRkzuT_Zkr?3pszUl$va1sH+Kdq;3KKrb}q1_LA@8CColdy}Ie2L|hc z9|24-Xg`fx`z~Lts1K8kh@F5NQ)gwZ7YL4ziufxg1$?1zr*vt=)+ zTKAB@Z{Z}17 zBn6`X&^tzsB~$VejubC`#OIIBA@~Y9Xwq){1ZFs;CUpOobeNpxr+R75+6K; zW7=5W*xl?~G-Q32Z+%7&-i1G|)?TMMdS?p$o-<-!sXWEjiJ>kHKazXsUC#{O&G5Mg z4VbGZ*OC%n!T*q4A;c=)@*yw)3bl_V)0Tq@5px=>lt+TFP;kwR%n5x2`YU5iu}|ub zq=X;sd_NE7@4a|Q#243)tTCrKZEgu_Cc zXy)@$16m|0ib~?ZR!I={H>`VvB+*$EZsWJgXpVOJ0}-wQMeWd>uQ-K|$C!T>zKXyS zg4J@&;MnXL6H|F9#e#zd^q zk=2iX4YSmO>8lSD%co`8TJh1*@m1fwGkeE~G?yGXVc>=%VHvr9!1}Fj(%?RuBKkUx zfzUJL9y%6xjFbpOX}1skArC^BFxCiAV_eF=*0G!F#`^2|a>T+< zAL~@>$w3Q>j9dFVxdSA6FC1iT58rT-J-I1T9si&#MTfyvGH`(+*(HRXuYQV*CKoBt zmH4<{)5$CRt3U?2<@Z*$Hgm2Wui&(w8q!cn9H<$NZgE+`2*tUHNZC~?>{TRpo8`Mw zUqxRuZ|WML=nIh-J#@S~Mo}#AW<)a`{vXEPI}pqM{Tsie5*12Fh-4QLvPZIK_8t|o zB|AhKva|Qj-XqE`Bzy0XsO-J>?>H~@c|P~|etysMTz}j**Olu$&-eRyAMlDDb+qR{!`*;w+u5()*mR-^9al~Imttj}vpkLbn*%fYWr z)beg^!MkHduko(`XG^u?WK5xAvm#xJr4=;IAk3I>pmBRGlR}T~VZM1tBwD0?hxk(u z96q2I1`vuqB@wHLD}v(mKHv?gtk#cyW;oyToN1V|FP-dU=N9p;qX$ZFo*6oNLKdeO z0ghWX1eo~~g}fGRNpe!3WcZNdU<|lEAfrd2CK*&Vu9ZgZ^pmk%wo7fei=3KFxynz* z2zD@fu&B~g2~Hm1#eR%rNav;H1pO+!Fv*W)H+^70ht|SH!wos32<(BZJMr$9Bim{{ z#Ev~WrDu6$9r`R~DYn||@)$5MnqEN*#AV4a9hf5kJ!Ccdd|xnR`Y}-nvpvy1;1Jlh z-S~XWMRS^@p$wF!rGf*GuE^a)T+x`o<3T8W+@Uv->Vv>%1;Fqc{lJ!QV zSIC?W1cXIb%L`n$bK`-ZR^%f59k)sV8=7#ODWmF1wo8N3nB}sm}Dh+ zOav;s@3y(fN9kR5gtx_^&dmM!qzx4V$lAn_soe>wvQcsSQ>DV!Ce7wmETBvJ-jH` zisAT1ryET`f?}%C)nE7)E}j zoSIRG%Rjev0vIFSrX{;{*Rfm>_&T576e22)bEok7OP&Cd`CTft9or`#@j!<E8JAADMo%JJ~p{z@t1*Lu#{>#h z^`L(}{XT+4*B5|M>-4xN<24cLEE`nH9cyY-v6`oSOm$3D<2=r5gORWOI^|r}u!4;< z!`!@GU4wyyw*nTsKb%$DL6sVN2x#VKC~MS-kcqY_xe|MyoIb24xdd{CTK4UH^>p+4 zH&o5phe7KRg{G|D=RX5ty z{OjGPH{u64-)6bE+e}fAwPtn^`BoAPH7KJs7Dv~Rp5Zi?97H*89}eu{K3@NR6wIeXVYc*Ymb z5NCnVA=_>grXhY`fXL zleKwci^J70FuEWPj@igSuVuf11g^jPW6%?kBdDCNuNjyu-z}W`?JBS+!701em`z{GK-fG~ypzrC|@K((u6NZPQnTU58xf9G}c8jxDEG`Hn_%X5qRTj5oze%4vin8s}eIGz8ewb8L@i9ABV{zJ3xXs0;d8ByM#WK>5~9XWMD(r&f!f)(2ktEkJgR4WFzt&}sHkCwJRif3N*pnTS}Cp%XlAtR;b^5M22XcxcvZwYOW zPM231n}l^_K5>JkgCnd+RW8VlTK0HgjWV2o=0BA28E|VH8(<|tM29X%rIu!MrDUC> zJTnonzv@=C<3>|YnA&c-YWgpo#c)-{f?!j-G7vxUvh?zPV)ITTf_lLBjVi@Atz`69mqzJr{d%678Uo+!t(Y|sPny>QsuhSgN9HUr zUVKR?In@mD1&S}Z52^iDOR975!%+flz?>ZSbDk~;Bf;V#=$(Y~(gHDYPxpCvpH`1Q z@R`HJUEp%#<_I1n#A*EKmsf6YUC1u&qoS(1_`TW<@L?}ryuii91snhNZ)^H~P7RTtf8O7&YmNzY4sP#m1tb?+{< zv45XZbp3|z)zJnIfsfy~W{S7DxZ!L{{ zQcAoZQH48Y>>)=#qL9ArN4{T4n{2p&@vkF#!urO~Aw?+jLgo`%>1XfY}_QeeNA?a3=JcK6>~NCN=_K@(JMgc6WDS+#)if z`a4oo*=Rk|1UkYe4i0X>mkB9jSS1RWcLHJ)$@ch}larx=!N7R?*u$A$44hYE%`U?o z)$Cx27iF&3QwhI#VjA#TZlW#BXi!l_Mdeo2_Cq0|nu&TJB_$=GbyZx_^ISqRg(|xRFV=>v;^#moc zjNO_jlykgC^E%mei!3c&h5qQez9Aclp9$8%FSV{IoE@ol``+Ge1$9$ee+_^%LaB)K zE5LvV@bRBO4|=LxOM5#W4vv(J`TMe@oD3zi-(=G1=~-6mDmHVNjB|5S@T=0CPvz+y zM^|x-%BAx5K2~XbbVCRQ-VAwO~v)4f517(f(+p+<)D zhvL6DWa_4{x16%5B>N~Ue)nV1n}#%hA5Kf}yhU?*eIv5Sw!*#pvF7aD9I(=;Yinl@ zLzQeDjsxS38w}oErXTPq1YlO~2+ScRPwYBEqb#$#`(FLzj%p9pW@-%VEo+Ajf zc=&k*HXa!2poTqG(5o#_VuZ0V&f%o(}~YU>bvp7Y#M__U`WUqk}CFq)Vc` z{r!4nwvFB0N)7`sbh~%9p|}jjfKhOmUb>4P@4Bf0M4n>FiS(Jp#mZ`KfPhxb0tJ`* z;V_*jT{#?7u5{;a!24&srvjGW8c=la@4ElfJPc?Kmec?O6lPT94C{h|fWHROXYfv< zmr7CO2f7vj6hrZC7F1}h4U^ON@v|5D5#{XeG$8FYQL^&g62;;Zv7vBQv|BSu>?}Tf z^1J)~n^;T<#Lcmrr@HFhr&t_zDWQwpU7B6iO2c|qP7H$}urYh3< zovHY0;K>8lCVKD8+*|>-!-^S>aTta2&7ctes-V2P{L?2UowAsd&x5#4OmxA`ib-?cMD{hC9=3J)9LzRC zyvV@LSab&r$_U90jIlCKban+e5fPxWnRcE$Yg(C`|MsO_Z*9|t?##n&X;-40Xmiyg z_kVep+3!A*FfuY$ZBLvX-Gn1Bc*8|(cXNUC%9SSnpTB+~6Ou|Rt-cG`8={iIHo^qU zZi}>(lwUu87R!z0EJ#^?jr znw`xY7I?nzsN`w=*FJX3P~W7dq}?Vl>d)SF|7Xbc4aciACOUf9=hmIEj>At=agR#i zgfzM=`Btnp-6-<|piRV~W?Ng^j~_q$szic*0x6U2@DYsKlF@4j>uOfA^XMv%f$b7QkuD2QcH{FGJl? zd(dtD$gixDvq&J}ug_n#(fr5fS6pSf1K7LN-@LZ7Jzj%xT-Fbj)L_7Bx#e{>wxWzj zwg5aZdKe}GBsg}Y2nJZGVL<)Zk_`rS#sy=>#61v?(xZ4%KC3zV^4`3JdTD8S^9e29 zxv&TU*D}jV7-btJ==NMp>`jRiMU}>C)#vN#3LqNeBoK2V?cvMljv17?@I4Y35Xx<- zg@X#9xm_XO32lxy{%P8FR`PJZi4k#8Xi+4jD=@oR#V3hX>s~%iRM3V=Tg<@uD)R$n z5$(JPKCLb3=g$EQwvL;FkL^eS@Shq`%o;@*MjhY!?0%C7&)~3yA5JN;&y}nD1G^|D zS+^&*xsL*?*z39#s!Se6q|Y>A=bk*pG1%x%Et%R=+uvWBQAry6?6sgjsTPy#X6-ThZ~UE|oui#C!FXCGL-R#yzRONp{m4baAHOM!Zhq<+uIiCstsjdYIP9&`;UhUq%kji=JW?7+_bt`Tet)WMIdd&l<8<(n& zo&&UH{>KGi8S?h=A?2}6kBuD#WO~GKOl#2A`KzDvNblPc?-v1|G0Nh7A=sKvFqL%o;xqWHtmx?@e4ZD?M>=m zX$3Nosuc&)k_3nn*b4vf7k>S`>_zPTJ2?$h41)%*Pd+FV7&rd>RnhPQf$b%3`3)WV zi^VyXy3~?#0Dyyu-w@q^)w~L1^Y1pY+n_fAIFuj`sDJQ=?29)N-?yi$8-7D_rs5Y9 zKfkK4BPrY2?hquWu{%ysbR>_{OFY;~I$$@FH-dMHn=ke$|B z>v7_tM?9-FPI4#m+{{G*k$2LM>Z)W*7CrCKSMvS(nrzdO>yBSB%hoPCv`|2IM}^{@ zik%+>n}4zvmasY(B!d9Jh)m%FoDy%SRA_K8%vCl8O489R;LQe*tUiTR=*PyRuw=(hb)^6C}ZiM3aI``c=#-aCAWuhh}wEr7*CKJgW}-OGgJwr2rvWp9RqVMjZq}_`&Dl zd>KjM4d9WGGO?aO-MW1Kq=FJUeaP~X2zkQmw<}aWz#I95=%k4qU9!8^x1U`B)xKek zDNG+VYj;t^YCB!B-PDR}eQ_4osi=fY74-C~fu*vjjT~CsER(adfd(`qqc$igNJ>h| zc345-H}Z#ZS)3QGMvd$xU+7Q1x^Fcl$MjJdzRm0YM;gX2t#|uyygX!$jW=FYaD0f8 zqMcyg@L%;J#5W3GW!Iz_zrKdI^{o7qn%P-0a&kM;4HLOy#IU~u}A|lt3TF5CQtjV5I;YRDvfvcxy7}gBH+_6Ul1+{ zGhLoqtM3{Xn-SAV7Zu|Y6Ndxxc(#NX=1lBwucZ37G&M;{N>? zIyYM{nnND$)fe*D-rpnM{!ua}-wV&q&SHu=ILWG=AAc~#*6WZc(LqG#qHu|jlvGPu zxu*vMY6WMHT4Hk_Aty~=6rEchApcg61^J~}Sm-veGH*!gi0ze%D!<*77V-g?Vv;(Sf9^NQK!@<#yyev=hxh z1_mDXE~YZ!Z$ zz4xVXl`xFAjHAX1CwgLiPtZ~YOA8*})}#%88bRo3a2p|{1$_dYZFis_7=FQdEez)r zI4@x^u`F~3!xI!06`8G%fSi6WcK{B|1*E~3Mc+L(HdcfRp&f;38xAmsXMcYmx)z7F z10EUtBT`N;wV}gRI)Q8QFEvD-#WLMU7Y_-*$0{nl0667^CbWbE%EbHhL_V09P!o-O z3T;A}nVIqeJFm=lKk-VBaSjQD;KCtY_C>pUZRy$K=n5LjorFExpd1HLTe~qwVmP%i;Ig$A1Q}f*eALmYHovX@2=f@qkjFyS)G44 zHc{qw9sUb&dyoPQ;Fn2xwvU$pOVq_~vD1%p_AHxgtg862V^eP>Qzu6s-S;Rkq`1`Z ziiKx#^5l&?Bx=el-o{~i{@r*I4gCNkG57Z2wdWz2%ksxo4iPnU2n~@l1b^zXzi&AW z3vyfzAV-3}bY1OVn0-peC;lOmpy#Pmbtg;Pw4KJ2*H=SG1KL>2PY5q(w)1hCaN;U? zlwjY$f&J&JT@+%bMWO;XkvBTc$JIWf&B7#nSRB4|O)l=0-CE(}xJw4kOQ(otP)A7MJWQ|})N0P94 z5}$}CPH@sbqzjQ<)1jtW;BLVg;yO+Yczu0xhuhip0?P3f%mIZ67=>!NTa*?G$PScV z{*o%3ZeyL}BzqvaR~#>`qXDJbj{C+X71jDUi6rAFuUCkiJjw;^t!~`Y$xdz~HPHJT zkyDHdO%J3xHjfM4@;z^g8iD`EJ?)$~=D8&^xD3k+9TK6-a;)G^`i@S$NuS{Zw&2f5styURc@V_;Rv!8oGp+kToiUCM6fMa73pIY%-X4r$|o zR~4YJ?{X}Z0<4-M2&6bJD4z%GxZvGkE;jmYu$>B1NbBq3THMqh?{F}rHoHa& zidBJ*b9aiQaZZxby?Vy$0Kzx^4qca0%E~aHx@s?=03q6m*LRm4kAw8!(~nNQk|oDR zS&)=-3CSWy0wrWalEZ*=>LK#nMVD<6@7%rboeLNLuWdUcHA?)O+Ps6q?Xk#u=Kdtg z=63KR*I53tocMh7Qxn$5KS9$U-SWF!LTbn+g78niWVJd!`5wH2z zSWJLnxzi1}3V^<;dHPpKBJY4Q`6iURiZREKneELVDAEZ<@v}H@vA=3V6Tv?t7L}pU z+7Nd=w20TxnKnJiMtMO1Sy2~ll!s~xENsBunQd}26 z_GI&g>sluI;^^l=Qp3wHB@!q+{6U9=-Opmb@n}nsG4BDDfc(ey05=t(hm{{I6R{sk zt`25nrO3Pwt{m-4f8t#5wl>@S-hWaJ+=}Q_LlT_z?K7}!02oaATgqbCY=s^uc&jyy z)ny#vTio{00rGRWiH@gRizDsLPBrsQfBkh@IgB{QoQzLFYBm2*As;uKTk~*a35(_) zOcDGdxIuaU^2y)m+#V`E-Io_@T$~$qtKhN6<Uu^f{-ssm(=XHK5&m)qR5nc`u{$HDuwZ_qM_Sy?_~Ph7#`lCI}qsdU2fysgs% z&47BvL|@7?you&fOH>Rd?RJVag2ysRkWA-WkIozgy&C0qN8=>je|OzSd|T-^DSQAi zV0WTN@yP|Gm6`MGE++gq?EdYKeU;>!9aP^JpL)9HiOZ4ViRiri-&xi<{T|7-8ezAs0cQqlL_EIC{*z|#HfXQTej@&VoVfjQMrv;a35)W zzEi?^>O?Vt)lr@BkJWH7GX|XR<{j3-_R)Ji)e;y2L~n@DH;EEZ0EDGbxjslS+W(Gf zP3IDN1=1IXe`RxrW%k4g6q68+Bw|1Og(W7~ggWjSqSQ|;0kb2@Eq0$wZxAW%bbT+2ck zBPR|lE1j6nTj7g>O&E?|I)jgt*O6O<+eY*#O){w}k|u>0^B>JS;Pduk;{BQjj3|8! zRxn#aHWA4FBzOstx{IREH!IM6 zLUT4skA!e5T|@RRd{%RE(<4cO65J7}4JmL0ASnU;^s++#xl1)-jI(pBIu{0Ji+i=x zIttJTDR=pSdJJT3^)A-#g}a);o69X@xjTIuh)k&LPqJ1X+y5N2Bh0g2e(^+guZod`*@ zz)xfN05QX7Ek~5>IRy44Se22HIb1X|pNWUp*UR{+?M$|)boW|N(Ao_~|HCaeCETk{ z_myhx#A*tjsyqh!6a7kK95SOju3-fd*)OG=-O?d`MQ*wv7l`5C+t>HyBe;2H=kkaSZ+h1R+cm7ni zpy%VGckmlu0B`17NXUfxXDOPLj)g;Q`{{BdIgB^E_Dh z5xa##nIpgJ&3jx$taI!=Jsk<&@OlIZwjM*w)q<5hwGKXw8o>gMs+%8e@gvb$56ES*bq<(n=D|X_+88 zkn`;|Nd7n>atrqqlA%S%3Jn5WF5W8lsXcW9!&Bo0hq1{sUB#!*MG+K^?FiWgW~u_A z!MmYZI0W8(1=kN^@16cwQKuq6j=u=hvnYWFg1R?p6_DL{I5~kjc8-Xckm%ZHbO95d zkmvT_eGl>a__0ZFj75ct&^m%py^&b(z-2|3x#-3PoKm?n4mR(s!!JCMlw|NH%vM&! zp`9?KxZGuT=WYVaH~T*ae4g+a(H5p)jfYlnQC^h^^i;^@>CmSLM%zwws1bLy8M2lO zU;Fe^Pf45q5A^Gg0E9kjSl?Lx$w)CyB-`O7I@cWfTBh#q&xTG9Dc(m-u{&TVZgd+)I7Eot2Lr zp>vv=wPW?5rJrBGe&2Ej)RwKxA8BB36%nQtAmB0i4;qjs@P3*qTj1w0UF&4Ar?7fA z({^X;yAI|h-cH@L(zunoI`i$%(wQRJpdn1O^cA~znkFHx1adqd1f0Qe#})qHh(pU2 zE30C5{#y*()kz*+jyyb;{%42-w^@o_GO7{MUdnkSzRT-*?unCEmJ1Kph$k$POOlZv zAu>YaFzDUst-LF632;sHi=)29>EWU*;@{e}gANrEzo)cbM$@pm6n6UpWDgriQ>ETh z;TD~^u>(_pZ;dq@+S3UC=)?Z;7aYn^U*HicCG}aPVjlBeSsU${OQ)?d(ckUzMfdKd zU__{IB)3tZ)w(e*Vox~0au#>h1)@3*$#!Rjhd$jjQlqC1-#7El@+3e4#h9w#$^$7L z-omHz5mj+Od|iw^O87V^SB~~IIH^7|3_iy ztFFb{-1H{p2rBn=e*|XYR@mZWabdp4PR-A(L-D5n>hAzz(hoFPsH+$7U%l=5{)G{3 zNR3aQHyq%0N20=bu;fBm@1g#7)WGR|<$yZSJ+1P)4jD7PexIXra>|U8WaADYp-f$O zr?rg;*IqZ?^!+B4*Vv+S1A&Ka*D$qpCm7@VK9~>Q2Ej^!gaN~ zwxCT^bmLNx^dU!mZ>?8tNK}BvPBMLk2LIR$1VVZ50V&tuKQlMes3K6q6qP{W(-(f@ zY~l32eD8xXw6n@?#$)&Cp+mxYa0Bg!rS6A%AoyRjtR> z^EnqUbfw~+Mv-=#W=KCiOj9%!s~Qof`mjDTmQ+!=Eh>(Nni9lg$FdK6X%@~(z@FG& za#&L9_dUDpP*Pg7Y#O?;Q6xv*ld*9mNjkqk$Z7iib@(Z*%>KTy+{4B=+jWO4RQVql z-2Q2>h;)fG17&?M3yX>Z$azbk<^mW&`VD4QNUl8zAQ zHs?PG$LZre3tR4)f==`7eXe@#w`d7ZVjR+`c&w1A*cZtX%x5J~`7}|f)!MP?|3Rs? z4X7xNd=Vx2w>ABh8o+UR(DmR=?rnFnewi$e7dNn>QS&T7Xyk5c z>gC=vpu(jJmx$*|tm$H<3H#R8<{uD1!Db`_c&PV^8NtE9)zxms#?wHL30!#hwY1D8 zM#{>{0F(CS&6~21AGx@>Phnx*(kWxVe!bSHQ7fR=2h)CjUYMN%Ul31=%(A< z-saorQ7T&i<|i#0gg;-GHA;$E3{l?&KA1hn*6=iw8H0k*yZ5Lgiqqo+py!QWS{~3@ zY3)0lpJd9y`yaZ7NviXqRLaw_3MatI0CfV4Zi5`Mzi^`C`ZNsCS_NW?x!Kt(#KdXJ zv*E(MrW|Z*QRENIY}M^a)zmdOIInq`zH@?wC~R&ba*6-qFM>BuvBUoO`WH~Yi(1KA zp@P;Eugc5!V0<$`vUIhyv=kMe!gfr>IWyDJzS$Ww`7i|YH4_pN04oOR>$Iw>LtrID zYCKz82oc7k>WB9B_U&=}Q0hg-Ri~z;_w^w|-+gXXUA}GbHa=d@$SBqBsD-F} zg&uH}=CzJ+OV644Lv&nU57L}Ul33#UlwJh2WMxR+BY%XCpYOOb0accXiHD(5Dp28q zJ&K8`aM@W6yeK5O3`J1JG2@D z8kzceF%c2%>gPH+s*eo~VL-Fu&F3;7B%l^zISJSR)fS|4f(~&p`4N4#qo4qBOARZ; zp~>R!FcKCBNCbG18cthixN^?!c!F5BXrpHl=Mg{eGz2fQHoz}O?`>1f8sl7-ghTqwK zqRz`tpu8IBCJ1k+LTuT+Ugt#sWBx{`34gc8yZ!ujfk1BpAek5#81SyetUDA-V0(aG zi_NAq_C$S7(Ut@IMkd_bKfMi&kfc*Rrgl%BEF)mS!tUyw-_byEk*@4_B>rpIsv5@X zO&{!SF-g38)Tg8D2ox~3q!+z@!ieTHx!7mFBOi+-{q_$dVSV_@5+N82J@L8ei6w{IQUv>fpm|DX{Km!FV&z+?~_vkRy#MSGxYA5K6iCT znh_|z)0?hKdtt~sSC?~XQ;t9Fb98k*0DeydE>R9_m{m`H2pbyGh$?92Y=X*w@(C%g z{ms2gFNB1ks@aXqBxEjpe(*&EvAp#NYrpW9dMcN7T$EB=%%FLbBOq|sM zLekw!bTm_H(+E8F*mJg+U`PdK6qw)K{II|gFn}p3Dd3ePcfyElAgNPyr~!olc$iX) z;jnk_#^>htpkAe>qM~p~MNiLdri-S%`YTmS40lmRS}hbhg@uJ9M%x9CDn5Qx&jNt> z5C9$FMBKh5Dk2g=PdR@7L)rZBmtM#*vow9T{&v4qZLop8S|CANCE|XuKl#iO+3lKN zDSb^PrvNnhZT-F8{|y%F254QVt<97e-X4UST61$V1N1fYf>`wOUqry=Fwm~a$Sp>- zf5dK=2((_6(^@K!7{x!o!Z$E~f>lsZaP+i%0|I#}X6ASeR$~FHd@YA-K zh}0mGuBf?&wttR$)w?s}w?C~1`{g-rJqhNP5Y%#fFHT`!Wn|_ zSC7_8NBga)4Q4zYf}ybTHvd7@XeBRqrPEKxR=oi6xmnDr=Ny>dktAcN0E~7- zfV+J;q@oG{#sYvJXC`@PB)3hfkD{*mgKy?N!4GZ6^s~115LDxb2 z^IflDMw07SH0`pNyEXl)Dr#kC34UxOzACp5-SuleANc3D)wkW8j@=!^L>xYJH?2W@XCuK*>* z@=-W}yT7l__hfXOE5vr3<6}*ZLgytv2D_|lHkEP?1ip@!U0wVkhF`Z_Ab;y{U!`al z3mvU-yY4+se5bvd$B=tfPE}&$9N-W1TvlFNI`6Fhnr}i~2j-sh=g)so(Jis(78E>e z@Bx_ag<8)Yd%818di}Z1dVXl^?0>oDd;Q&;7ImG;;)9_WJi>|ZoKgj^U3)?K7F+<< zPz+yS)M4rFA|=Op7as2LyM<(Q6Dq<3@PTgSGcd67rGR+|3l8r7BIu>kk>*oM)NjbP zr`UB3+`w1GbZ0(G1WYGd<`o3o85MM=ovusT_$B2U8F=je(>u1PJDCBZC(bgta}}51 zsf~@>{)+hMCJfVzY(kav>pELN14bClH`W_OSlVT_lBJ!-zhJIrKu$okp3JZ^Tzvtb8v3*qE3g zC)K+_jw}JngNfL@()Weei-onN+C$Zk#5LeZWPrV6~NS^Rd`;G^QP1xMf+V>h0B z9lzU>tFeLc&%DEr2+@_KP%}B8{l?upUPwgjo5` zkeghRkU&SZEO_PE+(@9{uOJ(cO7h4TBcb=NRZTvkv7J6!nOeoxHJxwNhjr;!X#Fi7 z;iA4cw0+H>iG8o7Bh?h&JOH?ki<08|R`>pz)n~L_&9$y}-_(;E?4va(?rZ1?&WQ-e zYU=fK3=H3}?2(xJIrbEU%VM_iCjhirhk{_Lj4v7Mn-pBHUO?)=2trQ%*XZR zv#;+t zi!}kKy&s+wwxj@pVX=-VEp-5RC6i3hJymVx^vujIi?{Vm<`kdzMG8twtzu(fm9}MM zN%*vGqATqU1F@Jrm(W`HYQRAZTE4{Jf_Bzcf{N7?xg#1hvOhAF=Y8>=-_2Bk5&@yV z*`nQzFUN_2F|n^%dQ~nOrL4fNZOQiIq%6KQ!{b6JsmQlQv7;r}7d9U%)V@S8y(u$W z!H{iUPq`N7?;m~ri>Pd#zYPt2dZXNFYRTJ2ajve>=9WLk#}kGDRCHdi(taVz@;dn6 zwzTa6d)b!P`T0lJ14|TgnD)5`lBVw01T-QHdhh%SdT0Xh>oge{OwffNE{g6`f!ilzbBr%vBcM5+h_ zM6%s_xpEZ;dIz>o0Ib{iwcqgRWWn4yfEcoi=4m~>d6fHnVX$81aOF+L#s329+C*d1 z+3QsYzO#!4N7cjc!h^AF@hQKET)gc+mPa=TS~KWgm2-c~4k|N@NNE(qKH8=KTF2Iy z+RuFU>`}$bt9#>)5NH4sC%}B`R~iKVX)6{t65Wk6LmHG_-T#<}^?HIo$r4%J);@`# z{lmQ_2LP*Hy=o2Pr9XcB2#Cv}!NJxD)|We~g{*h+@bJ3zzO=XJ5fYRj8f$&7U%pg9 zTYIGNhJm5s%pKt29^ye-otH@oR~&eM zE?PRyybO9{mnPlm`k3UGC{Jv~l-q2ynezT#NV_7oNtu~*@CF7XrPRu=Vfl-6GL;LpTX6aJvqeItj@!NQEyj)y-CBbDXqmCgl3f5tS_`X}Z z9U2q8zDlHdc;7Orn*LLQ_!JssVMr~xxj4E9Q?`-0#mbB-a&m3ZAfltKZJXB?!Fv7r z^_Q-EYX>mhgQF@eab!gM#!s{Bs{2!yFJ4RM%felqTExmQoDXWrU^ z=#)m|o%_N_KD1$AgP-xZOc;>HI!)G5a#ikx`)?#MEEn=8ph-Tew>eh5g*$4->J&9Z zw^t%NBwsSg6!x-`XFzM>$JV+qz-kQA$*UkhUfrvUS@*u)IWpOO132B|`Uiko1xVSa z+i&~)1p%9t`5_$lW!#a<2_Nk?4{_}cUNscQt^WR=@7IHs|Jt!_HEg4h^6v0I;JsB0 z&`CP~D8jQB#tW-;tL;JmQcmD|3-tmn{ppUx+mXJISMm1d{O(fpL*zU`=xyk8gieyO z1&B?z<_Ei|FyoM-gM>*HswDW+do#4(0NBaVHTnjqbAPDp8?p zxO`|B!1Kj5HBoGdwX!@;6$F4{i}f+Qp{MV)BubbBe$6;c`6_X9J#Xmj$#gmj5WDdzq9D#%8Vrl7SXJEmxHO zD$JwvSX{WQ1zq1?(avEWC-55!$+#&)rNEr#3d6SUOa^*K zj_$%#w7-4~9)2Vev8CsRUj!)ecYjr*<~0QY(*Gauu|mnWY>e|cJgVC!Ibzkf=V&*u zw|4If73(*C2;4>8+N*h&TjUj{?dR<8?_cIOG^AnYS0z96lg@`h$%!`d-X;_pQ#CfC&&*>jX9Z^vJr6Lg{;&)VO8+_p{9$_Hn_1Vf$|GXje#K*)KLVA35_6M{I_x+fdxDB||(M^w2XZo5$&{F`pm{OhR&(>!qa_a2{TdG2A->zyfUR%(5b{BDke=O$B znVy9;tAk^rQmv!pnenD-37}PUV3^q zz`zC15)d;K&-~ZPhsEc?#w3@k58JZwz4(<=zi zsens_M!RV=&W)_!wA2d4ho4?9>%L$+jaRr_cu;1~&uQ~DPBQSZQ3c_Z%lbchht3=6 zx(g>RZ*3hx(>sLFCQ+#-Wfc`JFm449)GdM$AU09KDs7|zL2Qg|g(o~##?JCcSKKVm z)c?5GX}Xe?8C6rlxlb`K9b1AQorbGSuMf1fe5%uz>2M@&r2z~JW# zOf1_#7|!#3dIZrYXoDdrSPhH-kXE<=$sSvv*u|o7sj&?hzm>)5Y;9*(2~*40Agcf= z8rHksNzggoI1iodX+OM>fj%&|hWA7I4=CdZmA^N#!+nQTFQ@9>f7Z$FGv(bL0d_X` zhOaThD}S*7hyo-EgwSxD0;#MFNI6ONX5!(RvhM~2y{YOjo8`T(^=pDT_bIWOQwFA5MS~+a*^AG9E7eeQEpL56we2v z%|<1p74Chw=icnQf}BDsrr@{nOFxFMsF@17xVpj=irU&*m?dHQ0peW4XUdnkpZ+{U zXMu@xskCkE`)7aO<%m8dfsX+6W?Zokbu4X4$!6j}UcGe~!F2Mt*x0N%r%#_=94MGv zay#M$7Q5cwmWB4dQmgN<%6H1jTF;hj?-xK)IWjWR+S}=B zy0aiH6ca^361ts!g|q^39dEKDp$Yk38&dL}Q}~y|ZCgPSs;jFD4Cf&CoYpOnSlIqb zYIXV4sS|f$oXE?Un7rwSXJt!62i?)-j7CNVL#j4=`(av<0iT>h^C#jk-vz+jOh%g` z_uz}F4|nI@O9q=qhRXdXJru%FgQSQ0&Ev7v!24S${SE`{WhfvWRA^PTliFE@yHv5( z28WE!d}6TT-Me?|>$X-_&y^+Eo5bdDAe9AK`Cq?&0k^@qGscBmZ?m%IAdv+yV@``9 z>QE_*U{ZKcz01CYlt}&QyRVeX04FFy6#M&>4<{3kD6fL= zu3!e(9=Dyt!MTX@`e6YV3(FHwo6vv{!PhQS6J$nuCcpY+WoM5-A_Y3{4R1$^P?50c z*MOGJg#^Ryx=Gco2gAj-=^&d0=ofUfKs}@yR4*J>jw^oJ%uA5Ffc6p?5mnbXk2n{) z`T>OaNDZ-_#12=#^fY2;-}v@j5JgVgHE=}oU;M4S+}t-0a=_!vT{XErGCGRToI|5< zQCneYsoNUB@?F+sZx|XTHt+1L2Z-oAWU8w}8RSe&P;y>RD_QYml(+&62}>%?J#IXoUMNzV0S0IE9? z^i0SPA;@L@Q>BN&rA&vsfUszro)SCxG!#!={()id$SZ2^55DBbc?&d27CQBR^9JSR zrOJe&I-jCf2{~WNkT14MXK?Me#zxK^85$54QE$xm=^X;OJw#Am2<1xXe=-EO_$hXU z^D>rv0c(>V_Af%&7=}X000Ph5 z-hFfp=?~Tn|7W(^O(n#=?wPgoy?-Q?ErefHMnoI^sQF}SH(2^Q3))W`72PM_LBa_r zu8Ix&T+;?1>93kabA}3vC|L+xrI^$dT5l0a;7l&Rj1EpxO?=T*UG8oJhWtpBT731d zANE>Cgf{$n;fmcKocTZ9D~B{WSW&Y7J_W_jANxHK3~>k791&Kcopisz-cIKL#{nR=Y}Z0pG+BSn7PKLrr_ z9Z>z#-St{NbA^$v3^Vw@ij;)`M@&#`jV?6SkeYgra-#(6Ft%IMZBTosp(czz0I!eQ z$6QZ~DOllA#7B;r^H5(qb*A3K{p5uUxe{zRRQMhq10BsOB0t?OG!u&4#DC8?p`uWe z^>&+{K3!tkqwCxm?-PuQA%(BPgmEM#N?Q1CsnQlj3lA+CI8?{0u|1|MqI)-JzUlCr z4AO2jdzU%Xa%Bt7cqBc#?cTn95Kgf6IHyzWaA#?ZbF@n=&t+U-#%bq~l3KIWjL+lM z4;B;)T^bD`33>e7W?NI1JtymUqx}MIbM!J@bHwZeJmc~e8f5fzRqanjvILX!AhAt= znHk57!SbNDe|Zn@u<RyqfzvfajVtZmAek_) zi{9G`*icc^NwETmZ4cH^?j%TJg^v5@nVgTW{WXBkzloMNfbiXk^`?_Tek3$$9Ma)) zSA;%f>l{wL$=ggXPokHLaIz}8kz^->ZCTiD9{0g8`p)VI6MuQBd7_#?M|9y~O9dM- zUe?|V#p#aUx1!(cliPR@XY|)&fLHhbvGyL|T=wt(@JA9YRQ4{Bt;o(w$O@4?%HDhL zNQ#ghGD0YO@6kXA*?X^SviJYI=>9#w@Av!s{>Sq?|HpCM9o-ez^|`L|ea_eGb=sO0 zn)W^#m4=UpQ^-Z2K!$SSi^}NJIT>F?0KR7o9n85aV$_r8j%N>v`BcJj^-`+(!0!m0 zpzF7KW4|pL-5fBB!DE3dxJd?sOD{@F40w z7`m1>T|=Q(^dpMu&^F7z;?(L#-<-`m!-lvB#d`fK?GM2od^NH)NbAsq0`&~1WcS-1 z$EJR-95nA0SXD{#ApWAsqGo=)z1cJrP-ikV(D#nmapR+7AXYZM9o?{XSLXu2l+!g zg2UKI)8xAgERt0lvDu8i&!3KvTQKIsB)S^)mT=~Z~>*&1XPQ}9<`ES&-KoR*t@}3&kEz! zoo8P$cMvTck@&)_^X+T(QLjkc#PRaa!@ovoDfvs;@0GwdX96CbFP1khoiDceQN9Gg zP3WBxco+CPAkWFy#eh_Yj1(lnuGKL_WS>2I_WSqmpo5VLxfHS|3dq!&`d9!)ENF^3 z*}+?x&}fvadQ_dw{MR~Q;e8#vFPkzaP~YwPiJvtw!*W=odM&bOp>F~)**NSWI?lTr zo%_qtd&4sqX(Gid?0Wdff9E{e5u_-aZ()^vRKu|xLZ^@=R{qTrjH4E0cbd=1(1s=J z2xY-c9K|uy#Ulhgq*WK%M!A~@n%c0h26Rmg!{CZe{K->8JVFjt{g;IBeL1i^riVQ{ z9t}~RCAyR|G}6G*d|>$PdK2F9?%k-m&foCfZqfc`gDi{qi<6HJ1i^4GPLO!Aq`QW4Y)D|H@6s>%)en z>xrj&@4$&jU9;-rp%+!0ppl&3xdxyselw5#A{ za|};5j6E?>&Yb6jTVK()V?b65zzv9>-bOBR3p@iC`z4X<{ByrWg?0R3tMC|ZC;KI| z85HOPpn=DhmXR?dC56O1`5ZRc?`p_G(~mU>u;HHFyc$29%Ec>+x%weW&nq9vFP?HE zaMtA@^fZ%lnmIw6L^)GMzJQ(1|8WUD8fr`vzFp?rz%fdTRj30G^9MX|R3h5|-unQ2@dxF@8 z0j%2brb6WCkkM2}%4_v7*b2j_vWS>^;JOOhiCa2f$70HhiBOqFB-Mv>6(sF`o)zMk zS5#q}?r*#Bht=cm${;nSY_Mz@Blk_Ym6S082T^C2VKrNeY#y#{E2XWILDDIXU74B0?(C!j?PLu6e@;`QO;9nK$`XH?bQ0gk}Lv-9GTgN|Dh0#`NZg! z$etozV~0;v$v{@?nLy-RpUnPpF#V)JFBeT|8!2B$F@@lA--zqhPyPhY85=IV1AkE# zwK##s8-zR#orsD;sySqClZzI1WjxLX|b{F>n<9P}_6J zmU26gD!Dlyb;Zsh^XV*(Dy1>?Yir%uvkFWT*Wq1oJO4@1rRL==UrbJ-s{Sv!+<6L3z!wyDD z!Kr%FHkVIWKaB21y5GHbZzvCjUmESiBzKL*`gW$HwC8#GP^ii`&0nuuCZbV34Lx}e z5v6#TMBhy>2Auih9s~#o`Ijg z3i}#5s+QDPJ&5$CL{ccpst1cMMpHsD_{OG7v|Na*R}+Ie!^3heX^F2G^6AUx=05f= z2L_oZ>PlLL*^6VhjaI3XM)y?6`jytZOryKgd;e*fQ{^EjAUS_WjHWJ4ZfD^cybrmw z^LPXVk?w`Cy(%aWb}wZmvBQ?tFL~FShr}^ZtBwN|{@~cpp{l8Bch!pfqagzl+Ffj| zYAAA~Kwo7!mo|Zly&-qw;!f1?DCLpU7X$OD(aHUimA?B(_2gGjP|t^RnQ|m=^4Hm! zru`hs0s$Vix2emLNq6W4XuA3yHiRF9kwy_@m(Mdah#43d^ot`~jQe(0zu_?QeuI_^ z87Xv)vKAI0hOrH_qM^koO`$5Iifz4W^^oKOwkgyamf~%fh999;&F5woqgg#ZEpZO7 zv_6t>bnLl9Q!1fly_Vk9l_a&^fFb<*D&=tp^XonRvvK5%eY+w(;sXzLhWco~;064y z4Xi`UQZI2ZTLi?;VlteP09{>ZkAVmTy{iy3sbEnX`Jf36T-KvGi5dGg^fY$PMBS$h z01aTcF1sGz`I_j1`2JD!n5hy_hY1gP#j~3{YOkX2VrtmO6e1 zh@{7fKbjUB8GklN?n{e{`O3t&Cp7AH-C-i(JpcxX0|rD zB_dSqsIl^88HB^9jXS1>sQ<%@6#wrwB~ei$c(CT(GVr6OVcT*v&lgG~cWgt$z|mY` zQsV!eVUN{|ZiAWFQBX;AfLPnP%OptRZqo(;^VQ8>?c+(xX&p2a zaSMT;LwWt_M-nm&xHZo(i`Mwvi75Z1^bik62g&k^f*|@YGJpI7#6PAIsAid@{LfxD ziJi*<8&`DgxzyhFiuUpy=;uKO_fSUWi6JgG(WRFF@Y{n$&*ae@t)uxB<}`XT|-FFrz6ga35N zZg1w&Y?y9wy^sG8c=N#}Bg&8zWdXT4PZ`P3@b~Wz035De>9hu2RzGZVUdQG4bvnDy zuqVBCE!oil>VHC|GP~}#;C?N!tSGMNG3+s7MT@vGS8gIGNDjbsBG%pzhnN+}AvM=Tk{6BNm8-0ULMZXQfHOD)Pu|5vg z^7ire&Muv}P*ngqZafqQRKNi_@dJn=F)H25VfPmmpjuaT#Ac;b)c4S98<;c;-5Vl( z=Ci+0Rc#DZwdY;7L%I>mKgM?}98IY^UAE_NdsTAW5?Mv%s(JVs8+4SYuh*xi?BMwj zjpdP%i3)mC{a{NdF6*d4a{lxSNY0y}Yr}$_YZDCh0{*W@G>&r;*tHdfQ;gQQHxNJ+*yed3$KmnqoVlJ;Ly*X|cZ@4F9zXY{jD%yL4z5qx z376BQCRgx|B;~^d=wrP_38Vj2V&eV`W!7yZI3Ee|y&3urN%pN$yge0tBsHf?(9HWh z7+*P!B^1YA9)zE(WOoxKn?E>h9_vvO*=JFf?Edtrxo3B3Y=L3*&c`G=la$f8xX|Tg zjpojzM|9q~yT9AnF)+~8N`fw3_&nYJk4;Ny|E&1lP-7>h!z_DImLZSu!1RX zHTW>0WtNVaNicX(SFpckwiGfkLUT|1qZ%DjuFSQ5{|i#7_x4rgpBZbvDgp`o9F%$+!s8?qpTD*+xFJh90IYL^6^?FJ?~>P#7O*nYxr*W)3tAO znd0@a)o`!bRc~feVKLvgBqI{+ro-sjG5goNZdA(*TE0i@ z{5COc>_7=c^l|87Ttf0?LUu`(ICLlv?NaHQ_;RxC70-d-)!x+ZEX6V1q?y*`Hd@Al zTRFEWn-!@;P^hCck}n2pAuCYWmf^mSE=b7`dQwVDY2k1WPyI1pvu3}N#!$z3b6 z7rwq_E6|c#y@t4VwGi~x$8f7mkiMei&|;y8tQ9YnK9>il<+u5gvTIMyfhsAFEkj!U zCK^2Z(Y)!za?{%nS*si@?aX`z3{=5|XhAOW?D6BrdU|?3=Pp~6&!vKRlQYyl-Tbmz zS|d;#!Cv#=LXZ)FkDd- zVqCRv_sUcw1J4vRdF5%tz-PGwdMxM%NJImJY51d5RBmoAK&K$40+=Xck&uGhYAo6? z-Wag7fQbj$w?mkHP=K1WTH8lDNj0?r;4c6q9+!lKR!UwRkht_u20ZTHrtA3XRjc)Z(&Z0P*;K}1wk z6hI}=jv@!H3}9Kbpg0W;B^j|?BA(mbmCe**X7rb;G}uH#aze|##K21{ebz?a7Piw% z4izU7=|T975VN7Lb#HsfR`75`0g_`ev3kH|fDAjY&UdWojvB9F3(7k>4*+x!Ygz3K z*9F`>ApZdoT>`Uj&~f@SVXIkc^#N&%xoo_H!5)m{)f5%OBO;1`5aPOAmIg2}nC`89 z=h9Z#w|xv+KdhuVAe0`gnn1?n}{XQL?NAvLW3 z{vD~k0Z8NP>kFS2fJ?}#RM3aK%-}zNiwinW^WDvPAt52-)rM%G!=R!kV~z9+62{nW zd}n}_f)Lh?(?U=B$V+-?OWl`izvZ+2Nej|8D2O;tGqPVm?`Y{~*FJb$G1YUL!e;wC zFdgrd6sF0>wEue5rS;5f(BL3r(|cI9&CIG+_&Y*b3qS?(;UGx`kmB?q_BW)( z@Y0SQ;?R8D1I^5RL#&&D*!RF!!9FTINX$@EDF& zXDv#()2;?M?x?GSH@^o*-xk8#e9v(NhReV4OC)FsX5X-A*wE0hIp3^E4dfYlp`{{> z>#;YNh9j_(7#fC0Na#4YEJ;rE%~l z7k8n5EimR822HMr%FE-4%4<1|V~FduzUPr7hUqfnei6Xkt3k3DL--w!t$~Y6d5b}q zJ`X#4r@Y(^EN?i0d=8ln)r8yDlSM8tg61;mdWic11pK1Zk&^6ls}5_Nf<9YUfa4&_ zq>-xZ4e~<4@R806jabVQGlhA3LW^2udjCJI8KyW#k=bJR@1rZs40$#rlG3)8R+Mj| z`Dgx&ul(wkX}84lx4foJ<_pa!2Syh!XHs%9^7^1nmYz;0j~6I53C7CBl>|d|=RzFkyj`1t}~n#@2RnDy8#>wI1M(kU{U{>@o1?fD@O!@#zR5 z%o1w5YCW1 zZF3ADZvVKqiAGRnWWRSaKqEzr1hYiyjq79F4W>&lc5o+WSKMW(0DM5F(On2tkRT)= zOO=T(CDDnAiz7THaPD?w1v+*9z*DK9(Z#Wu?C}2b)T(e8o>M7wXqVi2&O@t}8<0Xs z2j)zBnKPtQFlqXp9X?W~p8}`U2BL~x$yNscg7Q&jp!7T56xC)pQ!bkl=@#y_Cv_aX zrYk2=N|aUw7jN-%(yKWyCmVthb;&&FXB{@*gPF-^<5X=+c=$K0 z_p0_b{h4lVCNP2O22KZGF_8Z-gjLFH^q)RWY<>pto}fs8-esy4&F8mmLd1hZ|H-Tp zsHLE7Tc?p~>Dcl!;h_j#Tn1=SQ z?LsH?+rAZMyo3h5o0wPXl~={*uwWhl@c{zGs>8rI)j$TRm*GKm+da!IUUR*j$r6X9 zZn5DkCHLCp6&%mX+PQNJp1~`l)w%&-n*+%FqR$A>oPac80E{$%#^eQZT1dgjNFkpwqVWTeO(q;ZeE#zB4z(Rvk}gfl>WXR8Za^AW&L+;jxeruVRrmdJ zJJ%c?ccIf3(+$(P0EeiZohSJUl$b_GDnki1=aKoAriGcy)@_STs8+la}$!j5B^M=cRnoz2~Ki!RPs7?;)wg z8`8m>r5^YJip?T8{EF>3!BkjqKCH|R;Qhuo{m>k$D8wZuCZ?b`>X2gn6as@o0mvth zcNzrM3XR%xpM8U^^|_y|O@aR1W$PfCXL|GtfhVv_BQv7J3uXw)W%OB>9ceM*tErH| zZJ9pL>;QNpd>VPqSDcF+EqWsUQI#KQf!J_@oCbM3Z3}Uuf7y(I5ud5u;!} zAeZs^3vFi~HHZP>cY)zfo7~xF6ZMwZdIq0EUL_`CH2Qc4*5_kt7Yo#8)5&IOnzk~> zJs#y|Iv9T5DE4V&xF%fA`W8CaN5U)!kSf`!7#XGOCc~zdKeO||!kxxUuet!BLgn2M z3c07v8nz6gN|J&u<-C>Rvtl@rj*HU^=zlv6{8ZOhmqD7G z)N`fspren55>n-yr4d=msz+6-c`2M^Y*5)MoXmAtXNP!@iJb_ZsPk-h5vHe312pV- zI03(<)P85P6Y8-PSa<=gP;M^cr?xFw>nsd8I8IQI6<=%U_LDyM&0Dy!{rYtai7E$% zn*KhkIgxi`V`Kh7A)htYtojo!Y@#;P%NxZ;+)L zC^?LQPgCI5E92xDG+%dV4Wouk{;AfYZ`(gCh-{DWe3Bz@-ka*D+ql$jhoM5yo>z9& zz+&Iy@-4IfD&WdnNjUP>Q=DhE%m;qFi07}+o{!YNBJN(h%38yedvMsan2tl#{;3lw z$;2Nm45x``OqRElWp{a$ zx~s5XfTJANwz0 zf8%o?Q?p+1sIfubo)@T+Z>K4IIOO>R5}>AMbZSyrAH4hAaVhy=54Ch9)JWQ2_B;pY z=U9#LD=;100U_TZ7Y|r=3G$0xITwCOpU>+<#>9zaET+hWyD}~W%(UQdInjC0*w37| zlq>G~Yeyj0$ZwUH;Sx)25EEzMVPj^_O7a5)<_sM+wB8!f zaqh{@O7xTka1Q?Nir}e3fFdW(PU-OF@BB?PHO+}h?Q)tt?5msSVI7jlH0EM;mo;MC z%d%;1r)5Akr;Y8;Z^|$1v;LfK`h@dK5^-Jcbgr<9DCj_w+N;j_s+6&6~+lY5#a&81Rjg%zA0kc6te1aE0(~Q5$>lhCS_pyH_LoLXx#O9eXGlWB*4&!2}FW9F)iR_jx^9viT7Bz2uP86 z|4J%+PC8J$ZMbY&6R!oSEsTLq)V&M@XG$lVVlyr_6b!Z z37OR(?j(2~Ij?;rzy|!thT`Loi~jmDds6{h8XQ;kO{`tR&L_$FJcj-z`rpJdy|Mq^ zhw+aI2aAhl?(CmVAqp2unTTV+3f+8*d;BJl=DGgK+!hZ}50h2h?~dPOj63&2_9Qd> zO_GqSobZCs0Q)lb9e{J+zM=PLVOz9;Gu=FL*}D6QGBi4d^W1wi9V04)-o?c10kI$_ zH0*(xSP(g1PaeO=!46EA^OLBLLCXX*Cc18n4h%SV+_T;1G}pTiog4MS^tJQkn`l8M zUP8%hn|yor(B~OsatC6RF4V0h`D=p52e#i|T?tx(Jl)UF&y|x^7&pAdaFkcs?cp$& z#0T_P84d{!mK9vfAYyBUjT*8d4Eg8GVMvxIq?s~Lz|3;EYB^G=Ix0PXJ%<(B$ocii zYrt!WDFF-%IxPa+ZL14YWQYVpN}D-HqG z9yUFd<14I`w&s2_MfYOW-B-V01_k~t>ybC);ZY4j=SeAPX~(mI$7LXh!s;3dL)*Ig zdfsBBO>Xon5zL>EfPnV~Y==V*u%_d1Hw=0K8BjXAUs}0waBxd0ClX&Y@MeiI-=F%{ zqI>2I^)kh8ob1-#R&X6Ij6XLw*$ybtfHmbGTpoX;*;u9E5isL|G|e0g3HEtW{((W{76Wa_d&`n+pL4;wo|Po3aLq&G$!K zSNM;1CcUX3w2wmx#p)`JJRbY`jdpR$Cw8Gw|HJd#1vPue4GO>nz+^9DDAGnoqp)8r zE&FF#*B33^7pA&82AfOjw^%c;qoMJa@s*r`as_4**3gK8CSQFZsq*q27@z>7?2nbs zzx%qdF!7ie@tAr0CvU$&N!kzNOCL;}3*L!Z`)FvMCA{1Yix5F7EgI)q7Wg36j^SuT zUP8Zga1PV$ftP^_HPY~)i;~GRaV+Wtp-t+gCz)9OnX8;c>ADD#)3({Bl`uVIM)^T- z0-H+sK{l=-G%z7iy`yLq+d}R*lm}&}K?{p5pFLcq-^}BrsG8|FOduCN7D4 z^aG<=%6{9whkgs=qw!Ea&F$R-oeQIsNNrCVLRQ zfkw;q>(`-hc}Z$PB*CE{t`+w)^4V=OJLcOO!v5G1cZF;iyp#!XUY^IAFejGjGWw9@1qnfirVyIq(c zK74@Y0ib5=%7UT4152MiJ>ij+mX@ZOU8{_{)xut4*(pZ5vDjZFda>$Hdpqv9jnc^8Z<|NMGGn zz$pI7k@i^c8Byh5=!f>`1CHS4>h9e$WTXfXU{6$48GnsbW(k`6+9Fkre2~aVr3wY-~ zxG^z<-@sr(Oe|c&mPh>rpW?ijU57S=kLkqaV|$DfD{T$a0MnX*0*~pofgkIg%N9Ls zY6u>KPd3KTVl*{S`gebUYXCA5tfG%?tG3VHd0TE7dLOf1mP6t?@5~FAAS9ModYxjs zwLh4j)%keR!!rV8WRk=f3teq9obz<`nicl8*s4dQ#78?>T$^TD$^upi{}FF^Q_s3D z{Yz^AFGv0U>N#XGG=@>wQcoj)_mvyPg&i#OSyU_&V+7d+5L4|Kd14m+jvkPsQR7sQ z8hWYy_$LaenU0+1wsY^U4oxMsaPr#gKeEmvDdVIyP#Udvll=V*j)o$%Hp4L~oP&+icum=f4jNH_DH7|06|P#aJP`n6 zH~IOmEoUSRy}D3WE%q->V1k=C7dY808fEeO*m~bfhD3Cas3kHEzMVS_-tM%s!X1j38E=ATr#K0n}7^D!d?GQn`3ZNC@i=HKBD zO?~5ceT+kafal-G-pzIX_7Z+HdH>0*j&P~WK%!$( z8reomb#R!;kTXUU#Xt$4kE7sk+iuxEY3HD@BDUxaf|hA)4V#G`EHS3O=CZXok_2c6 zA- zxgwOVRfeRm@|g%s@2ejX9J#f}r!9+N6jxR?o|R9$jn#d!!B?yH6ZZ)|n>;%XT@M~7 zYOE>Mm?yhxkjQJB%^xxLbo+{(5&@F_6xDE8nN24kxU_7*oV@wyg2fd=g2=rwk+>L6 z`^876?qd(mwdUYz(3C-^^y631Xr#A$dZ5_ADaX7)u?8J?Fmbi4x|sgk={So~J%c+r zXk*wxy`B->Cibrt+eI@ReloDC3RO`xLz5DwrJPYI6ZgauS0_YStc1iJT4?B-*?Otv zWL1`80^~WZ%z3#-{8h4)7=&Y8xlRYG!|3Qr7r*?%IOagzORP_D)L^2QFQL)O_u7MUs3cpB}PN=6kL&zd0+c(vrU6d~~HP8jCbO|mxYJS^)B{?_SLCEZ@(d#h* z2-)&`Ig_%Sn)6qOZemiEoo|jQv)?I0Q(Bh66?n$mH;QnPaMRPG7hfKKy1__Gms+z)RkE%kJ zDsQ3L(KP4peafTrKZl-BjN0_pq&H8-r^5JC(eVWVcsy<{x#6W%7>AD6UT?pY(G{#k zZgTMHA@lD1LQ0N@HeJ;7V+$iWVy}VKJx5I#8FumcGFTtP1E==&t5*Q?;m%Xba&~t1 zrdriTuO-)0Mb^av*W&6`A|e%^b-EbAcpsVPm3nBK!WI_UEe02Xf{u-yy(U4@A7`O; z{u1`g8B9C7@vj&~gs;9l9dkK5f1W0zaES9J_j}XM506ItQ7-3yUcAZ@arjV7AZlIJ zp@RR`E%9Lxkm87zjv!m14eFJc7eGVdx+QWaLgM3+23~1UmBV)n?Hq$I+UU5As3|L8 zhsF{CQjBM>^5l%%?4`$ZMP|xGfpFHxu4l3!K`1i@2mo~Um~O9{@y$20=-)wy^gPh^ zejyC2YlXf7NN)lF>~`ZYLUCw%5CB}|5K>Mn6%Pj{^PxU z`9Xg&uWbZggn(e-M&s$Q>6n<@pp1nCPfJBbWikwL!K;SwGic#33#32+g^c~jzGtfx zRlsR>^O3)xSOPF=__I3}tk}qET}TZ9v^R7JnaR#=@N)>(>${%SJVsL7^)o2c3$~1x z=is9zBvwV5Bd!@rqvAo zef2|EW@O9_n|J^xNY(rY2+7%jfNq_Cj!97p-F%p7!A^NmdArd9=#NMh#?@=ayhUF% zNumNKNTd|UY1v>klW$@aenRRZXOoO+MLX#T!7by%jNJ{U4G89O2_dNhHK!7O?9jFy z@`09IJ~Sc_OaNUTvN4LBRNB@6FaT@o&{NhHlfns_^^3kT;7- zLh?J#m(p5Sdjes|bAsN%_R^rZK70s{R87_t_?wq+Pjw7YB6! zaHPhm*(iJsx}(*qmYm8RQTZ#ZSOU$^KQ~vgy}`P@j$Sje-92k~@xn$c7H@OGyOMb4 zItD@y*FE2af)VAj%h79Rxw2UfVDc6e2rZ*-_qH=AueJgnR)TXxNN#|)l!==GNeF1Y zXw+XYnuUc?S}eW!ng+}snoZjOU;%Jf75pA9U_h=xXRSCFoAjJ0?wLjKs1H~c;dhW7kVN?*{FMAH1oknCU3PaK?=M5%oA9;Sn z`qNX;`G@IN*TdX9pEbYBkt_V6gvV_J(m=W*k-M+1p}b;j=|6O5Q=eHy8}O%Oq*;f` z%oeI0s6KYiCKII(7cnXUz&kNnlkZ65;E2Fn?PM7(0`$-09xEQSur&iQrBg7JGeN(8rq}7KT@nR22rS8f zs$X*kp6z3Rbt8}cgWdWrahNilq;ZO;O~Z2^%Pv;xQYkHowR8@~fXt7U^W}HVw`|%T z9I|=0{`55#G-T}(E3X&0M(P%)wYx(Kuk;f6p5wY7U=&(UU#YDslOCK<-9o}5-*|QS zqy>#g#qhSd$SevVoCi{WO$k3TJ*0RkMqtfMP`>L9eW@=X7zT1@9%yBg7?TkQ>;nvuzKxU5cP;|I4)IN=8PmXXilztnE)_$`dK+)_#=gaf=2S22zK~8Rdm!ysX=k58+m$TeI zgDCj%hBn;W{57ky)?V%JMgf#&rruFr<0M=Qwb!r0QIEQGObyLfG`T$1Twx9+>U_2 zQ^EvBehGQ-{{L{xxZ7EXNst~m<#>lsAF%1hFafqhD_C<%>M-x!cx|}sXKa+vCG0@pYA(KN$xeF1&0sC&fls9S!zaC?WUR0pK5kzgBq9 zd&)tpeGOD7?n@sK0&{4pS$Fb zeZHNQ`gbD(p#?90J44jghv3VSr94}LKQDG(L<)p1N0tCzS|oDP2q|z|p6uLeE!@6F zih!eiue$wCCq z#=m&4`Qp@0O&6>$Ve^T!8G!zS%y?@St~#9$fc{luc#^2Zs}4|VdEwZoUd?5E5~p^t zmUL-gZFXY2#E4oqzAX80v&CK#)4~pjK|`sVKn%j>x>Us}3;^Q__x^wujKOXo25nie z@qZ`E(v?j2neYN>k&LZda20%OVn#s0*ESe6Ak+aAitte!I;X288R1s}$J&e*E zKgPDTy{o)0FG+nE#)nPjmW(iq|490aXQ`^{F=uVhcNF$F^IzL+#^PlsOg(&GB}Y0( zvM+76Y7Z?3ObhN$W6nk3C~AZuZ%@De0z%ygM?s73q`Z3%7#HMLt`BHYIUr@`!;pyH z)YO<@!%rdqIH&oGW6u?rs4Otoo}EV zJGagt;M|?}|KB~+d9~#wGLYle5hsnjLM`^&{v2e>aSoYYbXZrz%2A_N)91*ZM(L}{ zr?_yyqCu3V@yabEL6brbEToUT1%MnMJ$#necXj{f*>gP(({#gb9`#fB{*OuK5{9hD z#z;+_)w<4$;&M_7x}=VM^-{{B_VG4#F0KrnkT+E#P?gHysW=Ii-__y?;`Kr<25I-1 zvE4Ny?or6x)SRCAT9{BkXhN;2oACN_b#`Q$D7lTLb**kN|BTUq+~mi@fdn`NmWFwQ zT}vpR=Nuv@2La3bX_$W4^SSFVeGP;-rcC@%=%n{hovF0{-7s=-fA<9d$O+O~;`g7L zX?!C|$oenC?Rq%qAd}!!OsT)R`TPdfwVM5z^-)j!v*Vj_qn>WFzZP^RP24#D)6bP~ zItSlZua61Sy^v{mR`?apTnC>=s{EzTYyE$iX0i;m+Qrnkq%8)mc85! z9}_3ezwtPd1#*UPcR*vi8zw4}nDfIslguwEN1htus(fB_?xduc(%oTWCF3P`$^Q!nwBP!Hc@H_za-`SSSjURH_Y z|4(>vhBl|2)p3~KZ2}P#P=A061aKlGsrCSJmy~P*V9Uje7g;?o9Mbc(wlp#viIDPY z7N!Ae`rlKK;lxiE8z@nEGQsnJ__BQv@3CjBKn&8(SIW$ep&K_M^R-qQ=}U1Sj_D)hobd!i8OZdI@0_}}60qk$GKd%-f3r_Fm|3&D%Zw8i&Kv6KrKG09aF>&la|^_v^84pE z6V^}Q;_A#%sz;fC%N}3Mw2tjDrT)e@bbDjq1@HnC94dxSR>CxVp76(K1iht381mBMSPCBhG0<*JfsBwm`9V z%~w|N&<>D#{A=c=3RNuFKufkLx#*3Hr?|dL0I3=ul3%n;mlvNz;mfB;et`$BqU=hj zU!qDgzVxha&j2(oehM0&HI&x+py{&w*GVQAn!CXu3s!REsWf?p?9ON80KmfmczR8; zp>c6wa0{>-LdoVQD5!$GT84_rm@}byPeX6^Px@+=<>c-xoF9L4znR#j(`as*U>Mg2 zLr~aS+*Gyg)Se^?^*2n3{gW;cv+2SAPRBnRDzygL6vplA8Qm_OGN2(=_zC-3PhDBS zzJq?XYCH0CZ~tpTP$bz-9m8o}4#JELTVNx|*6%2E7)8URn>>pOXcf0XqgpoY_c_p^ zq2l7|%|nm^bFo0Z=j}M{!tm41E)0B*z6rH#g2Gu$V>(8e~_Q+DPchxlf@Z;^HJpNeCM@rp5}?!~U^Dg5+B(lA9uYCM z);pzz3?1-yzd+pnuoD%#NZ^CB7%fX&w|^?`@oH@Dp}_5zdHnbEHd&FCfDB~2`fEIo zy}Z0IE)sxq8d!3OZE*m{0gD?N&_EFqS!5yT>0x4G0uQ@4OFb$ffwkENU?5PCka8Wl zGJOTeW;64qO1a$}j5NCy04127n=2QouNuir&PCaUI8GnEcJa_1p zxkGbqe6RSSf~#~lum=7$&S>hZGbhn8_$SddU1Y5sdj&vwar$I%X7f>(DDEMSEocb_ zj~bP~6-CxT=gth&-f&;Qr`TNRC3Tzlw(DY@rSyRLr*Us~Ty-=!8|o#=4^sQqK=!WP zT`@H0$A!jsD+`}Ht?63?QsP%URxEJq14^IPtVf7t5OGvE-}64w z;fz&y{1~V-_(VkM@w4E!lnvj)`tw1MWpo_mQWUx9*(^tTl6q1(yq$ zly3d_+=Zz!{Z%IImfCa&TXJ9Gi&))bYOHdlbLYM7<~oZ%GtC|Y*Ajx`M=C5ZFz20d zzwR9n(gzXll|C&{4u(1VynsA^SO1xBWq;B&`G7E>u#AT2iOc}WW&mUZ;S-bFt9w&{ zsB}*D9}uKi;10xp>-K^BidUqRI4&cCZz%mf!(e5Sz2bLxcw{tGz$yZdZG9GWBF6!WAyslP zuNH@oc^42z*2G&(7!?!g7{5{Qhjv%wvBZQ%ietF`DwPi}$k$s=NT zog(WLNVy0Hcf3g3=mr^z=#}^^>MNQMIj_ymkar2!CuOlW^PL%v>eJIQ)972v0-I}o zgI$bmM|VCd^p>iz?9F5Ww!{7xJV2PK_&>6hNzD0?D${!;PIK!PsNwdbHUX+tfsM#K z#xg2O5%2Ema%I{#<>!a?usl-?9t@A-iooHvrrGyxA?;?YS?X|C@e3ls({hImNFZ^{ zxGhrUviUej95#C4<3Cw87I}Hen%oV@2fdz!kS1jNFsm1LrOU;UHLE+bdB&LtFJ5D3 z{`z?+mn#Z~+irTYKyXD)OEPJ9aOq(2jCDVN zfZ1)nI=jr}SBw*c!I#EeFx}-ycf61VCHtj@3R|x*D|k@7edjSz_4)+EZKe>U(%Jh} zG1${s3I>On7eYe^1-B|jw9=m3p?qu2Y1q1f|2fO>nUG1za}gJl$9po5F zjX|;|Vo@kdyJp0G6*8(PN7Lc0XZ!p6VJi)ne7b@EQgK>uP7|{=j@%0Fu+ehWVO4pR z@*PU6qC&lm@+YF4+dt9dX3uKr$XS4vr_dXVW_SK{7zu@4PTBr{##7d)RB2mR>HRj?PZtlbKg#z>|`l zr;9)E;KDHJ`1uk}Qoiw{3l0Vg13&+_J-Lr^tbL_zO2qo)y=d!L<=xjd&m7_|-AjMJno2C)@l$t(}7zW&o% zWi2pf(%-*C$X{+z81PW$)x(U<{Dn|De@J$XA+AtiNzP1yAdp#SYGAf~w}7p=CLKL} zW2)q(vPEE@*uMqBoxEa0K%I^;0L6gx)vGJUm{Jlll{-(x|%Oa^YyhA2gMVe_Ou(!vG{I11N z=^u9WB9kZWe$~fEuD!w%$k(oJZ;oNfV1`qw0|DiZL-+aZlVDrn`BcN{f#__-A2iua zwJqEJqS0!NT`x~;;*m1zu#)PL&F=n$@USe}&Lqr^Bp)9R#+tqRA|i~t>5Y0eym8)C zXE89I*aayXPY8#m0AkebV6DOPXgwiEqijNL2%wTdxpcX(Z0&)_EKY!_z))Iel|zhOl5!2wmCdyBFSS}rSo`(?JY;|xsOoGuj&AIS!@B^i)^KtjV zwAWNXe0A5bOZRzK}2^ZK!D-6&GV=Ln9tz!>2YG9 zy{*?6N)tfHiged|A{3)5_y1HbUUgLY&fq&TxcDSMaaX$ne+K>M<6qtR>`gjv%f@qJ zS~!U(2sc5o4&etkH6I^s*MM&dB;n}DyUDzx(Ew^oW1_>lLldsU<*2T=y{B?jiB?eR z+-Aw)8(8qbl&c6L6DS#5l9`XVlDxMuKU~a^puX((9RK)8%)Pb1Q+lq8BU?!_iy2ZR zM{=09Jn@);ib}EF59&b;O!Z>3kPPWvCQZGm+2G;a9{T1cNwta>^86MVO|y}F+GBB5 z72UH3#ZueP$QjIrR|IcLlmp`t?4bg-N#y6}Lq6Xc&3=oGtz)wtr2n>I`(RJW{kpu$ zh+FHup9sDS-08fL`K0Vwa{{Z?)@)ppl*HXpQg*&RGEJ$v`9&a$^VrtMxzaH*x{f`^ zoHu@$es#d&HmoWU1oAXAC^~bXSjhtj)onyC6eV{h=gySDYb(@KGA+l#;W_?%0wMFp zR)%*x_R+)3Bcrh6;<#_cMfvbT?<{)PxfBOd?i53rj7)QWS1ralU|&Zhs7fp>z=pp; z`&AGHREM~ ze{K?f&YU<;if@q*sM^@-kw;^1m0rJh4c+$SDrC5*E$>0=+%^dg)V=ffN5LC7hoNkD z>eW(U5qqWQ!xQ=y8x|Ii1z5A}T={O~Jgr+(@=?p2QccM(zz0UAtp%7P!33A0O&@#; zeR17GLf#237|q;T>v&?E&BMsRx4e*caj|$Mh_=H1u&QYJwUIhz$Hk*dS9MK5)y85{ z4s#QcWFP=BZ+d&rEN+davE3p=jgyGOpo&NO`&<92p!v zf9qD(eto6YWCQ*aI}TE)HrXPfjD!3PGH+l=gJYsUu<>mlh>3{_3ck><`Nhh11!xGi zf{O5g z*G{&6;O2q*OESGv7z&)=pdj^HAWq-4_q15YbWyl03sR9h2UfDznTzVRP*ZJz+8jM+ zuUR1)s!s@OU5v%Tb_P+dw&AtmF;O3)E_EmLk=RUPt3UTZ1v_e1VrhJ2$$TEV9@Q~R z%J1evl}W9ua?q%CFvhhA*qBC_f*WHgQ)}a0OCO;O*_rZY&HTq*0rszX6Js&ttUp5; z4Yf_T)Ae&D$C_D_QpBOM$nu23VrY2+W`W50T$ImyfnWq^7tm_pBGZach2y;hFEVx* z@m2|AO)r$XfN&AIdr23w^oZfSztSNR676~+TpX(T)1JI(HHM<3N&jHMbrQ-9|3rj6l%opZ9UmH*}f?8f;N z@cf>rDp-K0(Q$y}0tVie;35JpMJ%^{R$g9bzNWf5%xaGUs$vM(Tvq6Gth;6+|FA1u>g38vs^te5dmLLQC?oY zJp!KI0TOtPS|~G>R0#l`&sMJ3TM-uxIw{x#!|@41et8VVi(Aiffn66j)z0Yw7waS9 z;M7htd$Rs0q#ZJH&BsKpGQ?$TloG|>2*eoy@qZ=av#XybHUjsv>@(GQa-Kfctyavp zx+6(NNeQ|LGqcID#3$q9;zqhF57yVGZQu(*mJHUCGD0N4go4dD*OlH4=5R1_419Dj zUSXv#=K4DyzoV$g^@#nWv-zRw>;}0>_5j&%4qKKkErcrorNyae_IA1}r9?$jbDhf6 z@ABob&ylT*1T`+2$bGR=~>~%-2g6CssY6i>cbLwj&aX0S2Z|I{D{Rw9c_Gm7oBVtnUG{T@u zK#Q?1z1(-dP~D;aPU&G);ZfdvM#H!LJ*_XesV;(w!_)X(n)qfrM#l`BgDa4L&v}7c zU=xfZ4v6#a%p`)W{odYcD~=#C@cty43tXS27bDh%$h@(mq^4mWm~U^n8cw$S(%Dy6 zC*Tk_%WhsNL}X{rJs!OD={Rk(aPYzgqVg5rZpj7U+e(Y;syJ*m;}26<1_}}WoiDFD zv#0lwJB+-52XkAgr=eHO06tdopxF|*Qn+po!nE)gm|08oCCOH102JdIj6J|L2fvMo zgdvg(85s<0Yz1nCX5i+q>4Al9R=)nLWSCIXWu#w$X25z9G_{uwURaJ^2z5DYG!~|2 zrUF`8+)HJ-&_o6ZZmBnS8uGhv%31iMS$H)@Mi?+pt^W3Hjjr`(xM}h7vp3be{RuDf z^{hI=A5}&%55xQld@4-j55v=PI4qAqau6jIC=&x0#s=t+P@R5R^9(?(;MB3Oa%4su zbXb@)%Ran+{~LT9_MuemE^}h+65<$H9)&VxZy5$A=SGaNP}=tpegyx>RRRk|D^T`! zt68LkR3J=c#UV|>wGun!jV*oU;Fqa5C%uNXua>`MoVv#Gz%%s+BEQn~!HR$9k3)e% zv6Qs5GytLSD^pR)we)^VMTv2#lb+QxD_M2Ca!h+W&@Dko$fdfYp}}m=UQ$A$371FE3{fp82X70%y#jJG#T3!^o_>Sq zljaZ&I9#XEbEls?q+cw@h4oY+%onK;wDKUsI}dZx%uJDdE>4Y}bQ<`qBih#e&-Bu=}!N!wiQ}VSj5ZzdQIa!)%-^@1`DPTrfQHGY{x$E>YcV zHz5&un3F>N>O5R~0$-tfU)AJ=?a>z&t#Hp8!(2MJA0;YlwOi}ftyUWp_x@Sw!t8pw zmAG$cC_%gb)KI@x?48YJtZ+ZVg=Qy_@}IYztZ{K(5ac5k#Qo_8e*QF{5Y4F=UTW zub#4|f5Vdc25E!3j*>mW4cG~OlpjG#+}pUdtS_3)bq))|9ohVsH6~{u>VY0rmQd&S zH5Qp?l|6>Kf**1w8xvI`8pJ%Ss^GMpWmcoxX1Jmp&uiW29Uhgli=RXsU$1eUFJ4D< zS?^i_bp>46fCgyP0)-H^Y z^607R7+z;}T!_7FgL@tmP%lIB3sp7JT7m_y9Nk8tt^{?n#ZOKhis6jxb{5)Q9Yw&v zc(dkSB9P#;EtFfaIhEWcf~YBB>o{qqGP;q@X( z*na4L&k4NMbZqHQufKRTiueGR5P;39T>bMLO!9}1w7$^6vn4~T6=n^9?!!GE^r>+# zWSRti!QVXIDf3EIUaW$6a z`y0@KkEj-fRJg8l`~ghr$a^+VK~1M(CKaDUbX@1qW^0+S!aInpRmOr;dxVU5SpQ{!6-c_BR1nk|F*Wc{9P8cz0;raTMd3^SbgiuQY? zZ6&tG-GYjWzt$-ry4a90sN{S~pm$mCQp)lKG^j6&0C)~xjU%N8ok=~ODkFSs0mpf% zNGp@DE2(%_@S*<2{HxY?YoxtXysvZHX%60ktVtnnxtoHSXm-xenJ@V?zG}8)OrZXp{Dx?^M)>xBL!lAh zKgH7J8JHC>2g%u0T6W%IDK@UAv0*r~{vM7k9GOxA#4sDy2Iv8h&Xfk2mo5~*ymC4} z(BWsH$w7bncJ=xSjOcb{NkPPlut)UgJuawF9pNGbrF5j))Ua9sKzOTa-u>M<8S7@V zM2!3Q6^kMhe<{q2=RRb8kg+05RI|BAafO5&F8j7_?*vz>0G>&`Kh>_P+4{G4EPEHN zfiGD?5O!AsWZ@?Ey{TqF4#9$KdU~1$WCBfkEI?E)kat5FwEiH~a)oYmw+Ljh&YPbp z2td&-loP>AV-W*%l)4CUlvHn48Biv)d8kFZIIBcqLkDe;eJtM{tU=ELl#-H=@->b(7j0AOU&h^Gb#J}}0z=yW+S(eIFtH_9=)s>G zC=OZtqX0R`wBpq@H*0{7E#w1`t0wW8f}^&6u1YBv1SvgO(Y+V2r;#`c)UVS7$s&Q4 zxku5UHTy&om*R;|CPp=O)h`p9g_|Xlg@CGw8Kv8Ewn>k_d-ueLXHPjf>(5QRWEEFg z^zM7!)*;Dr(=Hl))go5KB`ayB=S8#RSFaY^%*u9Kf*xZQKcK3Rq9!LLft6kH0KGCp z7#Kw%I8xu`GboS1)w8%M&VktX&cXIVS@4z`1X>~+O$W>jq&4E7zQ`Tg%TKYtnu1Ln z{9JK(msE;o*sSQ0^7yIzt;a-;;a9poJ>?L%R5QFc#U2`a@zNzkHy7ffWDF0;h9)+Y z)azaYgbCzpud^C`(f~kviw|-NU0B+swo>q z8_19ksz-Zukdd(84*qz*F(k14JXA%1LIr<6hR-Y%;@yvlE=~d0aex#G%eZhM-FsV` ze*5)cJtD1vGCg`9$-PmFybsU|4^giK5&G4fBmNEci%`teP7ESdGW=G-+EqP_4VSgG zH87DtsqV&UfI5C9orAL(>y+V9^C*q*9<|?urF}RjGJ5K<$rdkq6jGFqQVzJ=bZoB? za9EBZJx!2?Oavq~ty@p!?xt?!LSINKBIO|D3QI-4j{P0>?AwO9#k)s-I^C>SK%5m$ z60(C)w&?-iu%MTYoeam^D7g zDUdg#a0cc7ftULwM-*fQV5p@)GWdoca1TiQhUF1@8cmGD1I`T$3w(jY<^)j^ zY5x>dA@G&%A3c~4GR=sxm00C{CFDoU3&amizcXjfz{XG8yEr~J2BHIVT!>g3EAW0% zvB_>8J@5=wab-I%dq}0q>40Bp?_f{x4wgoE{4#+BtjM0Spj-A3Rb0SCXjsU7V^X(_ zrUfylX`sAGERzry2T&>&6as-E0LE*KVb}9KuLJr%Hv+7VYl?8N2mwoV z_96x>RZyiFiKtbPgR`uP2+YBv4{r}pJg>LboRzL?Xz{~rHT{mBnXIs|bE+GG_5Ez2 zzklH(e*w>1E0a6eslpq7YzwlMe36!(43qbfd+TJ`c>%o zdcnJ%>wSiLHEL_W%A^a&qt*05upu#yOzkt2;a3Kn6fGyAm#D2b3EzG`XSz#IORKUn z3Sve~Qc*$INF{EyeIU)@aa%39zwKzSvKlb0TN%ro0?_!7kl+)Xg8R<*J4{=?X@noR z7*8y5v$?2tR!sA<>}k1-eSZUJU`YV*VjOepL6jCzJ>}wXKX5TsJcSb2AH6_u?|111 zZ3#_RL6f68!a;%}*%YPyn7TbNmjMbOeoF4iZcPpA4T*xe$rg0L6Zhv46;y)Us};S) z`}5Dce}8Qxp-{~ZNxr=o(X3LmI(9NLw{3mJaB*xYi=nfSl0SZw91#{)$Ay+rIWR-g zExiF*D_BHTi;N~DoI03g ztiIGX1Gi7*u=tg!{&OsZs2ik(4Nmx0*l{EDQ$yHl<^O9EnAZZQifSD6g~`r z!)1#SZZSDT7q1oEqiSw?D1DGtWv6ehU*eQxyEUTr&1Xg-kmBd^5FS3hEm@DrqzGTq z^}%gN$8I;}?=|hhr%)rwoz7nHp@}6h-j|zjA3`sMU9xlJ5zJ3(yH*Pq>oQ@EoZCVd zt3j(SJ^lOlH}C87>gIo>-)88P`?KRFle%=B`1Pc1q`$zI7hy9PZSlKk(gMXT-52Y? znKv&5m{S%FuMo_D{_xxgKp0)6-=O?b#|2x}d^s4ZS@&;Fy+$tpwH__nLLdT)QQ!=M zkq#0EJ`v!i+!jQgGnwVLTk5lX;P{+bv_tFaH8L^;WT@MrkYX69R4QktDc0)#A-SH0 zyAy;n%^uNl)`b5K{fo~j->K2!6CQJ6u1V|G0N z{0$3nt^|u-l1!U=gIq%b%O>{_27gKuqNsnEW8az@7-ph`e(Rd$p4?&+$QC!w*~?@y z7^iu)J$3hsmlUMhgJg{wE){LAyW$C)*|XOLr-Zq}CSq9zbRLU}T9QH93Yu>-`uzJK z{|D8tE!if3zHIc^sJH`U1d*nbodW?T&mTv;a}5lqXlr40sv9}N@9%~xRTxEo&@YL}YHng# zQw04Gu~+uxo|gG$2_X;6k|jRUyI{`@B;FYi7ma9MqSStYBfg9!;?pep zoPPj8M>eIQ?mi(6@#1j0W<>A++Iajk>>bzom#dLY&v6Q3LqY}QlRAsG@$2cX4* z6a;FE(WhfpzWM2GxK=*woMN)>vCTM%f@vk_B-j&Tc``#jxQy+*8MR|rZ@1piGrePv zAx#EQujO~tJV}9>H2UpKr>pV}u*0{&FKG+N?$2;bh$tE|wP|PUF(<)C5+|TQ6=v#)9M$hYK@ag?b*z_g?KJ=`8 zs(>oqRfBd9FFat&E-Ix7XPhA;I>)&i*S4 z@>rMH?g7j7$5yCQiHoG#^ya6bt#Tj?i571tsmJ>dRDM<_;igE$;iIEth~5~>NqDf? z_Rfo-`3G;TY%P8w@Tpe;ucbU9=Bv`%fv^o1W25rFl7R*>3B#UmAuPGycO%^X>pCX9 zWNY(8l_3lkQKQ&ulF5Br9J(y@T#R&dMvySUFVL?gJbgMPvJX;j70v5jim<Yft9fIkGJdHP;)WCfs0L zzblc=FG{Ld)#CdPe{tVk<<*w^rP2=_cgnpa|m1@BC={^ z1mBxR#u67>i12vm;&I|W3#=cAw;8IlY~!?KLK1|$PGkN0LB3x{n0@VkWENePSAh*$ zGB*NZQiy*tD33m6b6)a;nGCqKG&WOH(*C~%fs?GRNFfkM*MM~F_PlE*qz*%nDrSq< zXPP`-CCwo4Dpty^`w(e{M=UrB&AAm7r)GB3)v!+(l~{*Z-Zj{uPw$l6!R6_()m9C> zrdeI8 zOJZ8EUKt_DDQizTq-Kx}in`kOPs)@@F?bF|qW9Oa57izDupFwYQ z{VQ*A6`?tb6CowTFG1$p+q+vhruN5=U+dwUq6k)4FsoHtaq;A+e>wL-3|EGDB8L6Y zzHVi!d9G!mbocIeuUCu`qW3%Y^A2bW3=XFEQXcFA7V+`qU@y0RjOe+HjjppM1{?aH z)0I?x2rH;u9!sV_${afY#;(1i>3LPjy&C*0VO;xiQ(u&j_RK-m&HhfNX4spavcrQA zU2JYPe%mW#F9|}1i1=f=qyfWYBiNNZ_h>iHFq;zVOm6isvsRc z-U~>B#mK*a;)kbTXSG@-Jk2%Vad>{fZ6j~xrx9~`EHf<^ZP90ige;DU9F1^I3o7ud zC{i!8pRVEOoCv~bG*2-MI9k4JR!PZtgk!gOfmi1IUOK1G(s=SsFwJNLjwOP3eql)4 zymJ(XJ)vNBznA*zRo%;uJNLEmQjCq2mWID9zH^!!^DZ-*#{T!zd_Oe4z5OX`=8C?0 zxzmv&!LKTTP3$&kiz|jgJG)y?l<(Q*cCPgXq%@a8LKV3wz8v^m#M@j_KsSjlcIR8J z@1F1c4i~4!a4$^3HsuEe2O~uI0T3kviXm8+Izqz)sQ1qMG$04D7U;gG15GVy={7iY z%%E-vrE=IVm9C1N>l?W3iWOr(|8LF~pnr6`d*Z2yeHCkKvB0$OyCm*%L>V@z<|ZG& z^>uSt&yJ8HYIMa7&9665s@y9YKVEKYsaI;2yHp*W@UiSop5xk~E9JXUcCQIrWOKX| zhQ5pu{QPd9L>~#t{}{FCk&lw9#G5p@r0%-m$10_=p^Dbz8*z}@z*A#SQ4+Sn@G->8 z0deW>+4T}AyFT+NMWF;p>mJHf`jz7NC3#Kk3%ME z4Oc0+$RmwLu%a;S&KfLpTy5B=%VM(J_xgoRP&!rO-@+Y;Tj0ltX%s2~^O~znz?r z{>2MNFKklS^{9gY_`lfYlF|jM2%*zI)2~zw>l%{x9 zKGfa0S}I9H4A+kHPNO9GPU-AHHmC8lfuJ!feoO=I-hEStaA5_f#lt@lT3#*L{`>dO zH0znss>bsmX+g?mV^~bF(?5Lh3&;!*G#YbwAff6?Z|uEBauW3IHDCMrIRisKpFz$* zg$kEI-7z;Iuw(_RTxW>+&5O&?iFW_YYLh-IJh+~Jp5O|z?rSBd2YBo3?l6R!AL{6T z`Cj`9?mdQed`%=7^BB%;Bwu1h0F?$fN&+;11ncjt45)9~EEjF1h`4pkWwQU`j_xkd zNsA$*{S)rL$?8!Z*IBQf-d+P1vBd&yXlN)9t%`_&YWedE2ot6K#)6w`Xrrcm9_exj zjATsgQkx%+P3IW%+os15TGXu+F?GlMTQ*D;>o9Bu;?dA?%~NIoZG%OiKy|{;QVD|{ zPz$th^P>q9XbHcC<5c5&8TO4?dqNF#xnqI#f9;y8qT&XS_w0du0@xnW$)~`A1^zcQ z*c(DYf@Htg3Gk%prU;+v;e+e`Okn|6*e<(X5@y@u zM1Mqi#4INC*QlrY84B4_)^4iXuIR?ei<^)o(S|p3A4yk!$)L732|p^xOwS)h?nzdb z@5Y}_qx|b~?j0`p*9K@xE53YqLNkVU{s6b6g2VL-WpUwJI;e!?gl-}-yacrPAj$}d&w!~RbP>QavaFG|Iy9Am zfDf6qZ;VL zwESSQH{0?dcz?UgKvA#4;}3??L3ZEw?EJuOr-U0b@6V-~uJ1c*T=;VhP4C@@is^-l zLNxX$xaEqvIqnYLZyOq*i@WYZ*|Z08{I5q1zbubsg=zY*f}sV5#y8u%q#mrTP5fyXlSTgSz7~k zzYd&^ST0*J*FKP@1*u2*)w7^zpIjD0ULb~)uQ@4Z7T1vs&@B+Td7#vl-VAUF&(=O5 z0YdEU;3YAW^s;&DC%A&=^;^|dLbp#Gl_PIzhgScTBciiKqE~U0V)vi<%dr-4XPSPK z8#GhWggYV-y{^d2QIRuj1xlQ4lTCyXLZx}|_;M#JwE8K_Yb8hA~C zB>_k9(#cV1=Ko4~;2K?0GH>(MsOx1uQ)#<_If&#F-eheWKQiB$ml$ z_#nto%4A3QUGaP2n#6+62OI)t+C!k*qXR>TS>u4jw!)Ycpzb_nd)q9?_9`%m;Bj1m zWEn?rtMYKS5_(sKhV2PcLf~yg5$XuOFq4E3w0_+ z!cDpd~)0b0ReEml92_}8k{Q)ZvAlM1YZVz`~zdk+b0KK8h8aMe4`lPnu z`l07aj%lC+HUEZ4OsEuo?e~+L8$9W0+a3U|?lT#@-??8Z^5iYSe1hO;ieBI1UlUVP zh!!rOIWKPjVRZx`jcOl4G%Ye+t*qPw2Mw_f(XA&EJP$50;2IMZ8k%%eF*8I$TMRbB z)6@=rJtQExwIVnRzk`rF;`p1V3-sB~Os&nfPjCbM0za})DTFliN|cYfy!Zpf(lIDV zJ)UVZ8Cbn@dA=z@s{Z9Y$9@u#-1|Us$9h3Az|T=5P*9$A8|Vtao`55?1M3ahrDa zr&72CPVq-UO9$;Lw$;+tcgx`vHaWyt$++$uM44+oc;msB~I4idGooW*N}m8uK%D@5qB9+DQrQQ~bM= z07sz53<~;9%hjOH{V-a=kd9=`NWfyefW^27czY347o9KW=U-l(ZCtS1@GB7t8MaIPrituX4U9+3PgbXen2mAkl^$9vuD3-~t zYu^E(P63YAzbAI0ajv*v3u>ZLd_)ilrQcWRqxCY&ZH&Gisf<4Nw9`*LP*Y|TrY%a z-`x3Z=s-xX@)q)XjK)_$IW^A0Ak5e?XV-9O6s5DDj*aq&1O%e$$>RjkO9PR<2z`y} zr~oDBb`nHJk{ld2zKp!X@ceWHD*c~>u4v8J>3i+J5Bjz65CJ^+ zPO*~JQV(%gMI1fFh#2=SW{9apIN&rA&nmJWy(569i^Bvx_vVzC) zqLR}QNk+BYNE$QSW06O%cHYc1x@W?+-p5_M^6+3+0~f|N_F$$qi~lL4EC>m0@7DT+ zvug*Ol_OAIBAP4TN$CTd>Bl+kDi5sVeuOVHhZTSY1?L?MvVjx{HN>8eQ;tV8Tv`j9 z$MqzXfNv!#=(7xFK)6HAHa3q578lpbc*(H8B@lNd+kWMq6gKI^Py zCXmYYQ#fOSUsNBgM!v`Hr|euddexq5@TB`I^dk_xsf2`Eu5)*~Q_~xzNHP=|UzdMu zI-C2wdp_-1ZC(3jt-ITk+|At@HzHj#`P}s9>EOEs(_UHQV44QNpI+8dNcAWO4C4XC zb7y1WIt9fc_)jajUFd$n}kthT7~B;=dnLdfL+aXaM39>A28HB=l~I!HQuh?t_f zEAuY>WZNPb;iWCJgF4P!IZoqBZW_b}b%UbepG~U9=12e=ko@68QGq zY#iv&vF6XFDw3YY@)4Ul1-6Z}Q)7VjcVk`y1w0Q_S6 z`0;C}_6T_q5|Rh*>)=Q-$J^AxzL?RwW@Uz0< zpZw8{2WkRLOZ395&MW-uXJ5Vx4z`BgIgqtMn5BE}>_uvcD{LkoK0`u1l8b246Z!#V zq)Me7A+%ycp>ec~Go;W}Ov(O_@(Y;M?|V(M8WPLF_mZ8bmVJTG-L54Dp^=scIoA%2 zJT-i%3Vd@&Zp|H3ReJpo!=P1}+CUK*7Z(RoP{5;35L@rM;OPEqAnIpggR$SGkDWF# zDl2nmZUDdrg!hju&t-vV%?`uvj;nN)FQ2%fjUV+}c-%M*t9SO;dcx^1CMI*h&7oFE z-LnR@8!qEt42%#Us**#I`{q^Gyk%fGGCVvo+?iPeRJ$vYPG+Ds;Bk%XpEppZ=DGm) z-}OeO-Y` zI~XNUyL9yhHfmW5BjUsOYDVQ`+^ud~gv5+mHU=UpB@&4v6gG>vuACgv*ZYGSl@3dS zjW<%MAZ$nA`S}kO{TbEkn#p&T?U7kkJH~b7%73Pge)upl1pO{8MUnn<(4+!>$S^qj zAvHS;9{Eb)ojJ2z4aqbzC;+XbjsALeEYx1K(@aq)6bU{YY03wZ&>{e8j=} zOil*W^te6~w%Vq($>L&YU#Poue!7#I@ZBxD{eJ|0llE-7nUtQG;@zK=Dt48@13aJ1 zed=gz8O~HltY)7uf;nrDrX4;AuiT^J=H7*U0GBKyE$ur!P6mbyAkh5v*I%&EM1ipT zmi?Hyp}2J)wGBkXVvnv22#Dt-$xu1KMoJS3^WHW$=doLRnL|WMw7fF^^y^KmP#0oM z>i;-nXSl5D^h)oROJnL}6u)I=E}8JiWu#A6%Pe(1=cp38R3i+7r{MI9bdL|apvo5M z1Xp5ew^;1AN8=ktaKK^X>)d~{D53#7M!vPLYnMHP`;%tG&d)eN9-xb7_s>LHZAO7` zje4o|W2Bsuyrb#+2hQxS9SjH`)rGVlm{MDJ*B9fud7xpY^V=j&K^Qs%uph5`VH_t= zZ$(@K(>(=IX)|^9SMjFY<2A4T1%dq8b>w51&t~!M)?7OxMVnrX!TfkyyCmF|*#`c&G_ zd+;a-*ao+2?D}W?|8V?e{54Bygb>;@-9NKXHMEno7Ay+V60kYq+Z6={$eJ+;vH?{fSKtJ3~LV`aG{cK+A z%_PyBdAH3X$H&72@1H<39)tHcNWDK7-SvIA&*N+AeF02A(Bj<3yOa?A8!|MTLjFH4 z;gd7a!_L`it5Bc`yu$>;Flcupbq6nmUIC+z-AN>3WSk9RMfvN|{sz7#y9sBv=7HbC5-^#fuTlf%j|HwR_m~?1gcn>>pJOqqU4_~VD_*7B9qnhO}Mw7BnSx_ zv{L=&|8WHt9Fvrh8fqAIZlpjPgaBPz9@zs!;YW`six`Z_X@cD)FWS_UOZ&5aHDAjX#S6 zr}rL@?WvR|$YD_0;I+28a(=`b0%@ z<2>?84~{xM@O#VQB94-zg^%|#@vlTdCf)r6nu&Y9-M?-? zwb|2j3nEx#M~*@w4h4_nE?K4sPs9Lyw*Sziz(aq}hX<@P?`yg2B#k4NX2(8KR@*dUrtc&|+jFLbH#tGy9@Q{SMgT)<+BU~S5~#f^a1&RKT}I__Lz9`E zn3$MjH(%sYd7}W?m&c!b>-Xo6Sh-#*V=yB`=Ub-q)(GgHK<=fpc3`;-2meZpkgN}~ z$sh#UAzf>J_+d~8NDBph*UzT-t3&n@9VNE(#XS}vM2hrA!7#v<+Vy)J=_E*f6#f~-QBnGKM+#WDBe7@CimlznvZX}lJ^EF8YU@(uYT6Lh7Rm8HjqFHFEdma_ zM|awJx^%q!QSbk;7NTx)^U zfKXJ5vyf2IY)3fBo_dZ${l--$G%a0%>+7eSpvm$pAK0aQ+y{fzbA09UTe(A*1r59l zVhQvl3%K2f+_#G_7B4lN2yE!Y`SW%&1@FTto9V=V5S24O@&<~UN}x54m^YqvRAkAt{x@>alfU^mAgUVfQPRuVSRF8xzXE@i;*tZ5T*I^0G1iZtGlib1-b|SjuUtY?{3krHxwD{ z+Adx~rV?9z56qwGM>@3weL4=MNBq3~cZD-n?d~Dr35JV9ThS;v9WwD1ilc}ogE`_~ zx@*7ZapNp(S0hA?py$)3Uv;Uyg8m_tfACuQb#*72KIW?OK3RH!r6GrF*Zqf@B&U@{ zn^UUxaIl@lP8EH`P0}Ma<&G#7DF6AFk&&)8J5b-)|MfW-QOKPd=uaWhV5E@em{jqE zR{(a12R}g3lCc$KDJk+QqK{u+|_S z#n5Q2rDZ=ge;H}eO-#-{%v8(`P!PPmy0I`2219=4tP#Y6>>OOQk08X{E?u2AX9~>a zc2@-PAe(YljF8}stMc~8i-c5Q*U{YNO~~2xh(!*+xdfzbd-eR`i@n8jUMoL!gY+e? z6aCHG?5HIn-BAVJW~zI)@ZY>mWDBs_D^pfo8ceM3C#qcTW<1{3wj5Om9i0%#X;37k znBu4FtKU&?#mJ7B=;s#Z%K7&e#?hVh<1q`}#c~-)K~!soY-;RT`NV>a41I(yO7igG`1}qSk*<2q`&Vgn2xJPSA^1ir<*iPz${wF>;)agoN-^hLOu4gInx&`b) zT1$~MM3M(@Y#CdV_dx@)PJ2P!6>&h97{LWx10wa?$6=GjXf(I=hHnnh)vGHjYw?Qd zDz#~G?;UsT%o;6PLkmAj9LAP&6PhGQQSkHK7nS>1(0084^`%Dw(i57> zoAkcvBQH;kolq5;cqjB5g(E2ayGKu9uUNj#iuRVziCb2u^KSVNH!3*&EajZq6d9;z zF@1=(`PsC)-rW>jza`Hl`myzXYp(uC-D?j4e7TpeGB#dP+UFGUrPH zy?1QN&mmlhhxWp5oAHZ1HuOR{P5hKmcjf;JrIoaJ0g>vU*`M}w9d_Bx%>hZ>)mXC2 z7cOKx61r!c%EO=v7~K`f%rH3qwnlm)G}BZWQc(G zvMh0_b%qBh{R`l#H+Xb1K^ULGh1f$Tt2Jxas~>(R7{{gIV5y~S_rT0nw=dDNWG_2Z zal6V|YD%|dAYX_q;yej|!8k>J1MWxe;L<6pb^<-6Oa8ntZ_NJa`3EAz?iRkwb^05K zPBmXReKazL?Ph4SNXGwF+cu1pWRqE(k+ z7%}ridEABKqwQwm40=c}2Yj<($4$5Fn#;(f620;FkKwa@SC?WLs}npqtK}YJ$Ex(^ z5$>tVzqE^F#?&OE>GJlR*2EIHh%WL_Q#)iRZVP;6g-{co(-TEjvyUu~hp5#Z0%-N3 z1OhWQR*q%Yho^tu{w{`?(CDhTjn+)$S*wUqvanc;mbFs{%T#BK+(eV^=^K<-XO-1! zE8n-!eIyX~>W<(;Mdz=C;mIlsIAWCFE7jDuNI`S?u`?*5qDGP!?4~8Fso^`4S!wmIwu1&^BQntteI)7r?MC^bzVhV z*<^<)3Vdw?5d*B@es;8_35N3**3&9)idBcifqwuBrJ1&;j5U;lH9XDigGRjnJnr_w zZdt1ZH<&okTB{hJ3(4$vV_?kxwQn*z+v`Vc9;9b5k;Pq#Us@_M*!s347-uxy+Td3b zdHo&6tli!fF>z|w2zlLn+V?Sxs=WQ_?(mmR>10nIh8+$!diU$alb=%8zqG&;nk!3I zd~}owj-u+rVwOVJXFye)=Ssa3; z(pX7=T4wR9*_e<66*69$)8E|rdNv!x-Ti%yROfOpUk+`F-W*N<`Pz3qJu|a%xNqKG z+dPqTgL1KVqrIL2N6=w*B*uN1v%vV#LgZn;uH#O3Y_dkP!maifU(L^5S+rWkE>n54 zzH;EVNut&Y>cST+#9dY|pUM`^Y*jSeUY`klWJ^iyAR)2bQ=ItxMLnZR+cH=i=`U(sAQ>R~A96V?l&*iJDD^l&xt!FCx z5M_5){EgSEQ+K1-`*ghG5VZEUme1 zF)Z-vL8cx2TcI16mzReqJ;nQwpT);_1sV4RJ9G1c@R-=mI;F_@oOvSTSRjc`)zu0R5pLPb?q?Na= z{gRAHzC_=_bE)T+NrAue_->%{bbp463Moz-6#Tj4cqvsWHh`ZBEzZyo`J962$Vh00 zLEC3LEyfw7j$oRjdfd^m6+>w#C z$KBMWD|RYOCr8rNoxFPH;VqIIWcN%lK5nSLBY!JX=bJ%mnRrlC$JcZ%&;XU^vLABy z^NlK$tNkJTB$n%Or%mS;Ojg1JO!a{AoF*_m?d%E$%?edB!SiGeh;P7L0%aRefOl<{ z%QtL)1~b(#5WKy;4Knj)g<8;y0uCa~eFk77EhK0?6!E`N)D?8FYAp!KI7dY^HaxN3 z?}M|=spSlhpdCE<90~qiz0$l~_qP18s{MnMT%1AG`~@rv-pgfB8%j=2R?Ac@9fYQH zC>R!S5rB1JgSodK?E0;(El{iBvco-h}lMfZpL$<1osB7)L`#7j*i{hTl z9HuPfIt9Nh8TO?KT+wo8$aLc714o#pH32igX z0S{;}P_P<>#QUPBpyOI(@f3(iK(>c-jpzu?KE2lGJUTFj&E54r*=b|0Bgg;7Y2Jhc zV^xYT+u_0Vfs0Ba#KTS^g>}U1Q8t61qvnHX%wKT_waZ(#ZjtskEWNtL&TbFQ^?(IX zu^#|ZsX}xmZ0UzS1ewXY*Z+=Ldc(9hHSAhuAt!JIGoHJ8F!Z>Wt=PoZY#T3`zkY3A zA@OtPJ~C(rV|S$e3SB5YeSMJi>d)r2Gof-NxVD?Wbn3{n^>(<*xEo>_ayNx(gE?KH z8t6K0zFh!=3HUs+{p(#Q+$l6<{O>ECO@?FYurCss%}%OIWXk+^2y->i(1EsVfPYa@ zQKWfAaauKaYs_*T_)v;E&1ct=_9K$TWUY#oKUY`Dw~c}|Y@e*Y-iW5LwLBP3fuDC2 zlN$1$#2(i&yzd+qyuG~6U1!Vq2|og4y~=cUVI=5opjlsDefCpkL=Xvw!gdj}v$jX6 zATUq9{VYyPO|MXR9m~L~Tm5d|C{OsGbTEk}ucO#B#79bcL%|Rs0UU z*tK>Sp)5jqu+!y&`{M}X^){UK8h8OH557=nF~FbAcnjK=17^P*1@`5RctIJ8)5DRj zW(y9(<>eX#>H4k$$7NIJLf)S^<3PE7tuK3gleG~{589fa0(&@9wJSd)UM^WGz#sA4 z2uMy7sZnhFv=BQLLQMa@<*AG~(Wz3FCusO-n$PP$F$Mc(5L5lk6-qa7Uf+~n$!CK> z2jBhC%ZLD-Nfe)J-()--E>1Rbka-NQXXk%86|(m(Xupi>=U+BPpNh@56Vucv-pS;x z%D0HwPP|%9ei&(k9*#0L{r>twfImzJMDe>+Ut&=zZg7Nq~Bp zBbQoiCrN4J90VAyr=b8?%*YfUrG_zJGxTq9by$`A+BG^65D^JcL_k_VT1i1t#G<=FMM6@# zLsSf;8zdy8q@_zmT1x3wy1VP#&qUX|*IN7fzH{EgAKSgT*z=jsFYX-o82P=3{0RUs z0M1klF9F=qj3mhod%)>D8)5Gji2bucxL+}k3rWa>i;nxAy1b(zv=z0E!KV?su|D}o z%_bBx0rTnb`O5>BoCfLi0i-@4lr9~Pa5Fj?4_CVR`96DwC3o?C3GwW>1ki5ht(Lu? zn84@`7tX z11>%S7i7`$V=8NZW~p@c9Lx}soWqs@Q@;ZmrzjL6aH_-gvSpnm+RV!4qGw;A!OsE` zy`%$M@mCSe2d(Vq_4#(y*3a^6?V(dP;~Wr>`mB zDS+i??qY&B14{rTFZuUAdvR87(Xq2Uui)aH9n6!QihilPA0!l#lPXg44f10k8_IZBj%j zfRchxcrBpHBQ*Po?{Z%@0XnU?c}}au{+IiZ+6%l-XF5n-B7KokgRo*NIg%Su-)z|K zEZ?yM&ADx%?WGC!Tb+Rda`-;4aBU7hq|acgRxEe&4tmZ(tgR%zo=N?7ntBLri?(3?0CT0aE<_ zt2tl)%6JoHztVf@w3%t-Eg4l|gn#MgIhXAgjGNF)DZR%fxS0Fci4uwdOwjn43WhEe zytA0wHFr9|(VZK^hfIknSJ3F%{3@v6i))nV6VJNdW*}E03ha zGRI`l&be&f$5Xcfh=jwq!@Wt6nE}=gziZy(hX~Q7Te6PB^tO|~Ye7R+shsnT-In0e z0qvMcRd6qJZACNsj9+W~=eO#18oOLRK3a8IzLC5-O;KQ@)}1oRly>aFW<4q9exK@S zT4*=U!?SMlLf3gVUOIOU6RC)nbg?G3Uj;;c-9{9zX$YcV0fM(!;wQlUnathRFW<=U zhx!1jJW%SIl_*lHB9%@@vvwixtk8xO3@BzE&}3-OOx#BChDJt;T8amC&dkYnPj>lj z4)&Mr7^SLH$J=+u40;a^CT3}L6>V)f*3|-VeULisRCM+fV8tGr4LFYaGReM0BiVrv z7IYN88S|ts%2yfgi$7&9)MPY2qlXM>FVh@s7g}wGY6s+?&vuU$N6IAY<84 zwz;VGb*RFnpgGBX{O>lgKu-RSn`a;XPq`O-)4DIPgiQhGI4YO?4%ukoslr@bE`<-@jNO(INfL6JlOZpt9FOkhJg!Vfq_5Y+kAo~;{pYY zynTq%3#FDq0C{~$>cf8zk~78WG2ig+im9l$iP_#;qQLZ~aI@W-hE$Z20w79-H4obP zB6k!YRJdLmwbHO3a{WFaG*X(bwv!=m;3g)$1Q?iHyQcPhz-Y=!8@yVua|KtmYIZ#TGHd*;-y3u8S6`rjL<@*$ZmYbg*js6`khNZ)QK`EL zsHJql2?Y7#akzNc$x`RM0mTlA)+82CWX~#hbCiCZulY9pft%-VL*}{5yzbir_&Z7p zn0&~t*oZ1@=)n88{o<3V4(-7CQ|lN~BTJ%t4ZP+F`bZMyMRSpf>6$&LYz+Z`FFm%W zIBP%Z$lHx^nIaeo*;LjijYzR{DyY=P(>a&O(^82P69Rya@YY~L%OPuJ%E;A@oQQ}V z&A2uNY9gY0#8~e%@;xUf{QX{@$TAI!wSwGob82}v=P6*f#(-@=$PmO$IV;wJqJv?K zxh6N)td~n8jFl=NI@$$rKivYo&N+WKWzp!*9!WjE#D6|~qbx(~p^qTrbTh=$p=7IY zHV=RvK&vwlaxFlanx>YU$cO|MT*~ecP^$hN5}N1?(b}Jiad(@d_v`bbsoGd>4!`63 zF2DgOF8zGL-x?ShRV{tN^V3N-j#u;raSrSw+s!fmRR$dkZrwpT1yeCH_8V3pQVn){ z9nk~z+4v+>DEJVaL!@-|?jO?*R@+6WUo7bu{*K*?<=ZDNw1__KV_q6!uXDmn>? ziJ(coUr+DvxN@tcaBZ*rR%PEqHTL^{#=}mE;nA~>eN+nVWpy%pn=$%TRJ(0Cvkzt+ z`4%_7;BnrNloTig(E?U~pxx&Ep4nrr`3Spkkg1^;- zt=oOxQ6C{nmWTO2v2f{hK3W5NWEq{6vuwoliz#r$DlT;ke3G?7$*cXTO0-1F?F{rS zSGu@#H#JB|U|OCs$C@86vzy%jLGIQlUMZqyP)LCh88xBz5c30LHZloCbHe*%%rzL^ zNAPQqe*j4~utJ1{C@-IaKSBiAV992L4^3G9Wgc})D{yuqcM8q4sEtgp0NVLZ;ssQb z!a_qCPJBW1wr(>uPX66SR=gEz%QlbkIYr(F)WVx{y)fkmfY7;@z;3{Cxoyx#J+XMh z)Hn1v;tOgD(DOAMaB;K+UqapM47BPnA)T;Dt$T@3Skn8{@L7s0%F4bYenfdDcI&IW z!rBZJUqPJg8`P=PgIM&?jIvKKae#)AvW$cjPf}q3kc{R$LF#u;f9G+dQ+L-l1`!t24qGxIR!tdfq!#Fg~A;xolw{SLr zit||f`~PP2$PJU<0lN%H)4@dU1Beq1^Lrn1txvTh@$^-w-2viqZ+~A&Ns01SArwb{ z{lLV;M9L?SDkEfUpg|RWk@@P?tF*ND!9W2Z6`-cZJ#n?2{dEKuLc!^CcN2}d-Em?-<4khmaC~L+ z=o{Lb7kWEj*iMI@)MrPRz~XyS116zR{2Zd0HPbm8)w;4`TEzh=GUPwjCHm@UH@C{F zcYy}aYrz77|EXx1LR>E!Z4T&1?aS*ef?=5X^`|yGA;inZ$S9rRS}y+h@e)i=LyoMu z3?g==ZoBq%_Q^FE1fU{hogW2@A*KyxbASX%7<&c_ccDNFa^5JOTk z&r4Va+z=VtoFrsq0zhvKb8OuL1>P6q>NP{uoV9!T?}~#Vqe#Aa8SCqh^lb{oKnLAj zyQEpg({K{QlJ`DX1wSb=6C>@Yfr;6kd1(mMr+hN^UemyFbPu6my~o*k`AodRKjN~d zs@slLz^fe+8j9=H20(R~urrO3#ZQ`?6kh3MEHk-peH3OvU$3pJBxCl+YOpd!uFIIu z6L)iHxas;F-GtJZ;!7t~d~afo=xg^q3qiUl@OV(>1Qk&+{!`<%CqvSrU!qdq|CK^g z2mMYVd8O~z06UK;1Yaut@87>?srU>92#(jj@168=JGmb1rU)e0+)c7k?+AMK*>?g* z%&m!eo0ehM$u3EMs^hkeUgpXZetmS>mc&7@#C?A2A>q_By=^{P4w)Metvab9(JErt zb&G9J<~FEia$%4&|MOzD-TXK*kBd;_z|=U{=1P!WggV+S%q6HHz^FMQ+ysp1V9UK| zBBb9l#knfZKFk2#ai&c(sfI>*I$D^7BIn`yG?j8+wM`znC-2_W8T4*5DB7%g&R%DP zK4f{M!Yp83#2DDp`=583*J5n(DQ(YId^0(-SI`KZaD1>BZS0ArR$`Ij4@2=%IW*4c zYAs97$dQJ;?43It@Va8i?V)(miv~EqL23oxf}jVeOM$ZV>A2FZf8|6!E;AU{bA(eh zI)3;TmU+W#ug}3(o6XweYWgQjFkVBc-?HGk@AAfza@2^S{he=ttCi;yWWTfppBJy4 z#uyp;N8Jbxi$B;Hqy%n3Fa-x5__KkE;Ayh*Ef>zWTCVp}1Xq+>-Q6?`+b>ZX%c4E= zT5+Cbh}W-ZPX4=3$S1Hk>mGoY7`iR2`spIl7R3`ygB~0OQjKwYXJZ({5&H)VfQr{5 zxrSpLiVKLUzg1v5#o@-?y>|~GxX#bZL$nhh-1unRemy7&CYGUK%EZVB0t;7Rv-tQ_ zXL&MMg+&(wv-x@rfM4Rsh4M<{_6a)JxjDNBvC!E2yIyJYe{i}OEkaQq2sumx63~-E zAgIga z)sD_i@lWMEmw5WZxq^%Lb5ifiw*9VrXV6nhq}+_!H3=mo$3tM3BfcF)c)Q4&;45wa z^5jB(XX_1dnFSd#H}>{-gqZ2d7oa=+sOL@9;rvD{cb|*K)#{bLy>s{deWB=df zLcbdV`Xnlz1#6}&DC&tmw1-BC>1i*J@Il*k$~)IJg(zHv4#g7mUlMuK2oj;Od3_xI z*gGor3<}y#yGs!xhUD+D@c+}?>g{F)`bdVkDd6vgp;9>7Jxu5OEFKjIv@M<= zDH~L90b(Nc-S5z{mqhY@i&FK22VZ!kajEkD78EkrjN3{5m&5ez=Cc~KA1)2QirDAJ z^GE)xrFekVEMzJKZwebGNyr8MN<|msAZo(_dolUPzOk_eo}RxZH)EX-?QgBWM@0&3 zUNZ?t3#NN|Ef{GGe;Ie?OoU&>bHk0X^?^ip-N107RV(0OfuL6NdP%|PmWzvN1hG(3 zk4fam{U2|?KVbMSz-Dsi%RPnaxAAFjgQykr;?!;lddvFqY<99x^V~$L=CJh@UuBS% zWOb|E2Ne1;T|JS?!QT2P;Uv;0R1f=fsT>ATE2A-R2e8`g!$iNu{ zcq5piOK=ujfq47ksj27ipm^t&*ygSAZq~-E-_|C-%A5JK1lQ}68#+QM|LKfz`x;q# z)eM^y?4KT)mAnog@?ZS07nTommEaf!Hm&O#7OB}?1ia*(!P^5gkyuZnX)r1tgOGPJ z%!yo2k!@#H8#sI+`V8QFufM!a@viy$>`}~Fp@b5FOHO0YD58sO=R`X5_2R<5g?1N& ziPKw}9h54Z1fAkPmEQu{lfHz=QaRGE&wp_zUhMYNjX<&Y=gQsjYdAf? zvzgwJWj;p1N z83@htBzqAW1OAzeA(n8H2;4UK_)ChE@f0`7eXc)mM0H?iGa_&7qXW#Vo2Fu%Z{WGe zFgJKxl}=b_q+aV&s`nCxe&MQ9eLAwXgHi)>31`o?;pOfPq72|QP*ZQ51p>gh44r2X zHRv}fDi$Dyzb}wLih4u0;qL*&>=~QN>4XmI6Jxp1SQ#>8c~Oq!=w(l|j=@AO#n+_L zu}-_|h?xYLbFn(a_X9ow`9Ch*G_bd`Lc!Mf!AIf25}^e33o>d?BGKhe0u^I|J1_jP znA`na__~%!l{!5Le~8@PMY~B9@&P-D5<=@KgcuMg-+a*Fs-L#IWB@!!tt0pb8#?LO zNzf(WLE86k6xP%VGm$HWaztMvN6P4mfe@>8^RFn^*ix$7gRuB0;T!-Ew_UNjLv-}9 z;PW7c@{^*sT1Q!IHb*y>d060+9Q+B75PUM+u!@o>y#%|H#xy0#40&AwpEA_vOEgpBIng)XPMiD{ za#LRK1QqolEc|Vx2y+7^HyFjXjNule!(j=_EUhX%!}gx;@zBsWx7|gp7SA~|e4#Bf zu6wf9pZB`5P4F}&x!Vo!6M zR#vkwrtF7}_YCgOx3&s}Cz;<}daFjTIAnM5L4Wu5#Pcg!UG1V`t>|Yk^SM0H-_%}c z)UydQi4KxQBYUmJ3qcd*uvUSn}Q~Y{+=mi}F#i=QGLy5<#bQAG>IH{t(=8ErOx zung)9#LZpySZI^XaE&jqDPhfjUC4^Sj4l*>fA|uN?*2XGTxXAdmzNUuyx`fo3Wyk# zShg8*`VEzJ*6n*)xE;?gJ*tXnbzi7yeQ4B5bAM_it9o(f2zizl^uodHQl8*s&6?Se z$wD(GILE$5j=sRK-6+BDB4)ZuhmM&m?G)&{CdkqB1o0t~gKS?7>Q4Z*RkOj@Vg+zv zZKM+08AB#1PB6iDbPib9taT@1u1U5=aLJ$Ll|D&zAK+(YqEbz*fC8ErQQ5yq&T#IM zU3!o8M#?vjRC;!=I!T=2L=_RiuLU?LPh@KzZk>x~oiU_Emju@kKy3?IlioTX@DGSI zax}G81-;$S3M0nF$JJi@b}6_a^}gy-!0!W)XUcV6b(5OpG*K$#6#>n<0YO)43_0cL zJ|7JBzi1}KVtGnVfHpFe;p1XQx0f1mTF&EnM8?RWAPWzoVTG99UvsnlKzLV{8IU<^ z18+f_Qyk(E!rr&`)}6WgGxfi8pO#79FbyUAXeb&fkWp`avzMQYZZtvlj_aJII@%@L zX&=q<*d`4iWgd9QgJiJ5mdBCX{r_Y0-O#~9_NXQjm59l8gu9X_R) z@${lTxI?bZmXrB$F3a2+_BXu=76kXQsQL`BjP8s4ds7L>7Na9q=5cu{b273+ngV3>$!+9aMjc<=67~PDNzKNgj z^`hL`aWf0%X>s?6#p!myW@i4U6(~+sA*NnG z@^!j(SF}1xU zD9az=F{%OR2uB%SFiuHbna}9H;{Cu?>xBVk=h~1bbi?-B7oyqZhW9lz-Lr^a@!@38 z@PD7OaS(3)5A2$0jE@>?;oE)YRqC1BJ|kA`pEr#|+@*UvzcCBy-h&>>XiTcp%VxuTbv8fzOq*q0J{R%3wP&LN(1*3_ zU`frVM?@}T5HM)ruqV;)X7P(@7IDm!>zeU*ez7Wu=}99u7-ieYcrCh(TvCaCXNE|u z0;ZTo^#9k##`kkM)c265NNwjHBR4!2{}bNy9C86m@2d3%zYis7{VaWK1jU3}yIw(LJXT33=6~ahiJT?QPUp- zlYgkxI*~asBoyzLA}NvAmu+~?f|oo>G6JV_KWk+!f$~vFb{hSB^#t#_fA;7jilGm{ zG}s)KYTqWIhx@g#{4^LpJqnB^VL zV2mi7^D*xlICL1Rv+<(YbJ;&IXgy4JdiX;#E;A<;cu|wS&`mN7lqjveVaAl4z;?ob z%4c8MdZN-T1h~4i;DNs*)xC7CKqOiwEM@V4ja?KF)6q}W)+ru^6!)gJUnwb{g9#TNKnJgYPROq>` z>31b-#?6OTmpR0UX3RyM^6uQfC5eUA#Vf^gwoE(9dHnP(1DIA9s2P4+yysA+tzDMi zJBQ6orewBpjDdJ=xWcW+6;RmqWkKI2oVqxjhQU8PhHI_M89HARd`ytrAP z^+l(C|C##dQY8ghgzEqDkN-F1>R|^^xrIVC+aRbyLGcq9dDB~ZU;FqVa895rgrC<{mql)f#PD)feH>^F z)ygX>T*uf5j?90}W)$KUOv}Y#6527sP=z$$N5g5aTv?97feH3DtH*FCKd5Hxyi1k} z7o^h6d-$p@sPp(=Rslf>wiKU3XM})ik+GM}Kpef?jAHTG>+Qz+A0g~9lXEAV|n3xM{v!HFETj9(rDtZVV767WvbY=DffhYSppCe=C z`&tf=f_}FQH0)RPtUQP<19Ss6r?PxEPKrtb(pGjtH*#GjPmqh2@1T{kw1c;)Px0We zf8Ji42--zZ|J|NS^apLRqMV$|OiV_Ayn~7oV93UKySJ(UNC`zQs4)Q#p8!9<+CCm= z+nx8R`E@YuTVJzB$U*9=cty8t#}gfnzU5^66ON{vhVgE0Rviv5H!bypd*}3we^lHE0XKG_kfYL&DKWWIJrD^GaFKd@v(C( zfn8UA%C!_L{ehAGRa_*DOZVnVr=?hZ+`bbWAkkF$3oCl0A43B ziU5fG@#9CPY6f%=fpq`N^D53~{bqdQMPF*5T3hQ+z1Rb^t02mM8HkPf_H7nY%NC}%78`!@W)kN7Nf?uFT$eaTD$L#ZkgL>56;s{<8zJWe zbfGmg1HHYyUndw}J`eKK`EVfsQm@^AilVkJWRX8sMgdBat`);C%lhqg9qNiTJ8+PQ za{;gFQW@jZ`*w#4r!k(a$J)=A!xg%jxD4fMfVBfMm*@PcgiAMX-1ruA%>m%^e)@1g zV4qk;9MJFxzJ8za_bEErMqTq&6boTD^afN14t^lWczTU3vY0e`2 z7_uK`uXpNaI&gaaWy{<0xQsy+($7~;WIHK7K0du#*Lj+ut~OXsgxN%^u_FhmpM07P z>FvL%+Jt`* z!bkP|J%#GF`EIw0=+gt6;e)*=I8?AMkIh)CC|>J%?At*P(r+G^LO+6PC`s!Q(0Pno zdhBYsO{8ON+jf=jDNc?<7XZ>OiX<^{qJHm#MDKr@^rUsBZNSfdt*H?x%t*&*{Pu02 z!lg*x1v)bLA(0OEDv(rKKNqS;NDe?2o-y3S$itfBeOIc;z2PU^iy!(E{e<|O#KI{wI~}@s!`{A~>j75WGHCZ? z2+n~{uSMz`p5Nx$UPG0xy1z!I^j%7xR^pClaEY3sTkr=z>6gBTHZM3}WjCPv0VrhE zX^EhV%u1M`b-l2Xn)hq~T7jTaTadoWI*Lo4=Ce($&9QZZgy@GlloNBug2x>|&!Y9eQ9YDzWpBd5XAvp<$uu-o?93rY5A;jhU~&H!*+X}n7{ zl>4sUM1f8?x+uzJ6-CIPX9|R64nL?X!IAsyTePx0S z%6hsDn?`v}B>W$7BTt`etJ+iO%p|P;TODJ|S*BzI(ah+%3L3wFj%1|*kOt>fzF5a! zue_z2j;6x8bCLSk71;YPh-tO}ygxenQ7Fkh2I28~^Ml-Gosf`Vt<)QubN}Gqw0PZ^8UR|LQak&);nD(445?rzy4N5z{W5o`+6- zSu&5dOByl$6iBjnhw`LI9b!&}OcMk0pM!88(35_?;JM2V4DeQfe*5S;&-l(i$ z@7{FQqB7C0KBUpF!ro0RcYIDR@=%_-jm}Zqc1d_W#%>7{9md0KQWkf`Hvo(Dpd|U@=5lF-dJ9D zr+?rTrD9jUi=gEfhunUWj??~?!MBd-GJ)c)1y$&QS~E??uFeUs_?_pkUYFif+XFLM zBKiprT0k;x3lFL$KQb(78GClnsRG6GxyX21cvI%J1;D(DQt^-dw;3Yzen+>%pT}$*`8bj{7Fl}8udMg7} zD3n`vc`l@K?r~j1a?FaHzRnm-mT4!vPm^R&B6h6J4OwkcvsAl9bpbv#PEdKWB(w|1 zHE$Vb{mSn+bv?+$P2qU8UWs+hexTpNukJDTZBb6n?5I~xn$F@wiDi6!D!l}jr2Ny~ zv7Js9$;iuX-*o%-tY=Hq;c<6qRiH_4Ub6mZRMllbYGl;qr>T*yiWX}xy@EFBYi;ro zwU`4O1U^aPHV*Jfdq2%bT-u3)UW{*Uj)Fs_?1y12gzUbA>0+uA!q%u1_sgbPyKqw1kBX@?Z{PEmf+MG-05Ntuk1>Gc&2HPy$e@iC zX*#|6b;D=aYuOvPENO)Drqq1dX&$cgtE)K>d<*iy;GdG}#_lA5CRMNU8Mek|N=LPk z2p@cd;(!2@Ae?=P08y9W)o7*)DKIMjb5G+i-8TeR{w4^LH%^lu_&kb`3NIuiy&bsD z@LiB`FD+6cncQA4J6$B+CS{6D>A3T6*yMrhU$Dta8!T*!JOR8n= z;{UhdQqT96R_Vm~og1&U*K}ZDx^p@^!noqV1^b_0o+D}A?VIcIe@xWSi*tyHx-CO7 zt)}tEGTGe)!JGdRc+xZ?+S_%N{5UFJLCOC-f^(Lb!HYxMPce_DsnKntvJZ!w=_7W1#DuS+6p-5d}OOi~s<|6l>oi2Y)X5)YUN z8jPEKA8lc6wg)oSummuxQ!s(sRaL+|Y$+6-0By=G=c?0J#G6g5(qFG*{E7S)Qabn_ z04lFYpB~_NAd{0ZlLHebJjyri41ULN2F$0A;Uf;BU#z1q|if+#IQ{{!S0$D;M=wV!==qz<>kJu;o9 zyjwg{M|*{C{ojFh|#i0Eiec;)UDSQdoi z?#Z0$xNE5Tc|bBwGqa`Y(iw}AgUYHQMNTF{eBAQfTlB`9!%&Y1*K>CQlLRs;FbYd0 zT>9$@fXaOR{XM{PV2NK=w)gS7cn1+VrZm7ZFfafDe>;Is54q+6DGsBH>#-iZBwFl* z9u>5I(BALlYbTK&cvRg(W^g*4B8Tw`U`kQVa<~ zZ)C?3Ea1Wh@4?41q^)Fkd&BT5fDo6K9@kl@_&hHfwAWH$!o|lI1^_mUg3Yl0j0(c0 zwHodUnLC=lY(7ZDe8Y1;-51DNuL=m1eCIkXPIR1*$`#amlY^f*uoURtt>97t2qok5 z=tW~nF3IW;9)9CCn($c%7*Nq<7{yn&gjB7p_!}udut&C02dA^tBV&1D)F1LBE5OQ& z#c7{>3eK*>>)&=yBV{oYwxRh*oEHj7P&;aPIMbe32URvJcoRrXw{~}dvs2K|HosOB z5RWk947ctbK)4x$8_f7N=leHf9EK2{&&d|ejefo8mHpa$=Ekgxud_EPPM_(Jt_~qD zL)4NvITt~%xOmj>T8Lf*%o!mAEPy>;hkDQk^T$64>|X|O+Et+VPB0_zxq9YNoIl@_ zp~gA?y*>6)(@KH=^%#6W7Jqq;2X!xU&;{u#iND}e6BHiKbmIDr8_&8*P)p+WWy064 zY4ze05L8Yu)k|$}yQx+s&v8(@Z|cMdI;M36TA&GdP|Rb;W;VZVdh9g}eYEkL zcc1Ue++R)I5f=4KADf&E4?A#wk4UG^RTai?B}p3xl6&WmPR^7a2zcO@OwQ2MDXBQ_0B4#9Y4brSAeKJK++a zvaX$qS%J{ry7ylYrbXH#@FnZ^f%L|8yCj+VH#wdM&|9;tb%yrGP>n%l@y_uFD8Zj8 zCS(r~TtYk{V#$Ha(PRa(U}Zu^xl}(PfR=;Q$yZQ30H8MCA5bV28H2}qR;NWf%b9qq|B^Ya zy0e_{LgOtd_=*MYL1+v44t|&%Wv0xw`)Kc312y8B?p@!PxF+wBR<;g@OvTE}ny};> z-`pt$CCk6=|4cnuMFv43X?WQ)1mm@K3)-2<_n<$ohX|xye;!B&%as1;M;LuWzq|6S zSf>Z-v#R&uC<+_4yxj)#RwfV+&|(;QfO&Gjc2mw*L=CxFocnb z7QDX|ON9GPL;cloPo2^(wS5Hg^iap(g-GNayXNhnv&6*Tt2_=t!Z z&@TD6V+{+fU$VCfwwOvoz`{qh=!BCmW9Y(53W}h&PB{p1EMDUZ-sqQ1&vt7Y+U&#CpdOGOzbw^N*yHwKHkhu?||+C zjkCO}FnePL&~{E+v-p4Egoh-yz9nh>%`LU*Ww^GfBYTfpe2^P%O1l93d14+N>=Nkb z<7NzMT(}n!!Hk*;xk!GoefxgTU1*xK15DUKK~dHMjo&}$`1UTS-Z?ir@ZWyq?`P1G z8TZc_e3y$ZTrDaZBAput=!Qb>4r1OX0edtRvO|LC)>GuMv1zRvG&cC$z1U{91Hs@E z!=amQZGW$8M#TStTB7r5jk{mxy5B)Q&9<8$xWx`MiDl}@n#v7wC4~UM#Z#o`p--MU z0+zV4&WeJ^@$;Dr1eMR<0(PY5MzQC+N>w6|Zuvjr$4)eK7iqq9IBkP*D^Be^&MaU3 zw(TXl1La`#h}I(L_vWF~?=z}k>WHvDC);=;>6`VRFk3(J)YHmb5l=hJQA^jt(HZ zkFgKnb>GwIyp$A*YLC-S=6x3e!+;5QaYQ}~fpm#s|0_LX2wZ=lM~`>?S7j!1FBw9T z)DXRY3+Mbk&$pB0f5i)WXa0&8+Rj5K0gk*CGr{G%2mi%Zfy#`D^B z9Dgbt4E3i>?y84xWtx=jF`M6ev`~^5zt3vHF*r*ySLP`DKV=v|k$();TFI;l%bbha z7qort_$pbq<80LxurJ|Uoh&LYdGqN;eW3a z{gPj=tZLGC{(!GiZZUQqP?l6@Nr=|kN2-SU)9QZP3_HO#-H7cCs`fjERkKHx(hNI6 z-ohnztbbiPpD)$UMR-4m!&Hx;#XDk`qVP%QO^1%#v2W)K?ia2{0 zt3_P~?}yIsnO4(&%GTMV79o|aE+E8asSZMXm1M=qDFDTYg`@8xErPr|;WhGI04}3g z=fzhw4=As^cD-|g34APRc@)5AbviOU-HGE?QNlpBbqNgt#+>)L!5(e-xel%w8uQ3asMP5+hy>&KzCYR+(-LK ztusw$`UO!ftV{(W$S(a1TGeFbIcrL^k7Wn zFtvnH+~9?a@ZWnQH)pe*Vx?>4DD3lkCxzo~?M_WTolX`OI%&_>|{4g!8WE$=tLABpKqsfe9{Ydxh{VUGQ*wgnDs+o_%H zdjyb@Q*z5!NKD1jA%EZIjQ;FYyo!?Ix*yfxSgAhKz!m!Q!M{KC5Fs{4#dEB&(7;pM zm|7ouqRFU@-_opjP3^eV<-*5Ikx~*`BP_A7-b(7$@Q*wxPN(R=OZdLF4fN;7J{3Z} zGv2OzD*grRTfC9&Bud=&HI}6}@>;IP;j5ugcJHW919LW1S$ZIsLfO_P+FY$WADWJZ zI&1WJkrKxK&@Y4X47&~y3cTptTH!G^cO}fJz(6}ZoE}6f6qRY??2QS&Laa(?0o9`c zzd?O^kuwJWz$?&yVT2cKWAHb}Mkshu%^BSS2ovi5N{{-pTkvS=bT+gP)ni8Qx=%~%=4i7=YN~JJTwijOrn&d~V3=bIZBXK%Vn)=99Ht49ra=*K zR_F`H@!C{n22}i2WNk>q&yr>jh3m<);QPlGZ`Hb73uVXMGpdQCzhyCTw=PA>Ld1E5 zevPn=TQ_GcO!_Cb4-Z?qwoU#oHv_5fxCnVC6bby0ZTGht)<6~))g}b%jciG)&@b_F z^%Qs(5z3?Aex;{DY9(N_$0+W6!ad;;(cNqv5O2eEo=EQ4mEKxXs(QBfU4yUAz{zZk zn3yh3C5L8T>}ccRgqMpRhk+Zdt0B_?K#R-kPp#_H_FHY&-el`4XtdChe$o&L3{Z+&n2ag*zfm*f+@rG%@q zTUmQE)=rF9gsk^-UL8LNvMI_(XTX_}<5$Dh%aoAxTQ8RSU}xk>ok`kWLV3^mIr=$j zLVe!gV?1M>zCIQDB7us>@VdmITftcsuN?d6jK1#H4ivxR@2QM1v9`c4G`AX6)K!bo zr8ish`Cbf9yc|CVX>mO#Wm|b8Ft#9Teva7dq5R12#k2T{ItP0nlTeLekG3h9tHu-y z?aCKWwl$yyh0JDat`?ay`Nx!BBoy#-bJ*B=R(t|m>X>M+$NU!%tZ(D?IqrMcS4uIR zNSLZ36fN&EFL@4KS#v|eL7wWr z4n#ub?*mbfWkSIDI^S=xF`FaYh`5@*n=sn=UhbtdB|AUX?PTuh$l{kwqx7+`qA}I8 z!15<1d7-?YIR5lv1jgFymgDH6jxklm)?_;bKDI9_39mjE#Ad}n>7Bk|wLIgtjh(zA z9esZFOE*)5^l|KrW1<>X6ZL`7B`a-Ttteg?eSHxH$NcP9ys&{F=JI=iM&D>198B_w z2ET-OF(6)y#OefM*iX=Y{aP}Vig3KbW>sdQz_mHQfCJI@zdjI)+o4aL+eg}_CeaQ|PM2I8Z`O=l1G>?-=g7J)N_Z;pz$Do6eu z@j}kE^}gY@*Ld8k1XIIr5^mpbt*d0wErs7LGw%zW=aqdS#GPZF;xdC$|WEf{Qw6AuZr1M_nY?c01uCA(kLuj!5g@M+EM6El1r zqOTu#H%ff$)lIcI$F8|ttPnE4cqSmT7MQgRfxnRP2MqF-SJp$PBguyiP@gXf9ufYR zLqhal4oSdIU@Jw%(^0kJL?bs$7kxmcP7b0?;HL^3&%{^U7-G#>3fkq)dhX(BLO&R5 z%a_)18G~srV=oCUf|M`83mV5NtvH$!nN=^TK3ugKt8dnJGX7QUTh0ATqWNSP*2!Pk zQWgzob#v;uCj!c@6=>YPEfyqRc^M=%na_W;pVv$_UCu=fdLe5pa3Qw;B)oIHk}Y3- z3;O(!-zviAM}FmUy!I0HHMpQ+Z9Dyi!F95_K`$=URbF#(y{`QXj8)uRmHqvFLZ+!m z$)`7yYZ;hT2rtRhbH*6hXouC^DE8{yfeOdngSx2 zHY&uJk=H$|uLHk{`aJ!WzeIzYI>pFPhBC0PEKzaY^HBT4rIv3)60Jgm`G<*vir{(9 zswtPe&)bMw3AlfXc{%!x_BAkcOW8QfpHs^S zp_}mKoUDKVCGdMRM2@;!GqZ>J*WS{550QPJDLgzfH<6c04QquunB0_yRdrQQ!z?!Z z+*SK2MMtYQSgdWFNi~?P79EhIs+;+jCBpt~iFzBGuG1`ESCMSi_49p&dnh>@$CCX) zSY5s3ZR~WgEb*As{vN0BV|Xbe1ruOgN*6<$>r1A8Lof_!7+H8)Sv*|Q(8 z#F#D+h}awyF1i=Xp4c|-Pg7YG>EfVmoXyZMowFgG&*>_5FB$HopB{fi9~s|kqTO`k zx~^!6Wz#tKvjBq>|2?~}qi&k*dvSkanFNJ&-Av3wN0c1hV6ReN-dcT(gf#4%f7t?v@lcnJ&xnkCg?QAR@%6)+ z+NX+Ko%l=24Or4IO#I4q~~f~__1v^BlDj} zIx~~_m?Y7xwNJ|32GsT21@r0_%Qjx>vxA-g#ajlH{x&F7&DAm&kU%yh(B?Vj9NKVw z^drDIkN5%MBUARN)t>rl#pZ~H^Ms+o^X_fWD)Vbjb7Krn^;UCb`E^WRB|jG4r3R&A z0Bp)hN%;WA$Jf_wEbvxdULMT)Ms0;bw=)8ep$#8_s=~8#nyFWEdvSkP%K3et!la$Z zy~6^$S&ysYt!(5xECnQPCp7f|s`cIf5%6bze?uy2s_EpkJ<%Ku6qg-<(S#xnfCQ3L zQnIy*vWkm)ED!0A$+2CE*3uW1kW=aRbBQJ-T9Gp9y%0X08z=?A)mN;&iv87AQO#%yowEVu);tIw;Y`m6A!XiX47inpKI#lf< zgpi#k?3|p32sfj2xW-BINDvU6IeN#<9x|1Mf#&Tnn_kWy_l|$}6~gs9)SX4^b~`uh?Kk!}hb{AaXFSpp5`F=6 zgJ5RT(=wxLI>P;-i<3@uQw4i7j&h&*4?nYPt5Q`toWgmY?8DpCXJ_y-w>84U!iIpU z5?uBM50|6K#ZumU(Bi8n8zY2z5{k#y zoht$YCb7+_03xuYTd%4=w`%3(mw#btwOu%WZMQ~&ZMKiHe0v*Z>g%?UK-op!jknQ4 zb%#@qq9Ij3V;R^=aHt$TiB^VO7D>*Yy&5AcP6R+^QZ{v(m`|&FKAe@Q#=h=EFSdS-_|ioXLv;UCpixvD;fSQw#InwI=lF{B1IMwQ`)BZHw$A7Cikg-UiWs-W z!&;oat{&zFL^+%~r9c~(v~U{eu(HcnUfWJ|>v_aPMv?^_io5?D!OISlCVe%VwlkHZ z_t7UxJnqMytJvS;cUKj2sa!VJ!=$JdCs)ufSIl_T5_4^Hrc)~F;rW|qB^AyBgpakE zO|Me>LyG>bg0&mVUM#v9uu3$`CveUqnOF9dIra(rbMPyfGp}e~X8AJ$s1pUhbo?xP zqR$v(E8@}-z^&*x=ex{E^#E5EYGB(FaLmIiwAAG~pi@V1~ zwx>`|3V?8f%jY?CN_mW0-V#s>KE6bbs^zB^NEU$UBbTFx<$P#t2)_Wz6}-E<2bG*|PXZU4x^f`j&=2#7Ej zm;&wr_>1_lFQ7XuVyf$a*Af32*n99tJ{3dhRjC~`~><_t8t?mHMf zs#@Uhl&KSXVy8z)bNS;LSU$ zAQf!+YjiYu6nY2Pg{flo9E~1}!+PJjZFYnM!a}4^Oj8V3CU1N0cXNC={D~!;Z`_vJ zQGAh_bWm_;{{#EECaC-~P$Gy6;OI17`X%9gDiSyoZP`-ry+aKR(W7}neAc)SrJPT$uG9g|JHWErmV>g}@m6MLW&!85RNK7_ zy?qw3&@@bRO^W4u_8}Q>_#G_IiPd7v9&A@Cpc#uAZ|6o5#NU=V{)jTH8L#A%ojNdwD#qTH_Hz+sINX269m;m^*9l?s4Y3^Xg(Rit&yjM znkpH@ciE^zHH#F_NLvr|5lN^y^(458DU3%o_IZ?M)%>=>BAoqrK=Bhu5XPa?H-dY( zRVSMC6gWE=E?&e+WwSe~KuAuZD|1tkAZ(1}FQ|Bp^4&b@7mrb%3r^3TIf6}gO)2hJ znF!L6otX}K_tZsbzo&vKg_oQ9@lkf5Al3TtC_7k}n$ElolL{ZJ!8hc_|TOnLg-9?Y1pVsw%34oF`6z?-Eu6(by^8_TEoJo+KuJ`FSp z-`dLS=uie&9}~YgwjR9e!FG5j_SKc=<`-g58(!`b-7bVHd)A0*I8;xEBQD@PRf&7g z4a|&EInIg$4Nw>7oV|EJbDI4gjbnj{?y9>u3fk zr|!4bR;Fh;Y}c%lX1F*G-j{Z>!~4hfPMc$^BQYjt;x2X1S}d3X6nS+S=Pp^#agqGv zM^!-&BFVf5qo1icOQ~@9Uqqj4jWH&$evXzzwiLm=!_%UtFbnkOlqg!y0d}^v$ds~Xpum7qLy-3GgT%T6WY}`6f zl_g;|ke{^)r3p6uTO=V zM|sWZPVCs#jltg0GryuV!&T(ZxJ~dfmt8un@bI|P`fYksOjFVN$8e{*$i4N=y6(fr zULrQ_@d{~HcPcZw!{O57d3nb*65%yYboI2>>-+i6MFrI4$yD8=XvP@}Z}}*oy~}mJ zf?rHmpI)l`DuYge4 z;49>J#-JGnyx9^ETg6>-IjEhHc`+3^$(WpsKiBnk(fl&?l7DMua%&{7-3^mPKM`gU z&9qO70;4?yPn>0)U9A_HD;6KMZ1P1As;}=~*?F7dvf=SjD?K}1#Xl)Y%jyNNB)@8A z^azhSiVu?+BgTpgXuY$Vx4OLH$`|117+v;;7r2=fV`;L^{Pgo>{n|{oGcee6sTFkQ z6W+h~CL$&!b?DY{U{-pYkTU~cIi7B<`ZI*a@kTc{9g!#r<>~Fjwo8W2D*WsgFVH~# z(Z*7f9L66$XRX-ZiBCB&I$gJ5en2uaiD|4)H4`k7ZfTl6vNy` zY5tD<62uOpxC~y~=2(s1EZgtue+7KscX6^ScUYQctlnw+A4bE;QT7>99jHetIsXr5 z?;Vfz+x`JxLPl1}$}XFdnZ1SV9m-6}-g{i>$`+YPcCtwsk+QPOma>UZHf8f1*QM|M z``!2bd;WNy>yPiZmlxOPbDrmM9`k*?4>JZYgm~HXiYF|`i=iu!Au-2>>iD&Fy?^l?tg<vIFG%8=8ilI6)N8|SP{`y$> z4`-*q(JwuC72$lm{sF-qch+P}dTov7-8|>g;zN0wi)qEObQPkgk_$6Pueyx2PSdPs z-DNyqc!P$9rXL^iAg@v8d&HyL?hUDeacPr>|$AIkZw}yVRz;6Y=rO|p(0Ie5fq$QFLMP6EyR%0Rm zP@{86F-ua;zN?LIwmzlSGmh5C7Y|eUGnKG6$8H-0ncBTkQhIbbFhEZ3mO@b%4# zKTE%HbNw3zn~ymF^exi-n%PSCdz`UJZbZw+k98ZJ+%WT*9X*Vq2GBy6l!R*^1P?5Z z)dvNEN{92pzG)R1hHLF+w{&loukAWIiC|P__DXI4si9FTvL@OX z{Ont!Xi%}xuLd-0myKR4JWH0xj$RzAdE>q|WN5Zq+0-zgEs|MVyH}8RVZ{+0yP$(g zG!HEJ94pYH2B3I_>(@`em4FK=7xvKBc&_}r2t=}N^bJ{wk3p;vztM>`?B)u;IvKO5SnBQy;pfuC0?C<*miOGh(aoFgz2B zLZRT^Gl+Xek!?W7hd*G``VYRATcsYg0+*L69_+(cpe%js^1Z29$h8f$ADoKhbJHyiq~r`Of4wxO@T*J%(SjV%&{HH}#P?Y_d*M;oXS7H8Ol`;QJmmEwOpgW7%d|pkIgB598(ku$LuY=| z+X5QE^2nSKr8}r&74PCM-cXx=T<&%+`Yw(BDonN@`)}R$N;Cc%AijIj#H%e^B3}A+ z1JZ}bxMHCyCY`&fk;?RP%9V3@66EAkTztME!K|DsFm1)s$RM-U6$XoMR!z2C{RH6X z{olXtRo1TLlC+i7-%=>lR_g83uD1-afUEEZJYg93@)9Omym$dHy$}oP5P&u~MdZ+vF-ln6VED-D!>J51*YzkY4`+#U@PU`g3;jp-5{3S+NOXfxgR` z=y#(KFWMBH%2qb8m)QB7Gjmhpyr^|{0yn!Dq@1Zfv7&+~A8 zrHO6@nH?S+T$*^l|A@+TVYtl9#)hNoHM9aUNCzIkbZh{J?o4+ka-+NT8Z&G0Ug7@l zxbWS_(!n8D=YXuNEOfjzoAu3}LBiYF?L#@V6tuLoz#m)q`uYMz`^^&nTV=IDZ;!~& zp5=oP6>J*j)IWynkA4FH?hGLzJ~OnsYG`Vb>Un_dqTWi=ML`+B_wLNt(Zs9GZcNb{ z-?I*Cl|aHSgU@{W%Pg6FKOdZNMf(bN-Zq1TYERwnetDYsM=t%CU<4nh@-d8Ix(Z4Np?otbH{%(QIe`av zH4k0v_s(8Djm~#}_WW}YJ(Nn)C(xsQLzR~L4lPRF?fgxydvv4BTB_sU>{-3Oz4513d^G+rdd(G~GOg;5BDptN>Uk4t?3V!hs@^@>FcET06u zgtwL$2qxphNkF2I-9$g+4jVl4?=8q65JqQ!QDocsvAV^&ug)PenJ_tNX;Yqrd!MFX zwz#oBYhI7kfB3q4eyLNOozy7A=$gA+UKlm(0WN{%ZO3&zcC(8;s0)7X;kUzC&26G& z7f%hc0%&-w#-w@>aCX9*@0L7ac&egXH>8Tl)*4G|!;Zhj;YnXWtl`D@bvXo`1!ot# zYw8P5X5f+ELnU_9&*vIrWQbETFNBv^c4)Dfw4T@5eT%VD^IojPm$Exm;(7)T-($y% z;f3*DL0E=&UE9EmaXgJxN$;fel>iW%Y z@qU;3z{8{c`r~&glRIe4FTmo}GvZ@oW$+=f4ba{a&T|LoH^)arw)Aficuou*cHFQ2 zj(&9^%;)GWztSy6b0b?jXL$tv)x3f5VR{+!!I9gY3^!5G_CG${R#jCcfH70dP=@)c3zz6r5A)lJFduV?@yf zYZRHB$QO@mQw5)u5DoG!1#_QS-#s6kjFQLO_TDS^gOcjOi+>WaB@%A;Qma%?$F%As z{kN>+oGBI~lMCaBV1&UM8XAuUZ&lc6-?{VRH7m4Rk`QFK>n{IRqYG5WUbyhS1S#LU zBya`Zu1@(8c9=GlnPnsw-eGAfh9QtYoYyv!mUzmXe@`ur@p-Nk_wg_U4AMP`1t80D z`2o8RTkH8M7w_v&u~yUEJO7#$!@RVoYue#`0_S-Mf^iM#;XRCuj9`*Za>yA<9t?i{ zGSm~d!o4Q3dm3hj1(BsRH;3~?F$Vv_^-%1aVCj)$GlAF0AU?4P` zGW=hrfZ#mK|MqkHSUp*j0)(h4#l#|6jeJhJ`i*BDlTM0=1PWV$_+xuECVq((BH0^cI7LIhwft`0eA<}V5T^hM zPUaWkq<4Y`Pb>sCDNV?y{ll-_^p|a^_?3>l&dy0vk`QF1=&BQ*Mt6 z7Lq0F^AM3a-=dx>ygdHS@IrTnbiG-9py@4kD1<;mxZ~b)k6&NT%0*qz*}9H1D1Wp> z3YY8h*{+x2f5>kbx&hgAdyzlRBY@3`#SU;j}nzec$ zvbHLrye^>`iVcsx=)=bOq`{_W;ON`tH3KIxg&v9R*#P;|p1Oq$YZ<3h=c25{aSEpw zc4jAZeJ69!;E8ixO1WQ3265u)s)awsX6s3kxmP45+DU1jm)@De7NcOSWxa+ z1EJIUueQ_NH_z>;lnn44w*T3vHTL;&l8h@U$Ujqo!jw21eAzg~1i0)`pa-t@-=9Zl zp9eye{T3=SWqB5ee*_;L8!Zwd1Ur2c7YVmo0R2!T?)?FZ=LkgbGhOFL*hIzU=u*1$ zSQFOZ?NbOklE8_$v^k2>B%(C&*6uW+XF~>dI83N8R9&F!am<`_hXCKpS5QN5BJ!?( zp-b{%&9=k+iO5{a|6IT)49!^C9HqBvHX!EdUxQYYb;oP)JS}$ZVs~0M6%@zr>*^z0wWR3><9nCmzL_dXX?_~;Rp~8gvv)bps$A`%9_orcFDsIbYSXzEhL+#4x zEqKY&S&Dg6?kAx?oCjuV$Ujf-;1JTvj3Y?2;I_3It)^R_-HExOA1^jTc; zV_P8>ns|b_1g`r|h`Psj=>#LFa1SbE&si>va4#Zq@+eH#F4G?l)cF1`d``rKs)Jcc z)rU#He+{#v^Zj>;}+T76{KRAu_=nK-%}e@Z+MIW z)M(dDQIcQ)uHFidyc->-;3%D&U(0Sjp{ihL%WUR&%S3}H$(jt3lnB} z89j-4@Lf$Txv=p7O&5@Z!iGv#HR`i=PQ+=36eZWqAkcKKmxd+UgbYA50zNG`LYAA2{Ak*VL9s8%!PHI2#RcJce(byD048}GFN95 z@g&i1a;*0lvBU}m`p>86={-mmfKv#1ikSFV+{-kQN#u2_IuLoCv1bW-B{!ljYuGzWjp>{PX-c=5HRK z=E;NgeqHYJw*@o8elQhOV<1`Z=Tav?-^W_hVs{@FxFPAM5n8ORy^k0o zx{Ge;XJ2D048Z5b59Z*y38^k*##;I`B1b0?=)=&s1^BFCW3oS1-WQE;Ut%+^xncZi z`sn0Z#6bZCMJA=0!oSsaiFx*XuLS(QV7pag4|)l3CMc`%Y6`R`fc_pV%=efqNa8BT zdXTJr)qNglLoK6XPh?T>oLCGGCqhZ2A*Tk~a*)E_JUc!-cmSBgpp_6vY4ai2!wN;v zdi;EZL({}~l^bpRL~Y=JVFwS5KI~Dj)w91raNR7f&HsH~?#bWTa zRrsKm*xmwH0e29CCJ{DABp*vx+eP%F``!oOVStXzgZX{VY(J5P5~|vtqTa(HGuJDK5&AB_=$s!;J*+|ISC=4r zzox+28_~?WnX;$1)vrrbF#+PV1|Y`elMY9}^70gTF4)}$tm*nx#{7|8+3ki)WUzAv zqm6ahems@?iB}YqUai4*j9fIRAx<$T#OqxRhq~|Jqn~s#VahvpHz=~X*|ztQ*g?YJ zdQtlD?6?${mxCcPMCYOcZ`v)pO-vd&R5~2&e5LL392%VYU20Uv@xk47UPyKK%h-Ts z;BKF0<}_#qH`C823E-=p#G^X_*@OjNp!S1;WpvI80sKU!=&1H^u5 z=Wg8R6NfdgM#<_wb#AJ3BkmJrVv<&=mv9`lL-7$xZhdEE>*&8$;L;+(pLLC6Y{lPW>w7_~yaU&e;PD zaK4u^tJ8x{&ySD{6yDEPXU>iC_IXaju*cqGcyu zfd;fB6GBBnRu4q$eu>BX3O_GRU+YeMwx_;Gxi@RsJN+GL!#o&R#b7Nn4d9sre8D_z`>TSSfjIb z3T_S%bAt{+wo-p3+kHv}|Li3JfP3k9vY{4N&&O62Z{X$eJAxcHDRw&k3Royx(r9eb zSw>p}Sa>Xx9#xVAH~!FuT7E&0+^3nT5qgoY=+i@t$a#^NTO|}V(>h{ww~RH&GR|l0 zQ;oBMjLvIvR`);-ad_D)r|zLu3kN!GU!=)5kg zv}QLG3gk5KZMFaQ^XbyGVAe%)O4w-`6BO4lA8pAk z`iV@&Gp$vpGR1Bw$>j$nbr*FeW>c|smtU8vk zAEt*3Yeoob8vFy07DP?xBFUO?Ohk~rJYU1MJ2R!Cn2n@h{a90H&%H*sXCZ9PzMn#a zmu1j3oy&lfo*oJCK_jK@)pllv`_-?@lS9+J?cBF!r88yi^5k6(%3WckLJ(7MD3cYQ zQB9{n+4`^z4oWlMNhhPtGFO>m-!IFUbe2j@Hxe;- zx3%|!v(F_^oD*2q*qfUa=5!Qzc=MI($xgehf~#USk1*_UCU3&Zl)Lr%*Ue%!xfIL9 z1?;w~JVUpid{9I$`Sjl<=d7Z2CR6_ZKmBEwXRdPMV1#n$)kJ?YhpbX*TQICfC|ewl ztiT7cLp3gez??4|Wd9I=u0UulI9`PPAglYUy_AI*>BO^pP@(((G+rF;R9(m`;vH;2 zX*g{KC^yE*7=cCXFSOoLll#=9HGqH(AixMKv)rT6s|!tNocLh$bZxKvllnqE);)_m zx1ELoNel};hc5XFHZ=g;R|7UUIKJ|W)cj%E7vo{ow_e*X3|~f>pL#vC1L$fruJVpC zV3nAT{PtQSXH?m}Oy4A+;j7xeLhew1%`^&oF6{7Zi}WtQDQ^sC<9f~~X1}J{QmgRM zsqlFXxZzKk?%=2(K3u8=y^?*tuvyi;$N3VK;A*O@(p!Zl6j}Mo7a+Yqi0LNi`;0yY z!H13%j^>!d2Q>`d2LAPbS>4rS6apFcwtHT9&h=u}Rke?)fE=SL7NzRUqBs}!kFUS#1o?~t+ zkK`X9x4ZS?+pl?!Hd#}b|`~39Ko!7|Ci$`^#`MDEe?0r9L?ze3gj6) z9HUW);BG_zSf*zbv!WDb+Ag6%HaQ!3&X^=B@j0KqO70RYMygYYmWB&+R!_o$!?v3d zjV$}4W1meP4+!u|Z=2hek$_e`aw~tmQ~A7SAtld`s9jk_A9_n}84YpSEo1q#Uv2&4 zl1h96%|7|&tZEALoW!DLRZn($5*Z|^Ubw0!{iY8JA3t?3F}#)now`Mg$g^YPGt*hw zFR3AVnPVI;YVr;?l1IRJeB5 z1s`Lmzlh*gtA8X$_ZuK1l|+zK%P17LJ`u7C(%@ZZj@QR)exYLP9i?mT9$78VygxSo zY;2dYd8A=i@~hhaf0Qc)6r{eJ`Bl%Rv!Qs7q5RUEu|%Fa`+LY++kbJk+b#*yrDQuE zON1TCt`Zy)&&$J+KILr6jzWc!*fDP33t5-qxAZdQU;4sDfQY4syv+`afObQtLcWuGs!9%KNBIMv-P_Ji$%5DaTx6C>| zktnVb*kT#Gu!}}jyJt9QWbipT3ZJh3Ny@lU`0S{(6+io}^YVwfU>zSeVK)DDyG6E3 z4Ep+yqz@-K(Z39>fJb|4lRZfkz5$hq_edEp*Igu4=c#7C42YYt5iVveh4Ru@TRxcI zEvJ8Pv=PPe#n($nHvbBbj{#ZXT#AqHf;2>FT=i9XJ{Cqz?h$d(k}ibZdCVM$&Up zg&sZepLN}MOZ9<)&Aax#cc+nk1?9^Cm#zjb3%0}JYWr^&Ki}j*$MAW%xrz!3z#Aa7 z(S8Y1yO3|cTwAPpCEIeQhr-SN&%l?CuySyixUN2OH(NHSxvn2Z)oY98FrP*xtG4e$8?FcvQpnSa^7d}UchYo6DWgE z9xLf~>cEclF zCZ#|P(=QzYOd2m6S=y$XL+OvpJ$@OKPecZjy}sAOu!!2)a*yG?KlSAS7$wMGDCaxi z;*;N*MvD>(Tc(6sZj}f8f`d;A<7k#m2zuK%--0c{SO{!#Inp$cz8zzil(}f@ch94j zEQb628-AzGZ5l3T8Gid41C*2vXad2ksO?}r;9rGZx{Jy_hygh9^f1Xo)yu2i(>qm! ze*c39k8vt;srB@udD^=e{eg5hQ_HNqyBob`2Vs*#UVS~iv4HLIYmQ_1pA-j+t5)<} zT1=t?Dsy)cMa$;*hxmQjnD1KT-eJ!y1S5AK25Mxt zl16ReZv6^_6<^OK7cc!^KIhM!s{-uo^T5OkNwVz;KU`c~jXYg46wIpwVl!p-HHqVy zNZ!*^7j1vco;jnM7x9s^M*$Tb5$(QjHhAEV{I_^$smS*I8c>a>;z7efOEG(FrKiUXF&qihAv4Ym5nBKZE^qQ_=H6D^uuoXVp)B_p- zCY!e&BpgiHIeh|ILs8FvE!WDUQ*emh3wisr=;mHz2!!niO6NOXe>OYt?m&aZ1umyZ zS}Z*bnDFtjSKUN+ke&qZ|8hZW)|A#ioTH@t0}QQ{=g-&e%tS(SLqu4ZIdzD|)Asgu zn4O58Z|YRH9^(EZfm2s+AII74VDVUExmy}j@f5f-^R)Z@G5>)I?*j=l;n52=*-H64Xvh0*=P)W|cinn+qxy z7;^`|Ll*(vB9o+KT1m2RUqcD@GTzZMxqlgGCRK_^s}*{ zXPpEzKg4O@%Lh+FLxu;;@RKR|cO>cG+}can|BSwAb$4V`#rIj8NQcggga34+4z%9# z{$3tMlN{f=#MsD3gr2ybkZ@j3*}`HPcoeZs(t4ina5{CQ0FubAfb?ahDl=*;`d2U9 z_@iI**Pi#hyhlkwopxb#VpzYr^Z&-3PhBizIl9HycGpX2^xn7p7jLECsNpcH-P&5B z{DF~kR6l(56p!x2+QLXH0-epAp1C$hW*FYBf4Oymhtwp2^zFY#!FyTGs{kW|fw85HyyZONJ{u*b+tLSX59@ie zH4>BR^^B^u$ki;D#NuUFo=?8^mpSnshb#Yym{)%}GQ%`-;4NF+8Fi}9t*@}|qLfnx zWHO+Rf_A&i&dGVF1Jieee=tYHF;u#_=_kQFnjQ=f1^qfnBcV79-bSa`JR)3=8<)(m znb8~fCU*ZEyCm%XgHz{`1~s~K10nd?svzd1%bDwr`S=O}gUdz4n#Nz{uD9p^HFKp$ zLhS4Jio2MmAIS8Ojtl!Og-MY!to%yuPh^q~@}F+PwdP)z`>WR9p>gIK|&u2#3C;ag};UriVxR z4$+DA9~S@kfn8knFjv28AqDmHQPxYW4<+C1>i34qUOa>zht7E6RP_=5DbVcqsIQyu zO9Q!{zlOH9wvUe}GmC^o9dtfS91iOT{yNFaHobR45PayyVi+Zy@)FFauwt_hwhQaV zI#QS4KS_{-yMJ^lV!oE2s#n&~0Q9(kHlUp@r6r}N7TKp=W<9&o^G;sfB& z&D&dq`3~AHio&SV1QLdTtv)vXi?RW~8gwDqpGgrsx+04re%*~lvTZGWX>_er5m9Ka z%=~A@q^;XuQMFHm+=KhoNh5KIi?1iTI}CA)2<;OjaKu@s*6*yx{c>@3dwRcPiQvbp z>p{m--cFiw?W5e=_)R505IR!k0u!dt4w@u7XkMv&P>A z%f~`0(A)yYKevqm#ZPW#eH?$6Y%!4Ps3xp1%<{Iy;%1%J#h#~8k|Qmpjt4ZZY*&1R znO_w9MoX~HVUM&OE1pk##M(m`%uRdN_Gbp!o2O(HtPcU4+v-Bsvk3?o0CfRY4Hf$k zkMxGwdmur?XC`XCbLWo#R-Y31YOW%5*K?kby#{9O#peX%Y=WNa=Jg)=R|X-CIK}#e z5bx@=EERI|tNPeS$N>Iq(Gousrr}Pqb_p8wF%FktC>2^|2}W2G5&d4T)O8kg;YW;p zDSdeF51klbyd>?^=Ko+|?}yl50(XY`=nOSI9$QgazhwU?T=}9<7*2P8jyLGr^EsGx zGm}@xdJmvhWw}yMzg)>(T(vC@YIx?>CJfrU=hjIwhmmqgUR~lR{ZwRr_>Nl(UFum{i{1Ty4stHa{Ja?Z^eKlmE3)Y+#;2PBm!`z z5sK0z&2!7N;6wyY{)CJV7h?a+kDexCgKI zG@H9`&Z>OL74lPgCr!T2A;Ol2a#tE7T>p8H?U5;YlU79 z3!uh)>b?d{bt<&c*B0LNNS)DBlw$fnw5_%HHK8O@Wuh44Yb?zTmKJC z{#lEdkJp82`zOP$Zvw-+O5cx;lA^vCF|QT63m0zS7ZeuO!fb>2jG!x@x1o(rD%9dB zd%AZpSzLU)u8GM$_@y^C0YGWD_H5*>#}pd3e}TEy0aJ1{eT^m+z#%P-A01Vm*Ppx5 zClcRCK{BQIB(L@qBw1__yl9>z!ABnidcBAcHf-7~UBW@oIfO>A-Zkd;3l{y9YWD8; zCRRD$bflT;H5y{6d?A3&J619!ej%ZCKivBboV>V&7a4a3j?+fcf;1Rj6TP|H{!!xx zHSZODX-4yZQgw{y39*a{p?Wt`lskQT11sz05dmK$fwmKWnDsZP z{NHG6i(yP=*jt5;N%xA;hmTxIrhb*xPgL3^yGuZO>glqAXcIh4W}h1hCbBgpNT{}7 zwJ^cb5@=NrvE`NpwMHB7M}C(58N}qsDhLZOair!}8WvPl>R$btN|6lhhE|@Q3j;L) zX!t(3s%K0Ys3>h&Pzp*R@3%)#sIOsP3<^+E0ei}L05LyLOE_bwrzZgp^@GcW`T!KE zp8dq^`=fFYZ(t_7*2FNHM zQVq8LoKltxf*B_Q-TMHXLsC2#lC+}3Ho@nW2kouy~+r;E$+TrOU zzWPJwop?OP-5@KmZO6GGrdY1aK?ScJv)G<~{OZ9bKm6r(VtBM~uIkK_#{{Ed)rVsZ zm3HGprtprp3j1%DffMCb3Cip1 z)3pZ$w=J`q0$ha@iJ(y(c)$DCA>Q=eUUA@0p$?fAxx&f02<`T1z~tEv&@-hA=AWMOMc>w>q!7x7m>$)-h36^CgAvPx$3d7|G|1&jKqdA*`^S6E^ZgLO~3g06jA@zgt~QF#>T&&DtP;_j!0Z;+^dLSE(o)D3c}Yl@Z^%xb;Zi~ zA$Q=-?H|z2x$fgFM_=c`gbpIyA6%i8!MFIX7t!qJ`9y=Hf!7A#CuHJ^ZkATs)vfLY zV+EWE9kLW zRJ<#b_0nCh`S|#NINPY)vIWrT=wT3**h>j9-Sdt$uGiCF6K(E?yAAM+yb~l0WL7E3 z)sG>ZA@*sxvy>6{itBmI!`0efS9}g~7!UKuCEbN(pfkzJN;0vtx6ve2b{SqDanN{K zR3<(VJ3-8eEot)=In(*8x14I9AU{&^wUWf!HrhFG;f2vJqY3aXri=X)$OPxCLbjS> ziZwJe4Z$>8cQ~6Y4%4i8Ar~kqBwOOGS8=B!j#V|udm%So}OYx?j`TMBWv;;^X=`~qH$jS%Kj6UgK_j}rvoW+=@e zkymRz&}O1}^cJF2=MXGlR%zWw$at#?sR@tCjk;KjZf2)%M)aQZ&$f~iCEUTrJ!;Hd#gi^`5(!%E0-Fk=p0w%9G@wQ(^W63Qx< z>8AM;QnX$eGu8e`r(?Q^`GrR-OpiO^{!@-S<3P&CvEX&>wBf4#kAi1zx^2JxY#1~m zJ@Sp5CCay*g#F&s@rzuUtNwnMpQ{z8(AM#DNyX(n!*eA)CKvOHC`eKK&n4k* zz^xd*87Z|XKZodzmthBA=>!Xa)7opopz8m`)@9*Y-+NcY2)d?Q`c{v`{0Um>K>R>n z8!m;)@63&+7CESI+_>I@GCSVVNNV&cpHM~}Y^+uJo7B{uyT@OD%_luYppcp(KaA>z zY7s*`K5v;q>OGd583ueT_}0p3|Liu|?Re~)%R)NYJqK#=6ZNTlHqRysIcLY^AV&{{ zUWg-M^0L%VcuhccIEnCs z(G(wPHzGPjm{=_+9wW0Z?R29bof(h)lv=LB>#bwnDB-J-NXDkK`l3kX%L*K;&g|Y@ z%i|4?(PV|aRI;w^RwNy81g8(XWv*SsLR?F&&Ny&wVg?)FRzNtrocw1TL#=2VSA$r+VFsT1UUy5xD_5-() z@;?QKw2CTmhIjKwZwqoLwZzKYt|b2T>%ujyGiuwYq3hUjiVfr-xNz{jiP(bA=$QH) zaM#XUsA!0t=AS#GA0gi}HbJ~3fu>iJF4p`FLQqpNI9j1Ps;3*?|th&4WHYF;8??K@+6E|*$uEj)!Uz>WBKz?6`K!h&b_9xAYb;bsk)m^EOLQ9-XT9i~u~fqIxx%i^QpCH++-TyW+n2jH^$rw_yKJ#;YcU%)-q+h) zcvDn@HrUOalAl)d8z^OokB@d?*ljWtV_a9;*lvAHw z1bJlY5;xpfF-{(sQJU9$CMc#`;?3k-D)dFFGAM^bWutRxD=YH!9K23`QI$o&?eC{; zA1tQ78nKaijqgs0Sq`28y&g%X6TUF$xr(MaQql)&!+Mblc|@hFr#;VNteNzP9*Iob zErfF@TRXFrG z$;M}>L#z^{cj2d?@INlc_JGDk^oE$IpOsaBU3U>dnSFR)GxCL{?9P_j&Tq}tJ2cO! zentPcnSY@d!fDEJxx`m3o6GC^KMJk)B1X0T>663_^W?_U0yY8=^XSY`LNd9Xi~8BU z*J^w4G1@e}qJRzwuZvl=!|hrfpPHQziOQ$yPCV~NEnCa9=?iU2rEj_@{>v^utGi5i zkX>M1&1BG_`&YDn%Nb6K!_<@tO?Oq2FnvyvjNWTFwCFVlhqKwo@hi?D5t)-@OQ%*X z*x}|^t(AHq-iCzg-D z9ULktvHo_|2>M6J>e3j6$0BWU zS}2mxK&5S(tT$nB!WEB|;84dR8cRx$VY3KiswK}8C*F6VQ!#5-&F|D0wtXUFIeR=Z zb%%dTUGrP_6pE_u5iL1XxA({5v5UD{rpfn0%*i8X0i{;!iqyLP;_lGJKF;K-Qx`G9 zEj_k^xDJgAHj!3QTM5a=LlHPkIOROe{35(0RCEu&OK33(Ap9SAK@GfDDqMraoWM%^ z@;OFudu%A?jT_b8X6w+^TFYTtA2?0jdv!rpkX2(`cxcB6jw{Cb5BzV0{R^knm%^4w z$2dDzWVrkayUl5NL#VUQoY5y#s9v~sa(g9R$}j?D^Uw+--H3*a3NL>MiKjFwIIY+W z-iy?+M`SCgYr{oEsa|rAm;az#sqEglpd*UFm>EXL4lMK$Ik>DOV$)&VGz7A{;TzZk zn~YflQ5nCb(%hy+%I}D*$Kg!33i&CtL>qeG@u6XGhhTJAou4Zbt;5NxsGFRlbW|dh z&?`eACNa)!g=TSLC=qR*C6lRJ*cC5qS|b)bWYX0Tsg0X6W%<Q>0}gW&pP~k zlr6tSi+Plc=7KnKd<15RwG-K+B(8(k0Ut(;r&bZ8LDFkGhe(#1xeo7N1*R0AS?&p! z_5uaSIc6W&uOwol%{6`IB%^nMev2~tuia1f*yGfb3kfu|d8RBAZ*o8kXig3?Qjbs} zBdT~KWGYD+3`OSs;4ru{&URb-4>8{fFr-GzIXu5P&u=YcB-$Ve1`M3G^QCweQJs1m zdc5c9T?^=#vN1al3N9)o+EtO-JA8mXgu_BR8*OnM{5WI3H!nPi$aEAcIEb%coPk!A z$}75T2Du{sGoDkS;C>3xP4}a1;!Yv~1`?dNFfolj7kZZyg_Xv2r6gs0Y21Rffs3)E$PHJ|m z*78j)v+PuH=dq*aF6;cx9gmK~cT#ePNM|;c-$MFlSQqa;R+c~P+^fAdNX)55J&5*Y z8?ME{?l;}kk7#CJ>A>QN!)DS`M)`ZqxoVdz;|1{hwYWd`w_1>we3^nzfl?)q^PWat zVV!B1`~>HIsj-;um6z2@a?sd>)&O;{;i5zc^ZPgbjJvCNGrEE)V?<Nve-u zOB7nlOk-niyNhK>S3e=s2j27A-^7u0MNX$+P2MzYeRtLgGtSY^6$~t>Q}v7(n~Y3$vYlnSkwW+gi{x@t zZ?3}F1iHp77@g-EO8XUIKq6APZ$FhjrbN+_Xd8+k`ziAC@Bx*HeiRPkAiw=~q!0HRR$xhxk%xN+;!l585^rUYj|ywDNbn0Q+JhW%}`G%|HyX)3xYi<`Aim zE=`OQFu&SeTmrKV7_{Bwc|{ER*SOZY<*ang?~ohn|~T5Qr@4XzdO0iX($zy za?{bHn>79+4_62dSKN!eXN8aA^mxmt)pJV9%j~w2q@$ZmE`!B+u2&S5BJz7?EnMEc zhW6`62!jW=RgOBYhwkTAOQ%U4wZH0HX3!A0<+M220RoEB+&Y>`x;#sU(~azbCW}nG zE#?enAX>lY#=Ai>*ZilMwlV_qNZ@A??TU&qhbDJ~Q$95jpiw{#WQt=hQ}%O8 zH@f}3o|T_TWDq%!F-<1S1~~`vzTenrH~O|-0K#ia?l7deS-0`M$F*af!0svX@G@dq zZU`=auds?9WDtlANu2Gtk!HP_{O_3j6TB*xeO+!Zch7V!OSkqa(QLM$G7%qwD%44| zxX*!19208HA?wC>w*>7rG7;~!*cIDME?z#nQ9*|e^jmUW(XI>P^QhOsMrg)rj$yi= z&B)pV$)O0mQ}dR$Tl#ZS7ZY()tX4ayOARD4YeV)DFJGSIaBHQ`cop(pXE2gOZF&jp zu;AkxBuw_jzAif-mn+b2Z)O$mm03e!p{o7d-+7O#-)X#^7*t?t5~^3CNRKL2-x;fo zg}1Yz3TVG)j-5#7Y`bmb^PKO6q5ZYQ&2X9!m5v2AO>icrl0bB2FJ^Nv8&S$MN2uDF z8oyVMOGx}yZQb*pKCcBvYufB~JRtsDCvQpdRrYo^OMvstD~aeSqVGD1U+UhKQBsW9jz~ph zapRF)Tvx<8bG43o95PF9sUc0V$3zh4S}r03;wYXGG*u_@IbDo}tgK(ZV^L+}?F=Co z9%3xmWb~{%C8D>q_3nN@Me2pr#Eco{l<{Pq=U+^J$@L1$#-)o_l)u%k@gE$wzb$km zg&is1akXU=x9Vr!LLx^OwssOOsDdABZct~tkQdX5HF!VctTncbgLnktmC?ev#ej#e z(-|ZmOsoavjdC+ISie=)v*aiZ!pg`@f<2;b=&&d;jWd;|JSl5QX>si-U z{y>G~YmUF=V&An~ld_L8bvF!IbrZ2!v`M90)r7tz zX8ekYbFX~S=aH;UF*S-6{gWOw4L85gF5m21|3)rIpRG)$o^>zm*3i|zy8>RWQAU2&{D6ovqakC*2NWwQzVj5+*lD;$DWRj68_DG zl2w0yFQZ37hP%Es;kF^@XRDk*%!FdeWA7W-;7+tvJe5h{xJnA^$`t*_bWxqXJDDW8 z?fIPYmsVQN96O${;N}h8y#Fv=wO$K}|ClapjlbJ!zZGRskxD0HNFw8k$p2xfK2)uU zyWwuxvt=<}E8a$#bAO^CYpWZZwPhtHj~fqvIDGKjE9K^}K1opoCSoUreZyfA&78WU zt^2fx++r(ycG0gIOfKY^+?YqU-wq-oK)hhsyQ-&Bzl^ua8?h z2``)H%wR;DnfqEmc1nf{I=E%o?!+=kJhiUhJ3=V9`IuCb!H3&RGpppsmv_tu2kRd# zd~3aDMSS;|hK!J8ua5>@w%b4$@R=2C;w2Hc=S@Xr&?x}K!h_LuQzkCF=OY10=^>z- zKMr~)?R|nA6<7%J*vr=h;)UrSH3;=d4l9?2mF(EeuThzY7` za-7CpmQ!)RC5``&t9pAb*@@cuKg}Qcxr9%dGX0I)1Sfa)qj54PZJrL@2Uo2O7B#FQ zI;I=_R%Q-+tB2yp+c#I&zVt&i8M!>G?8I45K?aqNz4y3=whptcFp4l1+x4y?$p<#yhN~* z2L)u)4Q@ezfzSkXB=hczQ|EYqg6QQRB7c5oj1OIAHg1V!lKH^daXfWk>N_|03ny+jE@^MvOn3pdesRP4$~fz>A;*SatVKJ-^7LL@ z=sf0Hw#ghKCn&=#4xQNhGsvvw{FBN{!__wq6SVb=aYdqY9KB)xzpr-#?#W3gr1Iar zh)!LExI&vSqqRuNGCl8dYi*H~|OWN%)eQzgi@!o%Q4L)GX@>#b!9 za&FCIU*R(SsYG6ZC#YXpYTBX=jAQ3Q=rDKjwsRTX)atvi(pj^jA{|0&;?)0#v9}DX za&5OjDFqZKpdd(hBPcoPP5}w&Qbbxxx^Bhh|bz8-!R{vEPHH=Vku zhi1x6j0N>McT*!@Hj#ol(~{~(^zGCrlb7vcVvpLtO(5isH*oE#r9aP0GQ$)C0Wt^W7NvZT|x!2 z=Vm2v^WC362|8qZo%A(2DDv`%18&_*3xltln@&!ToNNuff5-3;9a&%0;-SOEevaNt zoU$h_5wCQXJ4xE2rkxNHq>(_Ws`WV%aRzehY-cRj$P*;vFG)o$oFAPI4>eH@TQoVV%cBEdj-8Ig4$i*)Zk*+d#nVX%it}XfPyW`R%lq#*I zEseyGuhD+bT(mP`N!{tN&FOYo+O;|NYWF09-em;{Cb-soB{84tqAn0r{9d4sT^cSdE;q19ExOAs)MSr1I!6F_(c~UOU%$5_IALqc8c> z7qCy4;qFmjbo*ECATvvLPZv-if0TIv)~Gl5gBC_e0-S~lGI$i1hvTQng2wMa&D=0m zzO+1+0BW%?fAyk6#QzhXrp9R+O8<9?L7$F|iv!XNZr~(*c4nV9%H?`>hNI*BiiwHI z(DGqlOLuFPta+BoU%~?IHDqVSu-lgNhNJEtas&O&tP8BvDk8Tl%eAIspC|b7^iQ5V zfiXq70V`;IeH~~GfTdu*R$XOIPFGv_mjiq;@pP`~$B?=nLj8gQr-nXsjQ?mDaNSf; z>M{Vahx?Wg_-#z@_yD$3%#9gvhuGektg+6rZqu@xT{)p7bWXa9ovZ+2MrNM+OrIQo z5`*U2pFU@Q(;Hg))PakY)Rnh#L%tQo$}{M~TbzUXH*-R<=TOBYx}Pb$Qf<; zF)-Y=yy1rJcc1+d0u1T6Zngop$)u`n94vd@m|-^PC#YiDShz&G!$$PUj;Z}Krysqw zX_av;Ab4wTe!cCXb<~}wnAODmp043wwPluY6x-dRI4ygjREGA{Zaz6*#5!Wl7fnWr zXhiFL`liS8kR#UI_4g-GyLwCTD9AaFW){E-A|QaC2}8WnfG%LYV+SQPuZ@K`_vjyG zXfgo^^*rx6a}U44Fuxl`wb|mWSw?5%+0EKm;b9d4IL-m0QB-8)18A;*A(+V#o%Mb)zpbvyJBPOkib^7w80@8wd8QXO9IZdU z=qqsj9&p=Wi=BZx)-)5?jsU0#kr5H)*9z4o)7BXqZ;4Z=k~I~qT| z{=QEuVh%J%Z{j(JpnR6839@xC5;@OjV`Dn-y6e_PC4b}Occ4bw1hd6kZie;n+Nl9M2Cb=H`nau5GjP5_*7Zuc)wkfb0r6FfqR0*DM zDU~V+>R&@BaG8UT$vuDUwd3 zv%~(McJB~!@gTr95F2H_7P!kf17mb*kP@oHx}}}(>|(#@69&*RC^jaA-IzWr<+9pv zXsCQ|8d%ts&6$G&VZ>?UDX-8kbGOTBu%Td|hspngzWxe*QT?A85|masw+qF0dP+$o z5o1ccVz9Zn*p0!Lz@FPEaIJgJ9t9V)j+EU80ulNiO{vGNSLcTbUPVneQ`^!I-=(_U zMsjap2Fs~(vNgF>nFVY`%gZA$KCt2eHYxsu>L|uj{ydP_wNs}aVRQhTs4><2!HJ$# zb4@P(riT@q&%ay%Il}0ySDD}Rp&TX;uRdI1MO|EO+4-KNhC0}DX{uY5zd3I+7n_G~ z&|Bg^@#zN?B%D(SH2_;ri@1(ji=+y7d4n0IkN^U zmSf9;3^@MLO#tQx`EB8amL{y?0R#JA)0?*OHA;5_*D6;&gE2F;qMI+u;7E!{I<7Pn z`AbFQdZU)eoAYpYemt_?d~>T_ZWwAE5)ttQa8;3sota5VJ>KJbwG3v-B>_p#F0il5 ztHr$N>BK?*+~BAVYkRF`8thK+E{4({XfGqfU|w?v4<5FXnZNPGRHCXpJQP2a3pI_v zP6h4yGvKCrv^5zH6S4qPQEjmI0Z>i2PGS2WMn^{zlf*kIaw;+}O-R%3FLI~*GHjK5lv(5?GXAlT4-RVGq<>35tLY8mvmlZnNJ7dHs z4t8fn`yuG3YQBS73eA0}7>Ss2*NgjM6!OKK&g}_ScD?dD#~RHWICTcE)rYRyL~C~%Dt!>KG%@aG ztHO~hCW}HxM>hq_Z}mnanGq4TTxkPI{B9ua2|l5RgD5|5v~lEaD5WsD__^HZ9kPhZ zTNg{b_b;B!6dWH(nDloy+vOm-=_&)brkRby>_pSk<0fOkDvy>YbYCQFDsc#GGbZ@j z)R&%(zk0(;`XF&(bzz4s3a#yeSg=yYW4FRgc7=I)pyAF?2_E9Vk zVZ?-4%OK{Fk3pv_tNgo1u5QZ$X>Ece@tXNL7nKrS$BBb1F7{TZ{rp!Rq-`5vmH-tN zHrIcqBk@h7nd6HfCh}c7_7de~7rYoh-{A(Y!G@7-HWf198wspgGJwZ@rg)!wMT>aY z&HpUR#~hSPpTl1U>D=rcx*T;|qs!p)6=yZ2os=;(T@6ElvU4F_GMsCQYCLs3JB(_Y zr6wuhcY|=*a4FFSzhI&*E&sxQB8PLfS^j|4{AnO@b|+djDiU8Zp3kLrmbZ5NcXeZq z5n@I2&(0!t+~w|btsZp4I~3%}@yCucZ#IH)*<6_rVEzh-S=^n#sTD|U-nTsz`Zj6| z_MqRB`aMaouxM~3C?&)4e1H)&R00zj=PnhNiNt{+1Q=WM7b|wbQ@NF68x~LBI^D`T zu8h)-%&NO(h-nb_Dok~#uyGVX9e$ohKYVh&fcfV0&UkC{uP&O0-mJ`&NGep5Zp zat?Kn6frGceIJ$_Wb|#?O6{ull;+NVzq%$$j9aQK2tS9vM_t4SdBgA0FK@YQz%=DN z@6~!*u;auSur4Ixbwr{hyEXYI@v8KHL2l2iXE(0Ys5q5fMg9#{ceT7(TjMj92Kpsz_z}EVZKOin5Yd1SOdF2i!YR5La zgY+dOMKN#muJFsofkKaOO&4r2I`{xqOO@$2gW&(dCv@Oug^SEP1lZNa#^T+noYe6~ zx!;N3%`9RmYp>W^iydwsH6_1fG2n4`#-X6!Y-alL&fjpJcwYa+oB53;?`mZTN&g@Cg=ZIL@ON`UV!#S3 z_K`_0p$H;H{)nUcY9LcZ|@bkUfpT#Hx2r( z0{^sdO0LuQ9o**GM|SUD9M6JrU$q{}exKuFz&!XH{=6j<(qe^bR{<*Rc&n=1cXsX1(z`*Iu_``=(>$f^O#1R%k-~QhW8f#EZ34b+R zaENH%*sOew)j)cmK|rp&5lR|%XiHnI->mtBmNGOb@c1RIGv-Y~l3g7HY zVB=<1ng7n7oga4ga7uiy;QnVgb1waF?nE0Z=iwMHoZV`ViI3lMFaT>>c+62`h;?|X zk8>5EN%}t`mv*-GH}(#4)~?)PV;n}6zlCxCj&VHvW~qmUhKL%wZ@A+G!&>uDGbt*@ zl=$fsMtNa*a6gZWkLo0XnB;zBDk)jaeAiD>Q+Njr1Iafuh};`kxxZ7M+ghw}xwKu= z1^RPu44?PFt6f{@7vL`w-0oDtyc;=@fiTZ5L=S>@heUt!E9`==%^_&Mh#(-j>p(9C zPisoTYej9&-d~5lPYdsrKRA-hlGDyB+BRfa7i(xZ9x#yY9{Fv!ncwT7&4VudOL$Vs z+8+$Vwq}f4ZOH@GCMlAw+>6%ZNx7n73Yt1_q|cb3U}cc?5v$W*T{qsc`5F~SwL%Uc zg{7dw3Y8BdLE##9iK!~Chsy~Yyia-fbJMQe=WmVHcF3jP+y0Aw^Ca{L4HD!tIBy== zI_gV~9r<-ttylb(cWwS#R>#NL6g_u-KVNc1n+QH~%&RiLYawA|uHvz?pEhVq=g5_9 zS8y7~at_+(`vx`3AoK?6aDP1yTB=qn`vmO-DX`z8%wGVAJL_!fVzRjHb~M)(fW5gl zhGf{y&1n<2ij~#OWx@Kx`^XC>5g)*eTE&yXPpLE)EYPgf;<5wwiir>j2}fp=bl+=v zu_YEgs%}MJntCVuCMI}ys;l!}Fn_a>F&o-@rH$iRmp8vq{Y}E*B5S1cL03f?VEde* z-Ngbo`&T4g@D5H9i3ktLIqaR?U{9`{x)YB)qP7uR1x$^Sg}=C9YFpV)pu!P$)x9nK zaNV>X*|{nc&qG(n5^To7uiG}>xz2k(GPdPX_sLJ>H5a3wSC|O}%zbz9B^64UN&_qY zEGG7TsUFAlTkn3J%GoRTTWDRtTp5Y=7VnF;Yivd&LB*wu%uGPJeMa0grCTjp`pw#) z?i`+x@ix5@7eJI2n*MGdj_D2F!3q5W*cl2bXzs!KEK+Zty=KG%A}HblP>oW0W8vU% zu(4qZ0Sz;dC=o5Yd)*T_)nEk9RFomH(bCG9pbKXs`oVRJ`bszIhJ(Km)8-EAmuaMJ zuk)qem3&_th|g=ykmN0U+$!!MzG7r5vV7H&cv0f;+=zLG|KkrH#=^YWcbdN}r22Rz zX~3GZmM)PygdQN$2rj!!TFf)zS++@$ors+$0pI-hiq*8xdcH_YM`W#l%6afrko;>S z0M<4?jvRf`GdJ7%ScjjaYfZP!=Sdhv0;gq}ZEJ4~%L?yoon3Hnu-y)+_tvaanM4Qh=PX*H!@4h~ zQt6QmD^1~ytbZFEkU|&Sf{18LOhdBlj)__M*tVmBUl(tM?T4@Ai2RzaajFl37n=VU zSn^UMXAn#Cy{;`s!@hi3!(Ivx%?Sc77)0jRCx)2dLrM9j#HjOPPit^ zT~SJm!$DI%@JQ1gGDIu#Wfl`|9qpfH&@8+@EHt+G%I}3K&OifKH#%qa z3@N2N^Y1GmpaU4@X={^oL+0v5|5nO_p|7@}5eOfVm`L>Eg(M1CS6JtIeE~p?ZOv$F zFPI2&#_jeRn6Udo*f==MXR3#4_?%9*k~{Hv&RzhvUtelCB5od-GMje1XWolnHXAo@~K_KXm!Jc2|UuQCy@Ka~&TNsS0EY?v7KgvSfZuwh}dHTYpT6-R|jTs#32~?#~o$XZ^X7E4cGljpeHdM`S& zI36mg<*QYWq_`2rlrohhAt|7*0J}Yx3Fd)i2iOB*b_&{(m0-6kJ&UD-xqku6sE;y9 zKW1VY54NpWkvYrY$vE5M^mh7#6E+PdwXPg%Vlv+4w98+w89qdw!}$cc{AU z@TjrlKKx0Y|NiRe6`#dU_UDoD{*pFQ0XWU#o@cxO*Kxnk0+R`Aeqbd%3?oLYSnA(@q3m9?hEF zgK+48MyGnK`HrW8TZiZrf0DY}_@rm#Aw&!6Zih0eUzwgbmox^qj@wC7RS0Nr0&6Q; zG-@R`I!E1lhg7meE1MaKMoY+nxWDrjjP-Aima9W<%{E)WYN?0lL~l@N>FGB|vIf9L z3QoNaw7gL|Nd-yCF5ucT=W?o5p|_R)PuHY`nxST-7JQVnurvaZTd%neN+Qauo#LRP zWs_=C(P?}8ANggEPwnS9#n3DMVAgrYNBUwThCY5r+moJx{qVK+`>EDoM-*BWub-bE zuhR(wEp6y2EXxQ6yv4qog~U<DsaF*>jxAz+@If$VZr}pG2VZ%Xp#B|*hTp;Q4 z*Ld2aZjBlzB-9neFDnviT|=)kT5mxQKjis`!Wl~Z z(+m9;&ALk@9Gy&Zz{HM?onCk(1}xqc^m^#B*Mi({3D8{-*opD+dzjIBN`bjaf3G{( zOTr8GtQd<;qV{<%bs;8AZuK2>Cr?C-i}jsISDey#8CgkDy+$l=|Bt+K+7phC7L)l+ zGWHiREKbkN?D+X}kRDjgnAi0&;=?+0k0;V*|KtxkWDFR?sqvt}s+l;5kijfFI;-q8 zvg}sOjwnT2xKr;sw?LwHc4NtgP^0g4GIW=iUqp_W_|;gj9H05Z+W`5RPbzQ4uayo& zU7b^yKQ2e0Z$q#MK!DYF3BVQR)wBxSYCm=aX0lVOVa+{Xib$&-yC4=Q0VB z+7?{Zf(1&C^5>jFvoMv{3eTeWUwP>ZRdH9-fuX@Z5R+OGY6jE+pL?*A^EYS}NyJAf zpOP{WO*>XrzR~t$i@6P9neRO(J%3s*fgxp*OGNG+twPqvlB$;oBr@2q&{)9oZ3ix^ zWVUw&uHo1L!T&xzA0$j0bc#`x{{^IA!3DUg3u7hc=G%r5|)GWo%8 zQ|24vKW5syA+xY%3XadmbL7-9v_#lf*~ zj4YTkEKX=CO`0kl3~VXy z$5Xu-_e!+mL+EqsY&&F?cHnoe29&)3hPz%s=KtpJ4|bsg|{}QCxXw$VN+kyiR zryUxLnj-rPR|e3rYS4f1J*cPj3z^@##!1lLJNgk%H1vvy=#ScbwKp-O|3=z1(b};g zWe3pXh+nWzZBly=?sq=(-Prih6!pZyk=beaVgwA*dY=65G+g8gRY!gH*G=A+AsjTk z7%)u~92ZFqkVjoxC|kmKQZr75>ZW0*#C~2KxbNSr6RBv~mT9TqL1*Oyj9d})U2=vw3pfgj5z?O>JqHBaybV7Ikq#ru`Dj#D;SyHh@?~- zp{BZ=P|*$_D+E)L?J14Vacm}0zG&{Nt8oP{g!pOG5fu`)ANXE-^BAa_IRD}D@l$?9 zHQJZRdl_X!46LyZb4U}M^-%Q}tVu<-x9rWd(6l(%wB9|aIs*gs>5a&P z^|${8cEJdvio+kBs7|dzxrX8+qmCtRQR#frZNMrZD~RLCR?cUNIU{4u`QPOp>bifH zRPfOje=r~<-V?SZbFE`u!^{xoK#sq9%!l`SlMk*p_-q|Xhq!q``J&M^G!~= z((Le-Z70-lsJ1?>KAV7!i3s{q!0aJ$cjI}V;>3bNtL&cughS8wEk9FW_p|Ol-IBQ5 z1&@uYW)3cx>zRxxftC@Kn!* zkIbr8eP4h^_--B_Mlm+5CwzD5?H9)t?t#a2QK zX$bRKJVA)~F&2sUN4cRlEAChTPFqK+vO@)b8%DR0GHBFf)GF7whu_!D3|@yH8bbe1 zRouV6D8Jy*_v!Mu$W2RGSq$a98aq9`^!B$}vHu(F{?P-PS;;_1@+-Vt@O0OJGLXw| z^EQ%e+Nl%0Yed59{dxNCIeq%Xw_ns^LD5+5{P)QZXc1!?{T z-~hLco0TM;1VSWMT}=j)KN*w{s0mmAIeV;HpLoQ?4x?}cxMpbLA#jXqs}+-fHekt!I5?;AKNe7hUkO);y8^cV0zm0 zu9G)AYh=fDy2|Qf;cf0a=r8CXSHF2Ccj(IncF;|o|g{Kis1@X7<|W15HU*qQakZ;qdohr z*w=ZT2MAIT>FBZqQCU<$PMl6k7}}@c=DkCDlvd!#=13G=FtpX9XXc)7-Ro4Q?VFTA z&ygS}SC$1iS()?%B<_W%N*pXDw%IL?P#v`x73Ecjrk6Dh(jXwg6_nP#pRCic|GWG1 zzMcajQ4)dJ2c6-_d}Wi7@xKI1Xp6qb_GROSpD=>u>{4Y``P@@v}tu&wMq~Y8lnZ>sx4w)nlI%*HYM;3Y20;@U{lemIfoaF3#+vK zW-lo&4@?C=`31Zd7w;aqqeaXH#+O#GnFerB}i;AJDxP`t%WkJ62G~1MnOBJx5M$|KY+@IfAfGhBhAd znSpI;9((XI<%Jm<$WXruI@u&x%0V#hKaADRZul@7K%Otnf{cw_YooOdw!_paQ(X3= zD{{q%DsB5rukQjbMQGLdHm7xtl6DCY30^w~wdZG~t`ADy0kwaP9J*ikc3YmFlp0>9 z(%8#{shi{yV~eh&rL{1VymZA5a!Fy?16yL?rYJ_cgnfn_SKwCSgY|IxmqvS4PTj`o zXi!t+0`a0heLpUq7e^zNwuZIA1T%y|j4vxTV2wuU=E0Y{Ij`5L_>$Yn_PkK-Vd}v( z16K&a0wwt!sHigoIpHJ@Lj-iTf}+o`4DVx493=%q3@p#F!Cl~tZ*B&dm~2FnQ&PS^ zGaB61@`P!&fM`gDTlVv;gH+;cG>7w?7yzUy!RW%e`imM_RU`D$rI~VXAQF`Fg9!iC z(u(BaJ~KqQ`}J^&q0BcEaEU?4@UzOz>m{bmg@0Pzo@<9?8I4V}lXpB|el3JT8t#}O zw-HGyCl?WYQ?~aZSqJOtkJpm#`o+72~zE!ijl5uWP)7tItsq>{n&1M*cm zqf*}R%NiP5yUpG^tP%-EfM>g7tOzhN@9*b5@!`vTfTVseaHEpXArMf#R)Xw>0PeGQ z^a&98YR9rN4(p=me!N{(=2nKxe<}msPpG-;Y2A^d-L+7aa{uK5Sg72SQg|Xc`E1@a`R)=G!88*8r@b9dVmKHq^IVr`}P_oh)vwnPz&&x$|#pPN^ z1orkYpM>&09TE`6rYX{1)k2k{o&Ma##A1DoD?<2*xFljua zL`=d%VD91Z{Jzwb_^r4C=R`gANYgy~GARvtImd5FJC=uWAyhspFwQjjQCyRgz0Tuc zjaVTSHN7?*oQS&hhm=$@GAdb>s`Kgc2b@!ex0f}ux!x%@RQ(kN08j^mpN<;Btrzt& z5E@3BqL&4s;OrR|Wx8TK50UcnhKgiAnbteTlwkmH=*_{Rk zj9HRe6;J`n1EZ3sr6pi|=E}tw>^`LKmhvJ9{0l5P0DrA@dZBm6MB5?RK#G9W`~9yT zxxP2Mp~<#yF)+G9U+KJYa{l-s*1GndOYqkR=`Roz%Sl}Qc>e*Qt0v#&G&`AxfW~?1 z{);2&I$lLp<_8n#%7n*hPK8?Me-9owOtExa{LHp&`PMrMdY{-QQlq8(1U&^NW=~vk zEu@c6#sKk?R!%Xkpe&~lL$JfDVZ+E+X>`6nL7DdX6YD(MKPXN3?I492tb6eWv0?tv zCtAAu^l0*Gc8k$;$Q6Z!f;pq4FhTPZLRg&(h)Z~Agf2iws7eWi17nnnOv(bM?M`T$ z6H_d3Ad>)0f3>P#>-;hfd*Uu)1NV`nq7D97RK%5^_MG0!QrG#)*h?@$C?(nEu8M#1 z)I=*&9poA?iUnFkh`hbg0K`!r6wpJyM}px5`VJp|D3CQ)R;*k<^YtWtI5SLbAj{4b z5uhL76P%(UgoGdc2Dgl7Q!nQlyjM}lgFO_(o`TH#aJva^s|ZXWfwWUC9J!28Y4MR| zyvODkz5G3OoWvW$FT_jfVY7GnQ7_U;|ANNe8KRtjtp4Vxk}LmTpQl!8;kzI`SNwI((J)l zB9G&wGNW8p=JAbS(v6^h{&z4-Z5I{k9tl1O0tAQCwmx#;GWGxD_(-Yz_jSeIUeK`hRa2RF z_(*s}5r7*pgivTJC%f??nkuQ%Ggi_wx<-~VG76NIYAgh(pTejF;QoPz88}sNYFeNL z9lC$2K7Q^FS(pWcUsef&NJMW4J#qy5@7tSocn4$M$!O~N!aqqafN4c7zV>V6d7_TZ zvb*m!hI8D@RTWmY?h)iNG1Wl2-!aLreC7@~+Z3cx)Z8wrjfV`wr@6fdLFR!ISVHO| z4Q?nT5I6-*8`@T{I_kn3Z+^XY_uF2Lh?g53^4NAGeYf{^ei z_LS%_Sgz5_$Ph%Ak^#u82&{qyHXNvTBtAiyzGbNk{s@{BY6C^M+C{93CFqVE=@bv# zeuhI_|7+?{ckCNLR1UthP1d(g;bAYq$I?gwyp2IlhTzoVga-Z6%X^a%-AR1hGO#+Y z8e^Va>rWKS?gpe)8y=hD&Jt}Z+qCd9@Y{e zbn9oN%W^bCgV*XruVihxjxSxU7t~(nFgw?nE-+;_JWOfwUyG zR&e-f$2tb!NzbUo?FGu>lX*{k-TTY*7>MJ9=Z`nFG~hKvw@0lh z557!bnH^zG*srJ}&Px@UHn~Q@SRLLGIyq>@su+$hRa8{i>H1nbZtGG6WI;i(FJffG zLM%r7_{p39k;NAoU9vuagKLfWSFefg3#jqcF$Bdsze@tx-W^;lYrkN5jf})y3c*!9 z!CA^0gpF4Ul$lAm6_l;Yw}7526q;;jYIyaK(2Fvla4?LI(GTW<%%Wx>G5LPISk|&uyEo|gRTB<1wDA?-XZ8g#Hm@gY#-v)L#y?cQ1IyoE=1-{ zAD7-7S$-MWra;_0NJ;3Y0Y5ZIcA+}}IPPAd_^gdh#I28tx5p2QI3{PFKajjC+~T1_ zc8~K?30Sdo{j`&jBsk|bxQ`&cLe8my& z^ipY_Q&nN61+n=7j6_SUi*xs{Pl*w4y-+oWRk!q%-yQ~S62CuLmGqP(8}5vTlwW3S zXPk#dp_qIKtXF`MX8Z9V&4K0O@yY`(s`)D0_M3C3~a*``*7-OdKw-NHI`Pwr6zOVtFO~ql;@t6 z7o^WJZ5PoPE@*7P*rXV%FTvQ1jjc4zFhn0i!&1?Q~;yBjdGhh zVI95m&e{PGF7G7)-+-G)K5+CQK9XsU{+m1Sjy4*B`shv4sCfvUpiTF}&(GEu^ruGH zV`I*?I}!f--UT)e;v40Gpdt&}FV?^YfPzoxFynE535}#1pS40lNO=eNZtt<|DXMRL z?|?#Ge1o>RxOdPG@%ou^GZvfDHbWhWoOSK77OSoml0k$@rOp7*2P!373D|Sn%Sb{b znBy*~sfKh2$IGa%jrdPvrKvoE04y#5=wC#mY?axB2uP9z4QgbDa*rPQ8Iz$2-jAjT zJS3iUzqtg)adGZ1tjeWow%eLZ!K~@IRaSjrB0k5YK!uQwgS{II@k@P1VUdQ0NIsoi zOhOj!qo-21{TX2`>mOIt=X4Ga)gSP!V;TjAt}MU0!}!Kvn0y_8F{?C;T1U-4Ceh?g z^1px3dy7qwT;$Fl0d47xp`tzwS2UBzDUkWB>TMJmOLLL{Qq@bJtH zMd0^9g4lQlx!G>Cb=(9AfUdz^C~7KO4}=Bt&4tk~{!-ojO8~q~Z}u{tX>60dM208z z-ea6+kCI!~XjJ|m8w|XXIsM$UWw=*DrHZ4i#Qj8UB&0cB$Y1@xm}~|6qD5z6%X}wJ z;>!HM^L`x+BJgkdolXgH-$k;cUCnUwHiXRyOZ$3<42sHg`IpiJd=Rx8uM8l$yqKIn z)ha1|blL5RT|z=f`G{V0BON0QLxS|H_t9LqQI)gXo9feE3Kk=ln3JoUiH5b_7;b8x z-kF*;=s?=4`FCFIByV36)kp79=4v@2n!M&SLv9sp^=7C)x`-g~aKgQYl>)_|&sygs zSdeKPBPl0WG+90;W{hJQsvHyMbT7qX_Rm>6lVJ)4T%BWSN~zCcrB~o0L_XM3mNb#B z^PK07^T)k2r_`^s>Z%w48w(+9->zEZ~I6y;b3RP|oo^=O95$RDG}K)5R8Q(v^@glb#(f#pgpPDLnD1>0)nq zZXb<*iIf)s{Yax4fm(+wCe2Nd&f@-Qy{2uRNBleTD_=&*A@Q4&; zC8$07(~3yriJ+@>+h~U)OK(^1w~}7?`yc2oVP(1Kg&*(7S?v1(eXjBrHS1%xIelq$ zX4X$5wYP3GS>X~~J>2n5G~#NV{%2SF->YIf&BB^fKkBx?&jkf75)mPG_M)JWpdvW= zYat=8*Q>l`h?s+G7ITh?vN@4@F^+}uD{DuZZOPevBR-q{D*cFO?r^Q^@z3UKx`;0;$BoZ9feLrb%qcUFjV3&Qx*nya)t7>bvqhCn-9EIq6!sm{2G(p^MV#P@O51EVT zI}M54{Uaq@WKX*RTn<-^i6&k4EjR!>jQp`#FTct!Lf;OgI(sgBvrkle(l)MfVdyKG zIEf4`JMK&eYa>KQLv&nza{gmVPht?aFxyJiDk?NtD49cWO@EY$JZ141=!w);5L$_PEwcRvwq(L8-f{lkQ>c}r=Q zo2DJLQ3gey$O(nvkcOEM1(sHH%~ZEPD0$l$K$3AEVt#8Geu#qdr=Z3T;)wq11Jtj5 zfa>7=tW@j;&1Kk&H9czAJO-v+!=+f0%%Aq%1ihR|q$sUtdYRCU9@?Stq|LL8EwO<5 z0kpDGB6~G>HpB-L;3rgHNjXWHi^L%Qma>r-qa6>7GZ=!eKS1VR_>^w} zGT%kf;`X!baYMDJhG`+ ze~OQk2!$h!D%5=XYG}G8bn`ruB-r!G{)Le~_`Y{=yGY*Q?;=#ZOWs3(Zt|P>BEqMirMw4~ z)M}N!o0#9Sq_yV7P{_PG(2?%a4ZA6|+nZXoV;jW2(%U%8=espbuct)GUX43-LDQsXG+}Ci?W*LG8D_`cT9ho<}Ae8oykHhj|e!o zWN&kjPQHsJ4kzIhWMqE#kaOl1Hlc?5@dEebLS12+D#6-j51WkwWP&2$^pXF&O?*_i zVrQL9{e*_rd3X$zUv`Nai`$UAcJ_47AmH39-tR5I;ao4}H{Y~g{ZV$6#t=-KbagxwQ|E&hG?k1AIIR!2 z3>xLY3lvmy+U%0LdCk?%Pvh!YZoTEy2Qtr=Yfoz z{o>bM;_%-w#4xBd`l0p(!sCd-hD(0^>;?DV0geenyFAx3kaOB zBCz3_x!$prH`Q+92AEN*LHR!&x7uG10Lvw5MmIi_rufzQ!e_j~l|N_nI%we!Q?arl zW~cXwa(bo_EK_S%^#<-=bmaS(mpea53OG3zz!#h#b+by9Lxtjlp%>>>fax(f_S?aJ zfcwQ7?(<<}Ttz+eftE0YLTLMliL1qr7i%mC2&RcgjNYo=gJ~rrd!#yA1B7dmYLB-| z5$@Bs{{{u(_~a8)ftwn#dZVrw#Ky)L$ueho_f9ec%!|B~*_9&fm1GIaF#^_E&t%C< z&*+DHcD4{J!avhHU)}s2RgsCzzvj-Z{!N=S1*v;PUsi`;mVXX#bFE*yBa-s+lJJnbu=I8TRn%nOV?OGE3|0r?zMQq;wb$l6-ii;9Va34UFWvE|(ZEna)&y`NgPp$eUYM!er zx_^ps;b5uG440_o`WWl6j~8%N;YuLtPw&|aZ!4BX1K0T1+`YfJ7f(Z$2u}Y2T(L3E z;pZKwJ?8FY`AyK7WU;!bmsDM>b{918H2<-5BPa$m58*$7GcQOhyJsdub2uT4;@rzY z4tL)wJkAqisC?1-hz0oz4fgcweoGkyQiZNvhf=sv=t zBS~wAw8mPL!xf54pg6;Pc19-D%8?`0cPst1wL(#^W+%6>zibqHiJOI<2x zJ@Cv0f!}^h00L4??Zaxc&Ac5}em9=RnM(S{C@AoW&bXk$DkgjPWV>jG%V!rs^**c} z_M!ZcidMgI9&?5EHHlI?`k4CFbb<`NDoQI$TUWKjs}NoF;ExC>VhtyL-JNeIk8vyk zl+eOYv7PG;Ne(GmEu9>_=xEf2Je62n9vqT35wD+;F@X!waW2JxUI z7NKzNrAPSncOFJPUCc}UbIL+ml3&M*EWYP6btTL2<-w|ibY|f6+6v2zOu}k&eS5YC z!0RBzqBeG2xQYAN>mx1 zn*-`cda!5c2h~r~Cvu|=W}3mlz517dY(jA~sgJ}wQo6CX2bOrre0@cNHhbBKn>`l5 zwZbWX-553wQ;vcrCueNLdGZu)P=yxy57OZ>l|+JHA1w2u4I;al>ua(uo5HHpL>T#v z8#SBY6l3E5z*Af=E6$QHO&CSEM(@OS70&x@NWf-73Z~|v={r$TgG-7`h$NuRl+9qt;N5^+g~F;gj&Q?H8X>C z3kAw7y(EGsKEw~mE6Uc7zGl8Iq^0^wOj&ds!5L#I)f}h_TJ;l(o)ZgRg#9l$o7470 zB)Tu}vs1320fYpF!&>Ge7H*Ua%Qc#|l#6sXkDtKiW=P*h2v96b=*!8)wXivj=HB*n zF*6h4o=g|Stq@*~Z?GwTsQ(B76)+7d=wvRQ3tf%xKA9?kTo$g8y0^>|{ATULgW18s zsj_cV@(Kx{xxj0xj17)8ul)^9FiBy1(8y5d&A}m(3AwES=*4?kZB4~jJ=mnbl^y`x z!m~fc5Zp zX?cTB>z_CAbTBr9=&;&BGo|w}+p16|WbXCptf4)$%{}LzlD<{ldeuFxs=J7t!>W(d zd>(w`Hnwm9ru0K&&nzVqClF3l#t)3^>d*p_A6{{DgmY72IMTWLc(g=4?jdkjrA)=I z9@}zXu;4&1JQv2ADSot?4XBbzHTx+dHY*R7a%7-`Ga5N3_LtA-Qh zY;NJ%xZk{*Q)~Cu|Cw_fMmNt11_Ch%CWim>Nemi?!9v70o16&Z6@w*S^S%Z}0Svl? z1vn2G7glb6kpb%c%Z%S>*8^M9poe!U#WyZu{cYJti5V`WRX}U@(6^ZdndIki8mbTN}= z41|~SLlfVJHYtlCiRL~ASrC~nwo#!|=WlR!CUBo&z<6_dxE8xHT1i0Q-lX?7a5#_! zzL{!>)tao~EZX{k6gJz@dWzCNm7sou#$CufD@k$?(RSRRjM7(&y1tyhr(xh zXhs8l8#9~o7yokdf0|wdru(K>kDmpXgJC3N=Q2p)3VC23Y8>$=qST3dj@-sUgG83# zGRC81;`d#6o$fT=<)+T3vTok-tcPTHniMAB#VsuPVknHLM{8CpDGTUnDQOlzCT_Fb z6BCrgpZP;jGFzi&f4JfO(Yo(r{$4LU3TZBaIWIG`L;n9^>n)?IY@=@BO*d?55a|X5 z1*E$h>5>p>B&4LfOF%%75Gm=F?vgGE>F)04T-+9ja?ZFQj>>-=`zV5Z=nrp7P zsF#x5iq}Ps+#?lMKBE4uu?t}m;R55mBC#-o6WIbP>b<8h)#eu&8|js+%g>WhqN(`1 zaW&>4NX|vMQjX>YAdmiFDNfguKHRpY!oVDIkr8)uGg6H5X;H@jjEVsdW2ooZY?|Jz z#HJL|SL!zmXRH6LA%U`OW;#>r0lz`9{an1mmV%=8f-bl$%or+t2nE!K4ofLW#^whH zk*R01@8-^F8WGphg7>Fpp?dSSI3Nu&MtF!l8HQRXb93|WL$BufEr@yVZld5aBC!nq zH!MZL;6n@lQryGlSsRzZy{FopR(&$2xdi8gpVBy_+R4$8d62PEnTnlLI)EMiSe?OU z`sWZw5`GpRi;bK6uR|E-X(}7H7~@MWai0&hzfN}-e?5X*M)`X*@Cp|o+ft94DJ!1R zrL?@reW#GRO<_MovRu<5?F*fJ13eA>$?!@Kr+Tfs=V&KTn{A+LYo~jZQR=XdJzxGY zSkDHJ?SJ&NR%G3I=(QC<_ofhLb6hbl*!t_w875oG|vo3FrnmN7ooT>*^zj(LO z{M^bhpNkYp0#ZlBo+^NEB4nY-Jf{)xFR99F19>r>ozoUJxJKC8udjOiZ(?*1okSk{ zAt5aw$Uq=Q4jT@hQ@^)AD85r!|Go^@DA&v57NGwW|DW>QI(2Mmce*O91LXJmchfJ+ z<(fy{{!n#SvW4B>e8nX3gv|C^(LtCkMhtAy65;z{6oAiBN1V3J0E(g2hz>awzMKEo3 zv#o#614btk@BCre|m;&6UmJsp=m=!rFU=4e%W1J~#!ZRBtW^It0Bt4)3GFnh#( z5m=VHy}Nr0j73&QvSb??8g_SgABIw56$OZ((2v07uP>H_$KmJnv|DfdQ?OPXyal*h zfXTeqGBQ12ll#Ej-JsOy3HTT3lP9-}L1c5)cB1J@GxaXO+bboOR{m0TEKg1M!Dgv&^TB%}P}%dp;XP!~C*2IKN)2tM7I-E)Sm1PiHYhPQR5Z-bb5Y2B&gp(U%o?YvY&d$G=`m!dAX8 zFdO+kD1j|jG2>_1BihdKy3i&#w>0Ajy=*hVHhCj4l|b|1!keUWkN(sM@z8<9C>23)gGlEkjxHf@zid z3dc4bA*mEPZ}y(IibX7fTL&C9l<0Bc$hI~%J_~rbzS|w*mRC&Wt8qQu5^j?LizLIU z=3LPz+RJvpX1XTut?=N%h%Cz!F4mtTbpc=1v_c0sPXu^cFChORpCgR}GialwO!||u zxCeTBA9F$O8%|D7L3IA|KO+i}hanDZ%(95wyKI}tc|K?bp`V2kdz~9+h&NnmT-NpDp zS1vbAbo;c@o*JzO%W$r%dHrOhn{mfpUxpVOzmRE}g`Kh$Vuejk9FK(ZKCUL!DBZcu zL`wF@E;7A1ghB7M8o0}?t%}$_jIOatE0vJaZjb0MC@A3FtA?XE0b{Ni+1Y{L=mQOb zaUVzTB{D@)cADEBcN?9wqN0A;+Yl-0tMjJ&*_j!+QFifHG&D5e)(@e7SdQS_+TM2F zor;T($H&G#O1rUY8g<5l_G7pD{Yj-<-@W57>J0-2ka*U}a2XDw#S1_nZnjiew> zg|xP{)p*8GbH1C(J`u%#EZdV|cAp@`k$ zwXz^iab4I?(jHVZx#Pn+IxETvX6tv{%Gz%Y_=J!>RBS6HJG_cL83m-xZZ~O=`RpMg z%&*hggoL12T?ghHQ@BU^J=WoE?aavo*M3QVk@a}!I4UNTh}3c!kxtKeuOQ>+uj3g2o66#{}U1k=TuEHGNecM6Q2w-;t&8; z!wPD(=FcU}t~UEN2&<>MQ5kYKdtv$NePNgTf-H~C-68**@&8%&!hE_AppVFL-Q^@| z;rg@+6FZ^4R4uG1N&y4Y;mt64V_g+FR6!ZNZ3ep+R~3@$ZCHZ1r~z47SvpnL7|6&_ zWO#Vt4=yeZS6lfH7IP+jz&>zlY6?C1Er_R)k&$?KcwpSSA|Zi5ItJFq04!e5QAi1m zj2sVlSxYocb=#}?U2ZyGZD#}q=mrJ`;Dx2AW56!@72s7%9Rl6j+Z!(s)xrM*d|tS_ zGAa`?INs;98;4D9YPm1iF2Vg%wjOc(fM42Fo~U~C!u0J>YXBMt(!Bd|#DJ){`0YH) z9Plgl5%Pxe09TlS&jkg{{VjQF`BJ-IO2PWYA(9(_3BXmAiURgyiuMOby(~EK1k}c- z=LrCaP7(kZ#d+LsR9*DzSSyc@dIU-^%e~Cx{>CT5>zPd|cToGYK!KmNkh(MsrQwtH zOO5L6e6d<5i)28GvbQP~(yDRW{`6BZqJh1`Y}J^sm*=Ii{Ca%%^;^ZAlPg}{{=iy8 z?fymnb!5}&Y_1o{#qF)1sUXk$#pR3y0shpQbJa6W)Av}(O|JB}S1elMUG~;Do|QW{ zr=j6XIvO&TM@(C2`NX|j+BO`O6O~RJ&SwrMKi%*cvyzB4L!jUk6Y`?!jI=QYV{J{j zG-i7%F()UJnCF>C$k>^RO0elawe;D~RH7?>o;pg`E}7KL(meB3N9U8P4KHjyZO-?4 zS5K{HG^{_H4ch#vxv9KaHd74q6XB#l*zz7G;YmqzI^&r;USpFLy_tC=;!LYZZ0_Ei zV6J6ae30J(3v)SO&s0DA)VOkT!1y1ecB%90o9e!;zf!W>g48mc!Y@2e<-E%NtICVj z=hiS+onJbDeGCB+_fPTVj3|Mv)iJN!_{2o>3u>@VUR20?Z;%FxTrECdQNiv%1eP>{ z$9aI2j4aJG)kVS{;4;A|+pFwOMjrk2G51G`z7Fv&?lMpXO)5|}N zobV|_S`L?^xBV^sUpRSrc@KjWQh2hsHNl==a6X_SU_!d$jNf9f$_XHd&17zBYHG$j zLA^`hMM-orrlYMrkiwh8tygZ+|J@69)TjFCpP;e36on!?NYZR!iYaw)Mnp*S9Z<+G z%4`x9GV9ip7@p4)oCYyYI5~T~wmm(p-dszG>i`CQlm26wAGl~+Ua_~2^ML)qlp~Ly zSC#K${v`2+zE9{;S4ch*wY&ES&6mf}__DQ3cM&m7^7Lb4A4~)4n6s&U)78_Qe4CHj zu11nE{!-*n6a-2b27C)lcuER}`q}Q&6Rf&f2Ar^OejYJ&NW4;3OY;vOb~#;AS)Kfz zB#qlZ=6$A^$=Y=|&p`zYaymwId8em>qM&nEL26^&EQdUPY10J3J%uVK98n1jx1%Gj zdN&t`*+~m{@29U{%j4pbmXnH#z?Tq#?0pZP@&f=ds?pXyZ)u!AOpVAl?N8~<8E9m4 z!4}!L_i+DYcqQ7&aR@_pe~Z2LE_u1KguqEunVD_nVyJA_v*qb`F>50?MUt~x1-HCy;92mOJ%^8QCnMEGpQF4o>0V4PZaCl z1C&SUU!>pE__iC{gYNL?2pA9!f5pnmJTU*3>V5?B)Sz(CEI4#vdHiz`dMYZTi&!$G ztvQdaMmS9*3dd<_)EYrAk)<*sip;G`0!|SeGVrhnRF{~t2UPP|4A7W-DW zS1XHyWV_mf_beLJP1pNPlE?sWTwGrl>or_0wD_^hCnO|*J#Er#-p0Rgug@(bfz*fX zU-9%R*Tc+DNI{gojr@ae5ufZ zSpkOlE9AD1TTZsk28nP`5umQHd$^e_#jAJ63fGvJLztw>qv5%2uRq6^77Ref z1{F!uZa?;vzq9241HTL|zq)vcs2%b5wS7)SsUHBITI*7jSxI|5|+y zOd7{wId0|)7fH(BgMdVjiz?sk4J;?I;aduC)41&e(J;-x%f?0$nVX9X9s|EFx0}-& z+SA*cUs(9$v*8jLxgRD0mLVP0f}ct!KU}>5&*e)5#mC+Ss5ObA?03?|4C6R|qs_P>o&y+0nRxxQb|rz!ThI&;oZSWh@- zTu^uh@*YQF87!h7T#-JrN$FT%b&ZNVS7G$^nhAdY5ff9C!~kWus`eP&kWNg8*Lk;9 zZoADk+?VKAuRES79v(R*Z0>bFjyBszQFwEQ#W;)4gk~0pXRr{1?LDmY>ZF&~(|UVF zP+jDfPj9~ZGl|s`ho4ul4e!U+u%b?SE}ObGZ0Gx(v;6?(iL-fY9GQ=x`3d z#RFC)alhWJ(p|5#yiIQa+qlJ$5s;90xwy#vF-aE68Em^rNk1(32pfrkP1)>IZUJ((=jRTGPLA*GW4L8Hu%m}W_IlYXobMeD zr}WP=`@LKyRCqmS+!*T$ity(3!3S$r0M#Tp1_B^-25l-Rr6?`N-{L4(`nxi$p2xX= z%unk(wf4%Od3k_x7-MqK0t$m<>uSS-SU9xd9CiJ7Rx3$H1q|L$?2jwq5P@?cSI5fT z*QOXihTE}{QFP>Ot{rsMyBN#8I;O8I^e zG?(}Gt7|+AT>e9fO}5)q62!Jf#Z0)$B+Id#Kev1Tf}P3wbsEP9!PWz5_$r&>pC?FX zb}VlhG_&g8QT0~5f0D_nyw&*n{zYl}1>~gpEF!40y2DtG2BC(qOA-_I9 z0vyWIxj!t0&;c~E$MzJiULFXbN=U=i*C4(X7kx0N?zTb|ISFPZn%aE!-jf2pa5K~+ zg7UJSoX7Rqzw^}vZ?~gENc{*l$`nyUTd8E@fhx#;?0U7I5k<5z>DNN{3Ek9}znr^1;Q76fvnUgIkKgt-Ijp%TMgj+bK`25|h2Rr_ae}>uGd+F2Fm@O|- zf&J}0J|;#71=Wqd?v_a9@2ud2IKdR-T62MZeGTQ_houu+r1j^!`7et^)oS=H1e9z% z#6rDUr__4<4OqI*`TczjvviGpzFqs~5N+QyW51mkTOyEU^XpVq5u)Ot-*D)V@3#|G zbas@KEcucZ^eZY@fdV@z3%;HFS|5mZ|BEaGs~5i(H#R4mKl(4Mw5y!N{C{Aj$1=ys z7y-~jt;UWVU;G4Z?yl<1Y~?B_q6KRBu{1ME{)T&iy8h}E{3i49#V2y~`{sPzs_3YW1{*JGA~f70C!@^ND^UWV-u5S`i&&B1C$Hf+kky4Bzi!DfQQ7QP*qh0 zj9ypS4k&RlUFd0O#OJ#~*~5e%rpBlyE87dwK=pe(cKQ9uQc?Sx9KqXeRl(`ce|t;$ zEoD!%-?gd@3WW_7D&tqZwD0$Cu|OrSLkA5tetgbbK)1?!G$ffgi54oLAbPv;Q2d@z z0i&_dz@T4c4hYXRZM}nWZ=UnqW$ZY}m#0^)i;4dp36@@dA&E9ZrQzvDYqOtdwGwbT zcNfp|R?{0%8XH@go~R3hg#W$qTEtdZ03HD<(-$7s6AVkUeSr^$Q!QZ=@YLK-TfGz< zCU?FMNeQy(ToXTt7&GFyh3@&qT%x{Fe`#7LJB{FM$>K2@CUgrC={sOI zy%+2LgArf0Ta@KBSm0c zR9~PAn7r0JYG^^}{KCS@{fD%JDe(JPyGtF=c6m$&qPbhJ(pqT{^n%bhuha4V_T17J zZe(O6o<)CdbW}x2$s4L&70Ke&EDix20B}by%FB~cL1~?xot>D_m`@B4Sp)|3b-?h_ ze+W1>-tXVvDUPP4rWU!>=H!^VyVvJ>mOL*XEz|(lsUQaQe8sdKY=x|i_#1B$7x*vm zVv;(0P&M@upW#HKh_g`lzc^>rVZY{KmVP(3(atw@Crhvyk zNt8b8wHhS!l-ftcS9t9xj1i2T9s2ZQ`O^|R|MnCqArO%YRKo`f%-@07RE_Ygbq>s2 z)8o3TT>&aWYyS~Q79r~>=H*hIi=H)=ghNJ4-YBpNJkgVV@XtTdCCDhc1`~_?A zb?7D4<6vGsW4kBDuA#keEM#N@T3on^ue+22CS80&%NYXLwUG?v*ES$I^YGqD$_qi+ z;NTSF&vRyeelIe4ns>JU8KaNHpePYy@LCo3_9!w9coL2+DG5eRa6Y4zyuhkU24z2_5ykB<)r2M4=60M%>2S9x!Dm*4iQplBQL`jKM!LVEAD)BSyB+EWYjH$kM< zQGCW_f)aFnsK_tR#pHaUfu&V`aGH6o&HVlkoce>{15h@1&Udr4sVUr!y>atf{s?Af z_nb0GByaJeVR%TgmI4l=(Uz&S@Z%<`EJ86?KAGdqbeNBzn7u%~sOIjEL``{u7yp80 z@|A^_;|{o^=xGCQQh{FMay_(q8T7bKv1D@%lPASKq+wx zPGqVm$HYfn8gu0o^54Q&dIuT*5ouD}op{UVQV*{q+V zNE*BSTG|qpMB-SOl~n+s)IStp=_lD2tn7cuxI$edhVW0dHe_nbm%>YMf7!RE+|X$1 z?rU&&z*+-Q=s{l0rr<*?7Tp5RU->sw>b}ONBj4k$NtthjZV+G-v-n zRZzq=AOar#COP@O(yXS&6sAuM+Df)P2xt?TBQ&5qRGJ*gG$&`yPO6h)UVolT^}rEKOy~v*rV_)ij>IfoHm6jCG29DmSC_F-4H||tPHmhX!NHJChDy7NX|>~2lek%yf2)?-17%%P@CO9 zZP39lgUlF*k8gR~Qo3W2VH-}n?P^4J*O=YT1JvgBfY$BN3mrxQdM=;yo2M49^3H9y zdax95$PRSZ?$nK={BiFFPuz@Vm|Yui%#83-iifuHb-$3O7?Y-9w|~DkKndwJ@r5$f z35o<$1mJ*fW%QktKAIh9fLi#%=>ZqB&`?zWA+q}m$&}~1B+Y=JH%-cZB;x7mnVOm^ zntFrfb>T zZ(9O_A*?S93BCFpD6>WN+p&Cx0zaFxq;VIS_b{ABbs#9V>zF++AKr{-YT{10KHW@C z6>fti$&8xezD>UzRlaM`@w|=@@6dF%g$%r6Y@~X&6j_ZNFV6W`n?oGweUIhg`_EiS zhDD#obr}jTH+}}7SSyt01P(-E$|sUoMdadwlZQFnhK5;fS0h*0{w(Kdc6M{&-1z+V zWwHcYy-0@ct=ypqj&B36PA$#vS@@2!*6BEetuS(~=9ifhs`g#OIJ8`{;Z8(szk7RM zGrrTHXYUVB+H$nB>*T5VjUr9Y1Zn=M`?T=dV1EC@VCPu*n!@8-0D@YHVzFrv;>RlF z(9fKl<0B5On&~aBd0xK0^Jy6wVa5obg>sK8$Jy=q+}CVh*8kX2qEqxj3Y*JCaQNP7BQp&LP)0~d z=-s=goF=oihGQ}ZXJ@IvnELW~{gH^*)o9v#dwY)C-UOX1CoVwGIOUaV*zv7*miBhI zaBg>gU`&UEJ%*x+!TOX4#(3`&palTZ5f_~p06uuwbS3h}+0Fe$Y_c`Q7^nlJ86t<| zB}dHdm}9s2kabb!1g<2O65-mN;<*9oApBiDwn%7&-NQ%&FrH1Dro3^tRa{NAsn?n_ zC(-zl6>@FpXhUy@3DDqmZN0SzTWi#)kZ~8+i5Ayu76;n(0=7U66VTcN9$&-}6n4iG z5}77X`rBG>YMj$nYU8~KX>ASyFV^#Yt>(tE*_pp z&(3AoMg_?AH>Fpm#R+6}y6)*;mGvE`qraI2ej}>s`K&MHK9j887p@nFjkkia_yKaD z83<(lAMsPT7i9R!NERrf5xID_ALss9E`x1OebmZ|Z&{{FLoxE0gd8VyTp?mM)>&(` zer(L{N9|JNLg}6(Yq53B(U(zf{j`B6?99z$!dC|=Az1y2Lm-PT9Ey(XsT)W|Dj)h* z2P4=$Vh&>@)?vX_)nhKGS5`NoPZ84EjVqgaVop&1ItARjzDQKr6xdB5%WhsmX9I=k zrN|za!MC(7!ZNbQuY&USmDETl&>fGGw%LZoia97IW$nrPH&%S%Tp5gARW4!YyJ=lt zu?mz~SRACJFi2p4LMsdLum$F+hX+^yh7%M`Fu}M{Z}cz}g#JG)l}4E8AC_wJ<ga`?V=j6 zxQHc5=N{vnSQk`#u3dDBh!jrAEClBjR&u!j!4&>#t3L?7B=_WYRPxGY@}A+MM=N}- zDPOmBZCN~ljiJVFy)l&x8VEuCf(!X`Nb`3WE94Objli#KO!= z9n>g^>?G@u4!TJlaOJo5-a>0V@NCP9kbU6_UL&fjfL2&g~^X?Ybu@ zE8Ifk%Mwe?HOSkRM7XWmI$~G1YLohPcsReqnFUI0FmiiMA><1cJGC(vamZR67JgRb z94L{T$2`G4sH&#wq+_GE zSv<>f%6=V=dggMy=tg;CwK4!yWST76ycic>6XAN^GvPMem>TcQ(8nrT5~`w~?)Ebm zZ9cQpeZ(#$qinSJ0_o#y#fo;+i$+10=FPyzxT0u_VSXIF-`D)$-gvk_>5$ON|FW^U zN)cPxy;`MTw6=Hwzuf3w^KjGyH-|QFD#|AgQ#sSLh~E&If9U)z%hGTHul}ph)(w{Ki^w1qXNJ_tvWh#nYOb8PCVn| zX$*Axc_2 zHaCmra6?KhFpMDi?%+|N8`~fum8f=nY_a*b4MLR#iuJ4{D<_HZv7C!FhrNj$dsjR^ zcOM7Gj{@&Cmi&%S0{=uX3;y4yyY0;mumos~EV%09RgRl(GKOl)wa!f*mp%yR{hRZ2=D&$Tzl(IEa(f3*w#BNE$+HSMsND2OM$RiHon;%kmHsLh^c(r`Zll0)vQ z*3&qps|i;}dR+1Te%;ZHhg1nK!XPZ%B_s0yAS?on-%&+ZLxI$fFfc#Mk!|IO@5(wU{DsTPzsKzjiwnW)3qA3IKY2~}`9XJyrt z7uA9>D27kJdHy;8YQ)v?d#CxM0l`FG(cKXxcZ6eha`G@C&7bh3^jlubhhlLPp7G1n zGh9_&dP2SwZ)N!g&?E1AJXTy-XUTQ{FvIcLci_z&ctnl{3GBM&gi~=u>g5Cq(@TP9 zb>as&XfhAdhlprB#Ge5*hE&q;vC|5{uq&I}v;r0|1-TukrQ&CUCCvdCIT3n}k64&y z3B9s9I&^M{_xol${{HYb$`7gv$lv_^N|XKaru}D^dO!Q}C+`q?vr{y!YhG0k-NApj zjGy@5TAJyH@|eZfAAg8ycZpT19g-V`!N&l2_^HzO@1vKiAly8|oBKx8@OTp$mPQ_3 zo5!f32dO2C-Iy ztwmt<;o78qrOvRHeBp{-j+g)Z)^y}_%Frl~a@@Z;QyK)0v&|zY2`g0iD=S$P_zEJR zJ!2S4kj-PkSJ$I2_-;8SLubpkE+MSeRu{z*hI;mVLKOzmoVxjt5a5wY(A}P(VFrI8 z5Z7#uTo039HJ+8%wKuk{uWKL9EZ*4KrHl_%Mdc6)w#tEZeaoS6>wNE(&*I5pO(ZR3 zP^#8yiHa=!Vt9TYxA>V`29_t!w)+ z!L-C4)Z6IMwX2@CohjVJGGqL%lpYgaFghRFBx`(8LKS}mwBr;xE39K+FbRw}#DLpe z@`kAlt5UAapvY`sR71dD9a(i-*S``@sv3YxnMkk$^+&k>1|am*+Tu%x{r ztep@wXW1u0rh+t|L48@>Cvasout7HsDl$rYajQ9_&si#(`+dg>%f7PxTZpJX0+$Tu zOk#zT-i;Jz@p7CbqIDP&7gC6sr`5&Hq-{KSG#&3N&nKqT??f}RvyP*&&YDUr2CjIq z7oP!B+Hkg{v8y8iR(qk2)4bG3y&@vs2}%ppou^=Qf-Hp9rB%+n;xg>dWlhz=&gLYuzs8=NnuSVhx9*f8=5%^ zm}MWep6Qoma!eD#sB|*3RgVXTPwzj(%McaM#AWMbB3Gn_#- zHe2G#EpqxKyjPe~I}W>nk>*NW#Z6nnP}{`N-gL0pkfySK|MtULTF}7L;0Vn)YXnBz9eMhBMczzRZF5vlrt*Ufx z#21d|8h8FPIfyw?WFs!;kSi#BDAxJC=Qi2=)!wg=WbC4}Z;4o#slAN3o^H4NP#qMY znh1GQ!G`p)HZ5dg0B^Cs`f?2mvwHaV$2s>{%YpM0+%Xj#i%#Oki4Inv+zk97q7d-+6ynnC%4D zrc09Pte95e(D}*V)@%A=%@2y2xNtYq^V>^HfT`hPeDTDW?Q#{a3SF7qp0W5uRWCOo ze>rsJI|%6M0=BnER>&D~1XFK%QQvZ!tzLfKTb4ZE!Z1>PK9vXuPDBY)CLLum)Qxu| zqKM>(D3-7Otw?n8*1X;43C$+gm`eh5c5t2b?^BO=iDLgke+$GHNa5bGa%H=v#tgB3 zRkt4`a@S&aQkwKi*U0pnjyGc3Lwrn|?=;GU+jtVGVzRwF7LiLU*q;(KBv zK>Xa&UC&vBmCSd@v4MNsW2*A(Zl9QLJ5(=Hi%(z_BJoK}C4y50P9E=p4njc%p^pbI zbSXZb-o|FMVW#>K^o{>j(;Luug>Y%eZVODF^UjsqofdGTJWLY)lSAh}SNzGL-S)&V zVOjro4rT4L!hs!!fbfoIwjWK_^nO{>$<9-}!N>4Tx`C%vdl`|6iFiP0z>k_{iI{fK zQ~CWWJ*6Sk=y!+Y2wJFR5+bJM=FaWX$|{S3UL@AJejK*P;EA-6Rw$%dc_SXLWN5*= z7qkwWsj*lzLMr6FY`qmeMS;;jZx4!(thl*0`&M5W1KoW;QX4gRlxmL zn;*i`fHuN_!`WnGQlYyrGm4fje{+boH9m$Zdzr# z5Q;qTj7{2!E4=LusW5*AJ0=N4pq+D=m&s7_k+0d_dOrBVo=b<~#g!FwvNSy}5t68}GP(_u*=R#xpU<@V6J4Y?H3`Z4`zq zZFLJHaDDrX-#Drv6dZlluroChcqVaICg@ajsRHle#unR(ea1%|&0~E&f7l0u-cOBE z(WskTz~ugd+{N7lHk<|y4fFHbw&}?BB$U%xpDrgb^^X1Z=Ga)2q9XfjZ^UE1S>%V7 z2Sw(8gu(TVcF$+vfABNE(I1oro(c=Dx*cUtx-GL{muKuD>Oud=B-SNy|E+7iE4>#W z26kqF(kw+hAd8-iy|3v}LO%G^i~=yDRx;P`RGVc5%#*pJW?zE+6t}&r{6eCQ82cKZ0gT!_oU%_WsPEglO4?!A|WYO zA|MiR0*|^>IYfSa)W{iiznE#oZNsf#r@_PvFhWId1J`?NpaRXKN4Q8WoD}~nn1%`$ zVZ?9zVg2f8WudBxH$c+yf!Ax})xSS)JMRk#TyX<^9}(QPrgK#3*$SQyQ(#IHobcu6 zbhlUZW9MKsGFM)QZzo7w)U+Suu znl=qT0^Ln?9%bE3bCa?05oV^6yABZmtRY?hXdaHIRsXGN{iw@cZsZ?@XK+kZ(@I14 z=?YP7y~|q9LjUAQ^faPqTm`_XO9rzaP(#>3m8yvvFFs+z0V25rUruJBjt#1{|Hr1B z-jPfOaJf;=Pf4mawYW-^Y&BZj>#%8GI-lJnYdKJ7EU2qoHyc(Krho=w#r9-YVyvio zmKaNT)W_fjd59*~k1#>n*L|E=qF_+(&?IIa6hl*LZQ|6r4KTc59EY5Em_rJhXKL2u zkD?tAbWFV6CCK#^Wb3B$dv(n*t^*2AIfNR@zl z_D7N?tUt2p?}zHW-`aC^ZH3i_!X51+=4i}ez=S>VZoC^cR&R06tDDEJiP&~NO`<4^xdoNfIaWCqs%EmC1E z6nqwa9EA-$)%u@wJtKJ1psPDOV`%U>-|u8^Gd7+^F#_wj>Q2a11&C@~Z}y0yo+d@> zzjEekSokmy;loR;g>Q^I-$UQHN*&8ApH#+3!^1d#1;Xn_=gCvF6?fN)l?M(n*r!Z(D7VAIr05W5t zB+^k(a0W|(kzshGaJ7$B({u8c4>IBHdHaLAV$ZtwSp_E3M!m2N%qQiDpchR{NioT#uPIw}(_B2er?@r^;+`2h& zt?YpOJF@}D3yX^+*f%}~NyTYCEfUe+Qj*CVvZwHU|EPb3n*OaiT`c~egsDha|Bx`> z=7EsjCp%lGIO`1ACeO6ym8Mt`hHnElUCmb7bzm!QjU9j|r#cvjfzo2Fm!*rnCUPlw zc(A=DZDLS*ff+%88L!?Xgq-)XSf;q(DJJ47kSyY}z1#9R)}XrK+n0~fdufyxRNi(m zi0{4F`T_~+PXkETN;V|wO9Ut~hNjT3Z{_t!`|q3gkVPw!R1spB36G>l-ETY_wDPzI z-W9O5R3NsLZM?Pat`kf#-`p8<`8oFLYVsQqEe6P#!dfs!I4JNeg{f(L3>#w}UA%6W z5$On3#1oCjrx{8f2|;#w{WQ(-8}hhALpZn z2ae2o-$VkL<`NT(g<)WmK)hU=2cQGNCn9pPUa>_a1E8@11Z0)7ub&Bit@iI#((+Y&;BzdFN6N!hi~>|G)k=`kF;}}E56`(cf8qj z1w*gMuXLl7YBhIm3c!O=@MvZoc5QKudX#_&inmkFZr%gpr(V&)EfAB|&pe1d(&DpC z;#8j~uw2|)B!-U6+DWnXZQdLK8X?!4Q(PnPLiMg45qTiuiRA z0cm6B7B9jGK?TAb0Dz)35|R>Ln@cAt*~7OAe!RuNMbNkC0gO9#GS4SAzIOi})ijSrGK6 zjg3}g6yityzLpz@YQ0iT|J^#O(IH*Uce?z(sH&=KXSVG-K#p;J3+Vg zCzGmUcZc>i66d7S=ikDWWqK{beC6=oe*Y;kJW&`7C*H2{>M#d67!~zfvA3LfBC0R? z?T543q@mlAeP^YPi!4;$ra-rCmY0MgZTP*i7tx-|w zLEEorxKmfqJ4yB8x*9?XJAbBMV%Ey4gm?l^E!~ceu6f+|Yc#E);1TFzuFk* zojdL2p`!CM?W+BSxG#w4q>$#!p%*{oKN~$U(fHOi0;eac0oj>wF!L-`G2)@?QTMoD2VjKKXqYvxM)NL#&>xw?S17HXkE0n)J;uI}<>lKu^~n`YEP=6D$bPVu>2$R<6|x)9U-C>=-ziQYdSk*2z(553UF*)z?V5B{ zH{Y7x4jsUZN?;OWZy+>E(zXqcyADjI+jn9DVw?{<&6D|ghD4DW_l}9)W`F%ib@+_q zpaPpm45T?g1Xmr`k6qSI2!#ogkTIIr2=1#X`U6AI7|iPZ&QcayDC8fpNM$Ad4W?+1 zNUcAxHrJSDHdQr3w{&qRKoHxy(tR`C5N8 zgDTt3u2b*$c3En&&Fz{r8%JR-B+dAT$CnkwPtnvPnWPPsu8|-@XhI~AgU*=E^GCtK zPjDftyDrqfrf+w<$Ub5=kNd9+$-BdOt&#p;t{ zEd2sY)vbn=?Y)Zkd+o!1u-g1X@EdV>UmwA~Hdb7CV^e;(D(RfoaMm9!s~y^Kk}TC| z&sOZP>qTnb>jr2U2rJ?YBFQ|A`|%q@0p>S5wq+u?;qnyLB2Q9z2 zb&bioN%=F<_FzEAnfC4l)*fcOhJ@+@xduI-z@ala+B6H>N|4*cey2_yzS zpdCX zatUS8VY0SbfxWIo{;W_ebNR^UlHxLx%DEU8YU=W8Rn)Osx|e+#*Mh&@WE6?WaX$_U zl6WlK=6p~^{EELuc~Q$T)bJ7h@K^hyAj_BS<<8-6ciV=gL;10K$i?jkr2&K zeA)QZd7093k_s0MDIArE$8*8t*&cSX;^nc)&F{q#%&U+McVeX>R_oBq`8-yNv?^a`r z6&}B%S-Px|9n=*YbcNq=YK6;eD$?ZQ4lO6o99G`OO4YADEh(sskpmY%sLqVr7-3Sp zu>!5YzWM8hQfVdfVf)<-byoaqJ9kFvz%ECEkVbnUVBJL>EUi~iF5>!5I^>)By;O5@ zaF+$@WT@C9?ATi9CK28S10FLbg<(fU%O7uh;F6EiObJ3M;1P+j=_620CSEI-pJ>QH zn%jpQo{(bu|K>(oSn^gP;522jG>TMKNv`CN#Y=^Uu=$pVz*=R^bFF(rO*Pz}Grf_0 zx*x-};I4gUlD(K&o1j{H>PRHwm^1A&8+il=c9JpTvSnkXC3b8%1G*py7OK#G9-FqbIiW8*It8uC`?e5$N7)5`+XDnb*j%|1@HT9bnZiQ=)XS)A7luI9hV6cdRO-|!SnKE zM4VL!Ax^f}=Ugtm59MXj1OCUp651#qj#-C%z94NRgJ-`@_g1%X=kuKkP1Ok&Twh>o zZEY)$`VQ&twyA+F7I+sm0YN_V&V-%{^R#47@bure*xyu5Rzz0ZcZSIUyGZ>acn!tFrN z=OP*uzc;D!@V7p^!oVD9#ejhqN@EB&2U@s2i1de)Nz|0PF1?u?2T8EV>5o$0V?xp3 zP09s{AaY@>AK$5P1i#2Lv(C&RaD&R{s5uyf9!n^6->{r{x*Yh5bR^1E;G@mEJM=X= z6JT~&Y=6e0^ss|i#lB#8`DQpTAXd=JH7|w3RECG4-1cm}j%BuIm4O9(5;RfKswEQJ zWxl#Yeh1BxLcfSRLt2U=KHl=8a1_%Ej1K4ZWAXd}Fv!+DSHR^haY6(N*`jvCB?xaR z*UaeX3HQcty#GVkTSrydc3-1=)7{b_C4zJ}Y`1htcL+##H*6G?5CjA%>5%U3?v(D9 zF6lluKF|A|^M1ecjn6-HIEDjnHrKtbx#pT{&dz6A4yND*0g&UlFUwoK@^4ExQpk9We|Z zLC+C}^z?c@{i5iU|0xOvu_I@c`hKfH?9$l$Ihme!3()FSUH^8ht$uf5jDSA6WQfU{I?P|e)8SvXj#Ub16EIvW$_Y7tsSz1 zS(#P*!R99sZ6Ct*}oOihPqvhXqCp|f8v zA%83@0W7IR^)0r4FCj865spPn5ZJDi$y{an#!3S~jlaKO#nc-@z&Ab^my451@$;LD zZD`K8lbkUU(s2^rsQW5Ea(os+Bz)JM?Tz*aeUPOgXhM81sAHdet8W~tWZJopyDgx1X z^G-i&F?igbAWNQK-oD%Fo0EJ2tPE)Kx(^+yqtlD=e@V5P1s>8Y!obx*|KOO6$bL0> z^%9%gQt|Q6X%oM&&z!IgP@YmA$itzY20`x96#+y1m!s?1L;fP6IS-6Yr}6$Vd8hCg zcs+}m&)4?`H0e3~9=z=qMyu3yY-KHFzOdQL1{G7$)eVDVNJ8K_3-X&4qtJ*U~9mm|1r1yr*ft-p$kGODz|w1b`ENQE2S)|-56yGGjznmB_gYTrFD_3Y zgde1r1wfr(VJ==_kH`L(%kzGBI)vWT7E1Zw?S%;aU;1AcI!+mT%mK?qD`_=7np@7*{Mzd3wjcmB^pDpaOuH@D&!j?iQ>*C+8*hox##*t2+&OB|&`n-}fO6 zo1YjSG)k}NHbreT*yKPktew7EoCW`pn4k3cYiA*n6!)AGn34b*0=(%WmF1WKq};RZ*FOth6;?z-{*^ z{o}yj=RSn!XD5!{eCWrxal+#HBz>JORfDHP5DFXuFtrBbBnfJQ{M%0Wy9t7sxa8b6 z)v)ghoesRTo-_G=G)~N~)Yz7~$ButM*yt&6j<#Fr3 zX=Y8f+dX`|l8-n5wJ2VL*-l3fDUg6bgi`wOdR;eYRaS`M+ZR1xUt}~{?nHv8TkKtM zE{+@aS@;4TW(*(F6oTHy{k;-iqSUC@I9ZMU2 zM!xsw2i^$zhVtUoCW;=zn~Qg^gXE8Lr6jQg?^eev4#}W@_ypz!&W7=nG+O0xA~y!U zc0L@>;U6lxdH8F{OafN{WoUy;#~0ukT3al1gW(V9%&gRG4o-tPgoEJ;bS6vcWaJsj z9DQcIOLxXC&{ZH_S7p}qn~1Sj1=zJg?6#QMBARZ~E(zd+C{@*uC4{HVs?Xn2RaL5` zj}a5wRL7fZgA-J)$E&P;%)y}V3Vzx{nM~ETLf=8yN=+$(Rcn0%x*9(zG?WQFU%=H< z)bB8>bEIgbtO-SlA`k-!j87lT(J~tkQMPJ6w>ugW60-D_0_t|AlB-P;JFO#3FS}kf zoW$ELD+jbzeBdgr4gxh{zNVVbc@~@xd4Ee!t^v3D&V6KWGrOL>su6)&T>0!M&d%m; zyz`jmdN~y`Mb{o9d4coS z&j(ZAo3q&6S^%$X^M@tQlt_Z*R$y5yu)PO^(^e9N+J!-^O0no&yF}X1l)TcG9s~Eew zGVkxN74q@vvcd)>1Z-F8+uw_pR5aEHEGKb9C9=;div{ho$4KF{Y$$r?QJm%@=BnAMb3$i4`|6*M-hAuxC6swry{}dma7%t?e zuf*3G!Xma?BcGGNYbAuf8rkAU*7}w)X7~CrhK~$M?^Vms(R>?((llejPNMQPkh%39 z`0!Ae{v%H4#d%jpZ9AMC0dl;Nb^vLRv5*eOZsK1P!Gs9BAM}#*VsJaxY`v zRFHXzY5y~Yq-DPk%Y`sX(vg>NzLl!XYNl_-?3;=YJcjeq z>d5gkuk+>!rdgmi7)Kl_M;Qh?0Yl z^g_^R94?Y0RG~PkN5V)n7&j(@h$n!J3i*M?k zJF_J29#7R*V;w2UVjSLlpYa|vZucvn?fW8^z8PeGRBsDrVQ9Eyty4EMgW+NxMDM6) z0x#EwkqqxAuV|-MkZ_zGMf)14SQN&$Wu4B9`(1L7Xtu#Gn;g&6w)piEn_2dN+zI1t z1b|yJV$i83w=AE<`t`BYJG#Z^2B#DYAc3h-KA2EOMyn%yn*(8wR{e-%KX;>n|F`EV zh!~<69k}f+H|I-M%tBIU3mZtJORfiWXD#l zL0%YLFYq?zjHK(+J?wudu9smc$n7v}8lgof5pl`CB7_@+d8@0(hKI`&cepEnDLDKJ zJzLLzsrbmutKdZIZGl3~9U%$WS^ez=u`otVDJw8DDTbgWn?mH$2Fkvb5T~+0>0$}8#GW(&`LZq@c}v21deg% zgB!6U=yjTa$!E%kre8hm@6qg#f74|L4{5sDTB~99JOf zNZg`r1~+{_h6Pz8;P1&WrPm3zA=L?$Wvv$WmUec=x}s)8oz`l^s0M>ZasLchEj_OC zH$Sue9e=F74lx=>&r@Yul3mIiEq{5yFx_fur0OA$x1ixZ(Bs745q$5!Y&j-*Py>KFeyum0?cxfR8-rwbgYB_-CMjre1!?xdjO}m8Zt-rerOe&1li*SJ#M1AHW#>K;NvGHKqf68=@ zB!6M7Kt#%uU;BqyH4BlLt~o8zvSDT>u)dCr*oHI1*T-?O@P!5;4h}SM#y{}8rX$4E zWW9JVPk!6Tyar?g4{Eg_CCE2Tir{9LF+5qJ+G#+4c}D6h)(RP$=%2U`3ZIn!+BxTF zJ0VOBCdrbrWbA&1Cr;o|c;LvTVkX7gf`b9mM{_}4^WSrkL zSgqD*X^H~KxlhV4c84GEe{eY~|M;>LSS%%qkbO0%(mxHmP^7I7X+Rr