Skip to content

Commit 6dcc006

Browse files
committed
feat: lineplot, parameter tables
1 parent 806119b commit 6dcc006

File tree

1 file changed

+56
-16
lines changed

1 file changed

+56
-16
lines changed

app.R

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,22 @@ shinyApp(
125125
multiple = TRUE,
126126
selected = c("as", "gu", "mp", "vi")
127127
),
128+
selectInput("excluded_aheads",
129+
"Exclude aheads:",
130+
choices = 1:28,
131+
multiple = TRUE
132+
)
128133
),
129134
mainPanel(
130-
plotlyOutput("main_plot", height = "90em"),
131-
width=8
135+
verticalLayout(
136+
plotlyOutput("main_plot", height = "90em"),
137+
h2("forecaster name -> parameters"),
138+
#textOutput("forecaster_param_title"),
139+
dataTableOutput("forecaster_table"),
140+
h2("ensemble name -> parameters"),
141+
dataTableOutput("ensemble_table")
142+
),
143+
width = 8
132144
)
133145
)
134146
)
@@ -137,24 +149,27 @@ shinyApp(
137149
filtered_scorecards_reactive <- reactive({
138150
agg_forecasters <- unique(c(input$selected_forecasters, input$baseline))
139151
if (length(agg_forecasters) == 0 ||
140-
all(agg_forecasters == "" | is.null(agg_forecasters) | is.na(agg_forecasters))
152+
all(agg_forecasters == "" | is.null(agg_forecasters) | is.na(agg_forecasters))
141153
) {
142154
return(data.frame())
143155
}
144156

145157
processed_evaluations_internal <- lapply(agg_forecasters, function(forecaster) {
146-
load_forecast_data(forecaster) %>>%
158+
load_forecast_data(forecaster) %>>%
147159
filter(
148160
.data$forecast_date %>>% between(.env$input$selected_forecast_date_range[[1L]], .env$input$selected_forecast_date_range[[2L]]),
149161
.data$target_end_date %>>% between(.env$input$selected_target_end_date_range[[1L]], .env$input$selected_target_end_date_range[[2L]]),
150-
!.data$geo_value %in% c(.env$input$excluded_geo_values, "us")
162+
!.data$geo_value %in% c(.env$input$excluded_geo_values, "us"),
163+
!.data$ahead %in% .env$input$excluded_aheads
151164
)
152-
}) %>%
165+
}) %>%
153166
bind_rows()
154167
})
155168
output$main_plot <- renderPlotly({
156169
input_df <- filtered_scorecards_reactive()
157-
if (nrow(input_df) == 0) { return() }
170+
if (nrow(input_df) == 0) {
171+
return()
172+
}
158173

159174
# Normalize by baseline scores. This is not relevant for coverage, which is compared
160175
# to the nominal confidence level.
@@ -184,7 +199,7 @@ shinyApp(
184199

185200
x_tick_angle <- list(tickangle = -30)
186201
facet_x_tick_angles <- setNames(rep(list(x_tick_angle), 10), paste0("xaxis", 1:10))
187-
scale_type <- ifelse(input$facets_share_scale, "fixed", "free_y" )
202+
scale_type <- ifelse(input$facets_share_scale, "fixed", "free_y")
188203

189204
input_df %>>%
190205
# Aggregate scores over all geos
@@ -208,13 +223,11 @@ shinyApp(
208223
),
209224
na.rm = TRUE
210225
)) %>>%
211-
# Use scatterplot or lines depending on the x var. Also, if the range
226+
# Use scatterplot or lines depending on the x var. ~~Also, if the range
212227
# of obs by forecaster is too wide, plot using points instead of
213-
# lines.
228+
# lines.~~ too wide a range of observations is better than too many thick points
214229
{
215-
if (input$x_var %in% c(input$facet_vars, "geo_value", "forecaster", "ahead") || range(plot.df[["n"]]) %>>% {
216-
.[[2L]] > 1.2 * .[[1L]]
217-
}) {
230+
if (input$x_var %in% c(input$facet_vars, "geo_value", "forecaster", "ahead")) {
218231
. + geom_point(aes(size = n)) + expand_limits(size = 0)
219232
} else {
220233
. + geom_line()
@@ -228,9 +241,36 @@ shinyApp(
228241
} else {
229242
facet_grid(as.formula(paste0(input$facet_vars[[1L]], " ~ ", paste(collapse = " + ", input$facet_vars[-1L]))), scales = scale_type)
230243
}) %>>%
231-
ggplotly() %>>%
232-
{inject(layout(., hovermode = "x unified", legend = list(orientation = "h", title = list(text = "forecaster")), xaxis = x_tick_angle, !!!facet_x_tick_angles))}
233-
244+
ggplotly() %>>% {
245+
inject(layout(., hovermode = "x unified", legend = list(orientation = "h", title = list(text = "forecaster")), xaxis = x_tick_angle, !!!facet_x_tick_angles))
246+
}
234247
})
248+
## output$forecaster_param_title <- renderText("forecast name -> parameters")
249+
250+
output$forecaster_table <- renderDataTable(
251+
tar_read(forecaster_params_grid) %>%
252+
select(-id) %>%
253+
mutate(across(where(is.list), map, `%||%`, c(0, 7, 14))) %>%
254+
mutate(lags = paste(lags, sep = ",")) %>%
255+
group_by(parent_id) %>%
256+
mutate(ahead = toString(unique(ahead))) %>%
257+
ungroup() %>%
258+
distinct(parent_id, .keep_all = TRUE) %>%
259+
rename(name = parent_id) %>%
260+
select(name, everything())
261+
)
262+
output$ensemble_table <- renderDataTable(
263+
tar_read(ensemble_forecasters) %>%
264+
select(-id) %>%
265+
group_by(parent_id) %>%
266+
mutate(ahead = toString(unique(ahead))) %>%
267+
ungroup() %>%
268+
distinct(parent_id, .keep_all = TRUE) %>%
269+
rename(name = parent_id) %>%
270+
mutate(ensemble_params = paste(ensemble_params, sep = ",")) %>%
271+
mutate(forecaster_ids = paste(forecaster_ids, sep = ",")) %>%
272+
select(name, everything()) %>%
273+
select(-forecasters)
274+
)
235275
}
236276
)

0 commit comments

Comments
 (0)