En este taller vamos a revisar un código fuente Rmd que sirve de base a un documento publicado en la web en html. Este documento es una de las guías prácticas del curso de estadística multivariada, publicada completa aquí.


1 Objetivo de la práctica

Esta segunda práctica tiene por objetivo repasar algunos conceptos básicos de los cursos anteriores de Estadística Descriptiva y Estadística Correlacional. Asume como base el desarrollo de la Práctica 1, a la cual se hará referencia permanente.

En la Práctica 1 se desarrolló un código de preparación de datos que generó una base de datos procesada para el análisis. En esta Práctica 2 comenzamos con el segundo momento de procesamiento de datos, que es el análisis propiamente tal. El análisis se divide en descripción de variables y contraste de hipótesis. En esta práctica nos enfocaremos en la primera fase, que llega hasta el punto 3 del código de análisis:

Al igual que el Código de Preparación, el Código de Análisis posee una estructura definida. En este caso son 4 partes, donde las primeras son similares al código de preparación:

  1. Identificación y descripción general: Título, autor(es), fecha, información breve sobre el contenido del documento
  2. Librerías principales (de R) a utilizar en el análisis
  3. Datos (que provienen de los preparados en la fase anterior)
  4. Descripción de variables
    • Tabla general de variables para la sección metodológica del reporte
    • Exploración descriptiva de relaciones entre variables
  5. Contraste de hipótesis / inferencia estadística según la técnica que corresponda

Al final de esta práctica la idea es que cada un_ pueda avanzar hasta el punto 3 del Código de Análisis. El punto 4 (contraste de hipótesis) se desarrollará más adelante en este curso con énfasis en la técnica de regresión.

2 Código de análisis

2.1 Librerías

La explicación de esta parte del código se encuentra en la sección correspondiente de la práctica 1.

pacman::p_load(dplyr, #Manipulacion de datos
              stargazer, #Tablas
              sjmisc, # Tablas
              summarytools, # Tablas
              kableExtra, #Tablas
              sjPlot, #Tablas y gráficos
              corrplot, # Correlaciones
              sessioninfo) # Información de la sesión de trabajo

2.2 Cargar base de datos

Vamos a cargar la base de datos ELSOC_ess_merit2016.Rproc_elsoc, que generamos durante la práctica 1. Se puede llamar desde el directorio en que la guardaron dando la ruta completa, o también para esta práctica la podemos llamar directamente desde nuestro sitio web:

load(url("https://multivariada.netlify.app/assignment/data/proc/ELSOC_ess_merit2016.RData")) #Cargar base de datos
  • Exploración inicial general de la base de datos
names(proc_elsoc) # Muestra los nombres de las variables de la base de datos
##  [1] "mesfuerzo"  "mtalento"   "ess"        "edcine"     "sexo"      
##  [6] "edad"       "pmerit"     "sum_merit"  "mean_merit" "pt_merit"
dim(proc_elsoc) # Dimensiones
## [1] 2927   10

En el caso de esta base, 2927 casos y 10 variables

Recordando el contenido de cada variable preparada en la práctica 1:

  • [merit] = Indice promedio de percepción de meritocracia.

  • [ess] = Estatus Social Subjetivo: Donde se ubicaria ud. en la sociedad chilena” (0 = el nivel mas bajo; 10 = el nivel mas alto)

  • [edcine] = Nivel educacional(1 = Primaria incompleta menos, 2 = Primaria y secundaria baja, 3 = Secundaria alta, 4 = Terciaria ciclo corto, 5 = Terciaria y Postgrado)

  • [sexo] = Sexo (O = Hombre; 1 = Mujer)

  • [edad] = ¿Cuáles su edad? (años cumplidos)

2.3 Descripción de variables

Los resultados referidos a descripción de variables se presentan en dos momentos del reporte de investigación:

  • en la sección de metodología, cuando se presentan las variables del estudio en una tabla descriptiva de variables.

  • en la sección de análisis, que en general comienza con una exploración de asociaciones entre variables, también conocido como análisis descriptivo.

2.3.1 Tabla descriptiva de variables para sección metodológica

A continuación se presentan dos opciones de generar esta tabla descriptiva de variables con distintas librerías de R.

a. Tabla descriptiva con stargazerstargazer

La función stargazer (de la librería del mismo nombre) permitirá mostrar los principales estadísticos descriptivos univariados de las variables: medidas de tendencia central (media), de dispersión (desviación estándar) y posición (mínimo, máximo, percentiles).

stargazer(proc_elsoc,type = "text")
## 
## ===================================================
## Statistic N Mean St. Dev. Min Pctl(25) Pctl(75) Max
## ===================================================

