Comparación de Métodos para Estimar Estadísticas Poblacionales con Diseño Muestral Complejo en R.

1. Introducción

El análisis de datos provenientes de encuestas con diseño muestral complejo requiere una comprensión clara de su estructura y una aplicación rigurosa de técnicas estadísticas apropiadas. A diferencia del muestreo aleatorio simple, estos diseños incorporan elementos como la estratificación, la selección por conglomerados y el muestreo en múltiples etapas, los cuales afectan directamente las estimaciones y sus errores asociados.

El propósito de este documento es obtener estadísticas poblacionales a través de la comparar dos enfoques para la estimación de estadísticas poblacionales a partir de datos provenientes de una encuesta con diseño complejo, en este caso, la Encuesta de Caracterización Socioeconómica Nacional (CASEN).

La comparación se establece entre:

  • Un método tradicional, basado en el uso directo de factores de expansión (ponderadores muestrales); y

  • Un método especializado, implementado mediante el paquete survey de R, el cual permite incorporar explícitamente la estructura completa del diseño de la encuesta.

Ambos enfoques son aplicados sobre datos de la encuesta CASEN 2022, y se presentan mediante ejemplos prácticos orientados al cálculo de indicadores como el ingreso promedio, la distribución de la pobreza y otras métricas relevantes. A través de esta comparación, se busca relevar la importancia de modelar correctamente el diseño muestral, no solo para obtener estimaciones válidas, sino también para garantizar la comparabilidad con los resultados oficiales y fundamentar decisiones basadas en evidencia.

Este documento está dirigido a profesionales, analistas, docentes y estudiantes interesados en el uso de R para el análisis de datos de encuestas, y tiene como objetivo promover prácticas analíticas sólidas y replicables al trabajar con información socioeconómica a nivel poblacional.

1.2. Diseños complejos.

En el ámbito de la estadística aplicada a encuestas, un diseño muestral complejo hace referencia a aquellos esquemas de muestreo que incorporan estrategias adicionales al muestreo aleatorio simple (MAS), con el fin de adaptarse a las realidades logísticas, geográficas y poblacionales de un país o región. Este tipo de diseño se utiliza de forma predominante en encuestas de gran escala, como censos, encuestas sociales, de salud o de empleo, entre ellas, la Encuesta de Caracterización Socioeconómica Nacional (CASEN) en Chile.

La implementación de un diseño muestral complejo obedece a razones tanto técnicas como prácticas como las siguientes:

  • En estudios poblacionales, la diversidad de características socioeconómicas, geográficas y culturales hace necesario capturar adecuadamente la variabilidad entre subgrupos de la población.

  • Desde una perspectiva operativa, el costo y la logística de aplicar un muestreo aleatorio simple a nivel nacional resultan impracticables, dado que implicaría un muestreo disperso y costoso, que no asegura representatividad de la población.

Por estas razones, los diseños complejos combinan diversas estrategias muestrales como los muestreos en etapas secuenciales que permiten lograr estimaciones representativas, pero también exigen ajustes metodológicos específicos para su análisis.

1.3. ¿Qué es el muestreo multietápico?

El muestreo multietápico es una estrategia de muestreo compleja que consiste en seleccionar la muestra en varias fases sucesivas o “etapas”, en lugar de hacerlo directamente desde la población total. Este tipo de diseño se utiliza cuando la población objetivo es muy grande o se encuentra geográficamente dispersa, lo que hace inviable o costoso aplicar un muestreo aleatorio simple.

En cada etapa del muestreo, se seleccionan unidades agrupadas, como regiones, comunas, manzanas o viviendas, y dentro de esas unidades seleccionadas se realiza un nuevo muestreo en la siguiente etapa. El resultado es una estructura jerárquica de selección, donde cada nivel contiene subconjuntos del nivel anterior, para este caso corresponde a un muestreo en dos etapas o bietápico.

1.4. ¿Por qué necesitamos un módulo especial para analizar muestras complejas?

Cuando analizamos datos provenientes de una muestra aleatoria simple (MAS), las estimaciones estadísticas (como promedios, proporciones, errores estándar o intervalos de confianza) pueden calcularse directamente con funciones de estadísticas básicas. Sin embargo, como se ha explicado, la realidad de las encuestas sociales a gran escala es mucho más compleja, pues se realizan en más de una etapa secuencial.

Es decir, estas encuestas no aplican un muestreo aleatorio puro. Utilizan diseños complejos que incluyen estratificación, conglomerados, selección en múltiples etapas y ponderación através de los factores de expansión. Ignorar estos elementos durante el análisis implica asumir que los datos provienen de una muestra simple, lo que conduce a resultados erróneos en cuanto a sobrestimar o subestimar estos valores.

En el caso partícular del lenguaje R, cuando se aplican funciones estándar (como mean(), lm(), t.test()) sobre datos con diseño complejo sin tener en cuenta su estructura conlleva lo siguiente:

  • Los errores estándar se subestiman: se cree que hay más precisión de la que realmente existe.

  • Los intervalos de confianza son más estrechos: por ende, se sobreestima la certeza de los resultados.

  • Las pruebas estadísticas (como los p-valores) pueden ser inválidas: lo que afecta decisiones de política pública o conclusiones de investigación.

En otras palabras, el riesgo es que las estimaciones pueden estar sesgadas, especialmente si no se aplican los factores de expansión.

1.5. ¿Qué hace un módulo especializado como survey?

El paquete survey en R fue diseñado para ajustar los métodos estadísticos convencionales a los requerimientos de un diseño complejo. Este módulo permite:

  • Incorporar estratos, UPMs (Unidades primarias de muestreo), ponderadores y estructuras jerárquicas.

  • Ajustar correctamente los errores estándar mediante métodos como linealización o replicación.

  • Realizar análisis válidos: medias, proporciones, regresiones, pruebas de hipótesis, totales y más, respetando la estructura muestral real.

  • Obtener estadísticas comparables con las que publica el organismo oficial, como el Ministerio de Desarrollo Social en el caso de CASEN.

En tal sentido, usar un módulo especial como survey no es opcional: es una condición necesaria para el análisis riguroso y éticamente responsable de encuestas complejas. Es la forma adecuada de garantizar que nuestras conclusiones representen fielmente la realidad poblacional, con un nivel de precisión apropiado, y que sean comparables con las estadísticas oficiales.

1.6. La Encuesta CASEN.

La Encuesta CASEN, realizada por el Ministerio de Desarrollo Social y Familia, tiene como propósito central entregar información periódica sobre la situación socioeconómica de los hogares y personas en Chile, con especial énfasis en la población en situación de pobreza y en los grupos prioritarios para la política social.

Sus objetivos principales son:

Medir la pobreza, la distribución del ingreso y las brechas sociales y territoriales en áreas como educación, salud, vivienda y trabajo.

Evaluar la cobertura, focalización y distribución del gasto social, y su impacto en los ingresos y la equidad.

La encuesta se aplica a hogares residentes en viviendas particulares ocupadas a lo largo del país (excluyendo áreas especiales definidas por el INE), y sus dominios de estudio incluyen tanto el nivel nacional como regiones, zonas urbanas y rurales.

Desde su primera aplicación en 1990, la CASEN se ha desarrollado de forma bianual o trianual, cubriendo años clave hasta la última versión en 2022.

Para análisis válidos y comparables, se recomienda utilizar los factores de expansión actualizados, ajustados con las proyecciones del Censo 2017 y la metodología de calibración por Raking, disponibles junto con cada base de datos oficial. sitio web de la encuesta

2. Implementación en R.

En esta sección se presentan los pasos prácticos para implementar ambos enfoques de estimación poblacional utilizando el lenguaje R. Se utilizarán datos provenientes de la Encuesta CASEN y se abordarán los procesos de carga de datos, preparación de la base, y aplicación tanto del método tradicional con factores de expansión como del método especializado mediante el paquete survey. Esta implementación permitirá comparar directamente los resultados obtenidos bajo cada enfoque y evidenciar las ventajas de incorporar el diseño muestral completo en el análisis

2.1 Librerias.

Para desarrollar esta actividad, utilizaremos las siguientes librerías en R:

library(tidyverse)
library(survey)
library(ggplot2)
library(haven)

2.2 Base de datos.

Trabajaremos con la versión más reciente de la Encuesta CASEN. La base de datos puede ser descargada desde el sitio web oficial de la encuesta.

load("casen_2022.RData")

2.3. Crear un subconjunto de la base

A partir del conjunto de datos original proveniente de la Encuesta CASEN, se construirá un subconjunto que incluya únicamente las variables necesarias para el análisis. Esto permite trabajar con un data frame más liviano, enfocado y eficiente, lo que facilita la limpieza, exploración y modelamiento posterior.

El nuevo objeto se llamará casen_estudio y contendrá variables relacionadas con el hogar, el ingreso, la situación de pobreza, el diseño muestral y algunas características sociodemográficas esenciales para el estudio.

casen_estudio <- casen |> select(
  "folio" = folio,
  "id_persona" = id_persona,
  "id_vivienda" = id_vivienda,
  "cod_upm" = cod_upm,
  "nse" = nse,
  "estrato" = estrato,
  "varstrat" = varstrat,
  "varunit" = varunit,
  "region" = region,
  "provincia" = provincia, 
  "comuna" = comuna,
  "ingreso_autonomo_corregido" = yautcorh,
  "paren_jef_hogar" = pco1,
  "expc" = expc,
  "sexo" = sexo,
  "edad" = edad,
  "salario" = y1,
  "sistema_salud" = s13,
  "hrs_trabajada" = y2_hrs,
  "esc" = esc,
  "educ" = educ,
  "activ" = activ,
  "ingreso_total_corregido_hogar" = ytotcorh,
  "pobreza" = pobreza,
  "expr" = expr,
  "expp" = expp
)

2.4 Estimación a través de factores de expansión: Método directo.

Los factores de expansión son valores asignados a cada individuo o unidad en una muestra que permiten ajustar los resultados para que representen mejor a la población total. En otras palabras, estos factores “expanden” los datos muestrales, otorgando a cada observación un peso proporcional al número de personas que representa en la población.

¿Cómo funcionan? Cuando se selecciona una muestra, no todos los individuos tienen la misma probabilidad de ser incluidos. Los factores de expansión corrigen este desequilibrio, ajustando el peso que cada observación tiene en el análisis. En general, se calculan como el inverso de la probabilidad de selección de cada unidad, lo que permite que las estimaciones obtenidas desde la muestra se aproximen a las que se obtendrían si se estudiara toda la población.

En el caso particular de la Encuesta CASEN, existen tres tipos de factores de expansión según el nivel geográfico de referencia:

  • expr: expansión a nivel regional

  • expp: expansión a nivel provincial

  • expc: expansión a nivel comunal

Dado que la CASEN utiliza un diseño de muestreo complejo de dos etapas, la elección del ponderador debe ajustarse al nivel de análisis. Para mayor detalle, se recomienda consultar el libro metodológico de la CASEN 2022.

Para otros ejemplos sobre el uso de factores de expansión en R, puedes revisar el documento disponible en: https://rpubs.com/cescobedo/1223066

2.4.1 Incidencia de la pobreza y pobreza extrema en la última medición de Casen.

