6  Análisis de la covariación entre variables cualitativas y ordinales

Published

June 29, 2026

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.

6.1 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).
Code
# 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
       Netflix HBO Disney+
Young      120  30      40
Adult       70  80      50
Senior      20  60      30
Code
chi2_result <- chisq.test(streaming_table)
chi2_result

    Pearson's Chi-squared test

data:  streaming_table
X-squared = 73.011, df = 4, p-value = 5.248e-15

Lectura de los resultados:

  • X-squared (73.01): magnitud de la diferencia entre lo observado y lo esperado.
  • df (4): grados de libertad, calculados como (filas − 1) × (columnas − 1).
  • p-value: 5.25e-15, 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.

6.1.1 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):

Code
rstatix::cramer_v(streaming_table)
[1] 0.2702048

6.1.2 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:

Code
# Observed values
chi2_result$observed
       Netflix HBO Disney+
Young      120  30      40
Adult       70  80      50
Senior      20  60      30
Code
# Expected values under H0
round(chi2_result$expected, 1)
       Netflix  HBO Disney+
Young     79.8 64.6    45.6
Adult     84.0 68.0    48.0
Senior    46.2 37.4    26.4
Code
# Standardized residuals: values beyond ±2 indicate a relevant contribution
round(chi2_result$residuals, 2)
       Netflix   HBO Disney+
Young     4.50 -4.30   -0.83
Adult    -1.53  1.46    0.29
Senior   -3.85  3.70    0.70

Para el grupo “Joven” se observaron 120 preferencias por Netflix, frente a las 79.8 esperadas bajo independencia, lo que produce un residuo estandarizado de 4.5: una afinidad muy superior a la esperada. En el mismo grupo, solo 30 prefirieron HBO frente a las 64.6 esperadas, con un residuo muy negativo: afinidad muy inferior a la esperada.

6.1.3 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 26.4, por lo que la condición se cumple sobradamente.

6.2 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.

6.2.1 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.

Code
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"])

    Shapiro-Wilk normality test

data:  design_data$rating[design_data$design == "A"]
W = 0.90086, p-value = 0.04281

El p-valor (0.043) es inferior a 0,05: se confirma la necesidad de una prueba no paramétrica.

Code
rstatix::wilcox_test(design_data, rating ~ design, detailed = TRUE)
# A tibble: 1 × 12
  estimate .y.    group1 group2    n1    n2 statistic       p conf.low conf.high
*    <dbl> <chr>  <chr>  <chr>  <int> <int>     <dbl>   <dbl>    <dbl>     <dbl>
1        2 rating A      B         20    20       317 9.98e-4        1         4
# ℹ 2 more variables: method <chr>, alternative <chr>

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):

Code
rstatix::wilcox_effsize(design_data, rating ~ design)
# A tibble: 1 × 7
  .y.    group1 group2 effsize    n1    n2 magnitude
* <chr>  <chr>  <chr>    <dbl> <int> <int> <ord>    
1 rating A      B        0.505    20    20 large    

6.2.2 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.

Code
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)
# A tibble: 1 × 12
  estimate .y.    group1 group2    n1    n2 statistic       p conf.low conf.high
*    <dbl> <chr>  <chr>  <chr>  <int> <int>     <dbl>   <dbl>    <dbl>     <dbl>
1       -3 stress After  Before    15    15         0 1.22e-4       -4      -2.5
# ℹ 2 more variables: method <chr>, alternative <chr>

El p-valor es muy pequeño: se rechaza H₀. Las puntuaciones de estrés disminuyen de forma significativa tras el programa.

6.3 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.

Code
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)
# A tibble: 1 × 6
  .y.       n statistic    df      p method        
* <chr> <int>     <dbl> <int>  <dbl> <chr>         
1 score    45      6.63     2 0.0364 Kruskal-Wallis

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):

Code
rstatix::kruskal_effsize(teaching_data, score ~ method)
# A tibble: 1 × 5
  .y.       n effsize method  magnitude
* <chr> <int>   <dbl> <chr>   <ord>    
1 score    45   0.110 eta2[H] moderate 

6.3.1 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:

Code
rstatix::dunn_test(teaching_data, score ~ method, p.adjust.method = "bonferroni")
# A tibble: 3 × 9
  .y.   group1   group2         n1    n2 statistic      p  p.adj p.adj.signif
* <chr> <chr>    <chr>       <int> <int>     <dbl>  <dbl>  <dbl> <chr>       
1 score Online   Projects       15    15      2.57 0.0102 0.0307 *           
2 score Online   Traditional    15    15      1.44 0.150  0.449  ns          
3 score Projects Traditional    15    15     -1.13 0.260  0.779  ns          

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”.

6.4 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.

6.4.1 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?

Code
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")
# A tibble: 1 × 6
  var1   var2     cor statistic       p method  
  <chr>  <chr>  <dbl>     <dbl>   <dbl> <chr>   
1 critic public  0.87      22.0 0.00268 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.

6.4.2 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.

Code
rstatix::cor_test(ranking_data, critic, public, method = "kendall")
# A tibble: 1 × 6
  var1   var2     cor statistic       p method 
  <chr>  <chr>  <dbl>     <dbl>   <dbl> <chr>  
1 critic public  0.69        38 0.00469 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.

6.5 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).