При створенні вебсайтів, дашбордів або лабораторних практикумів за
допомогою R Markdown першим і найважливішим елементом документа є
YAML-заголовок (Header). Він знаходиться на самому
початку файлу і обмежується трьома дефісами з двох боків
(---).
Нижче наведено розбір основних блоків конфігурації YAML, які забезпечують коректний рендеринг документа на вебсайті:
---
title: "Назва сторінки"
author: "Автор"
date: "2026-11-01" # Динамічна дата компіляції
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}}\)).
Незвідна інтерактивна таблиця дозволяє зручно переглядати структуру датасету безпосередньо на сторінці сайту.
data(esoph)
# Додаємо розраховану колонку частки захворілих
esoph_clean <- esoph %>%
mutate(
ntotal = ncases + ncontrols,
prop_cases = round(ncases / ntotal, 3)
)
# Вивід інтерактивної таблиці
datatable(
esoph_clean,
colnames = c("Вікова група", "Алкоголь", "Тютюн", "Випадки", "Контролі", "Всього", "Частка хворих"),
options = list(pageLength = 10, lengthMenu = c(10, 25, 50)),
caption = "Таблиця 1: Агреговані дані дослідження раку стравоходу."
)Діаграма розмаху відображає варіабельність частки захворілих у підгрупах для кожної вікової категорії.
ggplot(esoph_clean, aes(x = agegp, y = prop_cases, fill = agegp)) +
geom_boxplot(alpha = 0.7, outlier.color = "red", outlier.size = 2) +
geom_jitter(width = 0.2, alpha = 0.5, size = 1.5) +
scale_fill_viridis_d(option = "viridis") +
labs(
title = "Розподіл частки захворілих на рак стравоходу за віком",
x = "Вікова група (роки)",
y = "Частка захворілих (Proportion)"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
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.5, color = "#c0392b", linewidth = 1) +
labs(
title = "Щільність розподілу часток захворюваності в підгрупах",
x = "Частка захворілих (Proportion)",
y = "Щільність ймовірності (Density)"
) +
theme_minimal(base_size = 13) +
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) та виконайте наступні кроки:
ToothGrowthДатасет ToothGrowth містить результати експерименту про
вплив вітаміну C на ріст зубів у 60 морських свинок. Тварини отримували
одну з трьох доз вітаміну C (0.5, 1 або 2 мг/день) одним із двох
способів: з апельсиновим соком або у вигляді аскорбінової кислоти.
len — довжина клітин зуба (результат
експерименту);supp — спосіб подачі: OJ
— апельсиновий сік, VC — аскорбінова кислота;dose — доза вітаміну C: 0.5, 1 або 2
мг/день.data(ToothGrowth)
tg <- ToothGrowth %>%
mutate(
dose = factor(dose),
supp = factor(supp, levels = c("OJ", "VC"),
labels = c("Апельсиновий сік", "Аскорбінова кислота"))
)
tg_summary <- tg %>%
group_by(supp, dose) %>%
summarise(mean_len = round(mean(len), 2), .groups = "drop")
kable(tg_summary,
col.names = c("Спосіб подачі", "Доза (мг/день)", "Середня довжина"),
caption = "Таблиця 2: Середня довжина зубів за групами")| Спосіб подачі | Доза (мг/день) | Середня довжина |
|---|---|---|
| Апельсиновий сік | 0.5 | 13.23 |
| Апельсиновий сік | 1 | 22.70 |
| Апельсиновий сік | 2 | 26.06 |
| Аскорбінова кислота | 0.5 | 7.98 |
| Аскорбінова кислота | 1 | 16.77 |
| Аскорбінова кислота | 2 | 26.14 |
ggplot(tg, aes(x = dose, y = len, fill = supp)) +
geom_boxplot(alpha = 0.7) +
scale_fill_manual(values = c("Апельсиновий сік" = "#f39c12",
"Аскорбінова кислота" = "#3498db")) +
labs(
title = "Довжина зубів залежно від дози та способу подачі",
x = "Доза вітаміну C (мг/день)",
y = "Довжина зубів",
fill = "Спосіб подачі"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "top")Аналіз: Зі збільшенням дози довжина зубів зростає. При дозах 0.5 і 1 мг апельсиновий сік дає кращий результат, ніж аскорбінова кислота. При дозі 2 мг різниці майже немає.
ggplot(tg_summary, aes(x = dose, y = mean_len, colour = supp, group = supp)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3.5) +
scale_colour_manual(values = c("Апельсиновий сік" = "#f39c12",
"Аскорбінова кислота" = "#3498db")) +
labs(
title = "Середня довжина зубів залежно від дози",
x = "Доза вітаміну C (мг/день)",
y = "Середня довжина зубів",
colour = "Спосіб подачі"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "top")Аналіз: Обидві лінії йдуть вгору. Лінія соку вища, але при дозі 2 мг лінії сходяться (26.06 і 26.14).
ggplot(tg, aes(x = len, fill = dose)) +
geom_density(alpha = 0.5, colour = NA) +
scale_fill_viridis_d(name = "Доза (мг/день)") +
labs(
title = "Розподіл довжини зубів за дозами",
x = "Довжина зубів",
y = "Щільність"
) +
theme_minimal(base_size = 13) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
legend.position = "top")Аналіз: Чим більша доза, тим правіше розташований розподіл, тобто тим довші зуби у більшості тварин.