Unidad 2 · Asociación bivariada · Módulo 10
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.
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:
El tramo de ingreso también tendrá cinco categorías:
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.
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.
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.
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.
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.
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.
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.
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.
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.
Los tres escenarios siguientes utilizan variables ordinales, pero presentan estructuras distintas.
| 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 |
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.
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.
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.
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.
\[ 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.
\[ 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\).
\[ \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.
\[ r_s = 1- \frac{6\sum d_i^2}{n(n^2-1)} \]
Advertencia metodológica: Esta forma simplificada supone ausencia de empates. Cuando existen empates, es preferible asignar rangos promedio y calcular Pearson sobre esos rangos.
\[ \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.
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)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.
---
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>
```
:::