Algunas observaciones sobre esta tabla:

  • La opción type="text" permite que podamos ver los resultados directamente en la consola, de manera bastante rudimentaria. Con otras opciones que veremos más adelante se puede estilizar para su publicación.

  • Una distinción relevante a considerar cuando se describen variables es si estas son categóricas o continuas. La definición de si una variables es tratada como categórica o continua es algo que hace el/la autor/a del reporte, sin embargo hay variables nominales como sexo que claramente corresponden a categóricas, y por lo tanto no corresponde hacer un promedio entre ambas. Sin embargo, como esta variable está codificada 0 (hombre) y 1 (mujer), en este caso lo que indica el valor de la columna promedio (Mean=0.60) es la proporción de mujeres vs hombres. En otras palabras, hay un 60% de mujeres y 40% de hombres en la muestra.

b. Tablas descriptivas con descr, librería sjmiscsjmisc::descr

La opción básica de descr es la siguiente:

sjmisc::descr(proc_elsoc)
## 
## ## Basic descriptive statistics
## 
##         var    type                    label    n NA.prc  mean    sd   se   md
##   mesfuerzo numeric     Recompensa: esfuerzo 2909   0.61  2.57  1.05 0.02  2.0
##    mtalento numeric      Recompensa: talento 2907   0.68  2.74  1.06 0.02  3.0
##         ess numeric Estatus Social Subjetivo 2915   0.41  4.33  1.57 0.03  5.0
##      edcine numeric                Educación 2925   0.07  3.18  1.21 0.02  3.0
##        sexo numeric                     Sexo 2927   0.00  0.60  0.49 0.01  1.0
##        edad numeric                     Edad 2927   0.00 46.09 15.29 0.28 46.0
##      pmerit numeric    Meritocracia promedio 2898   0.99  2.65  0.97 0.02  2.5
##   sum_merit numeric                sum_merit 2927   0.00  5.28  1.96 0.04  5.0
##  mean_merit numeric               mean_merit 2918   0.31  2.66  0.97 0.02  2.5
##    pt_merit numeric                 pt_merit 2918   0.31  5.29  1.94 0.04  5.0
##  trimmed      range  iqr  skew
##     2.56    4 (1-5)  1.0  0.42
##     2.76    4 (1-5)  2.0  0.18
##     4.36  10 (0-10)  2.0 -0.01
##     3.23    4 (1-5)  1.0 -0.15
##     0.63    1 (0-1)  1.0 -0.42
##    45.90 70 (18-88) 25.0  0.07
##     2.66    4 (1-5)  1.5  0.26
##     5.29  10 (0-10)  3.0  0.22
##     2.66    4 (1-5)  1.5  0.26
##     5.30   9 (1-10)  3.0  0.26

En este caso utilizamos la forma librería::función (sjmisc::descr), ya que la función descr también existe en otras librerías y así nos aseguramos que la función utilizada es de esa librería específica.

Seleccionamos algunas columnas específicas con información más relevante con la opción show. Además, agregamos la función kable para obtener una tabla que luego sea fácilmente publicable en distintos formatos (a profundizar en una práctica posterior):

sjmisc::descr(proc_elsoc,
      show = c("label","range", "mean", "sd", "NA.prc", "n"))%>%
      kable(.,"markdown")
var label n NA.prc mean sd range
5 mesfuerzo Recompensa: esfuerzo 2909 0.6149641 2.5727054 1.0466874 4 (1-5)
6 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)
9 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)
7 pmerit Meritocracia promedio 2898 0.9907755 2.6538992 0.9694792 4 (1-5)
10 sum_merit sum_merit 2927 0.0000000 5.2770755 1.9612002 10 (0-10)
4 mean_merit mean_merit 2918 0.3074821 2.6576422 0.9713031 4 (1-5)
8 pt_merit pt_merit 2918 0.3074821 5.2933516 1.9421608 9 (1-10)

c. Tabla descriptiva con summarytools::dfSummarysummarytools::dfSummary

Esta tercera opción nos ofrece una tabla aún más detallada, con gráficos para cada variable, las frecuencias para cada valor, y las etiquetas de las variables, por lo que es muy recomendable.

Se específica de la siguiente manera:

dfSummary(proc_elsoc, plain.ascii = FALSE)
## ### Data Frame Summary  
## #### proc_elsoc  
## **Dimensions:** 2927 x 10  
## **Duplicates:** 396  
## 
## -----------------------------------------------------------------------------------------------------------------------------------------------
## No   Variable      Label                      Stats / Values             Freqs (% of Valid)   Graph                        Valid      Missing  
## ---- ------------- -------------------------- -------------------------- -------------------- ---------------------------- ---------- ---------
## 1    mesfuerzo\    Recompensa: esfuerzo       Mean (sd) : 2.6 (1)\       1 :  357 (12.3%)\    II \                         2909\      18\      
##      [numeric]                                min < med < max:\          2 : 1331 (45.8%)\    IIIIIIIII \                  (99.4%)    (0.6%)   
##                                               1 < 2 < 5\                 3 :  497 (17.1%)\    III \                                            
##                                               IQR (CV) : 1 (0.4)         4 :  646 (22.2%)\    IIII \                                           
##                                                                          5 :   78 ( 2.7%)                                                      
## 
## 2    mtalento\     Recompensa: talento        Mean (sd) : 2.7 (1.1)\     1 :  288 ( 9.9%)\    I \                          2907\      20\      
##      [numeric]                                min < med < max:\          2 : 1163 (40.0%)\    IIIIIIII \                   (99.3%)    (0.7%)   
##                                               1 < 3 < 5\                 3 :  559 (19.2%)\    III \                                            
##                                               IQR (CV) : 2 (0.4)         4 :  814 (28.0%)\    IIIII \                                          
##                                                                          5 :   83 ( 2.9%)                                                      
## 
## 3    ess\          Estatus Social Subjetivo   Mean (sd) : 4.3 (1.6)\     11 distinct values   \                            2915\      12\      
##      [numeric]                                min < med < max:\                               \ \ \ \ \ \ \ \ :\           (99.6%)    (0.4%)   
##                                               0 < 5 < 10\                                     \ \ \ \ \ \ . :\                                 
##                                               IQR (CV) : 2 (0.4)                              \ \ \ \ . : :\                                   
##                                                                                               \ \ \ \ : : : .\                                 
##                                                                                               . : : : : : .                                    
## 
## 4    edcine\       Educación                  Mean (sd) : 3.2 (1.2)\     1 :  359 (12.3%)\    II \                         2925\      2\       
##      [numeric]                                min < med < max:\          2 :  297 (10.2%)\    II \                         (99.9%)    (0.1%)   
##                                               1 < 3 < 5\                 3 : 1251 (42.8%)\    IIIIIIII \                                       
##                                               IQR (CV) : 1 (0.4)         4 :  483 (16.5%)\    III \                                            
##                                                                          5 :  535 (18.3%)     III                                              
## 
## 5    sexo\         Sexo                       Min  : 0\                  0 : 1163 (39.7%)\    IIIIIII \                    2927\      0\       
##      [numeric]                                Mean : 0.6\                1 : 1764 (60.3%)     IIIIIIIIIIII                 (100.0%)   (0.0%)   
##                                               Max  : 1                                                                                         
## 
## 6    edad\         Edad                       Mean (sd) : 46.1 (15.3)\   63 distinct values   \                            2927\      0\       
##      [numeric]                                min < med < max:\                               \ \ . . . : :\               (100.0%)   (0.0%)   
##                                               18 < 46 < 88\                                   . : : : : : .\                                   
##                                               IQR (CV) : 25 (0.3)                             : : : : : : : :\                                 
##                                                                                               : : : : : : : :\                                 
##                                                                                               : : : : : : : : .                                
## 
## 7    pmerit\       Meritocracia promedio      Mean (sd) : 2.7 (1)\       9 distinct values    I \                          2898\      29\      
##      [numeric]                                min < med < max:\                               \                            (99.0%)    (1.0%)   
##                                               1 < 2.5 < 5\                                    IIIIIII \                                        
##                                               IQR (CV) : 1.5 (0.4)                            I \                                              
##                                                                                               III \                                            
##                                                                                               I \                                              
##                                                                                               III \                                            
##                                                                                               \                                                
## 
## 8    sum_merit\                               Mean (sd) : 5.3 (2)\       11 distinct values   \                            2927\      0\       
##      [numeric]                                min < med < max:\                               \ \ \ \ \ \ :\               (100.0%)   (0.0%)   
##                                               0 < 5 < 10\                                     \ \ \ \ \ \ :\                                   
##                                               IQR (CV) : 3 (0.4)                              \ \ \ \ \ \ : \ \ . \ \ .\                       
##                                                                                               \ \ \ \ \ \ : \ \ : \ \ :\                       
##                                                                                               \ \ : . : : : : :                                
## 
## 9    mean_merit\                              Mean (sd) : 2.7 (1)\       9 distinct values    I \                          2918\      9\       
##      [numeric]                                min < med < max:\                               \                            (99.7%)    (0.3%)   
##                                               1 < 2.5 < 5\                                    IIIIIII \                                        
##                                               IQR (CV) : 1.5 (0.4)                            I \                                              
##                                                                                               III \                                            
##                                                                                               I \                                              
##                                                                                               III \                                            
##                                                                                               \                                                
## 
## 10   pt_merit\                                Mean (sd) : 5.3 (1.9)\     1 :    1 ( 0.0%)\    \                            2918\      9\       
##      [numeric]                                min < med < max:\          2 :  249 ( 8.5%)\    I \                          (99.7%)    (0.3%)   
##                                               1 < 5 < 10\                3 :   81 ( 2.8%)\    \                                                
##                                               IQR (CV) : 3 (0.4)         4 : 1051 (36.0%)\    IIIIIII \                                        
##                                                                          5 :  223 ( 7.6%)\    I \                                              
##                                                                          6 :  536 (18.4%)\    III \                                            
##                                                                          7 :  169 ( 5.8%)\    I \                                              
##                                                                          8 :  528 (18.1%)\    III \                                            
##                                                                          9 :   38 ( 1.3%)\    \                                                
##                                                                          10 :   42 ( 1.4%)                                                     
## -----------------------------------------------------------------------------------------------------------------------------------------------

Es muy ancha para visualizar bien en la consola de R, pero en su versión más definitiva de publicación se verá así:

view(dfSummary(proc_elsoc, headings=FALSE))
No Variable Label Stats / Values Freqs (% of Valid) Graph Valid Missing
1 mesfuerzo [numeric] Recompensa: esfuerzo Mean (sd) : 2.6 (1) min < med < max: 1 < 2 < 5 IQR (CV) : 1 (0.4)
1:357(12.3%)
2:1331(45.8%)
3:497(17.1%)
4:646(22.2%)
5:78(2.7%)
2909 (99.4%) 18 (0.6%)
2 mtalento [numeric] Recompensa: talento Mean (sd) : 2.7 (1.1) min < med < max: 1 < 3 < 5 IQR (CV) : 2 (0.4)
1:288(9.9%)
2:1163(40.0%)
3:559(19.2%)
4:814(28.0%)
5:83(2.9%)
2907 (99.3%) 20 (0.7%)
3 ess [numeric] Estatus Social Subjetivo Mean (sd) : 4.3 (1.6) min < med < max: 0 < 5 < 10 IQR (CV) : 2 (0.4) 11 distinct values 2915 (99.6%) 12 (0.4%)
4 edcine [numeric] Educación Mean (sd) : 3.2 (1.2) min < med < max: 1 < 3 < 5 IQR (CV) : 1 (0.4)
1:359(12.3%)
2:297(10.2%)
3:1251(42.8%)
4:483(16.5%)
5:535(18.3%)
2925 (99.9%) 2 (0.1%)
5 sexo [numeric] Sexo Min : 0 Mean : 0.6 Max : 1
0:1163(39.7%)
1:1764(60.3%)
2927 (100.0%) 0 (0.0%)
6 edad [numeric] Edad Mean (sd) : 46.1 (15.3) min < med < max: 18 < 46 < 88 IQR (CV) : 25 (0.3) 63 distinct values 2927 (100.0%) 0 (0.0%)
7 pmerit [numeric] Meritocracia promedio Mean (sd) : 2.7 (1) min < med < max: 1 < 2.5 < 5 IQR (CV) : 1.5 (0.4) 9 distinct values 2898 (99.0%) 29 (1.0%)
8 sum_merit [numeric] Mean (sd) : 5.3 (2) min < med < max: 0 < 5 < 10 IQR (CV) : 3 (0.4) 11 distinct values 2927 (100.0%) 0 (0.0%)
9 mean_merit [numeric] Mean (sd) : 2.7 (1) min < med < max: 1 < 2.5 < 5 IQR (CV) : 1.5 (0.4) 9 distinct values 2918 (99.7%) 9 (0.3%)
10 pt_merit [numeric] Mean (sd) : 5.3 (1.9) min < med < max: 1 < 5 < 10 IQR (CV) : 3 (0.4)
1:1(0.0%)
2:249(8.5%)
3:81(2.8%)
4:1051(36.0%)
5:223(7.6%)
6:536(18.4%)
7:169(5.8%)
8:528(18.1%)
9:38(1.3%)
10:42(1.4%)
2918 (99.7%) 9 (0.3%)

Generated by summarytools 0.9.9 (R version 4.0.3)
2021-09-21

Nota sobre casos perdidos (NAs)na.omit(data)

