Оптимізація візуалізації довірчих інтервалів у моделях гладких функцій

Оптимізація візуалізації довірчих інтервалів у моделях гладких функцій

3 Березня 2024 в 14:35 30

Візуалізація довірчих інтервалів є ключовим елементом аналізу даних, який дозволяє наочно представити невизначеність моделі. Особливо це стає актуальним при використанні гладких моделей, таких як генералізовані адитивні моделі (GAM), які дозволяють ефективно моделювати складні нелінійні залежності між змінними. Проте, при одночасній візуалізації кількох моделей виникає виклик правильного масштабування осі Y, щоб забезпечити достатню деталізацію довірчих інтервалів без втрати загальної читабельності графіків.

Розглянемо проблему на прикладі коду, який генерує та зберігає графіки для кількох моделей GAM за допомогою пакетів mgcv, gratia та tidyverse у мові програмування R. Вихідним пунктом є функція, яка ітеративно створює моделі на основі унікальних значень певного параметру та зберігає відповідні графіки у глобальному середовищі. Виклик цієї функції для кожного значення параметра веде до накопичення набору графіків, які потім потребують агрегації з урахуванням оптимального діапазону осі Y.

Проблема полягає в тому, що для адекватного відображення довірчих інтервалів на кожному графіку необхідно знайти такий діапазон осі Y, який би був достатньо вузьким для збереження детальності інтервалів і водночас достатньо широким, щоб графіки залишались читабельними і не перетинались. Рішення цієї задачі може бути знайдене шляхом використання додаткової функції для аналізу діапазонів осі Y всіх генерованих графіків перед їх агрегацією.

Один із підходів передбачає наступні кроки:

  1. Зберігання кожного графіка як об’єкта в R, замість безпосереднього збереження у глобальному середовищі.
  2. Аналіз діапазонів значень осі Y кожного графіка для визначення мінімального та максимального значень.
  3. Встановлення єдиної шкали осі Y для всіх графіків на основі отриманих мінімального та максимального значень.

Реалізація цього підходу може виглядати наступним чином:

# Перероблена функція для генерації моделей та збереження графіків як об'єктів
iterate_modified = function(z) {
model <- gam(mpg ~ cyl + s(disp, k = 25) + wt, data = mtcars %>% dplyr::filter(carb == z), method = "REML")
gam_plot <- draw(model, ci_col = "red", smooth_col = "red") return(gam_plot) } # Генерація графіків z_list = unique(mtcars$gear) plots_list = lapply(z_list, iterate_modified) # Визначення оптимальних меж осі Y y_min_max = do.call(rbind, lapply(plots_list, function(x) { ylims = ggplot_build(x)$layout$panel_params[[1]]$y.range return(ylims) })) global_y_min = min(y_min_max[, 1]) global_y_max = max(y_min_max[, 2]) # Встановлення однакового масштабу осі Y для всіх графіків plots_adjusted = lapply(plots_list, function(x) { x + scale_y_continuous(limits = c(global_y_min, global_y_max)) }) # Агрегація та відображення графіків з використання