# 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()
.