Estadística Correlacional Interactiva
  • Inicio
  • Inferencia
    • M01. Datos, medición y variabilidad
    • M02. Probabilidad y distribuciones muestrales
    • M03. Curva normal y puntajes Z
    • M04. Teorema del límite central y error estándar
    • M05. Intervalos de confianza
    • M06. Test de hipótesis y lógica de falsación
    • M07. Hipótesis direccionales y no direccionales
  • Asociación bivariada
    • M08. Asociación, covarianza y correlación de Pearson
    • M09. Inferencia y magnitud de la correlación
    • M10. Correlaciones ordinales: Spearman y Kendall
    • M11. Matrices de correlación y casos perdidos
    • M12. Baterías, consistencia e índices
    • M13. Variables categóricas y tablas de contingencia
    • M14. Chi-cuadrado y magnitud de la asociación
  • Glosario

Unidad 2 · Asociación bivariada · Módulo 10

M10. Correlaciones ordinales: Spearman y Kendall

En los módulos anteriores utilizamos Pearson para resumir asociaciones lineales a partir de los valores originales. Sin embargo, muchas variables sociales permiten ordenar a las personas sin medir con precisión cuánto separa una categoría de otra. En esos casos puede resultar más informativo estudiar si las posiciones relativas se conservan. La correlación de Spearman compara rangos y la Tau-b de Kendall examina concordancias y discordancias entre pares, incorporando los empates. Ambas permiten analizar asociaciones monotónicas, pero responden a lógicas distintas. Comenzaremos con una pregunta sobre posiciones educativas y económicas.

Pregunta Social

¿Las personas con mayor nivel educacional tienden a ubicarse en tramos de ingreso más altos?

La educación y el ingreso suelen estudiarse mediante variables cuantitativas, pero también pueden registrarse como categorías ordenadas. En este módulo, la unidad de análisis será la persona ocupada. La variable \(X\) corresponderá al nivel educacional y la variable \(Y\) al tramo de ingreso laboral.

El nivel educacional tendrá cinco categorías:

  1. Educación básica.
  2. Educación media.
  3. Educación técnica.
  4. Educación universitaria.
  5. Posgrado.

El tramo de ingreso también tendrá cinco categorías:

  1. Muy bajo.
  2. Bajo.
  3. Medio.
  4. Alto.
  5. Muy alto.

En ambas variables existe un orden: “universitaria” representa una posición educativa superior a “media”, y “alto” representa un tramo de ingreso superior a “bajo”. Sin embargo, ese orden no garantiza distancias iguales. La diferencia entre educación básica y media no tiene por qué ser equivalente a la diferencia entre educación universitaria y posgrado. Del mismo modo, los códigos 1 a 5 no son cantidades medibles por sí mismos.

Además, varias personas pueden compartir la misma categoría. Estos empates son esperables en variables ordinales y forman parte de la información disponible.

El análisis buscará establecer hasta qué punto el orden educativo se conserva en los tramos de ingreso. Una asociación positiva indicaría que las posiciones educativas superiores tienden a coincidir con posiciones económicas superiores. Esa tendencia no determina la trayectoria individual ni demuestra que la educación cause por sí sola el ingreso.

Dos patrones ordinales

Escenario A · Orden relativamente consistente

Las personas con niveles educacionales superiores tienden a ubicarse en tramos de ingreso mayores. Existen excepciones y varias personas comparten categorías, pero predominan las coincidencias en la misma dirección. El patrón es monotónico positivo: en términos generales, al aumentar una variable, la otra también tiende a aumentar.

El orden de las personas se conserva de manera general, aunque varias compartan categorías y algunas se aparten del patrón.

Escenario B · Orden poco consistente

Personas con niveles educacionales semejantes aparecen en tramos de ingreso muy distintos. Aumentan las inversiones del orden: algunas personas con educación superior se ubican en tramos menores que otras con educación inferior. Los empates siguen presentes, pero la dirección ordinal es menos definida.

El orden educativo permite anticipar con menor claridad la posición relativa en los tramos de ingreso.

Una tendencia ordinal no determina la trayectoria individual ni demuestra causalidad.

Idea Central

1

De las categorías al orden

Una variable ordinal permite afirmar que una categoría ocupa una posición mayor o menor que otra. Los códigos 1, 2, 3, 4 y 5 pueden utilizarse para conservar ese orden, pero no garantizan distancias equivalentes.

Por ejemplo, sabemos que:

\[ \text{Básica} < \text{Media} < \text{Técnica} < \text{Universitaria} < \text{Posgrado} \]

Esta expresión comunica orden, no una distancia exacta entre niveles.

Conocemos quién ocupa una posición mayor o menor, pero no necesariamente cuánto separa a esas posiciones.

2

Del orden a los rangos y Spearman

Los casos pueden ordenarse dentro de cada variable. Cada persona recibe una posición relativa o rango. Si varias personas comparten una categoría, ocupan un conjunto de posiciones y reciben el rango promedio de esas posiciones.

Spearman compara los rangos de las mismas personas en ambas variables. Cuando una persona ocupa posiciones parecidas en educación e ingreso, el orden se conserva. Cuando cambia considerablemente de posición, se produce una inversión parcial.

Transformar a rangos no crea información nueva: reorganiza los valores para concentrarse en el orden. En términos operativos, Spearman puede calcularse como Pearson aplicado a los rangos.

Una relación puede ser monotónica sin seguir una línea recta. Por eso, Spearman puede representar adecuadamente un patrón que conserva la dirección general aunque los cambios no sean lineales.

3

De los rangos a los pares y Kendall

Kendall utiliza otra lógica. En lugar de comparar directamente todos los rangos, examina pares de personas.

Un par es concordante cuando mantiene el orden. Si una persona tiene mayor nivel educacional y también un tramo de ingreso mayor que otra, el par es concordante.

Un par es discordante cuando invierte el orden. Si una persona tiene mayor educación, pero se ubica en un tramo de ingreso menor, el par es discordante.

También pueden existir empates en educación, ingreso o ambas variables. La Tau-b de Kendall ajusta la comparación considerando esos empates.

¿Cómo se construyen Spearman y Kendall?

