9deportes

  1. estudio comparativo entre deportes de equipo y deportes individuales. sospechamos que los individuales producen más respuesta de estrés anticipatoria

  2. dos: comparativa de los esports por separado con los otros deportes donde hay esfuerzo físico

#Carga de datos

library(tidyverse)
Warning: package 'ggplot2' was built under R version 4.3.2
Warning: package 'dplyr' was built under R version 4.3.2
Warning: package 'stringr' was built under R version 4.3.2
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.4
✔ 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(ggsignif)
library(DT)
Warning: package 'DT' was built under R version 4.3.2
library(ggstatsplot)
Warning: package 'ggstatsplot' was built under R version 4.3.2
You can cite this package as:
     Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
     Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
library(car)
Loading required package: carData

Attaching package: 'car'

The following object is masked from 'package:dplyr':

    recode

The following object is masked from 'package:purrr':

    some
theme_set(theme_minimal())
miTema <-theme_get()
#miTema <-theme_get() +
#theme(axis.text.x = element_text(angle = 0, vjust = 0, hjust=1),legend.position = "none")
theme_set(miTema)

df=readxl::read_xlsx("CAR_PNEC_2.xlsx",1) %>% 
  mutate(ID=1:nrow(.),
         Cluster=as.factor(sprintf("%d_%d",Sport,Cluster))) %>%
  select(ID,Cluster,everything()) %>% 
  mutate(Sport=factor(Sport, 
                         levels=1:8,
                         labels=c("Hockey","Handball","e-Sports","Swimming", "Football", "Athletism", "Badminton","Judo")),
         IT=factor(IT,labels=c("Individual","Team")),
         GENDER=factor(GENDER,labels=c("Female","Male"))) %>% 
         mutate(Clasificacion=case_when(
           Sport=="e-Sports" ~ 3,
           IT =="Individual" ~ 1,
           TRUE ~2
         ),
         Clasificacion=factor(Clasificacion,levels=1:3,labels=c("Individual","Team","e-Sports")),
        eSports=as.integer(Sport=="e-Sports")) %>% 
  select(ID:GENDER,Clasificacion,IMC,eSports,everything())
df 
# A tibble: 232 × 12
      ID Cluster Sport  IT    GENDER Clasificacion   IMC eSports CORT_Awak_rest
   <int> <fct>   <fct>  <fct> <fct>  <fct>         <dbl>   <int>          <dbl>
 1     1 1_NA    Hockey Team  Male   Team           20.1       0           4   
 2     2 1_NA    Hockey Team  Male   Team           24.5       0           2.32
 3     3 1_NA    Hockey Team  Male   Team           22.2       0           2.9 
 4     4 1_NA    Hockey Team  Male   Team           23.2       0           4.3 
 5     5 1_NA    Hockey Team  Male   Team           21.9       0           4.8 
 6     6 1_NA    Hockey Team  Male   Team           24.9       0           2.5 
 7     7 1_NA    Hockey Team  Male   Team           23.3       0           6.54
 8     8 1_NA    Hockey Team  Male   Team           22.2       0           3.3 
 9     9 1_NA    Hockey Team  Male   Team           23.0       0           3.2 
10    10 1_NA    Hockey Team  Male   Team           22.5       0           5.81
# ℹ 222 more rows
# ℹ 3 more variables: CORT_30_rest <dbl>, CORT_awak_comp <dbl>,
#   CORT_30_comp <dbl>

Vamos a pasar la base de datos al formato tidy

dfLong=df %>% pivot_longer(-c(ID:eSports)) %>% 
  mutate(name=str_replace(name,"^CORT_","")) %>% 
    mutate(name=str_replace(name,"^[Aa]wak_","m00_"),
           name=str_replace(name,"^30_","m30_")) %>% 
  separate(name,into=c("time","activity")) %>% 
  mutate(time=as.factor(time),activity=as.factor(activity)) %>% 
  rename(Cortisol=value)
dfLong  
# A tibble: 928 × 11
      ID Cluster Sport  IT    GENDER Clasificacion   IMC eSports time  activity
   <int> <fct>   <fct>  <fct> <fct>  <fct>         <dbl>   <int> <fct> <fct>   
 1     1 1_NA    Hockey Team  Male   Team           20.1       0 m00   rest    
 2     1 1_NA    Hockey Team  Male   Team           20.1       0 m30   rest    
 3     1 1_NA    Hockey Team  Male   Team           20.1       0 m00   comp    
 4     1 1_NA    Hockey Team  Male   Team           20.1       0 m30   comp    
 5     2 1_NA    Hockey Team  Male   Team           24.5       0 m00   rest    
 6     2 1_NA    Hockey Team  Male   Team           24.5       0 m30   rest    
 7     2 1_NA    Hockey Team  Male   Team           24.5       0 m00   comp    
 8     2 1_NA    Hockey Team  Male   Team           24.5       0 m30   comp    
 9     3 1_NA    Hockey Team  Male   Team           22.2       0 m00   rest    
