При створенні вебсайтів, дашбордів або лабораторних практикумів за
допомогою R Markdown першим і найважливішим елементом документа є
YAML-заголовок (Header). Він знаходиться на самому
початку файлу і обмежується трьома дефісами з двох боків
(---).
Нижче наведено розбір основних блоків конфігурації YAML, які забезпечують коректний рендеринг документа на вебсайті:
---
title: "Назва сторінки"
author: "Автор"
date: "2026-10-31" # Динамічна дата компіляції
output:
html_document:
toc: true # Включення змісту (Table of Contents)
toc_depth: 3 # Глибина заголовків у змісті (від # до ###)
toc_float: # Плаваючий бічний зміст
collapsed: false # Не згортати розділи за замовчуванням
smooth_scroll: true # Плавне прокручування до розділів
theme: flatly # Візуальна тема сайту (flatly, lumen, paper тощо)
highlight: tango # Стиль підсвічування синтаксису коду
number_sections: true # Автоматична нумерація розділів
---toc_float — створює зручну навігаційну
панель зліва, яка залишається на екрані при прокручуванні сторінки.theme — відповідає за загальний дизайн
сайту (bootstrap-теми: flatly, simplex,
cosmo, united).code_folding: show — дозволяє
відвідувачам сайту згортати або розгортати блоки коду за бажанням.esophНабір даних esoph описує результати дослідження раку
стравоходу (Esophageal Cancer), проведеного у Франції. Організація даних
відповідає дизайну «випадок-контроль» (Case-Control
Study), де аналізується вплив двох основних чинників —
споживання алкоголю (alcgp) та тютюнопаління
(tobgp) у різних вікових групах (agegp).
agegp — вікова група пацієнтів (25–34,
35–44, 45–54, 55–64, 65–74, 75+ років).alcgp — добова доза алкоголю (0–39,
40–79, 80–119, 120+ г/день).tobgp — добова доза тютюну (0–9,
10–19, 20–29, 30+ г/день).ncases — кількість підтверджених
випадків захворювання (група «Випадок»).ncontrols — кількість людей без
захворювання (група «Контроль»).Важливе зауваження: Оскільки датасет агрегований за групами, порівнювати абсолютну кількість хворих без урахування розміру контрольної групи некоректно. Для аналізу ми розраховуємо частку захворілих (\(\text{Prop} = \frac{\text{ncases}}{\text{ncases} + \text{ncontrols}}\)).
| #Вступ дані про датасет. опис датасету # Первинний огляд даних (Datatable) |
| Незвідна інтерактивна таблиця дозволяє зручно переглядати структуру датасету безпосередньо на сторінці сайту. |
| ``` r data(esoph) |
| # Додаємо розраховану колонку частки захворілих esoph_clean <- esoph %>% mutate( ntotal = ncases + ncontrols, prop_cases = round(ncases / ntotal, 3) ) |
| # Вивід інтерактивної таблиці datatable( esoph_clean, colnames = c(“Вікова група”, “Алкоголь”, “Тютюн”, “Випадки”, “Контролі”, “Всього”, “Частка хворих”), options = list(pageLength = 20, lengthMenu = c(20, 30, 60)), caption = “Таблиця 1: Агреговані дані дослідження раку стравоходу.” ) ``` |
{=html} <div class="datatables html-widget html-fill-item" id="htmlwidget-f84b3bf6f5f13ad24a41" style="width:100%;height:auto;"></div> <script type="application/json" data-for="htmlwidget-f84b3bf6f5f13ad24a41">{"x":{"filter":"none","vertical":false,"caption":"<caption>Таблиця 1: Агреговані дані дослідження раку стравоходу.<\/caption>","data":[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88"],["25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","25-34","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","35-44","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","45-54","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","55-64","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","65-74","75+","75+","75+","75+","75+","75+","75+","75+","75+","75+","75+"],["0-39g/day","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","40-79","80-119","80-119","80-119","120+","120+","120+","120+","0-39g/day","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","40-79","80-119","80-119","80-119","80-119","120+","120+","120+","0-39g/day","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","40-79","80-119","80-119","80-119","80-119","120+","120+","120+","120+","0-39g/day","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","40-79","80-119","80-119","80-119","80-119","120+","120+","120+","120+","0-39g/day","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","80-119","80-119","80-119","80-119","120+","120+","120+","120+","0-39g/day","0-39g/day","0-39g/day","40-79","40-79","40-79","40-79","80-119","80-119","120+","120+"],["0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","30+","0-9g/day","10-19","20-29","30+","0-9g/day","10-19","0-9g/day","10-19"],[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,3,1,0,0,0,0,0,2,0,2,1,0,0,0,6,4,5,5,3,6,1,2,4,3,2,4,2,3,3,4,9,6,4,3,9,8,3,4,5,6,2,5,5,4,2,0,17,3,5,6,4,2,1,3,1,1,1,1,2,1,2,1,0,1,1,1,2,1],[40,10,6,5,27,7,4,7,2,1,2,1,0,1,2,60,13,7,8,35,20,13,8,11,6,2,1,1,3,2,45,18,10,4,32,17,10,2,13,8,4,2,0,1,1,0,47,19,9,2,31,15,13,3,9,7,3,0,5,1,1,1,43,10,5,2,17,7,4,7,8,1,0,1,1,0,0,17,4,2,3,2,3,0,0,0,0,0],[40,10,6,5,27,7,4,7,2,1,2,1,1,1,2,60,14,7,8,35,23,14,8,11,6,2,1,3,3,4,46,18,10,4,38,21,15,7,16,14,5,4,4,4,3,4,49,22,12,6,40,21,17,6,18,15,6,4,10,7,3,6,48,14,7,2,34,10,9,13,12,3,1,4,2,1,1,18,6,3,5,3,3,1,1,1,2,1],[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0.07099999999999999,0,0,0,0.13,0.07099999999999999,0,0,0,0,0,0.667,0,0.5,0.022,0,0,0,0.158,0.19,0.333,0.714,0.188,0.429,0.2,0.5,1,0.75,0.667,1,0.041,0.136,0.25,0.667,0.225,0.286,0.235,0.5,0.5,0.533,0.5,1,0.5,0.857,0.667,0.833,0.104,0.286,0.286,0,0.5,0.3,0.556,0.462,0.333,0.667,1,0.75,0.5,1,1,0.056,0.333,0.333,0.4,0.333,0,1,1,1,1,1]],"container":"<table class=\"display\">\n <thead>\n <tr>\n <th> <\/th>\n <th>Вікова група<\/th>\n <th>Алкоголь<\/th>\n <th>Тютюн<\/th>\n <th>Випадки<\/th>\n <th>Контролі<\/th>\n <th>Всього<\/th>\n <th>Частка хворих<\/th>\n <\/tr>\n <\/thead>\n<\/table>","options":{"pageLength":20,"lengthMenu":[20,30,60],"columnDefs":[{"className":"dt-right","targets":[4,5,6,7]},{"orderable":false,"targets":0},{"name":" ","targets":0},{"name":"agegp","targets":1},{"name":"alcgp","targets":2},{"name":"tobgp","targets":3},{"name":"ncases","targets":4},{"name":"ncontrols","targets":5},{"name":"ntotal","targets":6},{"name":"prop_cases","targets":7}],"order":[],"autoWidth":false,"orderClasses":false}},"evals":[],"jsHooks":[]}</script> |
Діаграма розмаху відображає варіабельність частки захворілих у підгрупах для кожної вікової категорії.
ggplot(esoph_clean, aes(x = agegp, y = prop_cases, fill = agegp)) +
geom_boxplot(alpha = 0.7, outlier.color = "3", outlier.size = 2) +
geom_jitter(width = 0.7, alpha = 0.5, size = 2) +
scale_fill_viridis_d(option = "viridis") +
labs(
title = "Розподіл частки захворілих на рак стравоходу за віком",
x = "Вікова група (роки)",
y = "Частка захворілих (Proportion)"
) +
theme_minimal(base_size = 10) +
theme(
plot.title = element_text(face = "bold", hjust = 0.8),
legend.position = "none"
)Аналіз: Найвища частка захворюваності концентрується у вікових групах 55–64 та 65–74 роки, що свідчить про вікозалежне зростання онкологічного ризику.
Стовпчаста діаграма дозволяє наочно порівняти загальне співвідношення осіб у групах «Випадок» та «Контроль» у кожній віковій категорії.
# Переведення даних у довгий формат
esoph_long <- esoph %>%
pivot_longer(cols = c(ncases, ncontrols), names_to = "Status", values_to = "Count") %>%
mutate(Status = factor(Status, levels = c("ncases", "ncontrols"), labels = c("Хворі", "Здорові")))
ggplot(esoph_long, aes(x = agegp, y = Count, fill = Status)) +
geom_col(position = "dodge", color = "white") +
scale_fill_manual(values = c("Хворі" = "#e74c3c", "Здорові" = "#2ecc71")) +
labs(
title = "Співвідношення кількості хворих та здорових осіб за віком",
x = "Вікова група (роки)",
y = "Загальна кількість осіб у вибірці",
fill = "Група"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "top"
)Аналіз середньої частки захворілих залежно від поєднання категорій споживання тютюну та алкоголю.
# Агрегація середнього ризику за групами тютюну та алкоголю
scatter_data <- esoph_clean %>%
group_by(tobgp, alcgp) %>%
summarise(mean_prop = mean(prop_cases), .groups = "drop")
ggplot(scatter_data, aes(x = tobgp, y = mean_prop, color = alcgp, group = alcgp)) +
geom_point(size = 3.5, alpha = 0.9) +
geom_line(linewidth = 1.2) +
scale_color_brewer(palette = "YlOrRd", name = "Алкоголь (г/день)") +
labs(
title = "Середня частка захворілих залежно від дози тютюну та алкоголю",
x = "Рівень споживання тютюну (г/день)",
y = "Середня частка захворілих"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
panel.grid.minor = element_blank()
)Аналіз: Спостерігається чіткий синергічний ефект: найвища частка захворілих фіксується при одночасному високому споживанні алкоголю (80–120+ г/день) та тютюну (30+ г/день).
Графік щільності показує загальний характер розподілу розрахованих часток захворюваності серед усіх досліджених підгруп.
ggplot(esoph_clean, aes(x = prop_cases)) +
geom_density(fill = "#e74c3c", alpha = 0.8, color = "#c0392b", linewidth = 1) +
labs(
title = "Щільність розподілу часток захворюваності в підгрупах",
x = "Частка захворілих (Proportion)",
y = "Щільність ймовірності (Density)"
) +
theme_minimal(base_size = 15) +
theme(plot.title = element_text(face = "bold", hjust = 0.5))Теплокарта надає наочну оцінку захворюваності (%) залежно від поєднання віку пацієнтів та дози споживаного алкоголю.
# Агрегація показників для теплокарти
heatmap_data <- esoph_clean %>%
group_by(agegp, alcgp) %>%
summarise(
total_cases = sum(ncases),
total_obs = sum(ntotal),
.groups = 'drop'
) %>%
mutate(rate = round((total_cases / total_obs) * 100, 1))
ggplot(heatmap_data, aes(x = agegp, y = alcgp, fill = rate)) +
geom_tile(color = "white", linewidth = 0.8) +
geom_text(aes(label = paste0(rate, "%")), color = "white", fontface = "bold", size = 3.8) +
scale_fill_viridis_c(option = "magma", direction = -1, name = "Захворюваність (%)") +
labs(
title = "Теплокарта захворюваності (%) за віком та рівнем алкоголю",
x = "Вікова група (роки)",
y = "Рівень споживання алкоголю (г/день)"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
axis.text.x = element_text(angle = 45, hjust = 1)
)Оберіть один із стандартних навчальних датасетів R (наприклад,
ToothGrowth, PlantGrowth або
InsectSprays або залиште для опису наявний датасет
esoph) та виконайте наступні кроки: