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.
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.
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.
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.
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.
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
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
Para desarrollar esta actividad, utilizaremos las siguientes librerías en R:
library(tidyverse)
library(survey)
library(ggplot2)
library(haven)
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")
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
)
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
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:
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))
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.
surveyEn 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.
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)
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
)
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()
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.
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 | Sí | Sí |
Considera estratificación (varstrat) |
No | Sí |
Considera unidades primarias (varunit) |
No | Sí |
| Calcula errores estándar válidos | No | Sí |
| Calcula intervalos de confianza (IC 95%) | No | Sí |
| Calcula coeficientes de variación (CV) | No | Sí |
| Compatible con estimaciones oficiales (CASEN) | Parcialmente | Sí |
| Permite modelar regresiones ajustadas | No | Sí |
| Ideal para análisis exploratorios simples | Sí | Puede ser más complejo |
| Ideal para análisis con fines de inferencia | No | Sí |
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.
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.
Ministerio de Desarrollo Social y Familia (2023). Encuesta de Caracterización Socioeconómica Nacional CASEN 2022. Disponible en: https://observatorio.ministeriodesarrollosocial.gob.cl/encuesta-casen-2022
Ministerio de Desarrollo Social y Familia (2023). Ficha metodológica CASEN 2022. Santiago, Chile. Disponible en https://observatorio.ministeriodesarrollosocial.gob.cl/encuesta-casen-2022
Lumley, T. (2010). Complex Surveys: A Guide to Analysis Using R. John Wiley & Sons.(Autor del paquete survey; excelente referencia teórica y práctica).
Lumley, T. (2024). survey: Analysis of Complex Survey Samples. R package version 4.3. Disponible en: https://CRAN.R-project.org/package=survey
Instituto Nacional de Estadísticas (INE). Guía de muestreo para encuestas complejas. Disponible en: https://www.ine.cl
Escobedo Catalán, C. (2024). Estimación con factores de expansión en R. Publicación técnica en RPubs. Disponible en: https://rpubs.com/cescobedo/1223066
| 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.
svydesign() utilizadoPara 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
)
survey()| 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). |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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). |