Ir al contenido
# Paquetes necesarios
library(data.table)

# Y por supuesto cargamos el paquete del estudio
library(seasonalSensitivity)

Estructura de los datos

En primera instancia podemos notar que los datos se componen de 358 filas y 18 columnas, las cuales constituyen las variables descritas en la documentación de los datos (ver documentación: seasonalSensitivity::dataset)

Explorando la normalidad

Para explorar si las variables continuas siguen una distribución aproximadamente normal, usaremos la función seasonalSensitivity::is_normal_colwise(), implementada dentro del mismo paquete. Esta función nos asistirá durante el proceso de selección de estadísticos apropiados.

n_colwise(dataset)
#>                          vars    V1
#>                        <char> <int>
#>  1:                        id   358
#>  2:                    genero   357
#>  3:                      edad   358
#>  4:                   deporte   353
#>  5:       deporte_dias_semana   194
#>  6:        deporte_intensidad   194
#>  7:    deporte_minutos_sesion   194
#>  8:          ss_patron_verano   358
#>  9:        ss_patron_invierno   358
#> 10:            ss_patron_tipo   331
#> 11:                  ss_index   357
#> 12:              ss_severidad   316
#> 13:       riff_autoaceptacion   358
#> 14: riff_relaciones_positivas   358
#> 15:            riff_autonomia   358
#> 16:      riff_dominio_entorno   358
#> 17: riff_crecimiento_personal   358
#> 18:       riff_proposito_vida   358

is_normal_colwise(dataset)
#>                          vars     V1
#>                        <char> <lgcl>
#>  1:                        id  FALSE
#>  2:    deporte_minutos_sesion  FALSE
#>  3:          ss_patron_verano  FALSE
#>  4:        ss_patron_invierno  FALSE
#>  5:       riff_autoaceptacion  FALSE
#>  6: riff_relaciones_positivas  FALSE
#>  7:            riff_autonomia  FALSE
#>  8:      riff_dominio_entorno  FALSE
#>  9: riff_crecimiento_personal  FALSE
#> 10:       riff_proposito_vida  FALSE

Agrupando por sexo

Después de la exploración analítica observamos que ninguna de las variables numéricas sigue una distribución normal, pero que tal si agrupamos por sexo.

n_colwise(dataset, .by = genero) # Tamaño muestral
#>                          vars Femenino Masculino    NA
#>                        <char>    <int>     <int> <int>
#>  1:                        id      156       201     1
#>  2:                    genero      156       201     0
#>  3:                      edad      156       201     1
#>  4:                   deporte      155       198     0
#>  5:       deporte_dias_semana       93       101     0
#>  6:        deporte_intensidad       93       101     0
#>  7:    deporte_minutos_sesion       93       101     0
#>  8:          ss_patron_verano      156       201     1
#>  9:        ss_patron_invierno      156       201     1
#> 10:            ss_patron_tipo      147       183     1
#> 11:                  ss_index      156       200     1
#> 12:              ss_severidad      140       175     1
#> 13:       riff_autoaceptacion      156       201     1
#> 14: riff_relaciones_positivas      156       201     1
#> 15:            riff_autonomia      156       201     1
#> 16:      riff_dominio_entorno      156       201     1
#> 17: riff_crecimiento_personal      156       201     1
#> 18:       riff_proposito_vida      156       201     1

is_normal_colwise(dataset, .by = genero) # Normalidad
#>                          vars Femenino Masculino
#>                        <char>   <lgcl>    <lgcl>
#>  1:                        id    FALSE      TRUE
#>  2:    deporte_minutos_sesion    FALSE     FALSE
#>  3:          ss_patron_verano    FALSE     FALSE
#>  4:        ss_patron_invierno    FALSE     FALSE
#>  5:       riff_autoaceptacion    FALSE     FALSE
#>  6: riff_relaciones_positivas     TRUE     FALSE
#>  7:            riff_autonomia    FALSE     FALSE
#>  8:      riff_dominio_entorno    FALSE     FALSE
#>  9: riff_crecimiento_personal     TRUE     FALSE
#> 10:       riff_proposito_vida    FALSE     FALSE