El recorrido guiado utilizará pocos casos para hacer visibles los pasos que suelen quedar ocultos dentro de los resultados finales. Se ordenarán categorías, se asignarán posiciones, se resolverán empates mediante rangos promedio y se compararán las posiciones de cada persona. Luego se examinarán pares concordantes, discordantes y empatados para comprender cómo Spearman resume el orden global y cómo Tau-b de Kendall resume la concordancia entre pares.

De las categorías a los coeficientes

Una variable ordinal aporta información sobre el orden de las categorías, no necesariamente sobre las distancias entre ellas. Transformar los valores en rangos conserva las posiciones relativas de los casos. Cuando existen empates, las personas que comparten una categoría reciben el promedio de los rangos que ocuparían.

Spearman compara los rangos globales de las mismas personas. La forma simplificada basada en diferencias de rangos es útil sin empates, pero no debe utilizarse mecánicamente cuando varias personas comparten posiciones. En esos casos resulta más claro calcular Pearson sobre los rangos promedio.

Kendall compara pares. Las concordancias aumentan Tau y las discordancias la reducen. Tau-b ajusta el resultado por los empates en ambas variables. Spearman y Kendall suelen entregar lecturas compatibles, pero no son idénticos: uno resume semejanza entre posiciones y el otro balance entre pares. La elección depende del nivel de medición, la forma, los empates y la pregunta analítica.

Laboratorio interactivo

Nota pedagógica: Compara relaciones lineales, monotónicas y no monotónicas, observa el efecto de los empates y examina cómo responden Pearson, Spearman y Kendall ante cambios en el orden de los casos.

Después de explorar

La monotonicidad y la linealidad no son equivalentes. Una relación puede conservar un orden ascendente y adoptar una forma curvilínea. En ese escenario, Spearman puede mantenerse relativamente estable mientras Pearson cambia más, porque el primero atiende a las posiciones y el segundo a las distancias originales y la forma lineal.

Las inversiones del orden reducen la consistencia ordinal. Los empates, en cambio, no son errores: aparecen naturalmente cuando varias personas comparten categorías. Spearman los incorpora mediante rangos promedio y Tau-b de Kendall ajusta el balance de concordancias y discordancias.

Al colapsar categorías aumentan los empates y se pierde diferenciación entre casos. Si el patrón cambia de dirección, como en una forma que primero aumenta y luego disminuye, Pearson, Spearman y Kendall pueden resumirlo de manera insuficiente. Por eso, la forma debe observarse antes de interpretar cualquier coeficiente.

Ejemplo aplicado: el mismo orden puede adoptar formas diferentes Ver ejemplo Ocultar ejemplo ↓

Los tres escenarios siguientes utilizan variables ordinales, pero presentan estructuras distintas.

Comparativa de escenarios de correlación ordinal
Escenario Nivel de medición Forma Empates Pearson Spearman Kendall Tau-b Lectura más informativa
A. Aproximadamente lineal Ordinal con varias categorías Lineal y monotónica Pocos Compatible con Spearman Positivo y relativamente alto Positivo Comparación conjunta, con justificación
B. Monotónico curvilíneo Ordinal Curva creciente Intermedios Puede ser menor Positivo y relativamente alto Positivo Spearman
C. Empates e inversiones Ordinal concentrada Monotónica menos definida Muchos Variable Menor Tau-b informativo Kendall Tau-b

Escenario A. Patrón aproximadamente lineal

Las categorías se distribuyen de manera que los niveles educativos superiores tienden a coincidir con tramos de ingreso superiores. La forma es aproximadamente lineal y monotónica, y existen pocos empates.

Escenario B. Monotónico curvilíneo

La relación es estrictamente creciente pero sigue una curva preocupante en lugar de una recta. Pearson disminuye debido a la curvatura, mientras que Spearman y Kendall capturan adecuadamente que el orden relativo se mantiene perfecto a lo largo de la curva.

Escenario C. Empates e inversiones

El número de categorías es muy reducido, lo que produce una alta cantidad de casos empatados en las mismas celdas de la tabla. Además, existen algunas inversiones del orden. La Tau-b de Kendall es especialmente robusta en este escenario, ya que ajusta el balance por la fuerte presencia de empates.

Fórmulas mínimas y complementarias

Fórmulas de Correlaciones Ordinales

Rango promedio ante empates

Cuando \(k\) personas comparten una categoría y ocupan desde \(R_{\min}\) hasta \(R_{\max}\), reciben:

\[ \bar R = \frac{R_{\min}+\cdots+R_{\max}}{k} \]

Si tres personas ocupan las posiciones 4, 5 y 6:

\[ \bar R = \frac{4+5+6}{3} = 5 \]

Cada una recibe rango 5.

Diferencia de rangos

\[ d_i = R(X_i)-R(Y_i) \]

Una diferencia cercana a cero indica posiciones semejantes. Una diferencia grande indica que el caso cambia considerablemente de posición entre las variables. Esta diferencia se refiere a rangos, no a las distancias entre las categorías originales.

Spearman como correlación de rangos

\[ r_s = \operatorname{cor}\left(R(X),R(Y)\right) \]

Spearman aplica Pearson a los rangos, resume asociación monotónica, maneja los empates mediante rangos promedio y se ubica entre \(-1\) y \(+1\).

Pares concordantes y discordantes
  • \(C\): número de pares concordantes.
  • \(D\): número de pares discordantes.
  • \(T_X\): pares empatados únicamente en \(X\).
  • \(T_Y\): pares empatados únicamente en \(Y\).
Kendall Tau-b

\[ \tau_b = \frac{C-D}{\sqrt{(C+D+T_X)(C+D+T_Y)}} \]

El numerador compara concordancias y discordancias. El denominador ajusta el resultado por los empates. - \(\tau_b>0\): predominan los pares concordantes. - \(\tau_b<0\): predominan los pares discordantes. - \(\tau_b\) cercano a cero: existe equilibrio entre ambos tipos o no se observa una dirección ordinal clara.

Fórmula clásica de Spearman sin empates

\[ r_s = 1- \frac{6\sum d_i^2}{n(n^2-1)} \]

Advertencia

Advertencia metodológica: Esta forma simplificada supone ausencia de empates. Cuando existen empates, es preferible asignar rangos promedio y calcular Pearson sobre esos rangos.