La metodología de medición de la pobreza en Chile utiliza el valor de la Canasta Básica de Alimentos (CBA) como variable central para definir la línea de pobreza. Entre noviembre de 2020 y noviembre de 2022, la CBA aumentó un 33,6%, mientras que el IPC creció un 20,9%. En este período, la línea de pobreza pasó de $174.131 a $216.849 por adulto equivalente, un aumento del 24,5% en pesos nominales. Este valor varía según el número de integrantes del hogar, considerando economías de escala. Para calcular la tasa de pobreza, se comparan los ingresos totales del hogar con la línea de pobreza, considerando tanto ingresos del trabajo como transferencias y subsidios. Estos ingresos también han crecido significativamente en el mismo período.

Para este análisis, usaremos el campo de pobreza por ingreso de la encuesta Casen 2022, cuyas categorías de pobreza son calculadas sobre el total de la población de cada región. De este modo, las categorías son:

  • Pobre extremo
  • Pobre no extremo
  • No pobre

En el siguiente bloque de código, se calcula la proporción de personas en situación de pobreza extrema y no extrema a nivel regional, utilizando el factor de expansión expr como ponderador. El resultado se almacena en el dataframe pobreza, que inicialmente se encuentra en formato ancho, es decir, con una columna para cada categoría de pobreza.

Para facilitar la visualización con ggplot2, es necesario transformar la tabla desde formato ancho a formato largo, lo que se realiza con la función pivot_longer() del paquete tidyr. Esta transformación permite que las categorías de pobreza (“Pobre extremo” y “Pobre no extremo”) se consoliden en una única columna (Condicion), mientras que los valores porcentuales se almacenan en otra (Porcentaje).

Este formato largo es el que requiere ggplot2 para generar un gráfico de barras apiladas, donde se puede observar claramente la distribución de ambas condiciones de pobreza por región.

pobreza <- casen_estudio |>
  group_by(region) |>
  summarise("Pobre extremo" = round(sum(expr [pobreza == 1], na.rm = T) / 
              sum(expr [pobreza %in% c(1,2,3)], na.rm = T) *100,1),
            "Pobre no extremo" = round(sum(expr[pobreza == 2], na.rm = T)/
              sum(expr[pobreza %in% c(1,2,3)], na.rm =T)*100,1))
pobreza |> head(3)
## # A tibble: 3 × 3
##   region                     `Pobre extremo` `Pobre no extremo`
##   <dbl+lbl>                            <dbl>              <dbl>
## 1 1 [Región de Tarapacá]               4.5                6.5
## 2 2 [Región de Antofagasta]             2.8                4.9
## 3 3 [Región de Atacama]                 2.8                5.4
pobreza_long <- pobreza |>
  pivot_longer(cols = c("Pobre extremo", "Pobre no extremo"),
               names_to = "Condicion",
               values_to = "Porcentaje")

pobreza_long <- pobreza_long |>
  mutate(Condicion = factor(Condicion, 
                            levels = c("Pobre extremo", "Pobre no extremo")),
         region = factor(region))  

ggplot(pobreza_long, aes(x = region, y = Porcentaje, fill = Condicion)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = sprintf("%.1f", Porcentaje)),  
            position = position_stack(vjust = 0.5),  
            size = 3) + 
  scale_fill_brewer(palette = "Set5") +  
  labs(
    title = "Distribución de la Pobreza por Región en %",
    subtitle = "Elaborado por Cristian Escobedo Catalán",
    caption = "Fuente: Encuesta Casen 2022",
    x = "Región",
    y = "Porcentaje",
    fill = "Condición de Pobreza"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 360, hjust = 1))

2.4.2. Ingreso autónomo del hogar por region

El ingreso autónomo se refiere a los recursos monetarios que perciben las personas o los hogares provenientes de fuentes laborales y no laborales, sin tener en cuenta transferencias o ayudas del gobierno, como pensiones no contributivas, subsidios o ayudas sociales.

\[ \overline {ingreso} = \frac{\sum (ingreso \dot \ expr)}{\sum(expr)} \] En palabras simples, el cálculo del ingreso medio en la forma tradicional se realiza como una media ponderada, en la que cada ingreso observado se multiplica por su respectivo factor de expansión. Este procedimiento permite extrapolar los resultados obtenidos en la muestra hacia la población total, corrigiendo el hecho de que no todos los hogares tienen la misma probabilidad de ser seleccionados. De esta forma, se garantiza que las estimaciones sean representativas a nivel nacional o regional, de acuerdo con el diseño muestral de la encuesta.

Ahora bien, para aplicar correctamente este cálculo, es fundamental considerar la unidad de análisis. La base de datos de la Encuesta CASEN está estructurada a nivel individual: cada fila representa a una persona dentro de un hogar. No obstante, cuando el análisis se enfoca en variables agregadas, como el ingreso del hogar, es necesario reorganizar la base a nivel de hogar.

Para ello, filtramos los datos y conservamos únicamente a las personas identificadas como jefes o jefas de hogar, utilizando la variable paren_jef_hogar. Este paso nos permite generar un subconjunto donde cada fila corresponde a un hogar distinto, lo que es fundamental para obtener estimaciones correctas y evitar duplicaciones en el análisis.

hogares <- casen_estudio |> filter(paren_jef_hogar == 1)

Una vez definida la unidad de análisis a nivel de hogar, es posible calcular el ingreso autónomo promedio por región utilizando el método directo con factores de expansión. Para ello, se agrupa la base por región y se aplica la fórmula de la media ponderada, en la que cada ingreso se multiplica por su correspondiente factor de expansión (expr), y se divide por la suma total de los factores en la región.

El siguiente código implementa este cálculo:

ingreso <- hogares |> group_by(region) |> 
  summarise (ingreso = sum(ingreso_autonomo_corregido * expr) / sum(expr))

Este procedimiento nos entrega una estimación del ingreso promedio que representa adecuadamente a la población regional, sin incorporar aún la estructura completa del diseño muestral (estratos ni unidades primarias). Por tanto, aunque útil para obtener valores aproximados, este enfoque no permite calcular errores estándar ni intervalos de confianza válidos.

