Es un procesador de texto que ofrece además la posibilidad de incluir trozos de código desde R (u otros formatos). El principal beneficio de esta herramienta es que permite trabajar en un sólo documento tanto la redacción del contenido narrativo de reportes de investigación, como también la construcción y presentación formal de resultados de análisis estadísticos. (https://bookdown.org/gboccardo/manual-ED-UCH/)
Aquí el cheatsheet: https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf
El paquete Knitr integra en un sólo archivo markdown el texto ingresado en formato RMarkdown y los resultados de la ejecución de los códigos construidos mediante R.
El encabezado, ese lo modificamos desde que abrimos el archivo y se escribe automáticamente en el código.
El texto, es lo que escribimos.
El primer título se pone con un signo de numeral
También hay varias opciones para resaltar el texto.
negrita
cursiva
subrayado
superindice2
subindice2
Podemos también hacer listas
El código, insertamos los “chunks”. Aprovechemos para instalar los paquetes de hoy.
library(pacman)
p_load(dplyr, ggplot2, haven, janitor, flextable, plotly)
echo = FALSE significa que no se desplegará la sintaxis en el reporte, pero sí se ejecutará la operación y mostrarán los resultados.
message = FALSE indica que no se mostrarán los mensajes de información en el informe final.
warning = FALSE no nos mostrará advertencias generadas por el código.
También, vamos a cargar las bases de datos para hoy.
setwd("~/Desktop/R con MONICA/Materiales sesión 4-20251023")
load("~/Desktop/R con MONICA/Materiales sesión 4-20251023/Datos_sesion4.RData")
Primero recodifiquemos las variables.
Percepción de la economía.
lapop_2023 <- lapop_2023 %>%
mutate(soct2 = as.numeric(soct2)) %>%
mutate(soct2=case_when(soct2==1~"Mejor",
soct2==2~"Igual",
soct2==3~"Peor"),
soct2=factor(soct2, levels=c("Peor", "Igual", "Mejor")))
Ahora la aprobación presidencial.
lapop_2023 <- lapop_2023 %>%
mutate(m1 = as.numeric(m1)) %>%
mutate(m1=case_when(m1 %in% c(1,2)~"Bueno",
m1==3~"Regular",
m1 %in% c(4,5)~"Malo"),
m1=factor(m1, levels = c("Malo", "Regular", "Bueno")))
Hagamos una tabla bivariada.
tabla_cruzada <- lapop_2023 %>%
# Filtra valores perdidos
filter(!is.na(soct2), !is.na(m1)) %>%
# Crea tabla de frecuencias
tabyl(soct2, m1) %>%
adorn_totals("row") %>%
# Convierte a porcentajes por columna
adorn_percentages("col") %>%
# Formatea porcentajes con 1 decimal
adorn_pct_formatting(digits = 1) %>%
# Agrega N total en cada celda
adorn_ns()
tabla_cruzada
## soct2 Malo Regular Bueno
## Peor 75.4% (141) 58.8% (292) 37.3% (304)
## Igual 18.7% (35) 31.2% (155) 29.4% (240)
## Mejor 5.9% (11) 10.1% (50) 33.3% (271)
## Total 100.0% (187) 100.0% (497) 100.0% (815)
Formateamos con flextable.
tabla_flex <- tabla_cruzada %>%
select(-any_of("NA")) %>% # Remover columna NA si existe
flextable() %>%
set_caption("Percepción de la situación económica según aprobación presidencial") %>%
theme_vanilla() %>%
set_header_labels(
soct2 = "Situación Económica"
) %>%
add_header_row(
values = c("", "Aprobación Presidencial"),
colwidths = c(1, ncol(tabla_cruzada) - 1)
) %>%
bold(part = "header") %>%
align(align = "center", part = "header") %>%
align(j = -1, align = "center", part = "body") %>%
align(j = 1, align = "left", part = "body") %>%
width(j = 1, width = 2.0) %>%
width(j = -1, width = 1.3) %>%
# Colorear filas alternadas (si soct2 tiene categorías específicas)
bg(i = seq(1, nrow(tabla_cruzada)-1, 2), bg = "#f8f9fa") %>%
bg(i = seq(2, nrow(tabla_cruzada)-1, 2), bg = "#ffffff") %>%
# Resaltar fila de totales
bg(i = nrow(tabla_cruzada), bg = "#e9ecef") %>%
bold(i = nrow(tabla_cruzada), part = "body") %>%
add_footer_lines("Elaboración propia con datos de LAPOP 2023")
# Mostrar la tabla
tabla_flex
Aprobación Presidencial | |||
|---|---|---|---|
Situación Económica | Malo | Regular | Bueno |
Peor | 75.4% (141) | 58.8% (292) | 37.3% (304) |
Igual | 18.7% (35) | 31.2% (155) | 29.4% (240) |
Mejor | 5.9% (11) | 10.1% (50) | 33.3% (271) |
Total | 100.0% (187) | 100.0% (497) | 100.0% (815) |
Elaboración propia con datos de LAPOP 2023 | |||
Vamos a hacer los dos gráficos que hicimos.
Calculamos porcentajes:
datos_porcentajes <- lapop_2023 %>%
count(m1) %>%
mutate(porcentaje = n / sum(n) * 100)
Hacemos el gráfico.
grafico1 <- datos_porcentajes %>%
filter(!is.na(m1)) %>%
ggplot(aes(x = m1, y = porcentaje, fill = m1)) +
geom_col(
color = "black",
alpha = 0.7,
width = 0.6) +
geom_text(aes(label = paste0(round(porcentaje, 1), "%")),
vjust = -0.5, size = 4, fontface = "bold") +
scale_y_continuous(expand = c(0, 0),
limits = c(0, 100)) +
scale_fill_manual(values = c("Malo" = "#E74C3C",
"Regular" = "#95A5A6",
"Bueno" = "#16A085")) +
labs(
title="Aprobación presidencial de Rodrigo Chaves 2023",
subtitle="Hablando en general acerca del gobierno actual, ¿diría usted que el trabajo que está realizando el presidente...?:",
x="Aprobación",
y="Frecuencia",
caption="Fuente: elaboración propia con datos de LAPOP 2023"
) +
theme_minimal()+
theme(
# Sin leyenda
legend.position = "none",
# Título: centrado, negrita, tamaño 14
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
# Subtítulo: centrado, cursiva, tamaño 12
plot.subtitle = element_text(hjust = 0.5, face = "italic", size = 12),
# Fuente (caption): centrada, tamaño 10
plot.caption = element_text(hjust = 0.5, size = 10),
# Títulos de los ejes: tamaño 8, color gris
axis.title.x = element_text(size = 8, color = "gray40"),
axis.title.y = element_text(size = 8, color = "gray40"),
# Texto de los ejes (números): tamaño 8, color gris
axis.text.x = element_text(size = 8, color = "gray40"),
axis.text.y = element_text(size = 8, color = "gray40")
)
grafico1
Podemos hacerlo interactivo.
ggplotly(grafico1)
Ahora el de dispersión.
grafico2 <- subset_vdem %>%
filter(año=="2024") %>%
ggplot(aes(x=violencia_politica, y=electoral))+
geom_point(color = "#3498DB", # Color azul
size = 3, # Tamaño de los puntos
alpha = 0.7, # Transparencia
shape = 19) + # Forma del punto (19 = círculo sólido)
labs(title = "Relación entre violencia política y democracia electoral",
subtitle = "Países de América Latina, 2024",
x = "Índice de Violencia Política",
y = "Índice de Democracia Electoral",
caption = "Fuente: V-Dem Dataset 2024")+
theme_minimal()+
theme(
# Título: centrado, negrita, tamaño 14
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
# Subtítulo: centrado, cursiva, tamaño 12
plot.subtitle = element_text(hjust = 0.5, face = "italic", size = 12),
# Caption (fuente): centrado, tamaño 10
plot.caption = element_text(hjust = 0.5, size = 10),
# Títulos de los ejes: tamaño 8, color gris
axis.title.x = element_text(size = 8, color = "grey50"),
axis.title.y = element_text(size = 8, color = "grey50"),
# Texto de los ejes: tamaño 8, color gris
axis.text.x = element_text(size = 8, color = "grey50"),
axis.text.y = element_text(size = 8, color = "grey50")
)
grafico2
Interactivo:
ggplotly(grafico2)