From b828782e9bd4bcf9d6aa6c3c574aeb8304cbda57 Mon Sep 17 00:00:00 2001 From: Luke Zappia Date: Tue, 18 Nov 2025 14:19:32 +0100 Subject: [PATCH 1/4] Handle minimized metrics in generate_qc --- src/reporting/generate_qc/script.R | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/reporting/generate_qc/script.R b/src/reporting/generate_qc/script.R index c53abaffc..c5b634bff 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::`%||%` @@ -251,6 +252,14 @@ check_metric_scaling <- function( dplyr::filter(metric_name == metric) |> dplyr::select(-metric_name) + # Reverse metric values if lower is better + if (isFALSE(maximize)) { + metric_results <- metric_results |> + dplyr::mutate( + metric_value = -metric_value + ) + } + if ( nrow(metric_results) == 0 || !any(control_methods %in% metric_results$method_name) @@ -381,7 +390,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 +783,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() From bb24197c37b6d412e26e1e1d9a56b98a9452d981 Mon Sep 17 00:00:00 2001 From: Luke Zappia Date: Tue, 18 Nov 2025 14:19:54 +0100 Subject: [PATCH 2/4] Handle minimized metrics in render_report --- src/reporting/render_report/report-template.qmd | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/reporting/render_report/report-template.qmd b/src/reporting/render_report/report-template.qmd index 79b53f8ca..ed753126f 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,13 +614,16 @@ 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), - value = unlist(.result$metric_values) + raw_value = unlist(.result$metric_values) + ) +}) |> + dplyr::mutate( + value = dplyr::if_else(metric %in% metric_reverse, -raw_value, raw_value) ) -}) control_ranges <- scores |> dplyr::left_join(method_details, by = "method") |> @@ -1217,7 +1225,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, From 136b81a73973afbb17ff865c5382e274d72ee501 Mon Sep 17 00:00:00 2001 From: Luke Zappia Date: Tue, 18 Nov 2025 14:20:24 +0100 Subject: [PATCH 3/4] Fix logo export for report --- src/reporting/render_report/logo.svg | 30 +++++----------------------- 1 file changed, 5 insertions(+), 25 deletions(-) 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"> - From 66b8eac0733e794af01a5639d654070f8c704fbb Mon Sep 17 00:00:00 2001 From: Luke Zappia Date: Fri, 21 Nov 2025 13:34:56 +0100 Subject: [PATCH 4/4] Adjust how metric direction is handled --- src/reporting/generate_qc/script.R | 10 ++-------- src/reporting/render_report/report-template.qmd | 14 ++++++++------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/reporting/generate_qc/script.R b/src/reporting/generate_qc/script.R index c5b634bff..0db0466f9 100644 --- a/src/reporting/generate_qc/script.R +++ b/src/reporting/generate_qc/script.R @@ -252,14 +252,6 @@ check_metric_scaling <- function( dplyr::filter(metric_name == metric) |> dplyr::select(-metric_name) - # Reverse metric values if lower is better - if (isFALSE(maximize)) { - metric_results <- metric_results |> - dplyr::mutate( - metric_value = -metric_value - ) - } - if ( nrow(metric_results) == 0 || !any(control_methods %in% metric_results$method_name) @@ -281,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, diff --git a/src/reporting/render_report/report-template.qmd b/src/reporting/render_report/report-template.qmd index ed753126f..76614d055 100644 --- a/src/reporting/render_report/report-template.qmd +++ b/src/reporting/render_report/report-template.qmd @@ -618,12 +618,9 @@ scores <- purrr::map_dfr(task_results$results, function(.result) { dataset = .result$dataset_name, method = .result$method, metric = unlist(.result$metric_names), - raw_value = unlist(.result$metric_values) - ) -}) |> - dplyr::mutate( - value = dplyr::if_else(metric %in% metric_reverse, -raw_value, raw_value) + value = unlist(.result$metric_values) ) +}) control_ranges <- scores |> dplyr::left_join(method_details, by = "method") |> @@ -638,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(