Hasta ahora hemos mantenido los casos perdidos en la base de datos, ya que son importantes de reportar en la tabla general de variables. Sin embargo, de aquí en adelante se recomienda trabajar solo con casos completos, es decir, sacar los casos perdidos. El quitar los casos perdidos de una base de datos es muy simple con la función na.omit, pero para tomar precauciones y asegurarse que funciona se recomienda el siguiente procedimiento:

  • 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), la dejaremos con el nombre proc_elsoc_original.
  • contamos el número de casos con el comando dim
  • contamos el número de casos perdidos con sum(is.na(proc_elsoc))
  • borramos los casos perdidos con proc_elsoc <-na.omit(proc_elsoc)
  • contamos nuevamente con dim para asegurarnos que se borraron
  • y por temas de funcionamiento de R, al realizar la operación de sacar casos perdidos, se borra toda la información de las etiquetas (labels), así que las recuperamos de la base original con el comando copy_labels, de la librería sjlabelled.
proc_elsoc_original <-proc_elsoc
dim(proc_elsoc)
## [1] 2927   10
sum(is.na(proc_elsoc))
## [1] 99
proc_elsoc <-na.omit(proc_elsoc)
dim(proc_elsoc)
## [1] 2887   10
proc_elsoc <-sjlabelled::copy_labels(proc_elsoc,proc_elsoc_original)

2.3.2 Exploración de asociación entre variables

Dado que las hipótesis de investigación corresponden a asociación entre variables, antes de realizar el contraste de hipótesis se suele presentar un análisis descriptivio que explora las asociaciones entre variables.

La forma de explorar las asociaciones entre variables dependen de la naturaleza de las variables que se asocian:

  • Variables categóricas: tabla de contingencia
  • Variable categórica y continua: tabla de promedios por cada categoría
  • Variables continuas: correlaciones.

En esta sección también es muy relevante la visualización de datos mediante gráficos, por lo que incluiremos algunos.

El uso tanto de tablas como de gráficos en el reporte queda a discreción del/a autor/a. La pregunta que orienta esta decisión es: ¿Me permite enriquecer la discusión de los resultados en relación a las hipótesis planteadas?

2.3.2.1 Tablas de contingencia para variables categóricas

Para tablas de contingencia categóricas utilizaremos la función sjt.xtab, de la librería sjPlot. Veamos primero una especificación simple:

sjt.xtab(proc_elsoc$edcine, proc_elsoc$sexo)
Educación Sexo Total
Hombre Mujer
Primaria incompleta
menos
102 247 349
Primaria y
secundaria baja
105 186 291
Secundaria alta 511 727 1238
Terciaria ciclo
corto
186 292 478
Terciaria y
Postgrado
245 286 531
Total 1149 1738 2887
χ2=28.154 · df=4 · Cramer’s V=0.099 · p=0.000

Al ejecutar el comando, el resultado aparece automáticamente en el visor de RStudio. A esta tabla podemos también agregar porcentajes de filas y/o columnas, según sea lo más relevante analizar. En general se recomienda agregar solo un porcentaje, de otra manera la tabla se satura de información. Además, vamos a quitar el pie de la tabla (conviene dejarlo solo si hay hipótesis asociadas al cruce simple entre las dos variables).

sjt.xtab(proc_elsoc$edcine, proc_elsoc$sexo,
        show.col.prc=TRUE,
        show.summary=FALSE
)
Educación Sexo Total
Hombre Mujer
Primaria incompleta
menos
102
8.9 %
247
14.2 %
349
12.1 %
Primaria y
secundaria baja
105
9.1 %
186
10.7 %
291
10.1 %
Secundaria alta 511
44.5 %
727
41.8 %
1238
42.9 %
Terciaria ciclo
corto
186
16.2 %
292
16.8 %
478
16.6 %
Terciaria y
Postgrado
245
21.3 %
286
16.5 %
531
18.4 %
Total 1149
100 %
1738
100 %
2887
100 %

2.3.2.2 Tablas de promedio de variable continua por una categóricas

En ejemplo vamos a explorar datos de nuestra variable de percepción de meritocracia pmerit por los niveles educacionales edcine.

Una forma rápida de explorar esto es mediante la función tapply, que nos entrega de manera simple el promedio de una variable por otra:

tapply(proc_elsoc$pmerit, proc_elsoc$edcine, mean)
##        1        2        3        4        5 
## 2.968481 2.697595 2.662763 2.479079 2.559322

Aquí vemos en promedio de pmerit para cada uno de los 5 niveles de la variable educación edcine. Si se estima conveniente este tipo de cruces se puede representar también en una tabla con más opciones de información y también de publicación. Para esto utilizaremos una función algo más compleja de la librería dplyr.dplyr Esta librería permite aplicar una serie de funciones concatenadas y enlazadas mediante el operador %>%. El sentido de cada función aparece comentado abajo:

proc_elsoc %>% # se especifica la base de datos
  select(pmerit,edcine) %>% # se seleccionan las variables
  dplyr::group_by(Educación=sjlabelled::as_label(edcine)) %>% # se agrupan por la variable categórica y se usan sus etiquetas con as_label
  dplyr::summarise(Obs.=n(),Promedio=mean(pmerit),SD=sd(pmerit)) %>% # se agregan las operaciones a presentar en la tabla
  kable(, format = "markdown") # se genera la tabla
Educación Obs. Promedio SD
Primaria incompleta menos 349 2.968481 0.9828315
Primaria y secundaria baja 291 2.697595 1.0041093
Secundaria alta 1238 2.662762 0.9685655
Terciaria ciclo corto 478 2.479080 0.9431323
Terciaria y Postgrado 531 2.559322 0.9223446

Esta asocación también se puede representar de manera más simple con un gráfico, en este caso de cajas o boxplot mediante la función plot_grpfrq de sjPlot:sjPlot::plot_grpfrq

plot_grpfrq(proc_elsoc$pmerit,proc_elsoc$edcine,
            type = "box")

2.3.2.3 Correlaciones (variables continuas)

Algunas notas sobre correlación:

  • El coeficiente de correlación mide la fuerza de la relación lineal entre dos variable continuas. Esta puede ser:

    • positiva: a medida que aumenta una, aumenta la otra (ej: estatura y edad)
    • negativa: a medida que una aumenta, disminuye la otra (ej: tiempo dedicado al estudio y probabilidad de reprobar)
    • neutra: no hay asociación entre variables.
  • El rango de variación del coeficiente de correlación va desde -1 (correlación negativa perfecta) y 1 (correlación positiva perfecta).

  • Existen diferentes formas de cálculo del coeficiente de correlación (Spearman, Kendall, Pearson).

  • En el coeficiente de correlación se analiza tanto su tamaño como su significación estadística.

En lo que sigue nos concentraremos en el coeficiente de correlación más utilizado que es el de Pearson, que se aplica cuando las variables son de naturaleza continua.

Tablas/matrices de correlación

Las correlaciones entre variables se presentan en general en modo de matrices, es decir, 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 lacor base de datos, y la guardamos en un objeto que le damos el nombre M para futuras operaciones:

M <- cor(proc_elsoc)
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
## sum_merit   0.920404032  0.92224547  0.007740598 -0.12341680 -0.04469515
## mean_merit  0.920404032  0.92224547  0.007740598 -0.12341680 -0.04469515
## pt_merit    0.920404032  0.92224547  0.007740598 -0.12341680 -0.04469515
##                   edad       pmerit    sum_merit   mean_merit     pt_merit
## mesfuerzo   0.09649555  0.920404032  0.920404032  0.920404032  0.920404032
## mtalento    0.07383771  0.922245465  0.922245465  0.922245465  0.922245465
## ess        -0.06603187  0.007740598  0.007740598  0.007740598  0.007740598
## edcine     -0.37660283 -0.123416804 -0.123416804 -0.123416804 -0.123416804
## sexo        0.06121699 -0.044695146 -0.044695146 -0.044695146 -0.044695146
## edad        1.00000000  0.092369792  0.092369792  0.092369792  0.092369792
## pmerit      0.09236979  1.000000000  1.000000000  1.000000000  1.000000000
## sum_merit   0.09236979  1.000000000  1.000000000  1.000000000  1.000000000
## mean_merit  0.09236979  1.000000000  1.000000000  1.000000000  1.000000000
## pt_merit    0.09236979  1.000000000  1.000000000  1.000000000  1.000000000

Este es el reporte simple, pero no muy amigable a la vista. Para una versión más amable utilizamos la función sjt.corrsjPlot::sjt.corr:NOTA: sjPlot actualizó su librería a fines de Mayo (versión 2.8.4); para quienes hayan actualizado a esta versión, la función para tabla de correlaciones ahora es tab_corr

sjPlot::tab_corr(proc_elsoc)
  Recompensa: esfuerzo Recompensa: talento Estatus Social Subjetivo Educación Sexo Edad Meritocracia promedio sum_merit mean_merit pt_merit