10     3 1_NA    Hockey Team  Male   Team           22.2       0 m30   rest    
# ℹ 918 more rows
# ℹ 1 more variable: Cortisol <dbl>

Hay varias formas de abordar la anticipación. Vmos a ir probándolas:

anticipacion1=CORT_awak_comp - CORT_Awak_rest

Es la diferencia entre como te despiertas un dia de competición y un día de descanso y ahí no hay nada especial (aunque está cerca p=0.07) de haber diferencias entre tipos de deporte.

df %>% mutate(
  anticipacion1=CORT_awak_comp - CORT_Awak_rest
) %>% ggbetweenstats(
  x = Clasificacion,
  y = anticipacion1
)

anticipacion2=CORT_30_comp - CORT_awak_comp

La que ocurre los dias de competición entre el despertar y los 30 minutos después

df %>% mutate(
  anticipacion2=CORT_30_comp - CORT_awak_comp
) %>% ggbetweenstats(
  x = Clasificacion,
  y = anticipacion2
)

Vamos a describir este con detalle empezando por arriba:

  • Hay diferencias entre los tres grupos usando prueba ANOVA, p=0,000000138. La prueba tiene corrección de Welch ya que hay mucha heterocedasticidad.

  • La magnitud de efecto (omega sub p al cuadrado) es 0.22. Generalmente (por convernio) se considera moderada a partir de 0.06 hacia arriba. Un valor cercano a 1 sería muy grande. EN cualquier caso, el intervalo de confianza para el size-effect va de 0.12 a 1, así que es un efecto entre moderado y grande.

  • Una vez que sabemos que los tres grupos no son iguales, vienen las comparaciones dos a dos (análisis post-hoc). Para ello nos metemos en el gráfico, lineas superiores que comunican pares de dos gráficos. Hay tres comparaciones posibles, pero solo dos son significativas:

    • e-sports vs Individual (p=0.00178)
    • e-sports vs Team (p=0.000000922)
    • Individual vs Team (no significativa, así que no mostramos la línea).

Lo de abajo es en lenguaje bayesiano. No es muy común usarlo.

anticipacion3=(CORT_30_comp - CORT_awak_comp) - (CORT_30_rest - CORT_awak_rest)

Esta parece extraña. Lo que hacemos es definir la anticipación como la diferencia entre los 30 minutos y el despertar. Y lo que estudiamos es si esa “anticipación”. Luego la miramos en los dias de descanso. Estudiamos la diferencia entre la anticipación los dias de competición y los dias de descanso.

df %>% mutate(
  anticipacion3=(CORT_30_comp - CORT_awak_comp) - (CORT_30_rest - CORT_Awak_rest)
) %>% ggbetweenstats(
  x = Clasificacion,
  y = anticipacion3
)

La diferencias son menos significativas que en la anterior, pero se obtienen las mismas conclusiones.

Estudio de la dispersión en deportes individuales vs de equipo

Tenemos la hipótesis de que en los equipos individuales hay menos dispersión en los valores de cortisol. A eso añadimos que todos los deportes individuales presentan dispersión similar en cortisol y los de equipo también.

Estás hipótesis las podemos testear en una primera aproximación con la prueba de Levene que es robusta a la posible no normalidad de los datos. La hipótesis nula es la de igualdad de varianzas. Si el p-valor es menor que 0.05 rechazamos la hipótesis nula y decimos que hay diferencias en la varianza. Si por esta vía sale algo interesante más adelante podríamos explorarlo con un modelo mixto con las fuentes de variabilidad individuo, equipo/deporte (hay que tratarlo con cuidado para ver qué sería equipo en deporte individual).

Vamos a hacerlo con dos versiones de lo que hemos llamado anticipación:

  • anticipacion3=(CORT_30_comp - CORT_awak_comp) - (CORT_30_rest - CORT_Awak_rest)

  • anticipacion2=CORT_30_comp - CORT_awak_comp

Estudiando anticipacion3=(CORT_30_comp - CORT_awak_comp) - (CORT_30_rest - CORT_Awak_rest)

dfTmp=df %>% mutate(
  anticipacion3=(CORT_30_comp - CORT_awak_comp) - (CORT_30_rest - CORT_Awak_rest)
)


car::leveneTest(anticipacion3 ~ Clasificacion, data=dfTmp)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value   Pr(>F)   
group   2  6.4644 0.001858 **
      229                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Rechazamos la igualdad de variabilidad en los tres grupos. Vamos a centrarnos en solo dos, los individuales y los de equipo:

car::leveneTest(anticipacion3 ~ Clasificacion, data=dfTmp %>% filter(Clasificacion %in% c("Individual","Team")))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value   Pr(>F)   
group   1  7.9278 0.005366 **
      196                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Aquí también rechazamos la igualdad de varianza. Por curiosidad vamos a explorar si los e-sports son como los individuales. No es relevante, pero como no se de que van los e-sports así veo si se parecen o no a los individuales en eso:

car::leveneTest(anticipacion3 ~ Clasificacion, data=dfTmp %>% filter(Clasificacion %in% c("Individual","e-Sports")))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   1  1.4851 0.2253
      125               