Agrupando por deporte

Aun así apreciamos que no se cumple la normalidad para ambos géneros en ninguna variable. Evaluemos si esto ocurre de igual manera para la variable deporte (realiza o no deporte, variable dicotómica: Sí o No).

n_colwise(dataset, .by = deporte) # Tamaño muestral
#>                          vars    Si    No    NA
#>                        <char> <int> <int> <int>
#>  1:                        id   194   159     5
#>  2:                    genero   194   159     4
#>  3:                      edad   194   159     5
#>  4:                   deporte   194   159     0
#>  5:       deporte_dias_semana   194     0     0
#>  6:        deporte_intensidad   194     0     0
#>  7:    deporte_minutos_sesion   194     0     0
#>  8:          ss_patron_verano   194   159     5
#>  9:        ss_patron_invierno   194   159     5
#> 10:            ss_patron_tipo   180   146     5
#> 11:                  ss_index   194   159     4
#> 12:              ss_severidad   175   138     3
#> 13:       riff_autoaceptacion   194   159     5
#> 14: riff_relaciones_positivas   194   159     5
#> 15:            riff_autonomia   194   159     5
#> 16:      riff_dominio_entorno   194   159     5
#> 17: riff_crecimiento_personal   194   159     5
#> 18:       riff_proposito_vida   194   159     5

is_normal_colwise(
  .data = dataset[j = -c("deporte_dias_semana", "deporte_intensidad", "deporte_minutos_sesion")], 
  .by = deporte
) # Normalidad
#>                         vars     Si     No
#>                       <char> <lgcl> <lgcl>
#> 1:                        id  FALSE   TRUE
#> 2:          ss_patron_verano  FALSE  FALSE
#> 3:        ss_patron_invierno  FALSE  FALSE
#> 4:       riff_autoaceptacion  FALSE   TRUE
#> 5: riff_relaciones_positivas  FALSE   TRUE
#> 6:            riff_autonomia  FALSE  FALSE
#> 7:      riff_dominio_entorno  FALSE  FALSE
#> 8: riff_crecimiento_personal  FALSE  FALSE
#> 9:       riff_proposito_vida  FALSE  FALSE

Agrupando por cantidad de deporte que realizan a la semana

Lo mismo se puede apreciar en los resultados anteriores, exploremos a continuación si se aplica también a la cantidad de deporte que realizan a la semana (factor, tres niveles: 1 vez, 2 veces o >2 veces).

n_colwise(dataset, .by = deporte_dias_semana) # Tamaño muestral
#>                          vars > 2 veces    NA 2 veces 1 vez
#>                        <char>     <int> <int>   <int> <int>
#>  1:                        id       110   164      48    36
#>  2:                    genero       110   163      48    36
#>  3:                      edad       110   164      48    36
#>  4:                   deporte       110   159      48    36
#>  5:       deporte_dias_semana       110     0      48    36
#>  6:        deporte_intensidad       110     0      48    36
#>  7:    deporte_minutos_sesion       110     0      48    36
#>  8:          ss_patron_verano       110   164      48    36
#>  9:        ss_patron_invierno       110   164      48    36
#> 10:            ss_patron_tipo        98   151      47    35
#> 11:                  ss_index       110   163      48    36
#> 12:              ss_severidad        98   141      44    33
#> 13:       riff_autoaceptacion       110   164      48    36
#> 14: riff_relaciones_positivas       110   164      48    36
#> 15:            riff_autonomia       110   164      48    36
#> 16:      riff_dominio_entorno       110   164      48    36
#> 17: riff_crecimiento_personal       110   164      48    36
#> 18:       riff_proposito_vida       110   164      48    36

is_normal_colwise(dataset, .by = deporte_dias_semana) # Normalidad
#>                          vars > 2 veces 2 veces  1 vez
#>                        <char>    <lgcl>  <lgcl> <lgcl>
#>  1:                        id     FALSE   FALSE   TRUE
#>  2:    deporte_minutos_sesion     FALSE   FALSE  FALSE
#>  3:          ss_patron_verano     FALSE    TRUE   TRUE
#>  4:        ss_patron_invierno     FALSE   FALSE  FALSE
#>  5:       riff_autoaceptacion     FALSE   FALSE  FALSE
#>  6: riff_relaciones_positivas     FALSE   FALSE   TRUE
#>  7:            riff_autonomia     FALSE    TRUE   TRUE
#>  8:      riff_dominio_entorno     FALSE   FALSE   TRUE
#>  9: riff_crecimiento_personal     FALSE   FALSE  FALSE
#> 10:       riff_proposito_vida     FALSE   FALSE   TRUE

Hasta el momento en todas las variables numéricas, en donde deseemos comparar grupos, estaríamos usando estadística no-paramétrica, aunque ojo, esto es cierto pero sólo bajo la exploración analítica de la normalidad, i.e. mediante pruebas como la de Kolmogorov-Smirnov o Shapiro-Wilk. Veamos los mismo con el resto de variables categóricas, intensidad de la práctica deportiva (deporte_intensidad), patrón estacional (ss_patron_tipo), clasificación del índice de estacionalidad (ss_index) y la clasificación de la severidad de la estacionalidad (ss_severidad).

Agrupando por intensidad de la práctica deportiva

n_colwise(dataset, .by = deporte_intensidad) # Tamaño muestral
#>                          vars Media    NA  Alta  Baja
#>                        <char> <int> <int> <int> <int>
#>  1:                        id   126   164    37    31
#>  2:                    genero   126   163    37    31
#>  3:                      edad   126   164    37    31
#>  4:                   deporte   126   159    37    31
#>  5:       deporte_dias_semana   126     0    37    31
#>  6:        deporte_intensidad   126     0    37    31
#>  7:    deporte_minutos_sesion   126     0    37    31
#>  8:          ss_patron_verano   126   164    37    31
#>  9:        ss_patron_invierno   126   164    37    31
#> 10:            ss_patron_tipo   120   151    29    31
#> 11:                  ss_index   126   163    37    31
#> 12:              ss_severidad   113   141    35    27
#> 13:       riff_autoaceptacion   126   164    37    31
#> 14: riff_relaciones_positivas   126   164    37    31
#> 15:            riff_autonomia   126   164    37    31
#> 16:      riff_dominio_entorno   126   164    37    31
#> 17: riff_crecimiento_personal   126   164    37    31
#> 18:       riff_proposito_vida   126   164    37    31

is_normal_colwise(dataset, .by = deporte_intensidad) # Normalidad
#>                          vars  Media   Alta   Baja
#>                        <char> <lgcl> <lgcl> <lgcl>
#>  1:                        id   TRUE  FALSE  FALSE
#>  2:    deporte_minutos_sesion  FALSE  FALSE  FALSE
#>  3:          ss_patron_verano  FALSE  FALSE   TRUE
#>  4:        ss_patron_invierno  FALSE  FALSE  FALSE
#>  5:       riff_autoaceptacion  FALSE  FALSE   TRUE
#>  6: riff_relaciones_positivas  FALSE   TRUE   TRUE
#>  7:            riff_autonomia  FALSE  FALSE   TRUE
#>  8:      riff_dominio_entorno  FALSE  FALSE   TRUE
#>  9: riff_crecimiento_personal  FALSE  FALSE   TRUE
#> 10:       riff_proposito_vida  FALSE  FALSE   TRUE

Ninguna variable cumple con los criterios de normalidad ajustando por los niveles de la intensidad de la práctica deportiva.

Agrupando por patrón estacional

n_colwise(dataset, .by = ss_patron_tipo) # Tamaño muestral
#>                          vars Mixto    NA Invierno Verano
#>                        <char> <int> <int>    <int>  <int>
#>  1:                        id   232    27       96      3
#>  2:                    genero   231    27       96      3
#>  3:                      edad   232    27       96      3
#>  4:                   deporte   228    27       95      3
#>  5:       deporte_dias_semana   128    14       50      2
#>  6:        deporte_intensidad   128    14       50      2
#>  7:    deporte_minutos_sesion   128    14       50      2
#>  8:          ss_patron_verano   232    27       96      3
#>  9:        ss_patron_invierno   232    27       96      3
#> 10:            ss_patron_tipo   232     0       96      3
#> 11:                  ss_index   231    27       96      3
#> 12:              ss_severidad   207    25       81      3
#> 13:       riff_autoaceptacion   232    27       96      3
#> 14: riff_relaciones_positivas   232    27       96      3
#> 15:            riff_autonomia   232    27       96      3
#> 16:      riff_dominio_entorno   232    27       96      3
#> 17: riff_crecimiento_personal   232    27       96      3
#> 18:       riff_proposito_vida   232    27       96      3

Una exploración más detallada nos muestra que en el grupo con patrón estacional de Verano solo hay 2 y 3 observaciones, esto es insuficiente para explorar la normalidad de forma analítica e incluso para aplicar cualquier tipo de estadística inferencial. Otro enfoque es ignorar este último grupo de los análisis y sólo incluir a aquellos con un patrón estacional Mixto o de Invierno. Veamos que obtenemos al seguir esta última alternativa.

dataset[i = ss_patron_tipo %in% c("Mixto", "Invierno"),
      j = -c("ss_patron_invierno", "ss_patron_verano")
      ][j = is_normal_colwise(.data = .SD, .by = ss_patron_tipo)]
#>                         vars  Mixto Invierno
#>                       <char> <lgcl>   <lgcl>
#> 1:                        id  FALSE     TRUE
#> 2:    deporte_minutos_sesion  FALSE    FALSE
#> 3:       riff_autoaceptacion  FALSE     TRUE
#> 4: riff_relaciones_positivas  FALSE     TRUE
#> 5:            riff_autonomia  FALSE     TRUE
#> 6:      riff_dominio_entorno  FALSE    FALSE
#> 7: riff_crecimiento_personal  FALSE    FALSE
#> 8:       riff_proposito_vida  FALSE    FALSE

Ninguna variable cumple con los criterios de normalidad ajustando a un patron de estacionalidad de Invierno y Mixto.

Agrupando por clasificación del índice de estacionalidad

n_colwise(dataset, .by = ss_index) # Tamaño muestral
#>                          vars Normal   SAD Winter blues    NA
#>                        <char>  <int> <int>        <int> <int>
#>  1:                        id     86   216           55     1
#>  2:                    genero     86   215           55     1
#>  3:                      edad     86   216           55     1
#>  4:                   deporte     85   214           54     0
#>  5:       deporte_dias_semana     46   116           32     0
#>  6:        deporte_intensidad     46   116           32     0
#>  7:    deporte_minutos_sesion     46   116           32     0
#>  8:          ss_patron_verano     86   216           55     1
#>  9:        ss_patron_invierno     86   216           55     1
#> 10:            ss_patron_tipo     71   210           49     1
#> 11:                  ss_index     86   216           55     0
#> 12:              ss_severidad     79   189           47     1
#> 13:       riff_autoaceptacion     86   216           55     1
#> 14: riff_relaciones_positivas     86   216           55     1
#> 15:            riff_autonomia     86   216           55     1
#> 16:      riff_dominio_entorno     86   216           55     1
#> 17: riff_crecimiento_personal     86   216           55     1
#> 18:       riff_proposito_vida     86   216           55     1

is_normal_colwise(dataset, .by = ss_index) # Normalidad
#>                          vars Normal    SAD Winter blues
#>                        <char> <lgcl> <lgcl>       <lgcl>
#>  1:                        id  FALSE  FALSE         TRUE
#>  2:    deporte_minutos_sesion  FALSE  FALSE        FALSE
#>  3:          ss_patron_verano  FALSE  FALSE        FALSE
#>  4:        ss_patron_invierno  FALSE  FALSE        FALSE
#>  5:       riff_autoaceptacion  FALSE  FALSE         TRUE
#>  6: riff_relaciones_positivas  FALSE  FALSE         TRUE
#>  7:            riff_autonomia  FALSE  FALSE         TRUE
#>  8:      riff_dominio_entorno  FALSE  FALSE        FALSE
#>  9: riff_crecimiento_personal  FALSE  FALSE         TRUE
#> 10:       riff_proposito_vida  FALSE  FALSE         TRUE

