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)

Autor/a

Gabriel Sotomayor

Fecha de publicación

12 octubre 2026

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

  1. Crea un Proyecto de RStudio y una carpeta datos dentro de él.
  2. Descarga la base de datos desde el sitio del INE. El archivo está en formato Stata (.dta).
  3. Guarda el archivo: Guarda el archivo .dta descargado dentro de tu carpeta datos.

2.2 Carga de Paquetes

library(haven)
library(tidyverse) #incluye ggplot2
library(knitr)
library(kableExtra)

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_pob

4. 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()
Estimación de la Condición de Actividad (Población 15 años y más, ponderada)
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

  1. Crear una tabla de frecuencias completa: Usando el flujo de dplyr y knitr::kable(), crea una tabla de frecuencias para la variable region de la encuesta ENE. Usar el factor de expansión fact_cal. Asegúrate de incluir frecuencias absolutas y porcentajes.
  2. Crear un gráfico de barras: Usando ggplot2, crea un gráfico de barras que muestre la distribución de personas por region.
    • 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.
# Escribe tu código para la tabla aquí


# Escribe tu código para el gráfico aquí