Efectivamente, nada parece indicar que en cuanto a la variabilidad ambos sean diferentes, aunque antes vimos que el estrés de anticipación no es el mismo en unos y otros.

Lo siguiente es explorar si es al menos procedente hablar en general de variabilidad de deporte individual y variabilidad en general de deporte de equipo. Para ello vamos a testear la igualdad de varianzas entre los deportes de equipo. Luego también la testearemos entre los deportes individuales:

 car::leveneTest(anticipacion3 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Team"))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)  
group   2  2.6295  0.077 .
      102                 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Está un poco cogido por los pelos pero en principio no hay evidencia suficiente en contra de que la variabilidad en todos los equipos sea similar. Estaría bien explorar gráficamente esa variabilidad tan al límite:

ggbetweenstats(dfTmp %>% filter(Clasificacion=="Team"), x = Sport, y = anticipacion3)

El futbol es bastante diferente al resto en cuanto a variabilidad. No veo claro como justificar considerar todos los deportes de equipo como similares en variabilidad. Pero bueno, es un análisis exploratorio.

Vamos por los deportes individuales:

 car::leveneTest(anticipacion3 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Individual"))
Levene's Test for Homogeneity of Variance (center = median)
      Df F value   Pr(>F)   
group  3  4.7708 0.003947 **
      89                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Aquí hay clara evidencia en contra de que los diferentes deportes individuales presentan homogeneidad de variabilidad. Vamos a explorar la dispersión:

ggbetweenstats(dfTmp %>% filter(Clasificacion=="Individual"), x = Sport, y = anticipacion3)

Hay un grupillo de gente rara en el Badminton. Será culpa de ellos?

 car::leveneTest(anticipacion3 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Individual" & Sport!="Badminton"))
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  2  0.8064 0.4516
      56               

Pues sí… El Badminton tiene una variabilidad que no se parece al resto de deportes individuales.

Estudiando la variabilidad de anticipacion2=CORT_30_comp - CORT_awak_comp

dfTmp=df %>% mutate(
  anticipacion2=CORT_30_comp - CORT_awak_comp
)


car::leveneTest(anticipacion2 ~ Clasificacion, data=dfTmp)
Levene's Test for Homogeneity of Variance (center = median)
       Df F value    Pr(>F)    
group   2  8.2581 0.0003443 ***
      229                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Empezamos igual. Los tres grupos son diferentes, pero nuestro interés es limitarnos a solo individual vs. Team:

car::leveneTest(anticipacion2 ~ Clasificacion, data=dfTmp %>% filter(Clasificacion %in% c("Individual","Team")))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value   Pr(>F)   
group   1  10.001 0.001814 **
      196                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Aquí también rechazamos la igualdad de varianza. Por curiosidad vamos a explorar si los e-sports son como los individuales.

car::leveneTest(anticipacion2 ~ Clasificacion, data=dfTmp %>% filter(Clasificacion %in% c("Individual","e-Sports")))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   1  2.3881 0.1248
      125               

Efectivamente, nada parece indicar que en cuanto a la variabilidad ambos sean diferentes.

Lo siguiente es explorar si es al menos procedente hablar en general de variabilidad de deporte individual y variabilidad en general de deporte de equipo. Para ello vamos a testear la igualdad de varianzas entre los deportes de equipo. Luego también la testearemos entre los deportes individuales:

 car::leveneTest(anticipacion2 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Team"))
Levene's Test for Homogeneity of Variance (center = median)
       Df F value Pr(>F)
group   2  1.8277  0.166
      102               

Mira que bien. Con este tipo de anticipación todos los deportes presentan la misma variabilidad. No nos viene mal visualizarlo:

ggbetweenstats(dfTmp %>% filter(Clasificacion=="Team"), x = Sport, y = anticipacion2)

Yo diría que el futbol es muy especial en cuanto a la variabilidad de anticipación. Para mí que a la prueba de Levene se le escapa algo que es evidente a simple vista. Tal vez esté relacionado con que las muestras de los deportes que no son futbol son claramente más pequeñas.

Vamos a repetir lo equivalente en deportes individuales:

 car::leveneTest(anticipacion2 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Individual"))
Levene's Test for Homogeneity of Variance (center = median)
      Df F value    Pr(>F)    
group  3  6.8095 0.0003482 ***
      89                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Aquí hay clara evidencia en contra de que los diferentes deportes individuales presentan homogeneidad de variabilidad. Vamos a explorar la dispersión:

ggbetweenstats(dfTmp %>% filter(Clasificacion=="Individual"), x = Sport, y = anticipacion2)

El Badminton sigue siendo el deporte de gente rar… vamos a verlo:

 car::leveneTest(anticipacion2 ~ Sport, data=dfTmp %>% filter(Clasificacion=="Individual" & Sport!="Badminton"))
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  2  0.0796 0.9236
      56               

Sí, los otros deportes individuales tienen la misma variabilidad. EL Badminton es un deporte individual con deportistas con muy diferente anticipación de stress.