library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(ggcorrplot)
set = read_excel(path = "/Users/insomnia/Downloads/sanji/1.xlsx")
## New names:
## • `балл` -> `балл...10`
## • `балл` -> `балл...14`
## • `балл` -> `балл...21`
## • `балл` -> `балл...25`
## • `` -> `...32`
clean_data <- set %>%
filter(!is.na(ID))
clean_data <- clean_data[-c(25,32)]
clean_data$Пол <- as.factor(clean_data$Пол)
clean_data$разряд <- as.factor(clean_data$разряд)
levels = c("МСМК","МС", "КМС","1-й взрослый","2-й взрослый")
clean_data$разряд <- ordered(clean_data$разряд, levels = levels)
clean_data <-clean_data |> select(-ID)
clean_data <- clean_data[,c(2,3,1,4,5,6,7,10,8,9,11:20)]
summary <- clean_data |> group_by(разряд) |>
summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)), n = n())
summary <- column_to_rownames(summary, var = "разряд")
head(summary[,1:6])
## Возраст Рост (см) Вес,кг Окр.талии (см) Окр.бедер (см) ИМТ
## МСМК 25.94737 189.5263 86.11053 85.47368 101.1579 23.81579
## МС 22.48649 184.6486 79.81351 81.05405 100.2973 23.29730
## КМС 19.52381 184.1429 82.07143 82.42857 100.8571 24.11429
## 1-й взрослый 20.33333 186.6667 84.63333 84.66667 100.3333 24.20000
## 2-й взрослый 18.00000 176.0000 84.40000 87.00000 99.0000 27.20000
corr <- cor(summary)
head(corr[, 1:6])
## Возраст Рост (см) Вес,кг Окр.талии (см) Окр.бедер (см)
## Возраст 1.0000000 0.8047633 0.20361400 -0.1490116 0.71239472
## Рост (см) 0.8047633 1.0000000 0.15504664 -0.3397685 0.91552692
## Вес,кг 0.2036140 0.1550466 1.00000000 0.8681835 0.04095401
## Окр.талии (см) -0.1490116 -0.3397685 0.86818353 1.0000000 -0.44436999
## Окр.бедер (см) 0.7123947 0.9155269 0.04095401 -0.4443700 1.00000000
## ИМТ -0.6621012 -0.8718794 0.34857028 0.7533660 -0.85091852
## ИМТ
## Возраст -0.6621012
## Рост (см) -0.8718794
## Вес,кг 0.3485703
## Окр.талии (см) 0.7533660
## Окр.бедер (см) -0.8509185
## ИМТ 1.0000000
p.mat <- cor_pmat(summary)
head(p.mat[, 1:4])
## Возраст Рост (см) Вес,кг Окр.талии (см)
## Возраст 0.0000000 0.10046852 0.74255327 0.81097709
## Рост (см) 0.1004685 0.00000000 0.80338231 0.57586734
## Вес,кг 0.7425533 0.80338231 0.00000000 0.05630013
## Окр.талии (см) 0.8109771 0.57586734 0.05630013 0.00000000
## Окр.бедер (см) 0.1769472 0.02909582 0.94787031 0.45342577
## ИМТ 0.2234465 0.05398022 0.56534520 0.14146711
ggcorrplot(corr)

ggcorrplot(corr, hc.order = TRUE, type = "lower",
outline.col = "white")

ggcorrplot(corr, hc.order = TRUE, type = "lower",
outline.col = "white",
ggtheme = ggplot2::theme_gray,
colors = c("#6D9EC1", "white", "#E46726"))

ggcorrplot(corr, hc.order = TRUE, type = "lower",
lab = TRUE, lab_size = 2)

ggcorrplot(corr, hc.order = TRUE,type="lower", p.mat = p.mat)

ggcorrplot(corr, p.mat = p.mat, hc.order = TRUE,
type = "lower", insig = "blank")

# сгруппированный сет со спорсменами с разрядами "МСМК", "МС", "КМС"
grouped_data <- clean_data |> filter(разряд %in% c("МСМК", "МС", "КМС"))
#первичная визуализация:
grouped_data |> ggplot(aes(x = разряд, y = `ЖМ,кг`))+
geom_boxplot()

grouped_data |> ggplot(aes(x = разряд, y = `ЖМ,%`))+
geom_boxplot()

grouped_data |> ggplot(aes(x = разряд, y = `АКМ,кг`))+
geom_boxplot()

grouped_data |> ggplot(aes(x = разряд, y = `АКМ,%`))+
geom_boxplot()

# есть ли линейная зависимость между зависимыми признаками? (нет)
grouped_data |> ggplot(aes(x = `ЖМ,кг`, y = `АКМ,кг`))+
geom_point()+
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

grouped_data |> ggplot(aes(x = `ЖМ,%`, y = `АКМ,%`))+
geom_point()+
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

# Сравнение трех и более групп по количественному признаку:
# Оцените нормальность распределения показателей в каждой из
# сравниваемых групп с помощью критерия Колмогорова-Смирнова
# (при числе исследуемых n>50) или критерия Шапиро-Уилка (при n<50).
shapiro.test(grouped_data$`ЖМ,кг`) #W = 0.97924, p-value = 0.24
##
## Shapiro-Wilk normality test
##
## data: grouped_data$`ЖМ,кг`
## W = 0.97924, p-value = 0.24
shapiro.test(grouped_data$`ЖМ,%`) #W = 0.98139, p-value = 0.3203
##
## Shapiro-Wilk normality test
##
## data: grouped_data$`ЖМ,%`
## W = 0.98139, p-value = 0.3203
shapiro.test(grouped_data$`АКМ,кг`) #W = 0.93952, p-value = 0.001168 ##НЕ нормальное распределение##
##
## Shapiro-Wilk normality test
##
## data: grouped_data$`АКМ,кг`
## W = 0.93952, p-value = 0.001168
shapiro.test(grouped_data$`АКМ,%`) #W = 0.97938, p-value = 0.2448
##
## Shapiro-Wilk normality test
##
## data: grouped_data$`АКМ,%`
## W = 0.97938, p-value = 0.2448
# При нормальном распределении Для сравнения используйте однофакторный дисперсионный анализ (ANOVA)
res.aov <- aov(`ЖМ,кг` ~ разряд, data = grouped_data)
summary(res.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## разряд 2 28 13.96 0.307 0.736
## Residuals 74 3363 45.45
# нет статистически значимых различий
res.aov <- aov(`ЖМ,%` ~ разряд, data = grouped_data)
summary(res.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## разряд 2 16 7.87 0.152 0.859
## Residuals 74 3829 51.75
# нет статистически значимых различий
res.aov <- aov(`АКМ,%` ~ разряд, data = grouped_data)
summary(res.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## разряд 2 4.3 2.139 0.318 0.729
## Residuals 74 498.4 6.736
# нет статистически значимых различий
# Для сравнения показателей, распределение которых отличается от нормального,
# используйте непараметрический критерий Краскела-Уоллиса.
kruskal.test(`АКМ,%` ~ разряд, data = grouped_data)
##
## Kruskal-Wallis rank sum test
##
## data: АКМ,% by разряд
## Kruskal-Wallis chi-squared = 0.90728, df = 2, p-value = 0.6353
# нет статистически значимых различий