Práctico 3: Explorando Encuestas Complejas (CASEN) y Declarando el Diseño en R

Explorando Encuestas Complejas (CASEN) y Declarando el Diseño en R

Autor/a

Gabriel Sotomayor

Fecha de publicación

23 marzo 2026

0. Objetivos del Práctico

En esta sesión práctica, vamos a dar los primeros pasos para trabajar con datos de encuestas complejas en R, usando la Encuesta CASEN 2024 como nuestro caso de estudio. Al finalizar este práctico, serás capaz de:

  1. Cargar datos de la Encuesta CASEN 2024 en R.
  2. Explorar una base de datos de encuesta e identificar las variables clave que describen su diseño muestral complejo (ponderadores, estratos, conglomerados).
  3. Realizar cálculos descriptivos “ingenuos” (ignorando el diseño muestral) como punto de comparación.
  4. Declarar correctamente el diseño muestral complejo en R utilizando la función svydesign() del paquete survey.
  5. Realizar un primer cálculo ponderado (una media) y constatar la diferencia con el cálculo ingenuo.

1. Preparación del Entorno

Antes de empezar, necesitamos asegurarnos de tener las herramientas adecuadas en R.

  • Paquetes: Cargaremos los paquetes tidyverse (para manipulación general de datos), haven (para leer archivos de SPSS/Stata/SAS) y survey (para análisis de encuestas complejas).
  • RProject: Es una buena práctica trabajar dentro de un RStudio Project para mantener todo organizado y facilitar el manejo de rutas de archivos. Si no tienes uno para este curso, considera crearlo.
# Si no tienes instalados los paquetes, ejecuta primero estas líneas (quitando el #):
# install.packages("tidyverse")
# install.packages("haven")
# install.packages("survey")

# Cargar los paquetes necesarios para la sesión
library(tidyverse)
library(haven)
library(survey)

Con los paquetes cargados, estamos preparados para trabajar con los datos.

2. Cargando y Explorando Datos CASEN 2024

La Encuesta de Caracterización Socioeconómica Nacional (CASEN) es una de las encuestas de hogares más importantes de Chile. Utilizaremos la versión 2024, disponible en el sitio oficial del Ministerio de Desarrollo Social y Familia en formato .RData. Para cargarla, descargamos el archivo y usamos load(). Como el objeto viene nombrado casen_2024, lo renombramos a casen para simplificar el código.

load("casen_2024.RData")
casen <- casen_2024

Ahora que tenemos la base casen en nuestro entorno, vamos a explorarla un poco.

# Vistazo rápido a la estructura y tipos de variables
#glimpse(casen) # Comentado para brevedad

# Ver las primeras filas de la base
head(casen)
# Resumen de algunas variables sociodemográficas clave
summary(casen$edad) 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   0.00   20.00   39.00   39.92   59.00  107.00 
summary(as_factor(casen$sexo)) 
Hombre  Mujer 
103616 114751 
summary(casen$esc) # Años de escolaridad
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   0.00    9.00   12.00   11.59   15.00   31.00   37391 
summary(casen$ytotcorh) # Ingreso total corregido del hogar
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
       0   883282  1344264  1753336  2067500 60600000      107 
summary(as_factor(casen$pobreza)) # Situación de pobreza
    Pobreza extrema  Pobreza no extrema Fuera de la pobreza                NA's 
              17525               25303              175432                 107 