Número total de pares

\[ \frac{n(n-1)}{2} \]

Cada persona se compara con todas las demás una sola vez. En una muestra grande no es necesario enumerar manualmente todos los pares.

Tau-a y Tau-b
  • Tau-a: no ajusta por empates.
  • Tau-b: ajusta por empates en ambas variables. Como el caso de este módulo contiene categorías repetidas, Tau-b es la versión más apropiada.
Propiedades de los rangos
  • Un cambio positivo de escala conserva el orden.
  • Una transformación monotónica creciente conserva Spearman y Kendall.
  • Invertir el orden de una variable cambia el signo.
  • Colapsar categorías puede modificar los coeficientes porque produce más empates.
Código en R y Python
  • R
  • Python
educacion_niveles <- c(
  "Básica",
  "Media",
  "Técnica",
  "Universitaria",
  "Posgrado"
)

ingreso_niveles <- c(
  "Muy bajo",
  "Bajo",
  "Medio",
  "Alto",
  "Muy alto"
)

datos <- data.frame(
  persona = sprintf("P%02d", 1:20),
  educacion = c(
    "Básica", "Básica",
    "Media", "Media", "Media", "Media",
    "Técnica", "Técnica", "Técnica", "Técnica",
    "Universitaria", "Universitaria", "Universitaria",
    "Universitaria", "Universitaria",
    "Posgrado", "Posgrado", "Posgrado", "Posgrado", "Posgrado"
  ),
  ingreso = c(
    "Muy bajo", "Bajo",
    "Muy bajo", "Bajo", "Medio", "Bajo",
    "Bajo", "Medio", "Medio", "Alto",
    "Medio", "Alto", "Alto", "Muy alto", "Medio",
    "Alto", "Muy alto", "Alto", "Muy alto", "Muy alto"
  )
)

# Declarar categorías ordenadas
datos$educacion <- factor(
  datos$educacion,
  levels = educacion_niveles,
  ordered = TRUE
)

datos$ingreso <- factor(
  datos$ingreso,
  levels = ingreso_niveles,
  ordered = TRUE
)

# Códigos que preservan el orden
datos$educacion_codigo <- as.numeric(datos$educacion)
datos$ingreso_codigo <- as.numeric(datos$ingreso)

head(datos)

# Obtener rangos promedio y detectar empates
datos$rango_educacion <- rank(
  datos$educacion_codigo,
  ties.method = "average"
)

datos$rango_ingreso <- rank(
  datos$ingreso_codigo,
  ties.method = "average"
)

# Frecuencias de cada categoría
table(datos$educacion)
table(datos$ingreso)

head(datos[
  c(
    "persona",
    "educacion",
    "ingreso",
    "rango_educacion",
    "rango_ingreso"
  )
])

# Comparar Pearson, Spearman y Kendall
casos <- complete.cases(
  datos[c("educacion_codigo", "ingreso_codigo")]
)

x <- datos$educacion_codigo[casos]
y <- datos$ingreso_codigo[casos]

pearson <- cor(x, y, method = "pearson")
spearman <- cor(x, y, method = "spearman")
kendall <- cor(x, y, method = "kendall")

data.frame(
  coeficiente = c("Pearson", "Spearman", "Kendall Tau-b"),
  valor = c(pearson, spearman, kendall)
)

# Verificar Spearman mediante rangos
spearman_desde_rangos <- cor(
  datos$rango_educacion[casos],
  datos$rango_ingreso[casos],
  method = "pearson"
)

c(
  spearman_directo = spearman,
  spearman_desde_rangos = spearman_desde_rangos
)

# Tabla ordinal
tabla_ordinal <- table(
  Educacion = datos$educacion,
  Ingreso = datos$ingreso
)
tabla_ordinal

# Nube de rangos
plot(
  datos$rango_educacion,
  datos$rango_ingreso,
  xlab = "Rango de nivel educacional",
  ylab = "Rango de tramo de ingreso",
  main = "Posiciones relativas",
  pch = 19
)

# Colapsar categorías
datos$ingreso_colapsado <- factor(
  ifelse(
    datos$ingreso %in% c("Muy bajo", "Bajo"),
    "Bajo",
    ifelse(
      datos$ingreso == "Medio",
      "Medio",
      "Alto"
    )
  ),
  levels = c("Bajo", "Medio", "Alto"),
  ordered = TRUE
)

ingreso_colapsado_codigo <- as.numeric(
  datos$ingreso_colapsado
)

cor(
  datos$educacion_codigo,
  ingreso_colapsado_codigo,
  method = "spearman"
)

cor(
  datos$educacion_codigo,
  ingreso_colapsado_codigo,
  method = "kendall"
)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from pandas.api.types import CategoricalDtype

educacion_niveles = [
    "Básica",
    "Media",
    "Técnica",
    "Universitaria",
    "Posgrado",
]

ingreso_niveles = [
    "Muy bajo",
    "Bajo",
    "Medio",
    "Alto",
    "Muy alto",
]

datos = pd.DataFrame({
    "persona": [f"P{i:02d}" for i in range(1, 21)],
    "educacion": [
        "Básica", "Básica",
        "Media", "Media", "Media", "Media",
        "Técnica", "Técnica", "Técnica", "Técnica",
        "Universitaria", "Universitaria", "Universitaria",
        "Universitaria", "Universitaria",
        "Posgrado", "Posgrado", "Posgrado", "Posgrado", "Posgrado",
    ],
    "ingreso": [
        "Muy bajo", "Bajo",
        "Muy bajo", "Bajo", "Medio", "Bajo",
        "Bajo", "Medio", "Medio", "Alto",
        "Medio", "Alto", "Alto", "Muy alto", "Medio",
        "Alto", "Muy alto", "Alto", "Muy alto", "Muy alto",
    ],
})

tipo_educacion = CategoricalDtype(
    categories=educacion_niveles,
    ordered=True,
)

tipo_ingreso = CategoricalDtype(
    categories=ingreso_niveles,
    ordered=True,
)

datos["educacion"] = datos["educacion"].astype(tipo_educacion)
datos["ingreso"] = datos["ingreso"].astype(tipo_ingreso)

