# Análisis de la covariación entre variables cualitativas y ordinales
```{r}
#| echo: false
#| message: false
#| warning: false
source("script.R")
```
El capítulo anterior desarrolló la inferencia paramétrica: la prueba t y el
ANOVA, herramientas potentes pero válidas solo bajo condiciones específicas,
principalmente que los datos sigan una distribución normal.
¿Qué ocurre cuando esa condición no se cumple? ¿O cuando las preguntas de
investigación no involucran medias de variables numéricas, sino frecuencias de
categorías? Para estos casos existen las **pruebas no paramétricas**, también
llamadas "libres de distribución" porque no requieren ningún supuesto sobre la
forma de la distribución de los datos. Son la herramienta a la que se recurre
cuando:
1. Los datos cuantitativos **no son normales** y no se pueden (o no conviene)
transformar.
2. Se trabaja con datos **ordinales** (escalas de satisfacción, niveles
educativos, rankings).
3. Se quiere analizar la relación entre dos variables **cualitativas**
(nominales).
Este capítulo desarrolla el **test chi-cuadrado (χ²)** para asociaciones entre
variables categóricas; las alternativas no paramétricas a la prueba t (U de
Mann-Whitney y rangos con signo de Wilcoxon) y al ANOVA (Kruskal-Wallis); y los
coeficientes de correlación de rango, Spearman y Kendall.
## Asociación entre variables categóricas: test chi-cuadrado de independencia
El test chi-cuadrado de independencia responde a una pregunta habitual en
investigación de mercados: **¿están relacionadas dos variables categóricas, o
son independientes entre sí?**
**Escenario**: una empresa de investigación de mercados quiere saber si la
preferencia por una plataforma de streaming (Netflix, HBO, Disney+) está
relacionada con el grupo de edad del consumidor (Joven, Adulto, Senior).
La lógica del test compara las frecuencias *observadas* en la muestra con las
frecuencias *esperadas* bajo el supuesto de independencia. Si la diferencia
entre ambas es grande, se concluye que no se debe al azar y que las variables
están relacionadas.
- **H₀**: no existe asociación entre el grupo de edad y la plataforma preferida
(variables independientes).
- **H₁**: existe asociación entre el grupo de edad y la plataforma preferida
(variables dependientes).
```{r}
#| echo: true
# Contingency table: rows = age group, columns = platform
streaming_table <- matrix(
c(120, 30, 40, # Young
70, 80, 50, # Adult
20, 60, 30), # Senior
nrow = 3, byrow = TRUE
)
colnames(streaming_table) <- c("Netflix", "HBO", "Disney+")
rownames(streaming_table) <- c("Young", "Adult", "Senior")
streaming_table
```
```{r}
#| echo: true
chi2_result <- chisq.test(streaming_table)
chi2_result
```
**Lectura de los resultados**:
- **X-squared** (`r round(chi2_result$statistic, 2)`): magnitud de la diferencia
entre lo observado y lo esperado.
- **df** (`r chi2_result$parameter`): grados de libertad, calculados como (filas
− 1) × (columnas − 1).
- **p-value**: `r format(chi2_result$p.value, scientific = TRUE, digits = 3)`,
muy inferior a 0,05.
El p-valor es muy inferior al nivel de significación de 0,05: se **rechaza H₀**.
Existe una asociación estadísticamente significativa entre el grupo de edad y la
plataforma de streaming preferida.
### Tamaño del efecto: V de Cramer
El test chi-cuadrado indica si existe asociación, pero no informa de su
intensidad. La V de Cramer es el estadístico que SPSS reporta junto al
chi-cuadrado para cuantificar la fuerza de la asociación, en una escala de 0
(sin asociación) a 1 (asociación perfecta):
```{r}
#| echo: true
rstatix::cramer_v(streaming_table)
```
### Profundizando en la relación: residuos
El test chi-cuadrado señala *si* existe relación, pero no *cómo* es esa
relación. Los residuos estandarizados permiten identificar qué combinaciones de
categorías contribuyen más a la asociación detectada:
```{r}
#| echo: true
# Observed values
chi2_result$observed
```
```{r}
#| echo: true
# Expected values under H0
round(chi2_result$expected, 1)
```
```{r}
#| echo: true
# Standardized residuals: values beyond ±2 indicate a relevant contribution
round(chi2_result$residuals, 2)
```
Para el grupo "Joven" se observaron 120 preferencias por Netflix, frente a las
`r round(chi2_result$expected[1,1],1)` esperadas bajo independencia, lo que
produce un residuo estandarizado de `r round(chi2_result$residuals[1,1], 2)`:
una afinidad muy superior a la esperada. En el mismo grupo, solo 30 prefirieron
HBO frente a las `r round(chi2_result$expected[1,2],1)` esperadas, con un
residuo muy negativo: afinidad muy inferior a la esperada.
### Supuestos del test chi-cuadrado
El test exige que las frecuencias esperadas no sean demasiado pequeñas: ninguna
celda debería tener un valor esperado inferior a 1, y no más del 20% de las
celdas deberían tener un valor esperado inferior a 5. Si no se cumple, lo
habitual es recurrir al test exacto de Fisher (`fisher.test()`). En el ejemplo,
el valor esperado mínimo es `r round(min(chi2_result$expected), 1)`, por lo que
la condición se cumple sobradamente.
## Comparando grupos sin asumir normalidad: alternativas a la prueba t
En el capítulo anterior, la prueba t fue la herramienta de referencia para
comparar las medias de dos grupos. Pero si el test de Shapiro-Wilk indica que
los datos no son normales, aplicar una prueba t deja de ser apropiado.
La solución no paramétrica se basa en trabajar con los **rangos** de los datos
en lugar de con sus valores exactos.
### Dos grupos independientes: U de Mann-Whitney (suma de rangos de Wilcoxon)
Es la alternativa directa a la prueba t para muestras independientes. Se utiliza
cuando se comparan dos grupos sin relación entre sí, cuyos datos no son normales
o son de naturaleza ordinal.
La lógica: se combinan todas las observaciones de ambos grupos, se ordenan y se
asignan rangos; se separan de nuevo por grupo; se evalúa si la suma de rangos de
un grupo difiere significativamente de la del otro.
- **H₀**: las distribuciones de ambos grupos son idénticas (en la práctica,
medianas iguales).
- **H₁**: las distribuciones de ambos grupos son diferentes.
> **Nota**: U de Mann-Whitney y test de la suma de rangos de Wilcoxon son
> matemáticamente equivalentes para comparar dos grupos independientes.
**Escenario**: una empresa de software compara dos diseños de página de pago (A
y B). 40 usuarios (20 por diseño) valoran su experiencia de 1 a 10. Las
valoraciones de satisfacción tienden a acumularse en los extremos y no suelen
ser normales.
```{r}
#| echo: true
set.seed(555)
design_data <- data.frame(
design = rep(c("A", "B"), each = 20),
rating = c(3, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1, 2, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9)
)
# Step 1: check normality (expected to fail)
shapiro.test(design_data$rating[design_data$design == "A"])
```
El p-valor
(`r round(shapiro.test(design_data$rating[design_data$design == "A"])$p.value, 3)`)
es inferior a 0,05: se confirma la necesidad de una prueba no paramétrica.
```{r}
#| echo: true
rstatix::wilcox_test(design_data, rating ~ design, detailed = TRUE)
```
El p-valor es inferior a 0,05: se **rechaza H₀**. Existe una diferencia
significativa entre las distribuciones de satisfacción de ambos diseños; el
diseño A tiende a recibir puntuaciones más altas.
Se completa con el tamaño del efecto (r, basado en el estadístico Z):
```{r}
#| echo: true
rstatix::wilcox_effsize(design_data, rating ~ design)
```
### Dos grupos dependientes: rangos con signo de Wilcoxon
Es la alternativa no paramétrica a la prueba t para muestras pareadas. Se
utiliza con dos mediciones del mismo sujeto (antes/después).
La lógica: para cada par se calcula la diferencia; se ignoran las diferencias
nulas; se ordenan por valor absoluto y se asignan rangos; se reincorpora el
signo; se comparan las sumas de rangos positivos y negativos.
- **H₀**: la mediana de las diferencias es cero (no hay cambio).
- **H₁**: la mediana de las diferencias no es cero (hay cambio).
**Escenario**: un programa de mindfulness de 8 semanas mide el estrés percibido
(escala 1-20) de 15 participantes antes y después.
```{r}
#| echo: true
set.seed(123)
stress_before <- c(18, 15, 19, 14, 17, 16, 20, 13, 18, 15, 14, 19, 17, 16, 12)
stress_after <- pmax(1, stress_before - round(rnorm(15, mean = 3, sd = 2)))
stress_data <- data.frame(
id = rep(1:15, 2),
time = rep(c("Before", "After"), each = 15),
stress = c(stress_before, stress_after)
)
rstatix::wilcox_test(stress_data, stress ~ time, paired = TRUE, detailed = TRUE)
```
El p-valor es muy pequeño: se **rechaza H₀**. Las puntuaciones de estrés
disminuyen de forma significativa tras el programa.
## Comparando más de dos grupos: test de Kruskal-Wallis
Así como el ANOVA extiende la prueba t a más de dos grupos, el test de
Kruskal-Wallis extiende la U de Mann-Whitney a **tres o más grupos
independientes** cuando no se cumple el supuesto de normalidad o los datos son
ordinales.
La lógica vuelve a basarse en rangos: se combinan todas las observaciones, se
ordenan, se asignan rangos y se comprueba si la media de rangos difiere entre
grupos.
- **H₀**: las distribuciones de todos los grupos son idénticas.
- **H₁**: al menos un grupo tiene una distribución diferente.
**Escenario**: un centro educativo compara tres métodos de enseñanza
(Tradicional, Basado en proyectos, Online) sobre la nota final de 45 estudiantes
(15 por método). Las notas no siguen una distribución normal.
```{r}
#| echo: true
set.seed(42)
teaching_data <- data.frame(
method = rep(c("Traditional", "Projects", "Online"), each = 15),
score = c(rpois(15, lambda = 68),
rpois(15, lambda = 75),
rpois(15, lambda = 69))
)
rstatix::kruskal_test(teaching_data, score ~ method)
```
El p-valor es inferior a 0,05: se **rechaza H₀**. Existe una diferencia
significativa en las notas según el método de enseñanza.
Se acompaña del tamaño del efecto (eta cuadrado basado en rangos):
```{r}
#| echo: true
rstatix::kruskal_effsize(teaching_data, score ~ method)
```
### Pruebas post-hoc: test de Dunn
Al igual que el ANOVA, Kruskal-Wallis es una prueba ómnibus: indica que existe
diferencia, pero no entre qué grupos. El test de Dunn realiza las comparaciones
por pares ajustando los p-valores (método de Bonferroni) para controlar el
problema de comparaciones múltiples:
```{r}
#| echo: true
rstatix::dunn_test(teaching_data, score ~ method, p.adjust.method = "bonferroni")
```
Las comparaciones con `p.adj < 0,05` indican qué pares de métodos difieren
significativamente. El método "Basado en proyectos" produce resultados
significativamente mejores que "Tradicional" y "Online"; no hay evidencia de
diferencia significativa entre "Tradicional" y "Online".
## Midiendo la asociación sin linealidad: correlaciones de rango
La correlación de Pearson, vista en el capítulo anterior, mide la fuerza y
dirección de una relación **lineal** entre variables cuantitativas. No es
apropiada cuando:
1. Los datos son **ordinales** (rankings, escalas Likert).
2. La relación es **monotónica pero no lineal** (a medida que una variable
aumenta, la otra siempre aumenta o disminuye, pero no en línea recta).
Para estos casos se recurre a las correlaciones basadas en rangos.
### Correlación de Spearman (rho, ρ)
Equivale a una correlación de Pearson calculada sobre los rangos de los datos en
lugar de sobre sus valores originales. Es robusta frente a valores atípicos y
detecta cualquier relación monotónica.
- **H₀**: no existe asociación monotónica entre las variables.
- **H₁**: existe asociación monotónica entre las variables.
**Escenario**: ¿existe relación entre el ranking que un crítico asigna a 10
productos y el ranking que les asigna el público general?
```{r}
#| echo: true
critic_ranking <- c(1, 3, 2, 5, 4, 7, 6, 9, 10, 8)
public_ranking <- c(2, 1, 4, 3, 5, 8, 7, 10, 9, 6)
ranking_data <- data.frame(critic = critic_ranking, public = public_ranking)
rstatix::cor_test(ranking_data, critic, public, method = "spearman")
```
El p-valor es inferior a 0,05: se **rechaza H₀**. El coeficiente rho (≈0,88)
indica una asociación monotónica positiva y fuerte: los productos mejor
valorados por el crítico tienden a ser también los mejor valorados por el
público.
### Correlación de Kendall (tau, τ)
Kendall's tau es otra medida de correlación de rangos, basada en contar pares
**concordantes** (el caso A está clasificado más alto que el B en ambas
variables) y **discordantes** (más alto en una y más bajo en la otra). Es
preferible a Spearman con muestras pequeñas o muchos rangos empatados.
```{r}
#| echo: true
rstatix::cor_test(ranking_data, critic, public, method = "kendall")
```
La conclusión es la misma: se rechaza H₀ y se confirma una asociación
significativa. El coeficiente tau suele ser numéricamente más bajo que el rho de
Spearman; ambos miden la asociación en escalas distintas, pero la conclusión
sobre significación suele coincidir.
## Del análisis bivariante al multivariante
Este capítulo y el anterior han desarrollado las herramientas de inferencia
bivariante: comparación de medias de dos grupos con la prueba t, asociación
entre variables categóricas con chi-cuadrado, fuerza de una relación lineal con
correlación. El enfoque, en todos los casos, ha sido el análisis de **pares de
variables**.
La realidad de un proyecto de investigación de mercados rara vez se explica con
una sola relación bivariante. La satisfacción de un cliente no depende solo del
precio: están implicados simultáneamente la calidad percibida, la atención
recibida, el tiempo de entrega y la experiencia posventa. Analizar estas
relaciones de dos en dos aporta fragmentos de la historia, pero no permite ver
la estructura conjunta.
Para capturar esa complejidad es necesario el **análisis multivariante**: el
conjunto de técnicas que examinan simultáneamente las relaciones entre tres o
más variables. Los próximos capítulos desarrollan:
- El **análisis de correspondencias** simple y múltiple, para visualizar
asociaciones entre varias variables cualitativas (por ejemplo, en un mapa de
posicionamiento de marcas).
- El **análisis de componentes principales**, para reducir la dimensionalidad de
un conjunto de variables cuantitativas correlacionadas.
- El **análisis clúster**, para identificar segmentos naturales de clientes, y
el **análisis discriminante**, para predecir a qué segmento pertenecerá un
nuevo caso.
- La **regresión múltiple**, para explicar una variable cuantitativa a partir de
varios predictores simultáneos, y la **regresión logística**, para predecir
resultados categóricos (compra / no compra).