Interpretación de la Exploración:

  • La base tiene muchísimas variables (877) y un gran número de casos (218367), correspondientes a personas.
  • La edad va de 0 a 120 años, con una media muestral (aún no ponderada) de 39.9 años.
  • El sexo está codificado (1=Hombre, 2=Mujer), con una leve mayoría de mujeres en la muestra.
  • La escolaridad (esc) tiene un rango amplio y presenta valores perdidos (NA's). La media muestral es de 11.6 años.
  • El ingreso del hogar (ytotcorh) muestra una gran dispersión (comparar mediana y media, y el máximo valor) y también tiene algunos NA.
  • La variable pobreza (1=extrema, 2=no extrema, 3=no pobre) muestra que la mayoría de la muestra se clasifica como no pobre.

Reflexión: Esta exploración inicial nos da una idea general de los datos, pero recordamos que estas son estadísticas de la muestra, no necesariamente representativas de la población chilena todavía.

Identificando las Variables del Diseño Muestral

Como vimos en la clase, para analizar correctamente esta encuesta, necesitamos identificar las variables que definen su diseño complejo. Basándonos en la documentación oficial de CASEN (que siempre deberías consultar), estas variables suelen ser:

  1. Ponderador / Factor de Expansión: expr (regional).
  2. Estrato: varstrat.
  3. Conglomerado / UPM: varunit.

Veamos cómo lucen estas variables en nuestros datos:

# Resumen del factor de expansión regional (ponderador)
summary(casen$expr)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00   44.00   69.00   92.19  110.00 2060.00 
# Los pesos varían considerablemente, lo que confirma que las probabilidades de selección fueron desiguales.

# Cantidad de estratos únicos definidos para la varianza
length(unique(casen$varstrat))
[1] 756
# Cantidad de conglomerados (UPMs) únicos definidos para la varianza
length(unique(casen$varunit))
[1] 12512

Con estas tres variables, R dispondrá de toda la información necesaria para entender la estructura del diseño muestral.

3. El Error Común: Análisis Ingenuo

Antes de usar las herramientas correctas, calculemos estadísticas como si CASEN fuera una muestra aleatoria simple (MAS), ignorando el diseño.

# Media de edad simple (ignorando el diseño)
media_edad_ingenua <- mean(casen$edad, na.rm = TRUE)
media_edad_ingenua
[1] 39.92199
# Media de escolaridad simple
media_esc_ingenua <- mean(casen$esc, na.rm = TRUE)
media_esc_ingenua
[1] 11.5878
# Proporción de sexo simple
tabla_sexo_ingenua <- table(casen$sexo)
prop_sexo_ingenua <- prop.table(tabla_sexo_ingenua)
round(prop_sexo_ingenua, 3)

    1     2 
0.475 0.525 
# Creamos variable dicotómica de pobreza y calculamos proporción simple
casen <- casen %>%
  mutate(pobre_dic = ifelse(pobreza %in% c(1, 2), 1, 0))

tabla_pobreza_ingenua <- table(casen$pobre_dic)
prop_pobreza_ingenua <- prop.table(tabla_pobreza_ingenua)
round(prop_pobreza_ingenua, 3)

    0     1 
0.804 0.196 

Resultados Ingenuos:

  • Edad media (ingenua): 39.92 años.
  • Escolaridad media (ingenua): 11.59 años.
  • Proporción de Hombres (ingenua): 47.5%.
  • Proporción de Mujeres (ingenua): 52.5%.
  • Proporción de Pobreza (ingenua): 19.6%.

Guarda estos números. Los usaremos para comparar.

4. Declarando el Diseño Muestral con survey

Ahora, le enseñamos a R la “receta” de la muestra CASEN usando svydesign().

# Crear el objeto que describe el diseño muestral de CASEN
casen_design <- svydesign(ids = ~varunit,      # Conglomerados (UPM)
                          strata = ~varstrat,   # Estratos
                          weights = ~expr,      # Ponderador regional
                          data = casen          # Base de datos
                          )

casen_design
Stratified 1 - level Cluster Sampling design (with replacement)
With (12512) clusters.
svydesign(ids = ~varunit, strata = ~varstrat, weights = ~expr, 
    data = casen)

Interpretación: R nos confirma que ha creado un objeto de diseño muestral de tipo “Stratified 1-level Cluster Sampling design” (aunque el diseño es bietápico, survey simplifica la descripción cuando solo se especifican las UPMs). Crucialmente, identifica:

  • Que hay 12512 clusters (UPMs únicas definidas en varunit).
  • Que la estratificación está dada por varstrat.
  • Que los ponderadores son expr.
  • Que los datos provienen de casen.

A partir de aquí, R tiene toda la información sobre el diseño muestral y la usará en cada cálculo posterior.

5. Primer Cálculo Respetando el Diseño

Vamos a recalcular la media de edad y la proporción de pobreza usando el objeto casen_design y la función svymean().

# Media de edad PONDERADA
media_edad_ponderada <- svymean(~edad, design = casen_design, na.rm = TRUE)
media_edad_ponderada
       mean     SE
edad 37.872 0.0863
# Proporción de pobreza PONDERADA (usando pobre_dic)
prop_pobreza_ponderada <- svymean(~pobre_dic, design = casen_design, na.rm = TRUE)
prop_pobreza_ponderada
             mean    SE
pobre_dic 0.17278 0.002

Comparación de resultados:

  1. Edad: La media ingenua fue 39.92 años; la media ponderada es 37.9 años (SE=0.086). Las estimaciones difieren: la versión ponderada, que representa mejor a la población, es menor.
  2. Pobreza: La proporción ingenua fue 19.6% (0.196); la proporción ponderada es 17.3% (0.173, SE=0.002). La diferencia también es apreciable: la estimación que respeta el diseño muestral resulta más baja.

Pregunta de Reflexión: ¿Por qué crees que los resultados ponderados difieren de los resultados ingenuos?

¿Qué implica esto para nuestras conclusiones si solo hubiéramos usado los cálculos ingenuos? Respuesta posible: Hubiéramos sobreestimado la edad promedio de la población y también la tasa de pobreza. Nuestras conclusiones sobre la sociedad chilena habrían sido incorrectas.

6. Conclusión

En este práctico dimos los primeros pasos en el análisis de encuestas complejas en R.

  • Aprendiste a cargar datos de CASEN.
  • Identificaste las variables cruciales del diseño muestral (expr, varstrat, varunit).
  • Declaraste este diseño a R usando svydesign().
  • Comprobaste empíricamente que ignorar los ponderadores lleva a estimaciones diferentes (y probablemente sesgadas), comparando los resultados ingenuos con los obtenidos usando svymean().
  • Notaste que svymean también entrega un Error Estándar (SE), que mide la incertidumbre de la estimación considerando el diseño.

En la próxima sesión, profundizaremos en cómo realizar más análisis (proporciones por grupo, totales) de manera más fácil usando el paquete srvyr y cómo interpretar estos errores estándar.