diff --git a/src/reporting/generate_qc/script.R b/src/reporting/generate_qc/script.R index c53abaffc..0db0466f9 100644 --- a/src/reporting/generate_qc/script.R +++ b/src/reporting/generate_qc/script.R @@ -243,7 +243,8 @@ check_metric_scaling <- function( results_long, metric, control_methods, - task_name + task_name, + maximize ) { `%||%` <- rlang::`%||%` @@ -272,6 +273,8 @@ check_metric_scaling <- function( dplyr::left_join(control_range, by = "dataset_name") |> dplyr::mutate( scaled_value = (metric_value - control_min) / (control_max - control_min), + # Reverse metric values if lower is better + scaled_value = ifelse(maximize, scaled_value, 1 - scaled_value), outside = scaled_value < 0 | scaled_value > 1, pct_outside = dplyr::case_when( scaled_value < 0 ~ 0 - scaled_value, @@ -381,7 +384,8 @@ check_method_metric_scaling <- function( scaled_metrics, method, task_name, - metric_name + metric_name, + maximize ) { method_scaled_metrics <- scaled_metrics |> dplyr::filter(method_name == method) @@ -773,8 +777,10 @@ controls_metrics <- purrr::map(seq_len(nrow(metric_controls)), function(.idx) { }) cat("\n>>> Checking metric scaling...\n") +metric_maximize <- purrr::map_lgl(metric_info, "maximize") |> + purrr::set_names(metric_names) scaling <- purrr::map(metric_names, function(.metric) { - check_metric_scaling(results_long, .metric, control_methods, task_name) + check_metric_scaling(results_long, .metric, control_methods, task_name, maximize = metric_maximize[[.metric]]) }) |> purrr::list_flatten() diff --git a/src/reporting/render_report/logo.svg b/src/reporting/render_report/logo.svg index 70228226e..67ef40b46 100644 --- a/src/reporting/render_report/logo.svg +++ b/src/reporting/render_report/logo.svg @@ -6,40 +6,20 @@ stroke-linecap="round" stroke-linejoin="round" class="size-4 m-2 h-8 w-auto md:max-lg:hidden " - viewBox="0 0 999 168" + viewBox="0 0 999.00002 168" fill="none" iconclass="stroke-accent" version="1.1" id="svg2" - sodipodi:docname="logo.svg" - inkscape:version="1.4.2 (1:1.4.2+202505120737+ebf0e940d0)" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + width="264.31876mm" + height="44.450001mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> - diff --git a/src/reporting/render_report/report-template.qmd b/src/reporting/render_report/report-template.qmd index 79b53f8ca..76614d055 100644 --- a/src/reporting/render_report/report-template.qmd +++ b/src/reporting/render_report/report-template.qmd @@ -590,6 +590,11 @@ metric_details <- purrr::map_dfr(metric_info, function(.metric) { }) |> dplyr::arrange(metric) +metric_maximize <- purrr::map_lgl(metric_info, "maximize") |> + purrr::set_names(metric_details$metric) + +metric_reverse <- names(metric_maximize)[metric_maximize == FALSE] + scores <- purrr::map_dfr(task_results$results, function(.result) { if (!.result$succeeded) { return(NULL) @@ -609,7 +614,7 @@ scores <- purrr::map_dfr(task_results$results, function(.result) { return(NULL) } - data.frame( + tibble::tibble( dataset = .result$dataset_name, method = .result$method, metric = unlist(.result$metric_names), @@ -630,7 +635,12 @@ control_ranges <- scores |> scaled_scores <- scores |> dplyr::left_join(control_ranges, by = c("dataset", "metric")) |> dplyr::mutate( - scaled_value = (value - control_min) / (control_max - control_min) + scaled_value = (value - control_min) / (control_max - control_min), + scaled_value = dplyr::if_else( + metric %in% metric_reverse, + 1 - scaled_value, + scaled_value + ) ) complete_scores <- tidyr::expand_grid( @@ -1217,7 +1227,7 @@ reactable::reactable( format = reactable::colFormat(digits = 3) ) ), - purrr::map( metric_details$metric_label, + purrr::map(metric_details$metric_label, function(.metric_label) { reactable::colDef( name = .metric_label,