Además de calcular el ingreso medio por región, es posible estimar el ingreso autónomo promedio a nivel nacional aplicando la misma lógica de ponderación. Para ello, se multiplica el ingreso de cada hogar por su factor de expansión (expr) y se divide entre la suma total de estos factores. El resultado es redondeado para facilitar su presentación.

Con este valor estimado, se genera un gráfico de barras que muestra el ingreso medio por región, facilitando la comparación visual entre territorios. Además, se incorpora una línea horizontal discontinua en rojo que representa el ingreso medio nacional, permitiendo identificar de forma clara qué regiones se encuentran por sobre o por debajo del promedio del país.

ingreso_medio_nacional <- round(sum(hogares$ingreso_autonomo_corregido * hogares$expr) / sum(hogares$expr),0)

barplot(ingreso$ingreso, names.arg = ingreso$region,
        main = "Ingreso medio por Region.",
        xlab = "Región",
        ylab = "Ingreso en pesos",
        col  = "#05295a",
        ylim = c(0 , 2000000))

abline(h = ingreso_medio_nacional, col = "red", lty = 2)

Este tipo de visualización resulta especialmente útil por su facilidad de construcción y su capacidad para resaltar rápidamente las desigualdades territoriales en los ingresos. Además, puede complementarse con indicadores adicionales —como las tasas de pobreza o los coeficientes de variación— para ofrecer un análisis más integral.

El uso de factores de expansión constituye una herramienta fundamental en el análisis de encuestas con diseño muestral complejo. Este enfoque permite obtener estimaciones poblacionales ajustando los resultados muestrales a través de ponderadores que reflejan la probabilidad de selección de cada unidad. Su aplicación es directa e intuitiva, y resulta especialmente útil para generar estadísticas descriptivas como promedios, proporciones y totales, con relativa facilidad.

Sin embargo, a pesar de su simplicidad, este método presenta limitaciones importantes. En particular, el cálculo de errores estándar, intervalos de confianza y pruebas de hipótesis no se encuentra incorporado de forma nativa en este enfoque, o bien requiere procedimientos complementarios que pueden ser engorrosos y poco replicables. Estas deficiencias pueden conducir a conclusiones imprecisas o incluso erróneas si no se consideran adecuadamente los elementos estructurales del diseño muestral, como la estratificación, los conglomerados o la multietapicidad.

Para abordar estas limitaciones y garantizar estimaciones estadísticamente válidas y comparables con las cifras oficiales, se hace necesario recurrir a enfoques más especializados. En este contexto, el paquete survey de R surge como una herramienta robusta y flexible que permite incorporar explícitamente el diseño muestral en el análisis, ajustando automáticamente la varianza y permitiendo el cálculo riguroso de errores estándar, intervalos de confianza, pruebas estadísticas y regresiones ponderadas.

A continuación, exploraremos cómo utilizar el módulo survey para replicar y ampliar los análisis realizados, asegurando un tratamiento estadístico más completo, transparente y técnicamente sólido de los datos provenientes de la Encuesta CASEN.

2.5. Estimación a través de modulo survey

En esta sección se reproducen los ejercicios anteriores, la distribución de la pobreza por región y el ingreso promedio regional, utilizando el paquete survey de R, especializado en el análisis de encuestas con diseño muestral complejo.

A diferencia del método directo basado únicamente en factores de expansión, este enfoque permite incorporar la estructura completa del diseño muestral, incluyendo:

  • La estratificación (strata)

  • Las unidades primarias de muestreo (UPM) (ids)

  • Los ponderadores muestrales (weights)

Gracias a esto, el paquete survey no solo entrega estimaciones representativas, sino que también permite obtener errores estándar válidos, intervalos de confianza, y coeficientes de variación, valores que permite evaluar la precisión y confiabilidad de los resultados.

2.5.1 ¿Por qué convertir region, varstrat y varunit en factores?

En R, cuando se trabaja con encuestas complejas mediante el paquete survey, es fundamental declarar correctamente las variables categóricas que definen la estructura del diseño muestral: los estratos (strata), las unidades primarias de muestreo (ids), y, en algunos casos, las regiones o dominios de estudio.

Al convertir estas variables en factores (as.factor()), le estamos indicando explícitamente a R que:

  • Se trata de variables cualitativas, no numéricas.

  • Cada valor representa una categoría distinta (por ejemplo, una región, un estrato, o una UPM).

  • Deben tratarse como etiquetas, no como números con significado ordinal o métrico.

Si no se convierten en factores, R puede interpretarlas como variables numéricas continuas, lo cual afecta gravemente el análisis, generando resultados incorrectos o incluso errores en la construcción del diseño.

Por ejemplo, si varstrat es una variable tipo numeric, R puede suponer que los estratos tienen un orden o una distancia entre ellos, lo cual no tiene sentido en el contexto de un diseño muestral. Por eso, convertir a factor es un paso pequeño pero crítico para asegurar la validez del diseño muestral y sus estimaciones.

hogares$region <- as.factor(hogares$region)
hogares$varstrat <- as.factor(hogares$varstrat)
hogares$varunit <- as.factor(hogares$varunit)

2.5.2.Definición del diseño muestral con svydesign()

En el siguiente bloque de código se crea el objeto de diseño muestral denominado casen_design, utilizando la función svydesign() del paquete survey. Este objeto encapsula la estructura del diseño complejo de la Encuesta CASEN, incorporando información sobre estratos, unidades primarias de muestreo (UPM) y factores de expansión.

Contar con este objeto es fundamental, ya que permite realizar análisis estadísticos válidos, como medias, proporciones, totales o regresiones, respetando el diseño real de la encuesta, lo que garantiza estimaciones representativas y márgenes de error correctamente calculados.

El diseño se especifica de la siguiente forma:

