Подготовлено в рамках курса “Анализ данных в
бизнесе”, МГУ им. М.В. Ломоносова.
# Загрузка необходимых пакетов
# gt: для создания таблиц
# gtsummary: для создания медицинских/статистических сводок
# gtExtras: для расширенных возможностей форматирования таблиц gt
# mlbench: для работы с набором данных PimaIndiansDiabetes
# sjPlot: для создания графиков и таблиц
library(gt)
library(gtsummary)
library(gtExtras)
library(mlbench)
library(sjPlot)
library(dplyr)
library(sparkline)
# Загрузка данных PimaIndiansDiabetes из пакета mlbench
data(PimaIndiansDiabetes, package = "mlbench")
# Описание данных
# Набор данных PimaIndiansDiabetes содержит информацию о женщинах индейского племени Пима,
# включая данные об их медицинских характеристиках и наличии диабета.
# Описательные статистики с использованием gt_plt_summary из пакета gtExtras
# gt_plt_summary визуализирует основные статистики данных
PimaIndiansDiabetes %>% gt_plt_summary()
.
768 rows x 9 cols
Column
Plot Overview
Missing
Mean
Median
SD
pregnant
0.0%
3.8
3.0
3.4
glucose
0.0%
120.9
117.0
32.0
pressure
0.0%
69.1
72.0
19.4
triceps
0.0%
20.5
23.0
16.0
insulin
0.0%
79.8
30.5
115.2
mass
0.0%
32.0
32.0
7.9
pedigree
0.0%
0.5
0.4
0.3
age
0.0%
33.2
29.0
11.8
diabetes
neg and pos
0.0%
—
—
—
# Просмотр структуры данных
str(PimaIndiansDiabetes)
# Создание таблицы с описательными статистиками с использованием tbl_summary из пакета gtsummary
# tbl_summary создает сводку для всех переменных в наборе данных
PimaIndiansDiabetes %>% tbl_summary()
Characteristic
N = 7681
pregnant
3.0 (1.0, 6.0)
glucose
117 (99, 140)
pressure
72 (62, 80)
triceps
23 (0, 32)
insulin
31 (0, 127)
mass
32 (27, 37)
pedigree
0.37 (0.24, 0.63)
age
29 (24, 41)
diabetes
neg
500 (65%)
pos
268 (35%)
1 Median (IQR); n (%)
# Создание таблицы с описательными статистиками с разделением по переменной diabetes
# add_p добавляет p-значения для каждой переменной, указывая на различия между группами
PimaIndiansDiabetes %>% tbl_summary(by = diabetes) %>% add_p()
Characteristic
neg, N = 5001
pos, N = 2681
p-value2
pregnant
2.0 (1.0, 5.0)
4.0 (1.8, 8.0)
<0.001
glucose
107 (93, 125)
140 (119, 167)
<0.001
pressure
70 (62, 78)
74 (66, 82)
<0.001
triceps
21 (0, 31)
27 (0, 36)
0.013
insulin
39 (0, 105)
0 (0, 167)
0.066
mass
30 (25, 35)
34 (31, 39)
<0.001
pedigree
0.34 (0.23, 0.56)
0.45 (0.26, 0.73)
<0.001
age
27 (23, 37)
36 (28, 44)
<0.001
1 Median (IQR)
2 Wilcoxon rank sum test
# Создание таблицы с описательными статистиками и указанием формата для непрерывных и категориальных переменных
# statistic задает формат отображения данных
PimaIndiansDiabetes %>% tbl_summary(
by = diabetes,
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} / {N} ({p}%)"
)
) %>% add_p()
Characteristic
neg, N = 5001
pos, N = 2681
p-value2
pregnant
3.3 (3.0)
4.9 (3.7)
<0.001
glucose
110 (26)
141 (32)
<0.001
pressure
68 (18)
71 (21)
<0.001
triceps
20 (15)
22 (18)
0.013
insulin
69 (99)
100 (139)
0.066
mass
30 (8)
35 (7)
<0.001
pedigree
0.43 (0.30)
0.55 (0.37)
<0.001
age
31 (12)
37 (11)
<0.001
1 Mean (SD)
2 Wilcoxon rank sum test
# Добавление общей строки, которая показывает сводку по всем данным
# add_overall добавляет общие статистики для всех наблюдений
# add_n добавляет общее количество наблюдений
PimaIndiansDiabetes %>% tbl_summary(
by = diabetes,
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} / {N} ({p}%)"
)
) %>% add_p() %>% add_overall() %>% add_n()
Characteristic
N
Overall, N = 7681
neg, N = 5001
pos, N = 2681
p-value2
pregnant
768
3.8 (3.4)
3.3 (3.0)
4.9 (3.7)
<0.001
glucose
768
121 (32)
110 (26)
141 (32)
<0.001
pressure
768
69 (19)
68 (18)
71 (21)
<0.001
triceps
768
21 (16)
20 (15)
22 (18)
0.013
insulin
768
80 (115)
69 (99)
100 (139)
0.066
mass
768
32 (8)
30 (8)
35 (7)
<0.001
pedigree
768
0.47 (0.33)
0.43 (0.30)
0.55 (0.37)
<0.001
age
768
33 (12)
31 (12)
37 (11)
<0.001
1 Mean (SD)
2 Wilcoxon rank sum test
# Преобразование таблицы в формат gt и применение темы gt_theme_guardian для улучшения визуального представления
PimaIndiansDiabetes %>% tbl_summary(
by = diabetes,
statistic = list(
all_continuous() ~ "{mean} ({sd})",
all_categorical() ~ "{n} / {N} ({p}%)"
)) %>% add_p() %>% add_overall() %>% add_n() %>% as_gt() %>% gt_theme_guardian()