# Cargamos los paquetes que utilizaremos en el práctico
if (!requireNamespace("pacman", quietly = TRUE)) install.packages("pacman")
pacman::p_load(
dplyr, # Para trabajar con los datos
ggplot2, # Para crear gráficos
sjmisc, # Para explorar frecuencias
sjPlot, # Para tablas de correlación
corrplot, # Para visualizar matrices de correlación
psych # Para contar casos por pares
)Correlaciones ordinales y matrices de correlación
Sesión del miércoles, 7 de octubre de 2026
Ejercita R · Social R interactivo ↗
Recurso complementario Interactivo · Spearman y Kendall ↗
Recurso complementario Interactivo· Matrices y casos perdidos ↗
1 Objetivo de la sesión
A diferencia de los prácticos anteriores, aquí el foco no está en seguir paso a paso un ejemplo, sino en tomar decisiones de análisis, ejecutarlas en R y justificarlas. Los objetivos específicos son:
Repasar cuándo utilizar los coeficientes de Pearson, Spearman y Kendall
Estimar e interpretar matrices de correlación, decidiendo cómo tratar los casos perdidos
Integrar visualización, inferencia, magnitud y sentido del efecto en un reporte breve
2 Correlaciones Ordinales y Matrices de Correlación.
2.1 Preparación de datos
Utilizaremos datos del Estudio Longitudinal Social de Chile (ELSOC), una encuesta panel aplicada anualmente por el Centro de Estudios de Conflicto y Cohesión Social (COES) a población urbana adulta de Chile. Trabajaremos con la ola más reciente disponible (2023), y en particular con preguntas sobre percepción de meritocracia y estatus social subjetivo. Con el siguiente código cargamos y procesamos los datos.
load(url("https://github.com/cursos-metodos-facso/datos-ejemplos/raw/main/elsoc2023.rdata")) # Carga el objeto elsoc 2023
datos <- elsoc_2023 |>
transmute(
mesfuerzo = c18_09, # Recompensa al esfuerzo
mtalento = c18_10, # Recompensa a la inteligencia
ess = d01_01, # Estatus social subjetivo
educ = m01, # Nivel educacional
edad = m0_edad # Edad
) |>
select(mesfuerzo,
mtalento,
ess,
educ,
edad) |>
mutate(across(everything(), ~ ifelse(.x < 0, NA, .x))) # -999, -888, -777 y -666 son casos perdidos| Variable | Qué representa | Nivel de medición |
|---|---|---|
mesfuerzo |
“En Chile las personas son recompensadas por sus esfuerzos” (1 = totalmente en desacuerdo … 5 = totalmente de acuerdo) | Ordinal |
mtalento |
“En Chile las personas son recompensadas por su inteligencia” (1 … 5) | Ordinal |
ess |
Estatus social subjetivo (0 = el nivel más bajo … 10 = el nivel más alto) | Ordinal |
educ |
Nivel educacional (1 = sin estudios … 10 = posgrado) | Ordinal |
edad |
Edad en años | Razón |
En ocasiones, variables ordinales con muchas categorías, como Estatus Social Subjetivo y Nivel Educacional, pueden ser tratadas como continuas.
Por ahora, para demostrar la aplicación de los coeficientes de Spearman y Kendall en R, asumiremos que son ordinales.
2.2 Spearman y Kendall en R
Trabajaremos con la siguiente pregunta de investigación: ¿En qué medida el nivel educacional se asocia con el estatus social subjetivo?
Primero visualizamos. A diferencia de lo que vimos con variables continuas (como ingresos o edad), donde la nube de puntos se distribuye libremente en el plano, al cruzar dos variables ordinales cada variable toma solo unos pocos valores posibles. Por eso, el gráfico de dispersión ya no muestra una “nube”, sino una cuadrícula de puntos: cada punto corresponde a una combinación de categorías (por ejemplo, educación media completa y estatus 5) y puede representar a decenas o cientos de personas superpuestas.
ggplot(datos, aes(
x = educ, # Eje X: nivel educacional
y = ess # Eje Y: estatus social subjetivo
)) + geom_point()En este gráfico no podemos distinguir en qué combinaciones se concentran los casos, por lo que es difícil identificar el patrón de la asociación. Una alternativa es usar geom_jitter(), que desplaza levemente cada punto al azar para que los casos superpuestos se vuelvan visibles. Así, las zonas con más puntos indican dónde se concentran las personas:
ggplot(datos, aes(
x = educ,
y = ess
)) + geom_jitter(width = 0.2, height = 0.2) # Desplaza los puntos hasta 0,2 unidades en cada ejeEl desplazamiento de geom_jitter() es solo visual: no modifica los datos ni el cálculo de la correlación.
¿Se puede identificar algún patron a partir de esta visualización?
2.3 ¿Qué coeficiente utilizar?
Hasta ahora, hemos trabajados con el coeficiente de correlación de Pearson, que supone variables continuas y que tienen una relación lineal entre ellas. Sin embargo, en ciencias sociales muchas veces trabajamos con variables que son ordinales: Escalas Likert, nivel educacional, clase social, etc. Para estos casos, existen coeficientes de relación basados en rankings: El Coeficiente de correlación de Spearman y el Coeficiente de correlación de rango de Kendall.
| Coeficiente | Símbolo | ¿Cuándo usarlo? | ¿Cómo se calcula? |
|---|---|---|---|
| Pearson | \(r\) | Variables continuas y relación lineal. Es el coeficiente más utilizado | Covarianza estandarizada de los valores originales |
| Spearman | \(r_s\) | Variables ordinales, o continuas con distribuciones muy asimétricas o casos atípicos (ej. ingresos) | Es una correlación de Pearson calculada sobre el ranking (posiciones ordenadas) de las variables |
| Kendall | \(\tau\) | Variables ordinales con muchos empates (pocas categorías) y/o muestras pequeñas | Compara todos los pares de casos: proporción de pares concordantes menos discordantes |
Los tres coeficientes se interpretan de la misma forma:
- Varían entre -1 y 1.
- Su signo indica el sentido de la asociación.
- Su valor absoluto su magnitud, que se pueden interpretar según los criterios de Cohen. Con todo, se debe considera que los valores de Kendal tienden a ser más pequeños que Spearman y Pearson.
Para estimar Spearman o Kendall usamos la misma función cor.test que utilizamos para Pearson, cambiando el argumento method:
cor_pearson <- cor.test(datos$educ, datos$ess, method = "pearson")
cor_spearman <- cor.test(datos$educ, datos$ess, method = "spearman", exact = FALSE)
cor_kendall <- cor.test(datos$educ, datos$ess, method = "kendall", exact = FALSE)El argumento exact = FALSE le indica a R que calcule el valor \(p\) mediante una aproximación. Si no lo incluimos, cuando hay empates (casos con el mismo valor, muy frecuentes en variables ordinales) R puede mostrar el aviso “Cannot compute exact p-value with ties”. No es un error: el coeficiente se calcula igual.
Comparemos los tres coeficientes:
| Coeficiente | Valor | Valor \(p\) |
|---|---|---|
| Pearson (\(r\)) | 0,26 | < 0,001 |
| Spearman (\(r_s\)) | 0,26 | < 0,001 |
| Kendall (\(\tau\)) | 0,21 | < 0,001 |
Cada coeficiente usa un estadístico de prueba distinto. Pearson usa \(t\), igual que en el práctico anterior. Spearman reporta \(S\), la suma de las diferencias al cuadrado entre los rangos de ambas variables; por eso es un número muy grande que no se compara directamente con un valor crítico. Kendall, con exact = FALSE, usa una aproximación a la distribución normal (\(z\)). En los tres casos, la decisión sobre \(H_0\) se toma a partir del valor \(p\).
Dado que en este caso tenemos una muestra grande y variables ordinales, nos guíaremos por el Coeficiente de Correlación de Spearman. A continuación, interpretamos el resultado:
Dado que ambas variables son ordinales, se utilizó la correlación de Spearman para medir la asociación entre nivel educacional y estatus social subjetivo. Se observa una asociación positiva, de magnitud pequeña y estadísticamente significativa entre ambas variables (\(r_s\) = 0,26; \(p\) < 0,001; \(N\) = 2.719). Por tanto, se rechaza la hipótesis nula de no asociación con un 99,9% de confianza. Por lo tanto, detectamos evidencia de que las personas con mayor nivel educacional tienden a ubicarse en posiciones más altas en la escala de estatus social.
cor.test solo entrega intervalo de confianza para la correlación de Pearson. Para Spearman y Kendall solo reportamos el coeficiente, el valor \(p\) y el \(N\).
2.4 Matrices de correlación
Una matriz de correlación presenta simultáneamente todas las correlaciones entre pares de un conjunto de variables. Cada celda corresponde a la correlación entre la variable de la fila y la de la columna; la diagonal siempre es 1 (la correlación de una variable consigo misma) y los valores sobre y bajo la diagonal se repiten.
Tratamiento de casos perdidos
Tratar con casos perdidos es complejos, existiendo múltiples enfoques desde la eliminación a la imputación. En este práctico nos enfocaremos en las dos estrategias más comunes:
- Trabajar exclusivamente con casos completos, o listwise
- Retener valores perdidos, pero excluir al calcular estadístico, o pairwise
| Opción | Qué hace | En cor.test |
|---|---|---|
| Listwise (por lista) | Elimina el caso completo si tiene un NA en cualquiera de las variables de la matriz. Todas las correlaciones usan el mismo \(N\) |
use = "complete.obs" |
| Pairwise (por pares) | Elimina el caso solo de las correlaciones donde tiene NA. Cada correlación puede tener un \(N\) distinto, pero se rescata más información |
use = "pairwise.complete.obs" |
A partir de la variables que seleccionamos de ELSCO, veamos cuántos casos tenemos con cada opción:
colSums(is.na(datos)) # Casos perdidos por variablemesfuerzo mtalento ess educ edad
6 5 7 0 0
nrow(datos) # N total[1] 2726
nrow(na.omit(datos)) # N con listwise[1] 2713
psych::pairwiseCount(datos) # N de cada par con pairwise mesfuerzo mtalento ess educ edad
mesfuerzo 2720 2718 2714 2720 2720
mtalento 2718 2721 2716 2721 2721
ess 2714 2716 2719 2719 2719
educ 2720 2721 2719 2726 2726
edad 2720 2721 2719 2726 2726
En este caso la pérdida de casos es pequeña (de 2.726 a 2.713 con listwise). Pero cuando una variable concentra muchos casos perdidos (por ejemplo, ingresos), la diferencia puede ser considerable y la decisión sí importa.
Ninguna opción es más correcta que la otra. La decisión debe depender de cuántos casos se pierden y para qué se usará la matriz. Pairwise aprovecha toda la información disponible, por lo que el análisis resultante tendrá más poder estadístico. Sin embargo, listwise es más simple de computar y es necesario para técnicas de estadística multivariada.
En este caso, como la diferencia entre ambas opciones es pequeña y no arriesgamos poder estadístico, optaremos por listwise
Estimación de la matriz
Con cor obtenemos la matriz completa, indicando el método y el tratamiento de los casos perdidos:
matriz <- cor(datos,
method = "spearman",
use = "pairwise.complete.obs") # Creamos un objeto llamado "matriz"Para reportarla, sjPlot::tab_corr genera una tabla que además indica la significación estadística de cada correlación mediante asteriscos:
sjPlot::tab_corr(datos,
corr.method = "spearman", # "pearson", "spearman" o "kendall"
na.deletion = "pairwise", # "listwise" o "pairwise"
triangle = "lower", # Mostramos solo la mitad inferior
title = "Matriz de correlaciones de Spearman · ELSOC 2023")| mesfuerzo | mtalento | ess | educ | edad | |
|---|---|---|---|---|---|
| mesfuerzo | |||||
| mtalento | 0.696*** | ||||
| ess | 0.051** | 0.067*** | |||
| educ | -0.067*** | -0.086*** | 0.261*** | ||
| edad | 0.082*** | 0.090*** | -0.052** | -0.427*** | |
| Computed correlation used spearman-method with pairwise-deletion. | |||||
Y corrplot nos permite visualizarla:
corrplot::corrplot(matriz,
method = "number", # Muestra los coeficientes
type = "lower", # Solo la mitad inferior
diag = FALSE) # Sin la diagonalLa asociación más fuerte se da entre
mesfuerzoymtalento(\(r_s\) = 0,70, grande): quienes creen que en Chile se recompensa el esfuerzo también tienden a creer que se recompensa el talento.educyedadpresentan una asociación negativa y moderada (\(r_s\) = -0,43): las personas de mayor edad tienen, en promedio, menor nivel educacional.Como ya vimos antes, también existe una asociación leve y positiva entre nivel eduacional y estatus social subjetivo.
Con un \(N\) cercano a 2.700, incluso correlaciones muy pequeñas pueden resultar estadísticamente significativas.
2.5 Checklist para reportar una correlación
Al interpretar una correlación, consideren siempre:
- Visualización: ¿qué patrón muestra el gráfico?
- Elección del coeficiente: ¿por qué Pearson, Spearman o Kendall? (nivel de medición, distribución, tamaño de la muestra)
- Sentido: positivo o negativo, y qué significa sustantivamente
- Magnitud: ¿Qué tan cerca de 0 o |1| está el coeficiente?
- Inferencia: hipótesis, valor \(p\), decisión respecto a \(H_0\) y nivel de confianza
- Casos perdidos: \(N\) utilizado y tratamiento de los
NA - Conclusión sustantiva: responder la pregunta de investigación en lenguaje sociológico, sin afirmar causalidad
3 Actividad autónoma
En grupos de 2 a 3 personas, elijan una de las tres bases de datos disponibles. Luego, desarrollen los ejercicios en un script propio.
Si tienen dudas sobre el código, pueden revisar los ejemplos de este práctico o consultar la sección de ayuda de código. En esa sección también podrán encontrar recomendaciones frente a errores comunes en R.
3.1 Bases de datos disponibles
La Encuesta de Caracterización Socioeconómica Nacional (CASEN) es aplicada por el Ministerio de Desarrollo Social y Familia a hogares de todo Chile y es la principal fuente para medir pobreza, ingresos, educación, trabajo y vivienda. Utilizaremos la base oficial de CASEN 2024, publicada en el Observatorio Social.
## Si decides usar esta base de datos, carga en R el siguiente link:
url_casen <- c("https://github.com/cursos-metodos-facso/datos-ejemplos/raw/main/casen_barrio2024.rdata")El subset de la base de datos contiene las siguientes variables
| Variable | Qué representa | Escala |
|---|---|---|
edad |
Edad en años | Continua |
mujer |
Sexo | 0 = hombre, 1 = mujer |
escolaridad |
Años de escolaridad | Continua |
nivel_educ |
Nivel de escolaridad agregado | 0 = sin educación formal … 6 = superior completa |
ingreso_trabajo |
Ingreso del trabajo, en pesos (solo personas que trabajan) | Continua (muy asimétrica) |
decil |
Decil de ingreso autónomo del hogar | 1 = decil más bajo … 10 = decil más alto |
horas_trabajo |
Horas trabajadas habitualmente por semana (solo personas que trabajan) | Continua |
n_personas |
Número de personas en el hogar | Continua |
hacinamiento |
Índice de hacinamiento | 1 = sin hacinamiento … 4 = hacinamiento crítico |
barrio_drogas |
Frecuencia con que ha presenciado consumo de drogas o alcohol en la vía pública en su barrio | 1 = nunca … 4 = siempre |
barrio_peleas |
Frecuencia con que ha presenciado personas peleando o amenazándose en su barrio | 1 = nunca … 4 = siempre |
barrio_ruidos |
Frecuencia con que ha presenciado contaminación acústica o ruidos molestos en su barrio | 1 = nunca … 4 = siempre |
La Encuesta CEP es una encuesta de opinión pública que el Centro de Estudios Públicos aplica desde 1987 a una muestra representativa de la población adulta de Chile. Utilizaremos la Encuesta CEP N° 96 (abril-mayo de 2026), que incluye preguntas sobre confianza en instituciones, evaluación del gobierno, democracia, justificación de la violencia e inmigración.
## Si decides usar esta base de datos, carga en R el siguiente link:
url_cep <- "https://github.com/cursos-metodos-facso/datos-ejemplos/raw/main/cep_2026.rdata"Esta base de datos contiene las siguientes variables
| Variable | Qué representa | Escala |
|---|---|---|
edad |
Edad en años | Continua |
mujer |
Sexo | 0 = hombre, 1 = mujer |
educ |
Nivel educacional | 0 = sin estudios formales … 10 = posgrado completo |
ingreso_tramo |
Tramo de ingreso mensual del entrevistado | 1 = menos de $95.000 … 11 = más de $3.155.000 |
estatus |
Estatus social subjetivo (“¿dónde se ubicaría usted?”) | 1 = nivel más bajo … 10 = nivel más alto |
pos_pol |
Autoubicación política | 1 = izquierda … 10 = derecha |
interes_pol |
Interés en la política | 1 = nada interesado … 5 = muy interesado |
conf_partidos |
Confianza en los partidos políticos | 1 = nada … 4 = mucha |
conf_carab |
Confianza en Carabineros | 1 = nada … 4 = mucha |
conf_ffaa |
Confianza en las Fuerzas Armadas | 1 = nada … 4 = mucha |
conf_gobierno |
Confianza en el Gobierno | 1 = nada … 4 = mucha |
conf_congreso |
Confianza en el Congreso | 1 = nada … 4 = mucha |
democracia_func |
¿Qué tan bien o mal funciona la democracia en Chile? | 1 = muy mal … 5 = muy bien |
seguridad_libertad |
0 = “Se deben garantizar las libertades aunque eso impida controlar la delincuencia” … 10 = “Se deben suprimir las libertades para controlar la delincuencia” | 0 … 10 |
just_marcha |
Justificación de participar en una marcha como forma de protesta | 1 = nunca … 5 = siempre |
just_fuerza_carab |
Justificación de que Carabineros use la fuerza contra un manifestante violento | 1 = nunca … 5 = siempre |
inmig_crimen |
“Los inmigrantes elevan los índices de criminalidad” | 1 = muy en desacuerdo … 5 = muy de acuerdo |
El Barómetro de las Américas (LAPOP) es una encuesta comparada sobre opinión pública y democracia en América Latina y el Caribe, realizada por el Center for Global Democracy de la Universidad de Vanderbilt. Utilizaremos la ronda más reciente con datos públicos (2023). Esta versión incluye un conjunto reducido de variables para todos los países de la ronda, entre ellos Chile.
## Si decides usar esta base de datos, carga en R el siguiente link:
url_lapop <- "https://github.com/cursos-metodos-facso/datos-ejemplos/raw/main/subset_lapop2023.rdata"Esta base de datos contiene las siguientes variables:
| Variable | Qué representa | Escala |
|---|---|---|
pais_name |
País | Texto |
conf_ffaa |
Confianza en las Fuerzas Armadas | 1 = nada … 7 = mucho |
conf_policia |
Confianza en la policía (en Chile, Carabineros) | 1 = nada … 7 = mucho |
apoyo_dem |
“La democracia puede tener problemas, pero es mejor que cualquier otra forma de gobierno” | 1 = muy en desacuerdo … 7 = muy de acuerdo |
satisf_dem |
Satisfacción con el funcionamiento de la democracia en el país | 1 = muy insatisfecho … 4 = muy satisfecho |
educ |
Nivel educacional | 0 = ninguna … 6 = superior completa |
riqueza |
Quintil de riqueza del hogar (índice de bienes del hogar) | 1 = quintil más bajo … 5 = quintil más alto |
mujer |
Género | 0 = hombre, 1 = mujer |
3.2 Ejercicios
Parte 1: Exploración
1.1. Seleccione dos variables y planteen una pregunta de investigación.
1.1 Identifiquen el nivel de medición de las variables que utilizarán.
1.2 Revisen la distribución de esas variables y cuenten los casos perdidos con colSums(is.na()). ¿Alguna variable concentra muchos NA?
Parte 2: Correlación
2.1 Visualicen la asociación mediante una nube de puntos y describan brevemente el patrón observado.
2.2 Elijan un coeficiente de correlación, justifiquen su elección y estímenlo.
2.3 Interpreten el resultado considerando inferencia estadística, magnitud y sentido del efecto. Planteen \(H_0\) y \(H_1\) e indiquen con qué nivel de confianza pueden (o no) rechazar \(H_0\).
Parte 3: Matriz de correlaciones
3.1 Seleccionen un grupo de variables (por lo menos 3). Estimen y reporten la matriz de correlaciones para esas variables.
3.2 ¿Qué decisión tomaron sobre los casos perdidos (listwise o pairwise)? ¿Por qué? Comparen el \(N\) que obtienen con cada opción.
3.3 ¿Cuál es la asociación más fuerte de la matriz? ¿Y la más débil? ¿Hay alguna que sea significativa pero de magnitud muy pequeña?
3.4 ¿Qué correlaciones de la matriz son estadísticamente significativas? ¿Con qué nivel de confianza se puede rechazar la hipótesis nula en esos casos?
Parte 4: Reporte
3.3 Ayuda de código
Mostrar plantillas de código
Reemplacen mis_datos por el nombre de su base y completen los espacios ____.
Exploración
sjmisc::frq(mis_datos$____) # Frecuencias de una variable
summary(mis_datos$____) # Resumen de una variable continua
colSums(is.na(mis_datos)) # Casos perdidos por variableNube de puntos
ggplot(mis_datos, aes(
x = ____,
y = ____
)) + geom_point()Correlación con prueba de hipótesis
cor.test(mis_datos$____,
mis_datos$____,
method = "____", # "pearson", "spearman" o "kendall"
exact = FALSE)Matriz de correlaciones
mi_matriz <- mis_datos |>
select(____, ____, ____, ____, ____) # Variables seleccionadas
# N con listwise y con pairwise
nrow(na.omit(mi_matriz))
psych::pairwiseCount(mi_matriz)
# Tabla con significación estadística
sjPlot::tab_corr(mi_matriz,
corr.method = "____", # "pearson", "spearman" o "kendall"
na.deletion = "____", # "listwise" o "pairwise"
triangle = "lower")
# Visualización
corrplot::corrplot(cor(mi_matriz,
method = "____", # "pearson", "spearman" o "kendall"
use = "____"), # "complete.obs" o "pairwise.complete.obs"
method = "number",
type = "lower",
diag = FALSE)Errores frecuentes
| Mensaje o problema | Causa probable | Solución |
|---|---|---|
object 'datos_x' not found |
La base no se ha cargado | Ejecutar load(url(url_x)) y revisar en el panel de entorno el nombre del objeto que aparece: datos_casen, datos_cep o datos_lapop |
cannot open the connection al cargar la base |
Sin conexión a internet o el link está mal copiado | Revisar la conexión y copiar el link completo, entre comillas |
could not find function "tab_corr" (o select, ggplot, etc.) |
El paquete no está cargado o no está instalado | Ejecutar el bloque de pacman::p_load(...) del inicio, o usar paquete::función (por ejemplo, sjPlot::tab_corr) |
object 'conf_carab' not found |
Se escribió la variable sin indicar la base | Usar base$variable, por ejemplo datos_cep$conf_carab |
cor() devuelve NA |
Alguna de las variables tiene casos perdidos | Agregar use = "complete.obs" o use = "pairwise.complete.obs" |
'x' must be numeric |
Se incluyó una variable de texto en la correlación o en la matriz (por ejemplo, pais_name en LAPOP) |
Quitar esa variable del select() antes de calcular la matriz |
'arg' should be one of "pearson", "kendall", "spearman" |
El método está mal escrito (por ejemplo, "Spearman" o "spearmann") |
Escribirlo en minúsculas y entre comillas: "pearson", "spearman" o "kendall" |
unused argument |
El nombre de un argumento está mal escrito (por ejemplo, corr_method por corr.method ) |
Revisar el nombre correcto de los argumentos con help() |
Aviso Cannot compute exact p-value with ties |
Hay empates en los rangos (normal en variables ordinales) | No es un error. Para evitar el aviso, agregar exact = FALSE |
| El filtro de un país devuelve 0 casos | El nombre no coincide exactamente (mayúsculas, tildes o espacios) | Revisar los nombres con unique(datos_lapop$pais_name) y copiarlos tal cual, por ejemplo filter(pais_name == "Chile") |
Error: unexpected symbol o unexpected ')' |
Falta (o sobra) una coma, un paréntesis o unas comillas | Revisar que cada argumento esté separado por , y que los paréntesis y las comillas se abran y cierren |
4 Síntesis
Spearman y Kendall son alternativas a Pearson basadas en rankings, adecuadas para variables ordinales o con distribuciones asimétricas. Kendall es preferible cuando la muestra es pequeña o se observan demasiados empates.
Una matriz de correlación permite examinar simultáneamente varias asociaciones; su lectura debe considerar sentido, magnitud y significación de cada par
La decisión sobre casos perdidos (listwise o pairwise) afecta el \(N\) y debe ser reportada.