casen_design <- svydesign(
  ids = ~varunit,
  strata = ~varstrat,
  weights = ~expr,
  data = hogares,
  nest = TRUE
)

2.6. Incidencia de la pobreza y pobreza extrema, a través de survey()

En esta sección replicaremos el ejercicio anterior —donde estimamos la proporción de pobreza y pobreza extrema utilizando factores de expansión—, pero esta vez mediante el uso del paquete survey, incorporando de forma explícita el diseño muestral complejo.

Como paso previo, recodificamos la variable pobreza para asignar etiquetas legibles a sus niveles, lo que facilitará la interpretación de los resultados:

casen_estudio$pobreza <- factor(
  casen_estudio$pobreza,
  levels = c(1, 2, 3),
  labels = c("Pobre extremo", "Pobre no extremo", "No pobre")
)

A continuación, redefinimos el diseño muestral complejo a través de la función svydesign(), utilizando el objeto casen_estudio ya actualizado. Este paso es necesario cada vez que se modifica el conjunto de datos, especialmente si se han recodificado variables, como hicimos con la variable pobreza.

El objeto resultante, casen_design, será utilizado en los análisis que siguen para estimar la incidencia de la pobreza respetando la estructura muestral de la encuesta:

casen_design <- svydesign(
  ids = ~varunit,
  strata = ~varstrat,
  weights = ~expr,
  data = casen_estudio,
  nest = TRUE
)

A continuación, estimamos la incidencia de pobreza por región utilizando la función svyby(), que permite aplicar svymean() sobre subgrupos definidos por una o más variables categóricas, en este caso la variable region.

El argumento FUN = svymean indica que queremos calcular las proporciones de cada categoría de la variable pobreza dentro de cada región, tomando en cuenta el diseño muestral complejo definido en casen_design.

Además, se incorpora vartype = "ci" para obtener directamente los intervalos de confianza al 95% para cada estimación:

pobreza_region <- svyby(
  ~pobreza,
  ~region,
  design = casen_design,
  FUN = svymean,
  na.rm = TRUE,
  vartype = "ci"  
)

Transformamos las proporciones estimadas a formato porcentual y seleccionamos únicamente las columnas necesarias para su visualización. El resultado se guarda en el objeto pobreza_region_viz.

pobreza_region_viz <- pobreza_region %>%
  mutate(
    `Pobre extremo` = round(`pobrezaPobre extremo` * 100, 1),
    `Pobre no extremo` = round(`pobrezaPobre no extremo` * 100, 1),
    `No pobre` = round(`pobrezaNo pobre` * 100, 1)
  ) %>%
  select(region, `Pobre extremo`, `Pobre no extremo`, `No pobre`)

pobreza_region_viz |> head( , 4)
##   region Pobre extremo Pobre no extremo No pobre
## 1      1           4.5              6.5     89.0
## 2      2           2.8              4.9     92.4
## 3      3           2.8              5.4     91.8
## 4      4           2.5              5.4     92.1
## 5      5           1.9              4.6     93.4
## 6      6           2.3              4.8     93.0

A continuación, transformamos el objeto pobreza_region —obtenido con el diseño muestral complejo— en un nuevo data frame llamado pobreza_region_viz. Este nuevo objeto contiene las proporciones de cada categoría de pobreza expresadas en porcentajes y listas para visualización.

Usamos transmute() para: - Convertir region en factor (para orden y control gráfico). - Redondear los valores a 1 decimal. - Renombrar las columnas a etiquetas más legibles para el gráfico: “Pobre extremo”, “Pobre no extremo” y “No pobre”.

Este paso asegura que los datos estén limpios, estandarizados y enfocados solo en las variables necesarias para su posterior representación gráfica.

pobreza_region_viz <- pobreza_region %>%
  transmute(
    region = as.factor(region),
    `Pobre extremo` = round(`pobrezaPobre extremo` * 100, 1),
    `Pobre no extremo` = round(`pobrezaPobre no extremo` * 100, 1),
    `No pobre` = round(`pobrezaNo pobre` * 100, 1)
  )

Para facilitar la visualización con ggplot2, transformamos la tabla pobreza_region_viz desde formato ancho (una columna por cada categoría de pobreza) a formato largo, más adecuado para gráficos agrupados o apilados.

Utilizamos la función pivot_longer() para reunir las tres columnas de categorías (Pobre extremo, Pobre no extremo, No pobre) en una sola columna llamada Condicion, con los valores correspondientes en la nueva columna Porcentaje.

Este paso es fundamental para representar correctamente la condición de pobreza como una variable categórica en los gráficos de barras.

pobreza_long <- pobreza_region_viz %>%
  pivot_longer(
    cols = c("Pobre extremo", "Pobre no extremo", "No pobre"),
    names_to = "Condicion",
    values_to = "Porcentaje"
  )

Una vez que los datos están organizados en formato largo, utilizamos ggplot2 para construir un gráfico de barras apiladas que muestra la distribución de la pobreza por región. Cada barra representa una región, y está dividida en tres segmentos que corresponden a las categorías de pobreza: Pobre extremo, Pobre no extremo y No pobre.

Este tipo de visualización permite observar de forma comparativa cómo se distribuyen los niveles de pobreza entre regiones, resaltando las diferencias territoriales. Se utilizan etiquetas sobre las barras para destacar los valores porcentuales y una paleta de colores (Set2) para mejorar la interpretación visual.

ggplot(pobreza_long, aes(x = region, y = Porcentaje, fill = Condicion)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = sprintf("%.1f", Porcentaje)),
            position = position_stack(vjust = 0.5),
            size = 2.5) +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Distribución de la Pobreza por Región",
    subtitle = "Elaborado por Cristian Escobedo Catalán",
    caption = "Fuente Encuesta CASEN 2022",
    x = "Región",
    y = "Porcentaje (%)",
    fill = "Condición de Pobreza"
  ) +
  theme_minimal()

