Práctico 5. Visualización de variables en Quarto

R data analisis

Fecha de publicación

9 de abril de 2024

Presentación

Objetivo de la práctica

Esta práctica asume como base el desarrollo de la Práctica anterior, a la cual se hará referencia permanente. Sin embargo, en esta oportunidad la base de datos contiene los datos de los 18 países participantes en la encuesta, no solo Chile. El código específico que crea esta base está disponible acá

Quarto documents

Como recordarán del primer práctico, un documento de Quarto comienza con el yaml, que sigue una estructura similar a esta:

title: “Mi Documento”
format:
html:
toc: true
number-sections: true

Luego, podemos escribir en el documento, separando por títulos (#) cada sección. La jerarquía de los títulos se establece según la cantidad de ‘#’.

A continuación, en esta guía combinaremos el paso-a-paso de crear un documento dinámico con quarto, a la vez que vamos viendo distintas funciones de este proceso.

Por ejemplo, como hacer una nota al pie1. Para hacerlo, solo debemos escribir [ ^2] pero sin el espacio entre los corchetes. Luego, en otra línea escribimos [^2]: Esta es la nota al pie

Código de análisis de ejemplo

Para poder escribir código de análisis en un documento Quarto debemos generar trozo de código llamado ‘Chunk’, que se puede crear con ctrl+alt+i o directamente en el menú de arriba en ‘Code -> Insert Chunk’.

Cargar paquetes

Código
pacman::p_load(sjlabelled,
               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
              ggplot2) # Para la mayoría de los gráficos

Cargar bases de datos

Cargamos ambas bases de datos desde internet

Código
load(url("https://github.com/Kevin-carrasco/R-data-analisis/raw/main/files/data/latinobarometro_total.RData")) #Cargar base de datos
load(url("https://github.com/Kevin-carrasco/R-data-analisis/raw/main/files/data/data_wvs.RData")) #Cargar base de datos

Para trabajar con ambas bases, agruparemos las variables de interés por país, por lo que ya no trabajaremos directamente con individuos.

Código
context_data <- wvs %>% group_by(B_COUNTRY) %>% # Agrupar por país
  summarise(gdp = mean(GDPpercap1, na.rm = TRUE), # Promedio de GDP per capita
         life_exp = mean(lifeexpect, na.rm = TRUE), # Promedio esperanza de vida
         gini = mean(giniWB, na.rm = TRUE)) %>%  # Promedio gini
  rename(idenpa=B_COUNTRY) # Para poder vincular ambas bases, es necesario que la variable de identificación se llamen igual
context_data$idenpa <- as.numeric(context_data$idenpa) # Como era categórica, la dejamos numérica

proc_data <- proc_data %>% group_by(idenpa) %>%  # agrupamos por país
  summarise(promedio = mean(conf_inst, na.rm = TRUE)) # promedio de confianza en instituciones por país

Unir bases de datos

Para vincular nuestras bases de datos existen múltiples opciones, la primera es ‘merge’ de R base y las siguientes tres vienen desde dplyr: ‘right_join’, ‘full_join’ y ‘left_join’. Cada una tiene sus propias potencialidades y limitaciones y dependerá de cada caso cuál usemos

Probemos merge

Código
data <- merge(proc_data, context_data, by="idenpa")
Código
data <- data %>%
  mutate(idenpa = as.character(idenpa)) %>%
  mutate(idenpa = case_when(
    idenpa == "32" ~ "Argentina",
    idenpa == "68" ~ "Bolivia",
    idenpa == "76" ~ "Brasil",
    idenpa == "152" ~ "Chile",
    idenpa == "170" ~ "Colombia",
    idenpa == "188" ~ "Costa Rica",
    idenpa == "214" ~ "Cuba",
    idenpa == "218" ~ "República Dominicana",
    idenpa == "222" ~ "Ecuador",
    idenpa == "320" ~ "El Salvador",
    idenpa == "340" ~ "Guatemala",
    idenpa == "484" ~ "Honduras",
    idenpa == "558" ~ "México",
    idenpa == "591" ~ "Nicaragua",
    idenpa == "600" ~ "Panamá",
    idenpa == "604" ~ "Paraguay",
    idenpa == "858" ~ "Uruguay",
    idenpa == "862" ~ "Venezuela"))

data$gdp <- as.numeric(data$gdp)
data$gdp[data$gdp==0] <- NA
data <- na.omit(data)

Visualizaciones

Podemos establecer referencias cruzadas para las tablas y gráficos dentro del texto, para poder automatizarlo, como ejemplo así, pero dentro del chunk:

#| label: tbl-sjmisc

#| tbl-cap: “Descriptivos con sjmisc”

Descriptivos

El Chunk se debería ver así:

#| label: tbl-sjmisc #| tbl-cap: “Descriptivos con sjmisc”

sjmisc::descr(data, show = c(“label”,“range”, “mean”, “sd”, “NA.prc”, “n”))%>% # Selecciona estadísticos kable(.,“markdown”) # Esto es para que se vea bien en quarto

Código
sjmisc::descr(data,
      show = c("label","range", "mean", "sd", "NA.prc", "n"))%>% # Selecciona estadísticos
      kable(.,"markdown") # Esto es para que se vea bien en quarto
Tabla 1: Descriptivos con sjmisc
var label n NA.prc mean sd range
4 promedio promedio 11 0 3.40077 1.016976 3.59 (2.3-5.9)
1 gdp gdp 11 0 15528.18364 6480.045512 19523.79 (5631.2-25154.99)
3 life_exp life_exp 11 0 75.90909 2.286593 8.8 (71.24-80.04)
2 gini gini 11 0 45.46364 4.156266 14.2 (39.7-53.9)

Luego de establecer el link y el nombre de la tabla, podemos referenciar acá con un @, así: @ tbl-sjmisc (pero junto), y que se vería así Tabla 1

otra opción

Código
view(dfSummary(data, headings=FALSE))
Tabla 2: Descriptivos con summarytools
Switching method to 'browser'
Output file written: C:\Users\kevin\AppData\Local\Temp\Rtmp6DnSha\file2d4418bf6392.html

La tabla Tabla 2 muestra los estadísticos descriptivos de la base de datos hecha con summarytools

Gráficos

Y para los gráficos se hace de la misma forma:

#| label: fig-gdp

#| fig-cap: “Plots”

Código
ggplot(data, aes(x = idenpa, y = gdp)) +
  geom_point() +
  labs(x = "País", y = "Gdp") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figura 1: Producto interno bruto por país

Sin embargo la Figura 1 entrega información desordenada. Mejor ordenar por tamaño de PIB que por orden alfabético de los países. Para eso

Código
data_sorted <- data %>% arrange(desc(gdp))
ggplot(data_sorted, aes(x = factor(idenpa, levels = idenpa), y = gdp)) +
  geom_point() +
  labs(x = "País", y = "GDP") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figura 2: Producto interno bruto por país ordenado

Ahora sí la Figura 2 muestra un gráfico más ordenado.

Y comparar el promedio de confianza en instituciones según producto interno bruto por país?

Código
data %>%
  ggplot(aes(x = gdp, y = promedio, label = idenpa)) +
  geom_point() +
  geom_text(vjust = -0.5) +
  labs(x = "GDP", y = "Promedio") +
  theme_bw()
Figura 3: Confianza en instituciones según el producto interno bruto por país

La Figura 3 muestra la relación que existe entre el producto interno bruto y la confianza en instituciones para los 18 países analizados. Es interesante comparar los casos de Chile y urugay, que al tener similar GDP, tienen un nivel de confianza en instituciones muy diferente.

Notas

  1. Esta es la nota al pie↩︎