Skip to content

Commit 7e4c9a5

Browse files
committed
feat: add sort_by_quantiles
1 parent 9414204 commit 7e4c9a5

File tree

3 files changed

+25
-24
lines changed

3 files changed

+25
-24
lines changed

R/forecasters/ensemble_linear_climate.R

+6-11
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ ensemble_linear_climate <- function(forecasts,
5252
)
5353
full_weights <- full_weights %>%
5454
left_join(
55-
other_weights,
56-
by = join_by(forecaster),
57-
relationship = "many-to-many"
58-
) %>%
55+
other_weights,
56+
by = join_by(forecaster),
57+
relationship = "many-to-many"
58+
) %>%
5959
mutate(weight = weight.x * weight.y) %>%
6060
select(geo_value, ahead, forecaster, quantile, weight)
6161
grouping_cols <- c("geo_value", "ahead", "quantile")
@@ -82,13 +82,8 @@ ensemble_linear_climate <- function(forecasts,
8282
) %>%
8383
mutate(value = weight * value) %>%
8484
group_by(geo_value, forecast_date, target_end_date, quantile) %>%
85-
summarize(value = sum(value, na.rm = TRUE), .groups = "drop")
86-
# sort the quantiles
87-
weighted_forecasts <-
88-
weighted_forecasts %>%
89-
group_by(geo_value, target_end_date, forecast_date) %>%
90-
arrange(geo_value, target_end_date, forecast_date, quantile) %>%
91-
mutate(value = sort(value))
85+
summarize(value = sum(value, na.rm = TRUE), .groups = "drop") %>%
86+
sort_by_quantile()
9287
return(weighted_forecasts)
9388
}
9489

R/utils.R

+16-4
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,15 @@ data_substitutions <- function(dataset, disease, forecast_generation_date) {
157157
disease <- "flu"
158158
forecast_generation_date <- as.Date("2025-01-08")
159159
substitutions <- readr::read_csv(
160-
glue::glue("{disease}_data_substitutions.csv"),
161-
comment = "#",
162-
show_col_types = FALSE) %>%
160+
glue::glue("{disease}_data_substitutions.csv"),
161+
comment = "#",
162+
show_col_types = FALSE
163+
) %>%
163164
filter(forecast_date == forecast_generation_date) %>%
164165
select(-forecast_date) %>%
165166
rename(new_value = value)
166-
dataset %>% left_join(substitutions) %>%
167+
dataset %>%
168+
left_join(substitutions) %>%
167169
mutate(value = ifelse(!is.na(new_value), new_value, value)) %>%
168170
select(-new_value)
169171
}
@@ -331,3 +333,13 @@ update_site <- function() {
331333
# Convert the markdown file to HTML
332334
system("pandoc reports/report.md -s -o reports/index.html --css=reports/style.css --mathjax='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js' --metadata pagetitle='Delphi Reports'")
333335
}
336+
337+
#' Ensure that forecast values are monotically increasing
338+
#' in quantile order.
339+
sort_by_quantile <- function(forecasts) {
340+
forecasts %>%
341+
arrange(geo_value, target_end_date, forecast_date, quantile) %>%
342+
group_by(geo_value, forecast_date, target_end_date) %>%
343+
mutate(value = sort(value)) %>%
344+
ungroup()
345+
}

scripts/flu_hosp_prod.R

+3-9
Original file line numberDiff line numberDiff line change
@@ -175,22 +175,16 @@ rlang::list2(
175175
tar_target(
176176
name = ensemble_mixture_res,
177177
command = {
178-
ensembled <-
179-
forecast_res %>%
178+
forecast_res %>%
180179
# Apply the ahead-by-quantile weighting scheme
181180
ensemble_linear_climate(aheads, other_weights = geo_forecasters_weights) %>%
182181
filter(geo_value %nin% geo_exclusions) %>%
183182
ungroup() %>%
184183
# Ensemble with windowed_seasonal
185184
bind_rows(forecast_res %>% filter(forecaster == "windowed_seasonal")) %>%
186185
group_by(geo_value, forecast_date, target_end_date, quantile) %>%
187-
summarize(value = mean(value, na.rm = TRUE), .groups = "drop")
188-
# filter(geo_value != "us", geo_value !="usa")
189-
sorted <- ensembled %>%
190-
group_by(geo_value, forecast_date, target_end_date) %>%
191-
mutate(value = sort(value)) %>%
192-
ungroup()
193-
sorted
186+
summarize(value = mean(value, na.rm = TRUE), .groups = "drop") %>%
187+
sort_by_quantile()
194188
},
195189
),
196190
tar_target(

0 commit comments

Comments
 (0)