Recompensa: esfuerzo   0.698*** -0.004 -0.122*** -0.045* 0.096*** 0.920*** 0.920*** 0.920*** 0.920***
Recompensa: talento 0.698***   0.018 -0.106*** -0.038* 0.074*** 0.922*** 0.922*** 0.922*** 0.922***
Estatus Social Subjetivo -0.004 0.018   0.290*** -0.037* -0.066*** 0.008 0.008 0.008 0.008
Educación -0.122*** -0.106*** 0.290***   -0.087*** -0.377*** -0.123*** -0.123*** -0.123*** -0.123***
Sexo -0.045* -0.038* -0.037* -0.087***   0.061** -0.045* -0.045* -0.045* -0.045*
Edad 0.096*** 0.074*** -0.066*** -0.377*** 0.061**   0.092*** 0.092*** 0.092*** 0.092***
Meritocracia promedio 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092***   1.000*** 1.000*** 1.000***
sum_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000***   1.000*** 1.000***
mean_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000*** 1.000***   1.000***
pt_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000*** 1.000*** 1.000***  
Computed correlation used pearson-method with listwise-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 recompensa por esfuerzo y recompensa por inteligencia es 0.698.
  • 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.
  • En la diagonal corresponde que todos los coeficientes sean 1, ya que la correlación de una variable consigo misma es perfectamente positiva. En esta tabla se omiten y aparece la diagonal vacía, ya que es información redundante. Por lo mismo, también se recomienda eliminar el triangulo superior de la tabla (redundante) de la siguiente manera:
sjPlot::tab_corr(proc_elsoc,
         triangle = "lower")
  Recompensa: esfuerzo Recompensa: talento Estatus Social Subjetivo Educación Sexo Edad Meritocracia promedio sum_merit mean_merit pt_merit
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***        
sum_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000***      
mean_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000*** 1.000***    
pt_merit 0.920*** 0.922*** 0.008 -0.123*** -0.045* 0.092*** 1.000*** 1.000*** 1.000***  
Computed correlation used pearson-method with listwise-deletion.

Una segunda forma de presentar matrices de correlaciones es de manera gráfica con la librería corrplot, cuya función corrplot.mixed corrplot::corrplot.mixedse aplica al objeto que generamos con la función cor (M):

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). Bajo la diagonal aparecen los indices de correlación entre pares de variables.

Finalmente, también se puede representar la correlación entre dos variables en un gráfico de nube de puntos o scatterplot:sjPlot::plot_scatter

names(proc_elsoc)
##  [1] "mesfuerzo"  "mtalento"   "ess"        "edcine"     "sexo"      
##  [6] "edad"       "pmerit"     "sum_merit"  "mean_merit" "pt_merit"
plot_scatter(proc_elsoc, edad, ess)

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

2.4 Nota final: Información de la sesión de R

R y sus librerías tienen distintas versiones. Esto puede representar algunos problemas de compatibilidad entre usuarios, por ejemplo, dos personas que trabajan en el mismo proyecto pero con distintas versiones (librerías y/o de R), pueden tener ocasionalmente complicaciones. Por eso, una buena práctica es registrar al final del código la información de la sesión. Y como siempre en R, varias maneras de hacer esto. Vamos con la más genérica que es muy simple: sessionInfo() sessionInfo()