Ninguna variable cumple con los criterios de normalidad para todos los niveles del factor.

Agrupando por clasificación de la severidad de la estacionalidad

n_colwise(dataset, .by = ss_severidad) # Tamaño muestral
#>                          vars  Leve Importante Moderado No es problema Severo
#>                        <char> <int>      <int>    <int>          <int>  <int>
#>  1:                        id    72         44       58             42     57
#>  2:                    genero    71         44       58             42     57
#>  3:                      edad    72         44       58             42     57
#>  4:                   deporte    70         44       57             42     57
#>  5:       deporte_dias_semana    46         20       29             22     32
#>  6:        deporte_intensidad    46         20       29             22     32
#>  7:    deporte_minutos_sesion    46         20       29             22     32
#>  8:          ss_patron_verano    72         44       58             42     57
#>  9:        ss_patron_invierno    72         44       58             42     57
#> 10:            ss_patron_tipo    67         43       53             35     55
#> 11:                  ss_index    72         44       57             42     57
#> 12:              ss_severidad    72         44       58             42     57
#> 13:       riff_autoaceptacion    72         44       58             42     57
#> 14: riff_relaciones_positivas    72         44       58             42     57
#> 15:            riff_autonomia    72         44       58             42     57
#> 16:      riff_dominio_entorno    72         44       58             42     57
#> 17: riff_crecimiento_personal    72         44       58             42     57
#> 18:       riff_proposito_vida    72         44       58             42     57
#>     Grave    NA
#>     <int> <int>
#>  1:    43    42
#>  2:    43    42
#>  3:    43    42
#>  4:    43    40
#>  5:    26    19
#>  6:    26    19
#>  7:    26    19
#>  8:    43    42
#>  9:    43    42
#> 10:    38    40
#> 11:    43    42
#> 12:    43     0
#> 13:    43    42
#> 14:    43    42
#> 15:    43    42
#> 16:    43    42
#> 17:    43    42
#> 18:    43    42

is_normal_colwise(dataset, .by = ss_severidad) # Normalidad
#>                          vars   Leve Importante Moderado No es problema Severo
#>                        <char> <lgcl>     <lgcl>   <lgcl>         <lgcl> <lgcl>
#>  1:                        id   TRUE      FALSE    FALSE           TRUE   TRUE
#>  2:    deporte_minutos_sesion  FALSE      FALSE    FALSE          FALSE  FALSE
#>  3:          ss_patron_verano  FALSE       TRUE     TRUE          FALSE   TRUE
#>  4:        ss_patron_invierno  FALSE      FALSE    FALSE          FALSE  FALSE
#>  5:       riff_autoaceptacion  FALSE      FALSE    FALSE          FALSE   TRUE
#>  6: riff_relaciones_positivas  FALSE      FALSE     TRUE          FALSE   TRUE
#>  7:            riff_autonomia  FALSE      FALSE     TRUE          FALSE   TRUE
#>  8:      riff_dominio_entorno  FALSE      FALSE    FALSE          FALSE   TRUE
#>  9: riff_crecimiento_personal  FALSE      FALSE     TRUE          FALSE   TRUE
#> 10:       riff_proposito_vida  FALSE      FALSE     TRUE          FALSE   TRUE
#>      Grave
#>     <lgcl>
#>  1:  FALSE
#>  2:  FALSE
#>  3:  FALSE
#>  4:  FALSE
#>  5:   TRUE
#>  6:   TRUE
#>  7:   TRUE
#>  8:   TRUE
#>  9:   TRUE
#> 10:   TRUE

Al igual que con las variables mencionadas, podemos concluir que ninguna variable posee las características suficientes para la utilización de estadística paramétrica, la principal razón es la falta de normalidad, lo que fue comprobado de manera analítica usando la función seasonalSensitivity::is_normal().