2.7 Segundo ejemplo: Ingreso promedio por región utilizando el paquete survey

En este segundo ejemplo, replicaremos el análisis realizado previamente con factores de expansión, pero ahora empleando el diseño muestral complejo definido mediante la función svydesign().

El objetivo es estimar el ingreso promedio por región, esta vez incorporando correctamente la estructura del muestreo de la encuesta, lo que permitirá obtener resultados más precisos y comparables con los reportes oficiales.

Comenzamos redefiniendo el diseño muestral:

hogares_design <- svydesign(
  ids = ~varunit,
  strata = ~varstrat,
  weights = ~expr,
  data = hogares,
  nest = TRUE
)

Este bloque de código estima el ingreso autónomo promedio a nivel nacional, utilizando el diseño muestral complejo definido en hogares_design. Para ello se emplea la función svymean(), que calcula la media ponderada, considerando estratificación, unidades primarias de muestreo (UPM) y factores de expansión.

svymean(~ingreso_autonomo_corregido, hogares_design, na.rm = TRUE)
##                               mean    SE
## ingreso_autonomo_corregido 1236534 12458

A continuación se calcula el intervalo de confianza al 95% para el ingreso autónomo promedio nacional. Se utiliza la función confint() aplicada al resultado de svymean(), lo que permite obtener una estimación del rango en el cual se espera que se encuentre el valor poblacional real, considerando la variabilidad del muestreo complejo:

confint(svymean(~ingreso_autonomo_corregido, hogares_design, 
                level = 0.95, na.rm = TRUE))
##                              2.5 %  97.5 %
## ingreso_autonomo_corregido 1212116 1260952

Ahora procederemos a construir una tabla con el ingreso autónomo promedio por cada región. Para ello, utilizamos el objeto hogares_design, que contiene el diseño muestral complejo. Aplicamos la función svyby() en combinación con svymean() para calcular las medias ponderadas por región, y guardamos el resultado en un nuevo objeto llamado ingreso_region.

ingreso_region <- svyby(
  ~ingreso_autonomo_corregido,
  ~region,
  hogares_design,
  FUN = svymean,
  vartype = "se",
  na.rm = T
)

ingreso_region |> head(,5)
##   region ingreso_autonomo_corregido       se
## 1      1                  1121190.0 29550.94
## 2      2                  1355477.4 43396.56
## 3      3                  1049217.6 36143.24
## 4      4                  1008078.6 39481.92
## 5      5                  1041993.6 20433.73
## 6      6                   979061.2 21373.39

Este comando calcula los intervalos de confianza al 95% para las estimaciones regionales del ingreso autónomo promedio. Se aplica la función confint() al objeto ingreso_region, que fue previamente generado con svyby() y contiene medias ponderadas por región ajustadas al diseño muestral complejo:

ic_95 <- confint(ingreso_region)

ic_95 |> head( , 5)
##       2.5 %  97.5 %
## 1 1063271.2 1179109
## 2 1270421.7 1440533
## 3  978378.1 1120057
## 4  930695.4 1085462
## 5 1001944.3 1082043
## 6  937170.1 1020952

El siguiente bloque de código combina las estimaciones de ingreso promedio por región con sus respectivos intervalos de confianza al 95%, previamente calculados con confint(). Se utiliza cbind() para unir las columnas del objeto ingreso_region con la matriz ic_95, y luego se renombran las nuevas columnas resultantes como ci_inf y ci_sup, que corresponden a los límites inferior y superior del intervalo de confianza:

ingreso_plot <- cbind(ingreso_region, ic_95)
colnames(ingreso_plot)[c(3, 4)] <- c("ci_inf", "ci_sup")

ingreso_plot |> head( ,5)
##   region ingreso_autonomo_corregido   ci_inf    ci_sup  97.5 %
## 1      1                  1121190.0 29550.94 1063271.2 1179109
## 2      2                  1355477.4 43396.56 1270421.7 1440533
## 3      3                  1049217.6 36143.24  978378.1 1120057
## 4      4                  1008078.6 39481.92  930695.4 1085462
## 5      5                  1041993.6 20433.73 1001944.3 1082043
## 6      6                   979061.2 21373.39  937170.1 1020952

A continuación, se complementan las estimaciones del ingreso promedio regional con sus respectivos intervalos de confianza al 95%, lo cual permite evaluar la precisión estadística de cada media. Para ello, se utiliza la función confint() sobre el objeto ingreso_region, que contiene las medias ponderadas generadas con svyby().

ic_95 <- confint(ingreso_region)

ingreso_region <- ingreso_region %>%
  mutate(ingreso_promedio = round(ingreso_autonomo_corregido, 0))

ingreso_region <- cbind(ingreso_region, ic_95)
colnames(ingreso_region)[ncol(ingreso_region) - 1] <- "ic_95_inf"
colnames(ingreso_region)[ncol(ingreso_region)]     <- "ic_95_sup"

ingreso_region <- ingreso_region %>%
  select(region, ingreso_promedio, ic_95_inf, ic_95_sup)
head(ingreso_region, 5)
##   region ingreso_promedio ic_95_inf ic_95_sup
## 1      1          1121190 1063271.2   1179109
## 2      2          1355477 1270421.7   1440533
## 3      3          1049218  978378.1   1120057
## 4      4          1008079  930695.4   1085462
## 5      5          1041994 1001944.3   1082043

Se presenta la visualización del ingreso autónomo promedio por región, complementada con sus intervalos de confianza al 95%. El gráfico utiliza barras para representar el valor central de cada estimación, mientras que las líneas verticales indican el rango de variabilidad estadística asociado a cada región.

library(ggplot2)

