Warning: пакет 'ggplot2' был собран под R версии 4.3.3
Warning: пакет 'dplyr' был собран под R версии 4.3.2
Присоединяю пакет: 'dplyr'
Следующие объекты скрыты от 'package:stats':
filter, lag
Следующие объекты скрыты от 'package:base':
intersect, setdiff, setequal, union
1. Данные для заданий
n <-80df <-data.frame(age =sample(18:70, n, replace=TRUE),weight =rnorm(n, 70, 12),height =rnorm(n, 170, 10),gender =sample(c("Male","Female"), n, replace=TRUE),sport =sample(c("Yes","No"), n, replace=TRUE)) |>mutate(BMI = weight/(height/100)^2)head(df,8)
age weight height gender sport BMI
1 66 53.58063 169.9818 Female No 18.54399
2 54 75.19382 165.7174 Male No 27.38078
3 18 60.26328 163.8633 Female No 22.44344
4 42 87.32922 149.7532 Male Yes 38.94101
5 27 64.82265 157.7525 Male No 26.04799
6 53 77.86777 171.7952 Female Yes 26.38371
7 35 73.86310 175.6762 Female No 23.93325
8 66 60.59393 165.0712 Male No 22.23752
2. Задания
A. Распределение
ggplot(df, aes(x = BMI)) +geom_histogram(aes(y =after_stat(density), fill = gender), bins =10, position ="identity", alpha =0.6) +geom_density() +labs(title ="Распределение BMI по полу", x ="Индекс массы тела", y ="Плотность") +theme_classic()
B. Взаимосвязь
ggplot(df, aes(x = age, y = BMI, color = gender, shape = sport)) +geom_point() +geom_smooth(method ="lm") +labs(title ="Зависимость BMI от возраста", x ="Возраст", y ="Индекс массы тела") +theme_classic()
`geom_smooth()` using formula = 'y ~ x'
C. Сравнение групп
ggplot(df, aes(x = gender, y = BMI, fill =factor(gender))) +geom_boxplot(show.legend =FALSE) +labs(title ="Распределение BMI по полу", x ="Пол", y ="Индекс массы тела") +theme_minimal()
ggplot(df, aes(x = gender, y = height)) +geom_violin(aes(color = gender, fill = gender), alpha =0.1, show.legend =FALSE) +stat_summary(fun = median) +facet_wrap(~gender, scales ="free") +labs(title ="Распределение роста по полу", x ="Пол", y ="Рост") +theme_minimal()
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_segment()`).
Removed 1 row containing missing values or values outside the scale range
(`geom_segment()`).
D. Средние по группам
dfs <- df %>%group_by(gender, sport) %>%summarise(mean_BMI =mean(BMI, na.rm =TRUE), .groups ='drop')ggplot(dfs, aes(x = gender, y = mean_BMI, fill = sport)) +geom_col(position ="dodge") +labs(title ="Средний BMI по полу и занятиям спортом", x ="Пол", y ="Средний BMI") +theme_classic()
E. Дополнительно
ggplot(df, aes(x = gender, y = BMI, fill = gender)) +geom_boxplot(show.legend =FALSE) +facet_wrap(~sport) +scale_fill_manual(values =c("Male"="steelblue", "Female"="pink")) +labs(title ="Распределение BMI по полу и занятиям спортом",x ="Пол", y ="BMI") +theme_minimal()
3. Краткие выводы
Распределение индекса массы тела демонстрирует гендерные различия, у мужчин наблюдается более высокий средний показатель по сравнению с женщинами. Интересно, что занятие спортом не оказывает особого влияния на средние показатели BMI в гендерных группах. Анализ взаимосвязи возраста и BMI выявил слабую положительную корреляцию у мужчин, но отрицательную у женщин, что частично соответствует общеизвестной тенденции изменения массы тела с возрастом. При этом распределение роста по полу соответствует биологическим различиям - мужчины в среднем имеют более высокий рост.