# Códigos ordinales (1 a 5)
datos["educacion_codigo"] = datos["educacion"].cat.codes + 1
datos["ingreso_codigo"] = datos["ingreso"].cat.codes + 1

# Rangos promedio
datos["rango_educacion"] = datos["educacion_codigo"].rank(method="average")
datos["rango_ingreso"] = datos["ingreso_codigo"].rank(method="average")

# Comparar coeficientes
casos = datos[["educacion_codigo", "ingreso_codigo"]].dropna()
x = casos["educacion_codigo"].to_numpy()
y = casos["ingreso_codigo"].to_numpy()

r_pearson, _ = stats.pearsonr(x, y)
r_spearman, _ = stats.spearmanr(x, y)
tau_b, _ = stats.kendalltau(x, y, variant="b")

comparacion = pd.DataFrame({
    "coeficiente": ["Pearson", "Spearman", "Kendall Tau-b"],
    "valor": [r_pearson, r_spearman, tau_b],
})
print(comparacion)

# Verificar Spearman desde los rangos
r_desde_rangos, _ = stats.pearsonr(
    datos["rango_educacion"],
    datos["rango_ingreso"],
)
print("Spearman directo:", r_spearman)
print("Pearson sobre rangos:", r_desde_rangos)

# Tabla ordinal
tabla_ordinal = pd.crosstab(
    datos["educacion"],
    datos["ingreso"],
    dropna=False,
)
print(tabla_ordinal)

# Colapsar categorías
datos["ingreso_colapsado"] = datos["ingreso"].map({
    "Muy bajo": "Bajo",
    "Bajo": "Bajo",
    "Medio": "Medio",
    "Alto": "Alto",
    "Muy alto": "Alto",
})

tipo_colapsado = CategoricalDtype(
    categories=["Bajo", "Medio", "Alto"],
    ordered=True,
)
datos["ingreso_colapsado"] = datos["ingreso_colapsado"].astype(tipo_colapsado)
datos["ingreso_colapsado_codigo"] = datos["ingreso_colapsado"].cat.codes + 1

r_s_colapsado, _ = stats.spearmanr(
    datos["educacion_codigo"],
    datos["ingreso_colapsado_codigo"],
)
tau_colapsado, _ = stats.kendalltau(
    datos["educacion_codigo"],
    datos["ingreso_colapsado_codigo"],
    variant="b",
)
print("Spearman colapsado:", r_s_colapsado)
print("Tau-b colapsado:", tau_colapsado)
Bibliografía
  • Pardo, A., Ruiz, M. A., & San Martín, R. (2009). Análisis de datos en ciencias sociales y de la salud I. Síntesis. (Cap. 10: Medidas de asociación para variables ordinales: Spearman y Kendall).
  • Agresti, A., Franklin, C., & Klingenberg, B. (2023). Statistics: The art and science of learning from data (5ª ed.). Pearson. (Cap. 3 y 11: Ordinal association and rank correlation methods).
  • Navarro, D. (2018). Learning Statistics with R. Correlaciones no paramétricas por rangos, empates y ejecución computacional en R.

Lo esencial

Las variables ordinales permiten ordenar categorías, pero no garantizan distancias equivalentes. Los rangos representan la posición relativa de los casos y, ante empates, se asignan posiciones promedio. Spearman compara el orden global y resulta informativo cuando la relación es monotónica. Kendall utiliza una lógica de pares: las concordancias conservan el orden y las discordancias lo invierten. Tau-b ajusta esa comparación por los empates presentes en ambas variables. Pearson, Spearman y Kendall no son versiones intercambiables ni competidores automáticos. La elección depende del nivel de medición, la forma del patrón, la presencia de empates y la pregunta de investigación. En todos los casos, la representación de los datos debe observarse antes del coeficiente y la asociación no debe confundirse con causalidad.

Spearman resume cuánto se conserva el orden global; Kendall resume cuánto predominan los pares concordantes sobre los discordantes.

← Módulo anterior M09. Inferencia y magnitud de la correlación Siguiente módulo M11. Matrices de correlación y casos perdidos →
Ejecutar el código
---
pagetitle: "M10. Correlaciones ordinales: Spearman y Kendall | Estadística Correlacional Interactiva"
page-layout: custom
toc: false
body-class: rs-lesson-page inferencia-module m10-page
format:
  html:
    css:
      - ../assets/css/m01-datos-medicion.css
      - ../assets/css/inferencia-modules.css
---

::: {.rs-lesson-page-wrap}

::: {.m01-module-intro}
::: {.inference-module-kicker .m01-module-kicker}
Unidad 2 · Asociación bivariada · Módulo 10
:::

# M10. Correlaciones ordinales: Spearman y Kendall {.m01-title}

::: {.m01-module-lead .rs-module-lead}
En los módulos anteriores utilizamos Pearson para resumir asociaciones lineales a partir de los valores originales. Sin embargo, muchas variables sociales permiten ordenar a las personas sin medir con precisión cuánto separa una categoría de otra. En esos casos puede resultar más informativo estudiar si las posiciones relativas se conservan. La correlación de Spearman compara rangos y la Tau-b de Kendall examina concordancias y discordancias entre pares, incorporando los empates. Ambas permiten analizar asociaciones monotónicas, pero responden a lógicas distintas. Comenzaremos con una pregunta sobre posiciones educativas y económicas.
:::
:::