ggplot(ingreso_region, aes(x = factor(region), y = ingreso_promedio)) +
  geom_bar(stat = "identity", fill = "#9D98AE") +
  geom_errorbar(
    aes(ymin = ic_95_inf, ymax = ic_95_sup),
    width = 0.2,
    color = "blue"
  ) +
  labs(
    title = "Ingreso Autónomo Promedio por Región.Intervalos de Confianza al 95%",     subtitle = "Elaborado por Cristian Escobedo Catalán",
    caption = "Fuente: Encuesta CASEN 2022",
    x = "Región",
    y = "Ingreso Promedio (en pesos)"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 0, hjust = 1)
  )

ahora se mostrará como estimar el ingreso autónomo promedio del jefe o jefa de hogar, desagregado por región y sexo. Para ello, se utiliza la función svyby() sobre el objeto hogares_design, que incorpora el diseño muestral complejo.

Se especifica como fórmula ~region + sexo, lo que permite calcular medias ponderadas cruzando ambas variables, es decir, se obtiene el ingreso promedio para hombres y mujeres en cada región. Esta desagregación permite analizar posibles desigualdades de ingreso por género a nivel territorial.

ingreso_sexo_region <- svyby(
  ~ingreso_autonomo_corregido,
  ~region + sexo,
  hogares_design,
  FUN = svymean,
  na.rm = TRUE
)

ingreso_sexo_region |> head(,5)
##     region sexo ingreso_autonomo_corregido       se
## 1.1      1    1                    1225592 41244.02
## 2.1      2    1                    1499840 56756.49
## 3.1      3    1                    1168700 51256.60
## 4.1      4    1                    1138977 52317.43
## 5.1      5    1                    1165830 30655.02
## 6.1      6    1                    1101684 34692.92

Luego de calcular el ingreso promedio por región y sexo, se realiza una limpieza del objeto ingreso_sexo_region para facilitar su lectura y visualización. En primer lugar, se transforma la variable sexo en un factor con etiquetas legibles (“Hombre” y “Mujer”). Posteriormente, se redondean los valores de ingreso a enteros para simplificar la presentación, y se seleccionan únicamente las columnas relevantes para el análisis.

Este paso prepara la tabla final que será utilizada en visualizaciones o informes:

ingreso_sexo_region <- ingreso_sexo_region %>%
  mutate(
    sexo = factor(sexo, levels = c(1, 2), labels = c("Hombre", "Mujer")),
    ingreso_promedio = round(ingreso_autonomo_corregido, 0)
  ) %>%
  select(region, sexo, ingreso_promedio)

A continuación, se presenta un gráfico de barras agrupadas que muestra el ingreso autónomo promedio de jefes y jefas de hogar por región, desagregado por sexo. Esta visualización permite comparar, de forma directa, las diferencias de ingreso entre hombres y mujeres en cada territorio. Las barras están diferenciadas por color según sexo, y se incluyen etiquetas con los valores exactos.

ggplot(ingreso_sexo_region, aes(x = factor(region), y = ingreso_promedio, fill = sexo)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +
  geom_text(aes(label = paste0("$", format(ingreso_promedio, big.mark = ".", decimal.mark = ","))),
            position = position_dodge(width = 0.8),
            vjust = -0.5, size = 1.8) +
  scale_fill_manual(values = c("Hombre" = "#9d98ae", "Mujer" = "#ea9087")) +
  labs(
    title = "Ingreso Autónomo Promedio por Región del Jefe y Jefa del hogar",
    subtitle = "Elaborado por Cristian Escobedo Catalán",
    caption = "Fuente Casen 2022",
    x = "Región",
    y = "Ingreso Promedio (en pesos)",
    fill = "Sexo"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 1))

Con el objetivo de evaluar si existen diferencias estadísticamente significativas en el ingreso autónomo promedio entre hombres y mujeres jefes de hogar, se aplica una prueba t de comparación de medias ajustada al diseño muestral complejo.

Para ello, se utiliza la función svyttest() del paquete survey, que extiende la clásica prueba t de Student incorporando correctamente la estratificación, conglomeración y ponderación de la encuesta. Este enfoque asegura que los resultados reflejen adecuadamente la estructura de muestreo y eviten errores de inferencia asociados al uso de funciones no ponderadas.

svyttest(
  ingreso_autonomo_corregido ~ sexo,
  design = hogares_design,
  na.rm = TRUE
)
## 
##  Design-based t-test
## 
## data:  ingreso_autonomo_corregido ~ sexo
## t = -16.695, df = 11306, p-value < 2.2e-16
## alternative hypothesis: true difference in mean is not equal to 0
## 95 percent confidence interval:
##  -351132.9 -277344.0
## sample estimates:
## difference in mean 
##          -314238.4

Este enfoque, basado en el paquete survey, permite estimar el ingreso promedio por región de forma estadísticamente robusta, incorporando adecuadamente la complejidad del diseño muestral. A diferencia del método directo con factores de expansión, este método ofrece no solo estimaciones puntuales, sino también errores estándar e intervalos de confianza, lo que mejora sustancialmente la calidad y la fiabilidad del análisis.

3. Comparación entre métodos.

A continuación, se presenta una tabla comparativa entre los dos enfoques abordados en este documento: el cálculo manual utilizando factores de expansión, y el uso del paquete survey. Esta comparación permite visualizar con claridad las ventajas del segundo enfoque cuando se trabaja con encuestas de diseño complejo como CASEN.

Elemento Manual (factores de expansión) Método especializado (survey)
Usa factores de expansión
Considera estratificación (varstrat) No
Considera unidades primarias (varunit) No
Calcula errores estándar válidos No
Calcula intervalos de confianza (IC 95%) No
Calcula coeficientes de variación (CV) No
Compatible con estimaciones oficiales (CASEN) Parcialmente
Permite modelar regresiones ajustadas No
Ideal para análisis exploratorios simples Puede ser más complejo
Ideal para análisis con fines de inferencia No