sessionInfo()
## R version 4.0.3 (2020-10-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.3 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=es_CL.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=es_CL.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=es_CL.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=es_CL.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] sessioninfo_1.1.1     corrplot_0.84         sjPlot_2.8.9         
## [4] kableExtra_1.3.4.9000 summarytools_0.9.9    sjmisc_2.8.6         
## [7] stargazer_5.2.2       dplyr_1.0.6          
## 
## loaded via a namespace (and not attached):
##   [1] nlme_3.1-152       matrixStats_0.58.0 lubridate_1.7.10  
##   [4] RColorBrewer_1.1-2 insight_0.14.2     webshot_0.5.2     
##   [7] httr_1.4.2         tools_4.0.3        backports_1.2.1   
##  [10] bslib_0.2.4        utf8_1.2.1         R6_2.5.0          
##  [13] sjlabelled_1.1.7   DBI_1.1.1          colorspace_2.0-2  
##  [16] withr_2.4.2        tidyselect_1.1.1   emmeans_1.5.5-1   
##  [19] compiler_4.0.3     performance_0.7.0  cli_2.5.0         
##  [22] rvest_1.0.0        pacman_0.5.1       SparseM_1.81      
##  [25] xml2_1.3.2         sandwich_3.0-0     labeling_0.4.2    
##  [28] bayestestR_0.10.0  sass_0.4.0.9000    scales_1.1.1      
##  [31] checkmate_2.0.0    mvtnorm_1.1-1      systemfonts_1.0.2 
##  [34] stringr_1.4.0      digest_0.6.27      minqa_1.2.4       
##  [37] rmarkdown_2.9      svglite_2.0.0      base64enc_0.1-3   
##  [40] pkgconfig_2.0.3    htmltools_0.5.1.1  lme4_1.1-26       
##  [43] highr_0.9          rlang_0.4.11       rstudioapi_0.13   
##  [46] pryr_0.1.4         farver_2.1.0       jquerylib_0.1.3   
##  [49] generics_0.1.0     zoo_1.8-9          jsonlite_1.7.2    
##  [52] magrittr_2.0.1     rapportools_1.0    parameters_0.14.0 
##  [55] Matrix_1.3-2       Rcpp_1.0.7         munsell_0.5.0     
##  [58] fansi_0.5.0        lifecycle_1.0.0    stringi_1.7.3     
##  [61] multcomp_1.4-16    yaml_2.2.1         snakecase_0.11.0  
##  [64] MASS_7.3-53.1      plyr_1.8.6         grid_4.0.3        
##  [67] forcats_0.5.1      crayon_1.4.1       lattice_0.20-41   
##  [70] haven_2.3.1        ggeffects_1.0.2    splines_4.0.3     
##  [73] pander_0.6.3       hms_1.1.0          sjstats_0.18.1    
##  [76] magick_2.3         knitr_1.33         pillar_1.6.1      
##  [79] tcltk_4.0.3        boot_1.3-27        estimability_1.3  
##  [82] effectsize_0.4.4-1 codetools_0.2-18   glue_1.4.2        
##  [85] evaluate_0.14      modelr_0.1.8       vctrs_0.3.8       
##  [88] nloptr_1.2.2.2     MatrixModels_0.5-0 gtable_0.3.0      
##  [91] purrr_0.3.4        tidyr_1.1.3        assertthat_0.2.1  
##  [94] datawizard_0.1.0   ggplot2_3.3.3      xfun_0.24         
##  [97] xtable_1.8-4       broom_0.7.6        coda_0.19-4       
## [100] survival_3.2-10    viridisLite_0.4.0  conquer_1.0.2     
## [103] tibble_3.1.2       statmod_1.4.35     TH.data_1.0-10    
## [106] ellipsis_0.3.2

Acá vemos un listado de información muy completo, desde versión de R, sistema operativo, opciones de idioma local (LOCALE), y muchas librerías. Si optamos por esta versión de la información de la sesión, lo importante es fijarse en (a) version de R, y (b) de las librerías cargadas al principio, que aquí aparecen bajo “other attached packages”.

La segunda opción permite obtener información más precisa, con sessioninfo sessioninfo()(la única diferencia con la anterior en el nombre es que info es con minúscula sessioninfo). Con un poco más de especificaciones de sintaxis se pueden obtener directamente los puntos (a) y (b) mencionados anteriormente:

session_info("sessioninfo")$platform
##  setting  value                       
##  version  R version 4.0.3 (2020-10-10)
##  os       Ubuntu 20.04.3 LTS          
##  system   x86_64, linux-gnu           
##  ui       X11                         
##  language en_US                       
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Santiago            
##  date     2021-09-21
package_info(pkgs = (.packages()), dependencies = FALSE)
##  package      * version    date       lib source                               
##  corrplot     * 0.84       2017-10-16 [1] CRAN (R 4.0.0)                       
##  dplyr        * 1.0.6      2021-05-05 [1] CRAN (R 4.0.3)                       
##  kableExtra   * 1.3.4.9000 2021-06-29 [1] Github (haozhu233/kableExtra@a6af5c0)
##  sessioninfo  * 1.1.1      2018-11-05 [1] CRAN (R 4.0.0)                       
##  sjmisc       * 2.8.6      2021-01-07 [1] CRAN (R 4.0.2)                       
##  sjPlot       * 2.8.9      2021-07-10 [1] CRAN (R 4.0.3)                       
##  stargazer    * 5.2.2      2018-05-30 [1] CRAN (R 4.0.0)                       
##  summarytools * 0.9.9      2021-03-19 [1] CRAN (R 4.0.2)                       
## 
## [1] /home/juank/Dropbox/Rlibrary
## [2] /usr/local/lib/R/site-library
## [3] /usr/lib/R/site-library
## [4] /usr/lib/R/library

3 Sobre referencias bibliográficas:

Ver el siguiente ejemplo, y luego observar el resultado al renderizar en html (para que funcione, deben tener el archivo de ejemplo referencias.bib en el mismo directorio del .Rmd):

Como dicen @kocer_does_2012, la educación afecta las opiniones sobre la desigualdad económica.

4 Referencias