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
# нет статистически значимых различий