Esta comparación resume las principales diferencias entre el enfoque manual basado en factores de expansión y el uso del paquete survey. Si bien el primer método puede ser útil para análisis exploratorios rápidos, es el segundo el que garantiza estimaciones estadísticamente válidas, especialmente cuando se requiere precisión, rigor metodológico y comparabilidad con fuentes oficiales. Por tanto, el uso del diseño muestral completo no solo es recomendable, sino necesario en contextos de análisis aplicados e inferenciales.

4. Conclusión.

Este documento ha mostrado, mediante un ejemplo aplicado con datos de la Encuesta de Caracterización Socioeconómica Nacional (CASEN), la importancia de considerar el diseño muestral complejo en la estimación de estadísticas poblacionales. A través de la comparación entre el uso directo de factores de expansión y el uso del paquete survey de R, se pueden extraer las siguientes conclusiones:

  • Los factores de expansión permiten ajustar las estimaciones para que representen a la población total, y son una herramienta sencilla y efectiva para obtener indicadores como ingresos promedio o proporciones de pobreza. Sin embargo, este enfoque por sí solo no considera la estructura del diseño muestral, lo que limita su capacidad para calcular errores estándar, intervalos de confianza o realizar pruebas estadísticas válidas.

  • El paquete survey ofrece una solución estadísticamente rigurosa para el análisis de encuestas complejas. Permite incorporar elementos como estratos, conglomerados y ponderadores, ajustando las estimaciones y sus medidas de variabilidad al diseño real de la encuesta. Esto es especialmente relevante en estudios que buscan inferencias confiables o comparaciones entre grupos.

  • Se observó que las visualizaciones y tablas generadas con survey son más consistentes con los resultados oficiales publicados por instituciones como el Ministerio de Desarrollo Social y Familia, tanto en estimaciones puntuales como en sus márgenes de error.

  • A pesar de que el enfoque directo con ponderadores puede ser más accesible y rápido para usuarios principiantes, la omisión del diseño muestral puede inducir a una falsa sensación de precisión, comprometiendo la validez de los resultados, especialmente en contextos de toma de decisiones.

Finalmente, el documento demuestra que es posible construir informes reproducibles, visualmente atractivos y técnicamente robustos mediante R y RMarkdown, promoviendo buenas prácticas en el uso de datos públicos y fortaleciendo la transparencia en el análisis estadístico aplicado a la política social.

5. Bibliografia.

Anexo

A. Diccionario de variables clave utilizadas en el análisis

Variable Descripción
folio Identificador del hogar
id_persona Identificador único de la persona
paren_jef_hogar Relación con el jefe/a de hogar (1 = jefe/a)
ingreso_autonomo_corregido (yautcorh) Ingreso autónomo corregido del hogar
pobreza Condición de pobreza (1 = extremo, 2 = no extremo, 3 = no pobre)
region Región de residencia
expr Factor de expansión a nivel regional
varunit Unidad primaria de muestreo (UPM)
varstrat Estrato del diseño muestral

Nota: las variables pueden tener nombres originales de CASEN (yautcorh, pco1, etc.) que aquí han sido renombradas para mayor legibilidad.


B. Estructura del objeto svydesign() utilizado

Para el análisis con diseño muestral complejo, se creó un objeto svydesign con la siguiente estructura:

casen_design <- svydesign(
  ids = ~varunit,
  strata = ~varstrat,
  weights = ~expr,
  data = hogares,
  nest = TRUE
)

C. Funciones del paquete survey()

i. Definición del diseño muestral.

Función Descripción
svydesign() Crea un objeto de diseño muestral complejo con estratos, UPM y pesos.
twophase() Define diseños de encuesta en dos fases.
subset() Permite trabajar con subconjuntos del diseño sin perder su estructura.
update() Modifica variables internas del diseño (como mutate() para diseños).

ii. Estadísticas básicas

Función Descripción
svymean() Calcula medias ponderadas por el diseño.
svytotal() Calcula totales poblacionales.
svyvar() Calcula varianzas y covarianzas ajustadas.
svyquantile() Calcula cuantiles (mediana, percentiles).
svytable() Crea tablas de frecuencias ponderadas.
svyby() Aplica funciones (media, total) por subgrupos (como group_by() en dplyr).
svyratio() Estima la razón entre dos variables.

iii. Proporciones y conteo

Función Descripción
svyprop() Estima proporciones para variables categóricas (alias de svymean() con factores).
svytotal() También puede usarse para contar unidades si se aplica a variables dummy.

iv. Modelos estadísticos

Función Descripción
svyglm() Modelos lineales o generalizados con diseño complejo.
svyolr() Modelos de regresión logística ordinal.
svycoxph() Modelos de Cox para análisis de supervivencia.
svyloglin() Modelos log-lineales para tablas multidimensionales.

v Pruebas de hipótesis.

Función Descripción
svyttest() Prueba t para comparar dos medias ajustadas por diseño.
svychisq() Prueba chi-cuadrado para tablas de contingencia ponderadas.
svyanova() ANOVA para modelos ajustados con svyglm.

vi Errores estándar, intervalos y precisión.

Función Descripción
SE() Extrae error estándar del estimador.
confint() Calcula intervalos de confianza.
cv() Coeficiente de variación.
vcov() Matriz de varianzas-covarianzas.

vii Replicación y calibración.

Función Descripción
as.svrepdesign() Convierte diseño en uno basado en replicación (ej. BRR, Jackknife).
withReplicates() Realiza estimaciones usando replicados.
postStratify() Ajusta el diseño por postestratificación.
calibrate() Ajusta pesos con técnicas como raking o calibración externa.

viii Utilidades.

Función Descripción
deff() Calcula el efecto del diseño muestral (Design Effect).
weights() Extrae los pesos finales aplicados a cada observación.
predict() Genera predicciones a partir de modelos ajustados (svyglm).