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í.
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:
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.
La explicación de esta parte del código se encuentra en la sección correspondiente de la práctica 1.
::p_load(dplyr, #Manipulacion de datos
pacman#Tablas
stargazer, # Tablas
sjmisc, # Tablas
summarytools, #Tablas
kableExtra, #Tablas y gráficos
sjPlot, # Correlaciones
corrplot, # Información de la sesión de trabajo sessioninfo)
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
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)
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.
A continuación se presentan dos opciones de generar esta tabla descriptiva de variables con distintas librerías de R.
a. Tabla descriptiva con stargazer
stargazer
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:
::descr(proc_elsoc) sjmisc
##
## ## 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):
::descr(proc_elsoc,
sjmiscshow = 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::dfSummary
summarytools::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) |
|
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) |
|
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) |
|
2925 (99.9%) | 2 (0.1%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | sexo [numeric] | Sexo | Min : 0 Mean : 0.6 Max : 1 |
|
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) |
|
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:
dim
sum(is.na(proc_elsoc))
proc_elsoc <-na.omit(proc_elsoc)
dim
para asegurarnos que se borraroncopy_labels
, de la librería sjlabelled
.<-proc_elsoc
proc_elsoc_original dim(proc_elsoc)
## [1] 2927 10
sum(is.na(proc_elsoc))
## [1] 99
<-na.omit(proc_elsoc)
proc_elsoc dim(proc_elsoc)
## [1] 2887 10
<-sjlabelled::copy_labels(proc_elsoc,proc_elsoc_original) proc_elsoc
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:
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?
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 % |
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:
%>% # se especifica la base de datos
proc_elsoc select(pmerit,edcine) %>% # se seleccionan las variables
::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
dplyrkable(, 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")
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:
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:
<- cor(proc_elsoc)
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
## 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
::tab_corr(proc_elsoc) sjPlot
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:
::tab_corr(proc_elsoc,
sjPlottriangle = "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:
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).
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
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.