library(haven)
library(tidyverse) #incluye ggplot2
library(knitr)
library(kableExtra)Práctico 4: Descripción de Variables Categóricas: Frecuencias y Gráficos de Barras en R
Trabajando con la Encuesta Nacional de Empleo (ENE)
0. Objetivos del Práctico
El objetivo de este práctico es aplicar los conceptos de descripción de variables categóricas vistos en clase, utilizando R para el análisis. Al finalizar, serás capaz de:
- Importar una base de datos en formato Stata (
.dta). - Generar e interpretar tablas de frecuencias (absolutas y porcentuales) usando R base y
dplyr, considerando los factores de expansión. - Crear tablas de presentación estéticas con el paquete
knitr. - Visualizar la distribución de una variable categórica usando gráficos de barras, tanto con R base como con
ggplot2.
1. Contexto: La Encuesta Nacional de Empleo (ENE)
La Encuesta Nacional de Empleo (ENE), realizada por el Instituto Nacional de Estadísticas (INE), es el principal instrumento para medir el mercado laboral en Chile. Sus datos se publican mensualmente y son fundamentales para el diagnóstico económico y social del país.
Hoy trabajaremos con los datos del trimestre móvil Febrero-Marzo-Abril 2026, y nos enfocaremos en la variable activ, que mide la condición de actividad de las personas.
2. Preparación del Entorno y Carga de Datos
2.1 Configuración del Proyecto y Descarga de Datos
- Crea un Proyecto de RStudio y una carpeta
datosdentro de él. - Descarga la base de datos desde el sitio del INE. El archivo está en formato Stata (
.dta). - Guarda el archivo: Guarda el archivo
.dtadescargado dentro de tu carpetadatos.
2.2 Carga de Paquetes
2.3 Carga de la Base de Datos
La base de datos está disponible en el sitio del INE. Descarga el trimestre más reciente en formato Stata (.dta) y guárdalo en tu carpeta datos. Luego cárgalo así:
# Cargar la base de datos de la ENE desde tu carpeta local
ene <- haven::read_dta("datos/ene-2026-03-fma.dta")3. Tablas de Frecuencia
El primer paso para describir una variable categórica es crear una tabla de frecuencias. Veremos diferentes formas de hacerlo, prestando atención a si estamos describiendo solo la muestra o estimando para la población.
3.1 Con R Base: table() y prop.table() (Descripción de la Muestra)
Las funciones de R base table() y prop.table() son excelentes para una exploración rápida de la muestra, pero no incorporan los factores de expansión.
# Primero, creamos la variable factor para que sea legible
ene$condicion_actividad <- as_factor(ene$activ)
# Frecuencias absolutas de la muestra
frec_abs_muestra <- table(ene$condicion_actividad)
frec_abs_muestra
Ocupados/as Desocupados/as
42987 4193
Fuera de la fuerza de trabajo
35981
# Frecuencias relativas (porcentajes) de la muestra
prop.table(frec_abs_muestra) * 100
Ocupados/as Desocupados/as
51.691298 5.042027
Fuera de la fuerza de trabajo
43.266675
Interpretación: Es un método rápido, pero requiere dos pasos y el resultado es menos prolijo que con otras alternativas. Estos resultados nos describen la composición de los datos que tenemos en R, pero no son una estimación correcta de la población chilena porque no están ponderados.
3.2 Con dplyr: Estimando para la Población
Para obtener estimaciones poblacionales, debemos usar el factor de expansión (en la ENE, se llama fact_cal). El flujo de dplyr nos permite incorporar este peso de manera muy sencilla.
Importante: La condición de actividad se mide para la población en edad de trabajar (15 años o más). Por lo tanto, debemos filtrar la base antes de hacer los cálculos.
# Explicación del código:
# 1. Filtramos para quedarnos solo con las personas de 15 años o más.
# 2. count() ahora tiene el argumento `wt = fact_cal`. Esto le dice a R que, en lugar de contar cada fila como 1, debe sumar el valor de la columna 'fact_cal'. El resultado es una estimación del número total de personas en la población.
# 3. mutate() crea una nueva columna 'Porcentaje'. Para calcularla:
# - Dividimos la frecuencia de cada fila (Frecuencia_Absoluta) por el total de casos (sum(Frecuencia_Absoluta)).
# - Multiplicamos por 100 para obtener el porcentaje.
tabla_frec_pob <- ene %>%
filter(edad >= 15) %>%
count(condicion_actividad, wt = fact_cal, name = "Poblacion_Estimada") %>%
mutate(
Porcentaje = (Poblacion_Estimada / sum(Poblacion_Estimada)) * 100
)
tabla_frec_pob4. Presentando Tablas con knitr::kable()
Presentemos la tabla de forma limpia y profesional: kable() crea la tabla a partir del data frame (aplica formato y el caption) y kable_styling() le da el aspecto visual (estilos HTML) para que se vea bien en el Viewer de RStudio.
kable(
tabla_frec_pob,
digits = c(0, 0, 1),
col.names = c("Condición de Actividad", "Población Estimada", "Porcentaje (%)"),
caption = "Estimación de la Condición de Actividad (Población 15 años y más, ponderada)"
) |>
kable_styling()| Condición de Actividad | Población Estimada | Porcentaje (%) |
|---|---|---|
| Ocupados/as | 9427606 | 56.7 |
| Desocupados/as | 944794 | 5.7 |
| Fuera de la fuerza de trabajo | 6267317 | 37.7 |
Interpretación: Esta tabla es una estimación para la población total de Chile. El porcentaje de ocupados corresponde a 56.7% de la población en edad de trabajar para este trimestre — cifras comparables con las publicaciones oficiales del INE.
5. Visualización: Gráficos de Barras
Ahora, vamos a visualizar la información, manteniendo la distinción entre muestra y población.
5.1 Gráfico de Barras con R Base (Descripción de la Muestra)
barplot() trabaja con tablas pre-calculadas. Por defecto, no tiene un argumento simple para ponderar, por lo que lo usaremos para visualizar las frecuencias de la muestra. Es una herramienta rápida para una exploración inicial.
# 1. Creamos la tabla de frecuencias de la muestra (mayores de 15)
frecuencias_muestra <- table(ene$condicion_actividad[ene$edad >= 15])
# 2. Creamos el gráfico, explicando sus argumentos
barplot(
height = frecuencias_muestra, # Altura de las barras
main = "Distribución de la Muestra por Condición de Actividad",
xlab = "Condición de Actividad",
ylab = "Frecuencia (conteo de la muestra)",
col = "#7C90CC",
ylim = c(0, 50000)
)
Análisis: El gráfico nos da una idea visual rápida de las magnitudes, sin ponderar. Su principal ventaja es la simplicidad y la velocidad, pero su personalización es menos intuitiva que con ggplot2.
5.2 Gráfico de Barras con ggplot2 (Estimación para la Población)
ggplot2 nos permite construir gráficos por capas, dándonos un control total. geom_bar() puede calcular las frecuencias por nosotros directamente desde los datos e incorporar los ponderadores directamente en la construcción del gráfico a través del argumento weight.
# Explicación del código:
# 1. ggplot(data, aes(x)): Iniciamos el gráfico, definimos los datos y el mapeo estético principal (qué va en el eje x). En `aes()`, además de `x`, añadimos `weight = fact_cal`. Esto le dice a ggplot2
# 2. geom_bar(): Añadimos la capa geométrica. Al no especificar un eje 'y', `geom_bar` cuenta automáticamente los casos por cada categoría de 'x'.
# 3. labs(): Añadimos las etiquetas, títulos y fuentes.
ene %>%
filter(edad >= 15) %>%
ggplot(aes(x = condicion_actividad, weight = fact_cal)) +
geom_bar(fill = "#1E2240") +
labs(
title = "Estimación de la Condición de Actividad en la Población",
subtitle = "Trimestre Febrero-Marzo-Abril 2026",
x = "Condición de Actividad",
y = "Población Estimada",
caption = "Fuente: ENE"
) +
theme_minimal()
Análisis: Este gráfico es una representación visual de las estimaciones poblacionales. La altura de las barras representa el número total de personas que se estima hay en cada categoría en todo el país.
Actividad 1: Crea una tabla de frecuencias (sin factor de expansión) para la variable sexo de la ENE usando dplyr. Incluye frecuencia absoluta y porcentaje de la muestra. Luego repite el análisis usando wt = fact_cal para obtener la estimación poblacional. ¿Cambia mucho la distribución entre muestra y población?
# Escribe tu código aquí6. Actividad de Desafío
- Crear una tabla de frecuencias completa: Usando el flujo de
dplyryknitr::kable(), crea una tabla de frecuencias para la variableregionde la encuesta ENE. Usar el factor de expansiónfact_cal. Asegúrate de incluir frecuencias absolutas y porcentajes. - Crear un gráfico de barras: Usando
ggplot2, crea un gráfico de barras que muestre la distribución de personas porregion.- Pista 1: No olvides filtrar por edad y usar
aes(weight = fact_cal). - Pista 2: Para que el eje X sea legible, puedes usar
+ theme(axis.text.x = element_text(angle = 45, hjust = 1))para rotar las etiquetas de las regiones.
- Pista 1: No olvides filtrar por edad y usar
# Escribe tu código para la tabla aquí
# Escribe tu código para el gráfico aquí