::p_load(tidyverse, # Manipulacion datos
pacman# Descriptivos
sjmisc, # Tablas
sjPlot, #Tablas
kableExtra, # Correlaciones
GGally, # Correlaciones
corrplot)
options(scipen = 999) # para desactivar notacion cientifica
rm(list = ls()) # para limpiar el entorno de trabajo
Matrices de correlación y tamaños de efecto
Completar hasta as 11:59 PM del viernes, 1 de septiembre de 2023
Objetivo de la práctica
El objetivo de esta guía práctica es conocer maneras de reportar coeficientes de correlación y cómo interpretar sus tamaños de efecto en ciencias sociales. Además, nos introduciremos en el tratamiento de valores perdidos y otras medidas de correlación entre variables.
En detalle, aprenderemos:
- Cómo reportar y presentar matrices de correlación.
- Interpretar el tamaño de efecto de una correlación.
- Tratamiento de casos perdidos.
- Qué es y cómo calcular la correlación de Spearman.
- Qué es el coeficiente de determinación \(R^2\).
¿Qué era la correlación?
La correlación es una medida de asociación entre variables, que describe el sentido (dirección) y fuerza de la asociación.
En otras palabras, nos permite conocer cómo y cuánto se relaciona la variación de una variable, con la variación de otra variable.
Recursos de la práctica
En esta práctica trabajaremos con un subconjunto de datos previamente procesados del Estudio Longitudinal Social de Chile (ELSOC) del año 2016, elaborado por COES. Para este ejercicio, obtendremos directamente esta base desde internet. No obstante, también tienes la opción de acceder a la misma información a través del siguiente enlace: ELSOC 2016
. Desde allí, podrás descargar el archivo que contiene el subconjunto procesado de la base de datos ELSOC 2016.
Preparación datos
Comencemos por preparar nuestros datos. Iniciamos cargando las librerías necesarias.
Cargamos los datos directamente desde internet (por esta vez).
load(url("https://multivariada.netlify.app/assignment/data/proc/ELSOC_ess_merit2016.RData")) #Cargar base de datos
A continuación, exploramos la base de datos proc_elsoc.
names(proc_elsoc) # Nombre de columnas
[1] "mesfuerzo" "mtalento" "ess" "edcine" "sexo" "edad"
[7] "pmerit"
dim(proc_elsoc) # Dimensiones
[1] 2927 7
Contamos con 7 variables (columnas) y 2927 observaciones (filas).
Ahora, profundicemos un poco más y observemos algunos estadísticos descriptivos de resumen de nuestra base de datos. Utilizaremos la función descr
del paquete sjmisc
.
::descr(proc_elsoc,
sjmiscshow = c("label","range", "mean", "sd", "NA.prc", "n")) %>%
kable(.,"markdown")
var | label | n | NA.prc | mean | sd | range | |
---|---|---|---|---|---|---|---|
4 | mesfuerzo | Recompensa: esfuerzo | 2909 | 0.6149641 | 2.5727054 | 1.0466874 | 4 (1-5) |
5 | mtalento | Recompensa: talento | 2907 | 0.6832935 | 2.7389061 | 1.0596182 | 4 (1-5) |
3 | ess | Estatus Social Subjetivo | 2915 | 0.4099761 | 4.3300172 | 1.5666965 | 10 (0-10) |
2 | edcine | Educación | 2925 | 0.0683293 | 3.1839316 | 1.2066058 | 4 (1-5) |
7 | sexo | Sexo | 2927 | 0.0000000 | 0.6026648 | 0.4894300 | 1 (0-1) |
1 | edad | Edad | 2927 | 0.0000000 | 46.0908780 | 15.2867983 | 70 (18-88) |
6 | pmerit | Meritocracia promedio | 2898 | 0.9907755 | 2.6538992 | 0.9694792 | 4 (1-5) |
¡ALTO! Tenemos algunos valores o casos perdidos en ciertas variables. ¿Cómo lidiar con los casos perdidos?
Tratamiento de casos perdidos
Trabajar con datos a menudo implica enfrentar valores perdidos (NA
), lo que puede ser un gran desafío. Estos valores indican la ausencia de un valor en una base de datos. Los valores perdidos pueden originarse por diversas razones, como el sesgo de no respuesta en encuestas, errores en la entrada de datos o simplemente la falta de información para ciertas variables.
X1 | X2 | X3 | X4 |
---|---|---|---|
NA | 4 | 1 | Hola |
7 | 1 | 4 | No soy un NA |
8 | NA | 2 | NA |
9 | NA | 9 | Amo R |
3 | 3 | 6 | NA |
La presencia de valores perdidos puede tener un impacto considerable en la precisión y confiabilidad de los análisis estadísticos, lo que a su vez puede conducir a resultados sesgados y conclusiones incorrectas.
Existen varias formas de tratar valores perdidos, que van desde enfoques simples hasta métodos más complejos, como la imputación. En esta ocasión, nos centraremos en las dos estrategias más comunes:
- trabajar exclusivamente con casos completos (listwise) o
- retener los casos con valores perdidos, pero excluyéndolos al calcular estadísticas (pairwise).
a) Analísis con casos completos: listwise deletion
Este enfoque es uno de los más conocidos: implica remover completamente las observaciones que tienen valores perdidos en cualquier variable de interés. En otras palabras, si una fila/caso en un conjunto de datos tiene al menos un valor faltante en alguna de las variables que estás considerando, se eliminará por completo.
En R, esto podemos hacerlo con la función na.omit
. Para hacer esto, sigamos estos pasos:
- respaldar la base de datos original en el espacio de trabajo (por si queremos en adelante realizar algún análisis referido a casos perdidos)-
- contamos el número de casos con el comando
dim
. - contamos cuántos y en dónde tenemos casos perdidos.
- borramos los casos perdidos con
na.omit
. - contamos nuevamente con
dim
para asegurarnos que se borraron.
<- proc_elsoc
proc_elsoc_original dim(proc_elsoc)
[1] 2927 7
sum(is.na(proc_elsoc))
[1] 81
colSums(is.na(proc_elsoc))
mesfuerzo mtalento ess edcine sexo edad pmerit
18 20 12 2 0 0 29
<- na.omit(proc_elsoc)
proc_elsoc dim(proc_elsoc)
[1] 2887 7
Ahora nos quedamos con 2887 observaciones sin casos perdidos.
Aunque simple de implementar, con este enfoque podemos perder información importante, especialmente si los valores perdidos no se distribuyen aleatoriamente.
Siempre hay que intentar rescatar la mayor cantidad de casos posibles. Por lo tanto, si un listwise genera más de un 10% de casos perdidos se debe detectar qué variables esta produciendo esta pérdida e intentar recuperar datos. Puedes revisar un ejemplo aquí.
b) Retener pero excluir: pairwise deletion
A diferencia del anterior, este es un enfoque en el que las observaciones se utilizan para el análisis siempre que tengan datos disponibles para las variables específicas que se están analizando. En lugar de eliminar toda una fila si falta un valor, se eliminan solo los valores faltantes en las variables que se están analizando en ese momento.
Para hacer esto en R debemos siempre verificar e indicar en nuestro código si queremos (o no) remover los NA
para realizar los análisis.
mean(proc_elsoc_original$pmerit); mean(proc_elsoc$edad); mean(proc_elsoc$ess)
[1] NA
[1] 45.98337
[1] 4.333564
mean(proc_elsoc_original$pmerit, na.rm = TRUE); mean(proc_elsoc$edad, na.rm = TRUE); mean(proc_elsoc$ess, na.rm = TRUE)
[1] 2.653899
[1] 45.98337
[1] 4.333564
Con el primer código no obtuvimos información sustantiva en ciertas variables, pero con el segundo sí al remover los NA
solo de dicha variable para un cálculo determinado.
Matrices de correlación
La correlación es una estimación de asociación de dos variables. Sin embargo, en los análisis de bases de datos usualmente se exploran asociaciones entre múltiples pares de variables, lo que genera una matriz de correlación. En una matriz, las variables se presentan en las filas y las columnas, y en las celdas donde se cruzan los pares de variables se muestra su coeficiente de correlación.
En su forma simple en R se aplica la función cor
a la base de datos, y la guardamos en un objeto que le damos el nombre M para futuras operaciones:
<- cor(proc_elsoc_original, use = "complete.obs")
M M
mesfuerzo mtalento ess edcine sexo
mesfuerzo 1.000000000 0.69768811 -0.004312135 -0.12167659 -0.04480502
mtalento 0.697688106 1.00000000 0.018447696 -0.10582754 -0.03759340
ess -0.004312135 0.01844770 1.000000000 0.28959248 -0.03745546
edcine -0.121676591 -0.10582754 0.289592479 1.00000000 -0.08682644
sexo -0.044805024 -0.03759340 -0.037455462 -0.08682644 1.00000000
edad 0.096495547 0.07383771 -0.066031873 -0.37660283 0.06121699
pmerit 0.920404032 0.92224547 0.007740598 -0.12341680 -0.04469515
edad pmerit
mesfuerzo 0.09649555 0.920404032
mtalento 0.07383771 0.922245465
ess -0.06603187 0.007740598
edcine -0.37660283 -0.123416804
sexo 0.06121699 -0.044695146
edad 1.00000000 0.092369792
pmerit 0.09236979 1.000000000
Este es el reporte simple, pero no muy amigable a la vista. Para una versión más reportable, utilizamos la funcion tab_corr
.
::tab_corr(proc_elsoc_original,
sjPlottriangle = "lower")
Recompensa: esfuerzo | Recompensa: talento | Estatus Social Subjetivo | Educación | Sexo | Edad | Meritocracia promedio | |
Recompensa: esfuerzo | |||||||
Recompensa: talento | 0.698*** | ||||||
Estatus Social Subjetivo | -0.004 | 0.018 | |||||
Educación | -0.122*** | -0.106*** | 0.290*** | ||||
Sexo | -0.045* | -0.038* | -0.037* | -0.087*** | |||
Edad | 0.096*** | 0.074*** | -0.066*** | -0.377*** | 0.061** | ||
Meritocracia promedio | 0.920*** | 0.922*** | 0.008 | -0.123*** | -0.045* | 0.092*** | |
Computed correlation used pearson-method with listwise-deletion. |
La distinción entre listwise y pairwise es relevante al momento de estimar matricies de correlación, donde esta decisión debe estar claramente explicitada y fundamentada. En ejemplo de tabla anterior usamos listwise que es el argumento por defecto (y nos lo indica al final de la tabla).
Veamos como hacerlo con pairwise:
::tab_corr(proc_elsoc_original,
sjPlotna.deletion = "pairwise", # espeficicamos tratamiento NA
triangle = "lower")
Recompensa: esfuerzo | Recompensa: talento | Estatus Social Subjetivo | Educación | Sexo | Edad | Meritocracia promedio | |
Recompensa: esfuerzo | |||||||
Recompensa: talento | 0.696*** | ||||||
Estatus Social Subjetivo | -0.006 | 0.016 | |||||
Educación | -0.124*** | -0.109*** | 0.287*** | ||||
Sexo | -0.044* | -0.036 | -0.035 | -0.090*** | |||
Edad | 0.099*** | 0.075*** | -0.068*** | -0.379*** | 0.062*** | ||
Meritocracia promedio | 0.920*** | 0.922*** | 0.008 | -0.125*** | -0.043* | 0.092*** | |
Computed correlation used pearson-method with pairwise-deletion. |
Con esta mejor visualización, algunas observaciones sobre la matriz de correlaciones:
- En esta matriz las variables están representadas en las filas y en las columnas.
- Cada coeficiente expresa la correlación de una variable con otra. Por ejemplo, la correlación entre la variable de
mesfuerzo
ymtalento
es 0.69. - La información de cada coeficiente se repite sobre y bajo la diagonal, ya que es el mismo par de variables pero en el orden alterno. Por convención en general se omiten las correlaciones redundantes sobre la diagonal, por eso aparece en blanco.
- En la diagonal corresponde que todos los coeficientes sean 1, ya que la correlación de una variable consigo misma es perfectamente positiva.
Otra manera de presentar matrices de correlación es mediante gráficos. Veamos un ejemplo con la función corrplot.mixed
de la librería corrplot
sobre nuestra matriz M
ya creada.
corrplot.mixed(M)
Este gráfico/matriz representa el grado de asociación entre variables mediante el tamaño de los círculos e intensidad de colores, y el signo de la asociación se representa con una gradiente de colores que va del azul (positivo) al rojo (negativo).
Otra manera de graficar la matriz es con la función ggpairs
del paquete GGally
, que nos entrega no solo el valor del coeficiente y su significancia (***), si no que también un scatter del cruce entre variables.
ggpairs(proc_elsoc)
Finalmente, también se puede representar la correlación entre dos variables en un gráfico de nube de puntos o scatterplot.
::plot_scatter(proc_elsoc, edad, ess) sjPlot
Donde:
- cada punto representa un caso
- la forma de la nube indica si la asociación es positiva, negativa o neutra:
En el caso de nuestra nube de puntos entre edad y estatus social subjetivo, observamos que no hay asociación (lo que ya era indicado por su correlación de -0.07 observada en la matriz de correlaciones).
Tamaños de efecto
¿Y cómo puedo saber si el valor de la correlación es alto, medio o bajo? Si bien la correlación no nos indica causalidad, si nos permite conocer la dirección y fuerza de asociación entre dos variables. Un estándar para determinar qué tan fuerte es dicha asociación en las ciencias sociales es el propuesto por Cohen (1998).
r | Significado aproximado (Cohen 1988) |
---|---|
< ±0.1 | Muy pequeño |
±0.1–0.3 | Pequeño |
±0.3–0.5 | Moderado |
>±0.5 | Grande |
Con estos criterios podemos interpretar de mejor manera nuestros resultados de correlación. Como se observa, mientras más alto (sea en + o -) el coeficiente, más juntos estarán los datos (puntos), mostrando un patrón.
Interpretación
Recordemos nuestra matriz del comienzo:
Tenemos que la correlación entre la variable de estatus social subjetivo y años de educación es 0.3. ¿Cómo interpreto esto?
Una manera recomendable es la siguiente:
El coeficiente de correlación de Pearson entre estatus social subjetivo y años de educación es positivo y moderado (r = 0.3) según Cohen (1988).
Otros tipos de correlación: Spearman
Cuando queremos conocer la asociación entre variables que son ordinales y/o cuando nuestras variables no cumplen con los supuestos de distribución normal, podemos utilizar la correlación de Spearman.
- El coeficiente de correlación de Spearman es una medida estadística que evalúa la relación entre variables al considerar no solo la relación lineal entre ellas, sino también su relación de orden.
- Emplea rangos en lugar de valores numéricos para evaluar la relación.
- Sus valores están entre -1 y 1.
- Es alta cuando las observaciones tienen un ranking similar.
En R calcularlo es sencillo, pero debemos tener en cuenta que las variables que relacionemos tengan un orden de rango similar: por ejemplo, que el valor más bajo sea el rango más bajo y que el valor más alto sea el rango más alto.
Tomemos por ejemplo las variables mesfuerzo
y mtalento
.
::frq(proc_elsoc$mesfuerzo) sjmisc
x <numeric>
# total N=2887 valid N=2887 mean=2.57 sd=1.05
Value | N | Raw % | Valid % | Cum. %
---------------------------------------
1 | 355 | 12.30 | 12.30 | 12.30
2 | 1324 | 45.86 | 45.86 | 58.16
3 | 489 | 16.94 | 16.94 | 75.10
4 | 641 | 22.20 | 22.20 | 97.30
5 | 78 | 2.70 | 2.70 | 100.00
<NA> | 0 | 0.00 | <NA> | <NA>
::frq(proc_elsoc$mtalento) sjmisc
x <numeric>
# total N=2887 valid N=2887 mean=2.74 sd=1.06
Value | N | Raw % | Valid % | Cum. %
---------------------------------------
1 | 288 | 9.98 | 9.98 | 9.98
2 | 1155 | 40.01 | 40.01 | 49.98
3 | 557 | 19.29 | 19.29 | 69.28
4 | 805 | 27.88 | 27.88 | 97.16
5 | 82 | 2.84 | 2.84 | 100.00
<NA> | 0 | 0.00 | <NA> | <NA>
Ahora, calculemos el coeficiente de correlación de Spearman con cor.test
.
cor.test(proc_elsoc$mesfuerzo, proc_elsoc$mtalento, method = "spearman") #especificamos metodo spearman
Spearman's rank correlation rho
data: proc_elsoc$mesfuerzo and proc_elsoc$mtalento
S = 1200288294, p-value < 0.00000000000000022
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.700707
Ahora conocemos el valor del coeficiente mediante al argumento rho
, que es igual a 0.7, siendo positivo y grande según los criterios de Cohen (1988).
Coeficiente de determinación
El coeficiente de determinación \(R^2\) es una medida estadística que indica la proporción de la varianza total de una variable que es explicada por otra(s) variable(s). En pocas palabras,
- se utiliza para evaluar cuánta de la variabilidad de una variable se debe a otra variable.
- sus valores van desde 0 a 1, en donde 0 indica que ambas variables comparten el 0% de su varianza, y 1 que comparten el 100% de su varianza.
En el contexto de la correlación entre solo dos variables, el \(R^2\) es igual a elevar al cuadrado el coeficiente de correlación = (r)^2
. Esto nos permite conocer qué tanto la variabilidad de una variable X estaría asociado a la variabilidad de otra variable Y.
En nuestro ejemplo anterior entre estatus social subjetivo y años de educación, teníamos que su coeficiente de correlación era r = 0.3.
<- M[4,3] # seleccionamos el coef de nuestra matriz
coef_r
coef_r
[1] 0.2895925
Calculemos el \(R^2\) de esta asociación.
^2 coef_r
[1] 0.0838638
Con esto, podemos decir que el 9% de la variabilidad del estatus social subjetivo es compartido con la variabilidad en los años de educación.
Resumen
Hoy aprendímos a reportar el coeficiente de correlación y cómo interpretar sus tamaños de efecto, así como también a lidiar con casos perdidos y conocer otras medidadas de correlación. En detalle, aprendímos:
- Cómo reportar y presentar matrices de correlación.
- Interpretar el tamaño de efecto de una correlación.
- Qué es y cómo calcular la correlación de Spearman.
- Tratamiento de casos perdidos.
- Qué es el coeficiente de determinación \(R^2\).
Reporte de progreso
Completar el reporte de progreso correspondiente a esta práctica aquí. El plazo para contestarlo es hasta el día viernes de la semana en la que se publica la práctica correspondiente.