::: {.rs-lesson-section #pregunta-social}
## Pregunta Social

::: {.m01-editorial-block}
### ¿Las personas con mayor nivel educacional tienden a ubicarse en tramos de ingreso más altos? {.m01-social-question-title}

::: {.m01-social-question-intro}
La educación y el ingreso suelen estudiarse mediante variables cuantitativas, pero también pueden registrarse como categorías ordenadas. En este módulo, la **unidad de análisis** será la persona ocupada. La variable $X$ corresponderá al **nivel educacional** y la variable $Y$ al **tramo de ingreso laboral**.

El nivel educacional tendrá cinco categorías:

1. Educación básica.
2. Educación media.
3. Educación técnica.
4. Educación universitaria.
5. Posgrado.

El tramo de ingreso también tendrá cinco categorías:

1. Muy bajo.
2. Bajo.
3. Medio.
4. Alto.
5. Muy alto.

En ambas variables existe un orden: “universitaria” representa una posición educativa superior a “media”, y “alto” representa un tramo de ingreso superior a “bajo”. Sin embargo, ese orden no garantiza distancias iguales. La diferencia entre educación básica y media no tiene por qué ser equivalente a la diferencia entre educación universitaria y posgrado. Del mismo modo, los códigos 1 a 5 no son cantidades medibles por sí mismos.

Además, varias personas pueden compartir la misma categoría. Estos **empates** son esperables en variables ordinales y forman parte de la información disponible.

El análisis buscará establecer hasta qué punto el orden educativo se conserva en los tramos de ingreso. Una asociación positiva indicaría que las posiciones educativas superiores tienden a coincidir con posiciones económicas superiores. Esa tendencia no determina la trayectoria individual ni demuestra que la educación cause por sí sola el ingreso.
:::


### Dos patrones ordinales

::: {.m01-group-comparison-box}
::: {.m01-group-col}
[Escenario A · Orden relativamente consistente]{.m01-group-badge .m01-badge-a}

Las personas con niveles educacionales superiores tienden a ubicarse en tramos de ingreso mayores. Existen excepciones y varias personas comparten categorías, pero predominan las coincidencias en la misma dirección. El patrón es **monotónico positivo**: en términos generales, al aumentar una variable, la otra también tiende a aumentar.

> El orden de las personas se conserva de manera general, aunque varias compartan categorías y algunas se aparten del patrón.
:::

::: {.m01-group-col}
[Escenario B · Orden poco consistente]{.m01-group-badge .m01-badge-b}

Personas con niveles educacionales semejantes aparecen en tramos de ingreso muy distintos. Aumentan las inversiones del orden: algunas personas con educación superior se ubican en tramos menores que otras con educación inferior. Los empates siguen presentes, pero la dirección ordinal es menos definida.

> El orden educativo permite anticipar con menor claridad la posición relativa en los tramos de ingreso.
:::
:::

> **Una tendencia ordinal no determina la trayectoria individual ni demuestra causalidad.**
:::
:::

::: {.rs-lesson-section #idea-central}
## Idea Central

::: {.m01-sequence-flow .rs-sequence-flow role="list"}

::: {.m01-flow-step .rs-flow-step role="listitem"}
```{=html}
<div class="m01-flow-step-num rs-flow-step-num" aria-hidden="true">1</div>
```
### De las categorías al orden

Una variable ordinal permite afirmar que una categoría ocupa una posición mayor o menor que otra. Los códigos 1, 2, 3, 4 y 5 pueden utilizarse para conservar ese orden, pero no garantizan distancias equivalentes.

Por ejemplo, sabemos que:

$$
\text{Básica} < \text{Media} < \text{Técnica} < \text{Universitaria} < \text{Posgrado}
$$

Esta expresión comunica orden, no una distancia exacta entre niveles.

> Conocemos quién ocupa una posición mayor o menor, pero no necesariamente cuánto separa a esas posiciones.
:::

::: {.m01-flow-step .rs-flow-step role="listitem"}
```{=html}
<div class="m01-flow-step-num rs-flow-step-num" aria-hidden="true">2</div>
```
### Del orden a los rangos y Spearman

Los casos pueden ordenarse dentro de cada variable. Cada persona recibe una **posición relativa** o rango. Si varias personas comparten una categoría, ocupan un conjunto de posiciones y reciben el rango promedio de esas posiciones.

Spearman compara los rangos de las mismas personas en ambas variables. Cuando una persona ocupa posiciones parecidas en educación e ingreso, el orden se conserva. Cuando cambia considerablemente de posición, se produce una inversión parcial.

Transformar a rangos no crea información nueva: reorganiza los valores para concentrarse en el orden. En términos operativos, Spearman puede calcularse como Pearson aplicado a los rangos.

Una relación puede ser monotónica sin seguir una línea recta. Por eso, Spearman puede representar adecuadamente un patrón que conserva la dirección general aunque los cambios no sean lineales.
:::

::: {.m01-flow-step .rs-flow-step role="listitem"}
```{=html}
<div class="m01-flow-step-num rs-flow-step-num" aria-hidden="true">3</div>
```
### De los rangos a los pares y Kendall

Kendall utiliza otra lógica. En lugar de comparar directamente todos los rangos, examina pares de personas.

Un par es **concordante** cuando mantiene el orden. Si una persona tiene mayor nivel educacional y también un tramo de ingreso mayor que otra, el par es concordante.

Un par es **discordante** cuando invierte el orden. Si una persona tiene mayor educación, pero se ubica en un tramo de ingreso menor, el par es discordante.

También pueden existir empates en educación, ingreso o ambas variables. La Tau-b de Kendall ajusta la comparación considerando esos empates.
:::

:::
:::

::: {.rs-lesson-section #recorrido-guiado}
## ¿Cómo se construyen Spearman y Kendall?

El recorrido guiado utilizará pocos casos para hacer visibles los pasos que suelen quedar ocultos dentro de los resultados finales. Se ordenarán categorías, se asignarán posiciones, se resolverán empates mediante rangos promedio y se compararán las posiciones de cada persona. Luego se examinarán pares concordantes, discordantes y empatados para comprender cómo Spearman resume el orden global y cómo Tau-b de Kendall resume la concordancia entre pares.

::: {.column-screen-inset}
```{=html}
<div id="m10-rank-tour">
  <!-- El contenido es generado por m10-correlaciones-ordinales.js -->
</div>
```
:::

```{=html}
<script src="../assets/js/m10-correlaciones-ordinales.js" defer></script>
```

### De las categorías a los coeficientes

Una variable ordinal aporta información sobre el orden de las categorías, no necesariamente sobre las distancias entre ellas. Transformar los valores en rangos conserva las posiciones relativas de los casos. Cuando existen empates, las personas que comparten una categoría reciben el promedio de los rangos que ocuparían.

Spearman compara los rangos globales de las mismas personas. La forma simplificada basada en diferencias de rangos es útil sin empates, pero no debe utilizarse mecánicamente cuando varias personas comparten posiciones. En esos casos resulta más claro calcular Pearson sobre los rangos promedio.

Kendall compara pares. Las concordancias aumentan Tau y las discordancias la reducen. Tau-b ajusta el resultado por los empates en ambas variables. Spearman y Kendall suelen entregar lecturas compatibles, pero no son idénticos: uno resume semejanza entre posiciones y el otro balance entre pares. La elección depende del nivel de medición, la forma, los empates y la pregunta analítica.
:::

::: {.rs-lesson-section #laboratorio-interactivo}
## Laboratorio interactivo

::: {.rs-callout-note .rs-callout-note--m01-blue}
**Nota pedagógica:**
Compara relaciones lineales, monotónicas y no monotónicas, observa el efecto de los empates y examina cómo responden Pearson, Spearman y Kendall ante cambios en el orden de los casos.
:::

::: {.column-screen-inset}
```{=html}
<div id="m10-rank-lab">
  <!-- El contenido es generado por m10-correlaciones-ordinales.js -->
</div>
```
:::
:::

::: {.rs-lesson-section #despues-del-laboratorio}
## Después de explorar

La monotonicidad y la linealidad no son equivalentes. Una relación puede conservar un orden ascendente y adoptar una forma curvilínea. En ese escenario, Spearman puede mantenerse relativamente estable mientras Pearson cambia más, porque el primero atiende a las posiciones y el segundo a las distancias originales y la forma lineal.

Las inversiones del orden reducen la consistencia ordinal. Los empates, en cambio, no son errores: aparecen naturalmente cuando varias personas comparten categorías. Spearman los incorpora mediante rangos promedio y Tau-b de Kendall ajusta el balance de concordancias y discordancias.

Al colapsar categorías aumentan los empates y se pierde diferenciación entre casos. Si el patrón cambia de dirección, como en una forma que primero aumenta y luego disminuye, Pearson, Spearman y Kendall pueden resumirlo de manera insuficiente. Por eso, la forma debe observarse antes de interpretar cualquier coeficiente.
:::

::: {.rs-lesson-section .rs-example-section #ejemplo-aplicado}
<details class="rs-example-disclosure">
<summary class="rs-example-disclosure__summary">
<span class="rs-example-disclosure__heading" role="heading" aria-level="2">Ejemplo aplicado: el mismo orden puede adoptar formas diferentes</span>
<span class="rs-example-disclosure__action">
  <span class="rs-example-disclosure__show">Ver ejemplo</span>
  <span class="rs-example-disclosure__hide">Ocultar ejemplo</span>
  <span class="rs-example-disclosure__chevron" aria-hidden="true">↓</span>
</span>
</summary>

::: {.rs-example-disclosure__content}

Los tres escenarios siguientes utilizan variables ordinales, pero presentan estructuras distintas.

::: {.m01-table-wrap}
| Escenario | Nivel de medición | Forma | Empates | Pearson | Spearman | Kendall Tau-b | Lectura más informativa |
|---|---|---|---|---|---|---|---|
| **A. Aproximadamente lineal** | Ordinal con varias categorías | Lineal y monotónica | Pocos | Compatible con Spearman | Positivo y relativamente alto | Positivo | Comparación conjunta, con justificación |
| **B. Monotónico curvilíneo** | Ordinal | Curva creciente | Intermedios | Puede ser menor | Positivo y relativamente alto | Positivo | Spearman |
| **C. Empates e inversiones** | Ordinal concentrada | Monotónica menos definida | Muchos | Variable | Menor | Tau-b informativo | Kendall Tau-b |
: Comparativa de escenarios de correlación ordinal {.m01-table}
:::

### Escenario A. Patrón aproximadamente lineal

Las categorías se distribuyen de manera que los niveles educativos superiores tienden a coincidir con tramos de ingreso superiores. La forma es aproximadamente lineal y monotónica, y existen pocos empates.

### Escenario B. Monotónico curvilíneo

La relación es estrictamente creciente pero sigue una curva preocupante en lugar de una recta. Pearson disminuye debido a la curvatura, mientras que Spearman y Kendall capturan adecuadamente que el orden relativo se mantiene perfecto a lo largo de la curva.

### Escenario C. Empates e inversiones

El número de categorías es muy reducido, lo que produce una alta cantidad de casos empatados en las mismas celdas de la tabla. Además, existen algunas inversiones del orden. La Tau-b de Kendall es especialmente robusta en este escenario, ya que ajusta el balance por la fuerte presencia de empates.

:::
</details>
:::

::: {.inference-endmatter}

<details class="inference-endmatter__item inference-endmatter__formulas">
<summary><span>Fórmulas mínimas y complementarias</span></summary>

::: {.inference-endmatter__content}

::: {.m01-formula-card}
#### Fórmulas de Correlaciones Ordinales

##### Rango promedio ante empates

Cuando $k$ personas comparten una categoría y ocupan desde $R_{\min}$ hasta $R_{\max}$, reciben:

$$
\bar R = \frac{R_{\min}+\cdots+R_{\max}}{k}
$$

Si tres personas ocupan las posiciones 4, 5 y 6:

$$
\bar R = \frac{4+5+6}{3} = 5
$$

Cada una recibe rango 5.

##### Diferencia de rangos

$$
d_i = R(X_i)-R(Y_i)
$$

Una diferencia cercana a cero indica posiciones semejantes. Una diferencia grande indica que el caso cambia considerablemente de posición entre las variables. Esta diferencia se refiere a rangos, no a las distancias entre las categorías originales.

##### Spearman como correlación de rangos

$$
r_s = \operatorname{cor}\left(R(X),R(Y)\right)
$$

Spearman aplica Pearson a los rangos, resume asociación monotónica, maneja los empates mediante rangos promedio y se ubica entre $-1$ y $+1$.

##### Pares concordantes y discordantes

- $C$: número de pares concordantes.
- $D$: número de pares discordantes.
- $T_X$: pares empatados únicamente en $X$.
- $T_Y$: pares empatados únicamente en $Y$.

##### Kendall Tau-b

$$
\tau_b = \frac{C-D}{\sqrt{(C+D+T_X)(C+D+T_Y)}}
$$

El numerador compara concordancias y discordancias. El denominador ajusta el resultado por los empates.
- $\tau_b>0$: predominan los pares concordantes.
- $\tau_b<0$: predominan los pares discordantes.
- $\tau_b$ cercano a cero: existe equilibrio entre ambos tipos o no se observa una dirección ordinal clara.

##### Fórmula clásica de Spearman sin empates

$$
r_s = 1- \frac{6\sum d_i^2}{n(n^2-1)}
$$

::: {.callout-warning}
**Advertencia metodológica:** Esta forma simplificada supone ausencia de empates. Cuando existen empates, es preferible asignar rangos promedio y calcular Pearson sobre esos rangos.
:::

##### Número total de pares

$$
\frac{n(n-1)}{2}
$$

Cada persona se compara con todas las demás una sola vez. En una muestra grande no es necesario enumerar manualmente todos los pares.

##### Tau-a y Tau-b

- **Tau-a:** no ajusta por empates.
- **Tau-b:** ajusta por empates en ambas variables.
Como el caso de este módulo contiene categorías repetidas, Tau-b es la versión más apropiada.

##### Propiedades de los rangos

- Un cambio positivo de escala conserva el orden.
- Una transformación monotónica creciente conserva Spearman y Kendall.
- Invertir el orden de una variable cambia el signo.
- Colapsar categorías puede modificar los coeficientes porque produce más empates.
:::

:::
</details>

<details class="inference-endmatter__item inference-endmatter__code">
<summary><span>Código en R y Python</span></summary>

::: {.inference-endmatter__content}

::: {.panel-tabset .rs-code-tabs}

### R {.unnumbered .unlisted}

```r
educacion_niveles <- c(
  "Básica",
  "Media",
  "Técnica",
  "Universitaria",
  "Posgrado"
)

ingreso_niveles <- c(
  "Muy bajo",
  "Bajo",
  "Medio",
  "Alto",
  "Muy alto"
)

datos <- data.frame(
  persona = sprintf("P%02d", 1:20),
  educacion = c(
    "Básica", "Básica",
    "Media", "Media", "Media", "Media",
    "Técnica", "Técnica", "Técnica", "Técnica",
    "Universitaria", "Universitaria", "Universitaria",
    "Universitaria", "Universitaria",
    "Posgrado", "Posgrado", "Posgrado", "Posgrado", "Posgrado"
  ),
  ingreso = c(
    "Muy bajo", "Bajo",
    "Muy bajo", "Bajo", "Medio", "Bajo",
    "Bajo", "Medio", "Medio", "Alto",
    "Medio", "Alto", "Alto", "Muy alto", "Medio",
    "Alto", "Muy alto", "Alto", "Muy alto", "Muy alto"
  )
)

# Declarar categorías ordenadas
datos$educacion <- factor(
  datos$educacion,
  levels = educacion_niveles,
  ordered = TRUE
)

datos$ingreso <- factor(
  datos$ingreso,
  levels = ingreso_niveles,
  ordered = TRUE
)

# Códigos que preservan el orden
datos$educacion_codigo <- as.numeric(datos$educacion)
datos$ingreso_codigo <- as.numeric(datos$ingreso)

head(datos)

# Obtener rangos promedio y detectar empates
datos$rango_educacion <- rank(
  datos$educacion_codigo,
  ties.method = "average"
)

datos$rango_ingreso <- rank(
  datos$ingreso_codigo,
  ties.method = "average"
)

# Frecuencias de cada categoría
table(datos$educacion)
table(datos$ingreso)

head(datos[
  c(
    "persona",
    "educacion",
    "ingreso",
    "rango_educacion",
    "rango_ingreso"
  )
])

# Comparar Pearson, Spearman y Kendall
casos <- complete.cases(
  datos[c("educacion_codigo", "ingreso_codigo")]
)

x <- datos$educacion_codigo[casos]
y <- datos$ingreso_codigo[casos]

pearson <- cor(x, y, method = "pearson")
spearman <- cor(x, y, method = "spearman")
kendall <- cor(x, y, method = "kendall")

data.frame(
  coeficiente = c("Pearson", "Spearman", "Kendall Tau-b"),
  valor = c(pearson, spearman, kendall)
)

# Verificar Spearman mediante rangos
spearman_desde_rangos <- cor(
  datos$rango_educacion[casos],
  datos$rango_ingreso[casos],
  method = "pearson"
)

c(
  spearman_directo = spearman,
  spearman_desde_rangos = spearman_desde_rangos
)

# Tabla ordinal
tabla_ordinal <- table(
  Educacion = datos$educacion,
  Ingreso = datos$ingreso
)
tabla_ordinal

# Nube de rangos
plot(
  datos$rango_educacion,
  datos$rango_ingreso,
  xlab = "Rango de nivel educacional",
  ylab = "Rango de tramo de ingreso",
  main = "Posiciones relativas",
  pch = 19
)

# Colapsar categorías
datos$ingreso_colapsado <- factor(
  ifelse(
    datos$ingreso %in% c("Muy bajo", "Bajo"),
    "Bajo",
    ifelse(
      datos$ingreso == "Medio",
      "Medio",
      "Alto"
    )
  ),
  levels = c("Bajo", "Medio", "Alto"),
  ordered = TRUE
)

ingreso_colapsado_codigo <- as.numeric(
  datos$ingreso_colapsado
)

cor(
  datos$educacion_codigo,
  ingreso_colapsado_codigo,
  method = "spearman"
)

cor(
  datos$educacion_codigo,
  ingreso_colapsado_codigo,
  method = "kendall"
)
```

### Python {.unnumbered .unlisted}

```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
from pandas.api.types import CategoricalDtype

educacion_niveles = [
    "Básica",
    "Media",
    "Técnica",
    "Universitaria",
    "Posgrado",
]

ingreso_niveles = [
    "Muy bajo",
    "Bajo",
    "Medio",
    "Alto",
    "Muy alto",
]

datos = pd.DataFrame({
    "persona": [f"P{i:02d}" for i in range(1, 21)],
    "educacion": [
        "Básica", "Básica",
        "Media", "Media", "Media", "Media",
        "Técnica", "Técnica", "Técnica", "Técnica",
        "Universitaria", "Universitaria", "Universitaria",
        "Universitaria", "Universitaria",
        "Posgrado", "Posgrado", "Posgrado", "Posgrado", "Posgrado",
    ],
    "ingreso": [
        "Muy bajo", "Bajo",
        "Muy bajo", "Bajo", "Medio", "Bajo",
        "Bajo", "Medio", "Medio", "Alto",
        "Medio", "Alto", "Alto", "Muy alto", "Medio",
        "Alto", "Muy alto", "Alto", "Muy alto", "Muy alto",
    ],
})

tipo_educacion = CategoricalDtype(
    categories=educacion_niveles,
    ordered=True,
)

tipo_ingreso = CategoricalDtype(
    categories=ingreso_niveles,
    ordered=True,
)

datos["educacion"] = datos["educacion"].astype(tipo_educacion)
datos["ingreso"] = datos["ingreso"].astype(tipo_ingreso)

# Códigos ordinales (1 a 5)
datos["educacion_codigo"] = datos["educacion"].cat.codes + 1
datos["ingreso_codigo"] = datos["ingreso"].cat.codes + 1

# Rangos promedio
datos["rango_educacion"] = datos["educacion_codigo"].rank(method="average")
datos["rango_ingreso"] = datos["ingreso_codigo"].rank(method="average")

# Comparar coeficientes
casos = datos[["educacion_codigo", "ingreso_codigo"]].dropna()
x = casos["educacion_codigo"].to_numpy()
y = casos["ingreso_codigo"].to_numpy()

r_pearson, _ = stats.pearsonr(x, y)
r_spearman, _ = stats.spearmanr(x, y)
tau_b, _ = stats.kendalltau(x, y, variant="b")

comparacion = pd.DataFrame({
    "coeficiente": ["Pearson", "Spearman", "Kendall Tau-b"],
    "valor": [r_pearson, r_spearman, tau_b],
})
print(comparacion)

# Verificar Spearman desde los rangos
r_desde_rangos, _ = stats.pearsonr(
    datos["rango_educacion"],
    datos["rango_ingreso"],
)
print("Spearman directo:", r_spearman)
print("Pearson sobre rangos:", r_desde_rangos)

# Tabla ordinal
tabla_ordinal = pd.crosstab(
    datos["educacion"],
    datos["ingreso"],
    dropna=False,
)
print(tabla_ordinal)

# Colapsar categorías
datos["ingreso_colapsado"] = datos["ingreso"].map({
    "Muy bajo": "Bajo",
    "Bajo": "Bajo",
    "Medio": "Medio",
    "Alto": "Alto",
    "Muy alto": "Alto",
})

tipo_colapsado = CategoricalDtype(
    categories=["Bajo", "Medio", "Alto"],
    ordered=True,
)
datos["ingreso_colapsado"] = datos["ingreso_colapsado"].astype(tipo_colapsado)
datos["ingreso_colapsado_codigo"] = datos["ingreso_colapsado"].cat.codes + 1

r_s_colapsado, _ = stats.spearmanr(
    datos["educacion_codigo"],
    datos["ingreso_colapsado_codigo"],
)
tau_colapsado, _ = stats.kendalltau(
    datos["educacion_codigo"],
    datos["ingreso_colapsado_codigo"],
    variant="b",
)
print("Spearman colapsado:", r_s_colapsado)
print("Tau-b colapsado:", tau_colapsado)
```

:::

:::
</details>

<details class="inference-endmatter__item inference-endmatter__references">
<summary><span>Bibliografía</span></summary>

::: {.inference-endmatter__content}

- **Pardo, A., Ruiz, M. A., & San Martín, R. (2009).** *Análisis de datos en ciencias sociales y de la salud I*. Síntesis. (Cap. 10: Medidas de asociación para variables ordinales: Spearman y Kendall).
- **Agresti, A., Franklin, C., & Klingenberg, B. (2023).** *Statistics: The art and science of learning from data* (5ª ed.). Pearson. (Cap. 3 y 11: Ordinal association and rank correlation methods).
- **Navarro, D. (2018).** *Learning Statistics with R*. Correlaciones no paramétricas por rangos, empates y ejecución computacional en R.

:::
</details>

:::

::: {.rs-lesson-section #lo-esencial}
## Lo esencial

Las variables ordinales permiten ordenar categorías, pero no garantizan distancias equivalentes. Los rangos representan la posición relativa de los casos y, ante empates, se asignan posiciones promedio. Spearman compara el orden global y resulta informativo cuando la relación es monotónica. Kendall utiliza una lógica de pares: las concordancias conservan el orden y las discordancias lo invierten. Tau-b ajusta esa comparación por los empates presentes en ambas variables. Pearson, Spearman y Kendall no son versiones intercambiables ni competidores automáticos. La elección depende del nivel de medición, la forma del patrón, la presencia de empates y la pregunta de investigación. En todos los casos, la representación de los datos debe observarse antes del coeficiente y la asociación no debe confundirse con causalidad.

> **Spearman resume cuánto se conserva el orden global; Kendall resume cuánto predominan los pares concordantes sobre los discordantes.**
:::

```{=html}
<nav class="rs-lesson-footer-nav rs-inference-footer-nav" aria-label="Navegación entre módulos">
  <a href="m09_inferencia_magnitud_correlacion.qmd" class="rs-nav-link rs-nav-link--previous">
    <span class="rs-nav-link__arrow" aria-hidden="true">←</span>
    <span class="rs-nav-link__copy">
      <span class="rs-nav-link__label">Módulo anterior</span>
      <span class="rs-nav-link__title">M09. Inferencia y magnitud de la correlación</span>
    </span>
  </a>

  <a href="m11_matrices_correlacion_casos_perdidos.qmd" class="rs-nav-link rs-nav-link--next">
    <span class="rs-nav-link__copy">
      <span class="rs-nav-link__label">Siguiente módulo</span>
      <span class="rs-nav-link__title">M11. Matrices de correlación y casos perdidos</span>
    </span>
    <span class="rs-nav-link__arrow" aria-hidden="true">→</span>
  </a>
</nav>
```

:::

Estadística Correlacional Interactiva
Facultad de Ciencias Sociales
Departamento de Sociología
Universidad de Chile

Volver arriba

Sitio creado por Katherine Aravena .

Código bajo licencia MIT · Ver repositorio en GitHub