complexr es un paquete de R que proporciona un marco de trabajo orientado a tidy para el análisis de datos de encuestas complejas. Soporta:
Todas las funciones de estimación tienen en cuenta la estratificación, el agrupamiento y los pesos de muestreo desiguales, siguiendo el enfoque de linealización descrito en Lumley (2010) y Särndal et al. (1992).
Esta sección establece la notación estadística utilizada a lo largo de la viñeta, siguiendo las convenciones de Gutiérrez et al. (2025).
Sea \(U = \{1, 2, \ldots, N\}\) la población finita de tamaño \(N\), y \(s \subset U\) la muestra seleccionada bajo un diseño probabilístico \(p(s)\). Para cada unidad \(k \in U\), se define \(y_k\) como el valor de la variable de interés. El total poblacional y la media poblacional se definen respectivamente como:
\[ Y = \sum_{k \in U} y_k, \qquad \bar{Y} = \frac{Y}{N}. \]
La probabilidad de que la unidad \(k\) sea incluida en la muestra se denota
\(\pi_k = \Pr(k \in s) > 0\). El
peso básico de diseño es \(d_k = 1/\pi_k\). En la práctica, estos
pesos se modifican para incorporar ajustes por no respuesta o
calibración a totales conocidos, obteniéndose los pesos
ajustados \(w_k\). En esta
documentación, \(w_k\) denota los pesos
finales disponibles en el archivo de microdatos (variable
weight).
El estimador de Horvitz–Thompson (HT) del total poblacional es (Horvitz and Thompson 1952):
\[ \hat{Y}_{HT} = \sum_{k \in s} d_k\, y_k, \]
y el estimador del tamaño poblacional se define como:
\[ \hat{N}_{HT} = \sum_{k \in s} d_k. \]
Cuando se trabaja con pesos ajustados \(w_k\), el estimador HT ponderado toma la forma \(\hat{Y}_w = \sum_{k \in s} w_k\, y_k\).
La varianza del estimador HT se estima como (Särndal et al. 1992):
\[ \hat{V}_p\!\left(\hat{Y}_{HT}\right) = \sum_{k \in s}\sum_{l \in s} \bigl(d_k d_l - d_{kl}\bigr)\, y_k\, y_l, \]
donde \(d_{kl} = 1/\pi_{kl}\) y \(\pi_{kl} = \Pr(k, l \in s)\) son las probabilidades de inclusión de segundo orden. En la práctica se emplean métodos equivalentes como la linealización de Taylor o la replicación (jackknife, bootstrap), que no requieren el cálculo explícito de \(\pi_{kl}\).
Para un diseño con \(H\) estratos, \(\alpha_h\) unidades primarias de muestreo (UPM) en el estrato \(h\) y \(n_{h\alpha}\) observaciones en la UPM \(\alpha\), el estimador del total es:
\[ \hat{Y}_{HT} = \sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h} \sum_{k=1}^{n_{h\alpha}} \omega_{h\alpha k}\, y_{h\alpha k}, \]
donde \(\omega_{h\alpha k}\) es el peso ajustado del individuo \(k\) en la UPM \(\alpha\) del estrato \(h\).
Siguiendo a Kish (1965), el efecto del diseño se define como la razón entre la varianza del estimador bajo el diseño complejo y la varianza del mismo estimador bajo un muestreo aleatorio simple (MAS) de igual tamaño:
\[ \widehat{\text{DEFF}} = \frac{\hat{V}_p(\hat{\theta})}{\hat{V}_{\text{SRS}}(\hat{\theta})}. \]
Un valor \(\widehat{\text{DEFF}} > 1\) indica que el diseño complejo incrementa la varianza con respecto al MAS, mientras que \(\widehat{\text{DEFF}} < 1\) señala una ganancia de eficiencia, típica de diseños estratificados con estratos homogéneos.
El paquete incluye generate_example_data(), que genera
un conjunto de datos jerárquico de tres niveles (UPMs → hogares →
individuos), representativo de un diseño de encuesta multietápica
estratificada.
data <- generate_example_data(n_upm = 100, seed = 123)
dplyr::glimpse(data)
#> Rows: 3,438
#> Columns: 15
#> $ strata <chr> "S3", "S3", "S3", "S3", "S3", "S3", "S3", "S3", "S3", "S3",…
#> $ upm <chr> "UPM1", "UPM1", "UPM1", "UPM1", "UPM1", "UPM1", "UPM1", "UP…
#> $ hogar_id <chr> "UPM1_H1", "UPM1_H1", "UPM1_H1", "UPM1_H1", "UPM1_H1", "UPM…
#> $ persona_id <chr> "UPM1_H1_P1", "UPM1_H1_P2", "UPM1_H1_P3", "UPM1_H1_P4", "UP…
#> $ weight <dbl> 1326.3970, 1326.3970, 1326.3970, 1326.3970, 1326.3970, 851.…
#> $ region <chr> "South", "South", "South", "South", "South", "Center", "Nor…
#> $ sexo <chr> "Male", "Female", "Male", "Female", "Female", "Male", "Fema…
#> $ area <chr> "Urban", "Urban", "Urban", "Urban", "Urban", "Rural", "Rura…
#> $ edad <dbl> 54, 42, 22, 35, 46, 41, 49, 63, 42, 8, 36, 0, 31, 21, 18, 2…
#> $ educacion <fct> Higher, Secondary, Higher, Higher, Higher, Higher, Secondar…
#> $ empleo <fct> Unemployed, Formal, Formal, Informal, Formal, Informal, Inf…
#> $ ingreso_pc <dbl> 1328.0991, 1328.0991, 1328.0991, 1328.0991, 1328.0991, 817.…
#> $ gasto_pc <dbl> 1100.2257, 1100.2257, 1100.2257, 1100.2257, 1100.2257, 623.…
#> $ pobre <int> 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,…
#> $ ingreso2 <dbl> 1143.2572, NA, 1363.3893, 1477.1621, 1583.9139, NA, 663.904…| Variable | Tipo | Descripción |
|---|---|---|
strata |
character | Identificador de estrato (\(h = 1,\ldots,H\)) |
upm |
character | Unidad primaria de muestreo \(\alpha\) dentro del estrato \(h\) |
hogar_id |
character | Identificador de hogar |
persona_id |
character | Identificador de individuo \(k\) |
weight |
numeric | Peso ajustado \(w_k\) (inverso de la prob. de inclusión, calibrado) |
region |
character | Dominio de estimación: Norte / Centro / Sur |
sexo |
character | Sexo: Hombre / Mujer |
area |
character | Área: Urbana / Rural |
edad |
numeric | Edad en años |
educacion |
factor | Nivel educativo: Primaria / Secundaria / Superior |
empleo |
factor | Condición de empleo: Formal / Informal / Desocupado |
ingreso_pc |
numeric | Ingreso per cápita del hogar (\(y_k\)) |
gasto_pc |
numeric | Gasto per cápita del hogar |
pobre |
numeric | Indicador binario de pobreza: \(y_k \in \{0, 1\}\) |
ingreso2 |
numeric | Variable auxiliar de ingreso (10 % de valores faltantes) |
La simulación garantiza las siguientes consistencias:
NA en
educación.El ingreso del hogar sigue un modelo gamma jerárquico con efectos aleatorios de UPM y hogar:
\[ Y_{h\alpha} \sim \text{Gamma}\!\left(\alpha_0,\; \beta_0 \cdot \exp(u_{h\alpha} + v_{h\alpha k})\right) \]
donde \(u_{h\alpha} \sim N(0, 0{,}09)\) es el efecto de UPM y \(v_{h\alpha k} \sim N(0, 0{,}04)\) es el efecto de hogar.
Para cargar sus propios microdatos utilice
read_survey_data(). Los formatos soportados se detectan
automáticamente a partir de la extensión del archivo.
# CSV
data <- read_survey_data("encuesta.csv")
# SPSS
data <- read_survey_data("encuesta.sav")
# Stata
data <- read_survey_data("encuesta.dta")
# Excel
data <- read_survey_data("encuesta.xlsx")La función retorna los datos como un tibble y adjunta
atributos de metadatos: source_path,
source_format, n_rows,
n_cols.
mutate_survey_data() crea nuevas variables a partir de
una lista nombrada de fórmulas unilaterales, evaluadas secuencialmente
en el entorno del marco de datos.
data <- mutate_survey_data(
data,
definitions = list(
log_ingreso = ~ log(ingreso_pc + 1),
ratio_gasto = ~ gasto_pc / ingreso_pc
)
)
dplyr::select(data, ingreso_pc, log_ingreso, ratio_gasto) |> head(4)
#> # A tibble: 4 × 3
#> ingreso_pc log_ingreso ratio_gasto
#> <dbl> <dbl> <dbl>
#> 1 1328. 7.19 0.828
#> 2 1328. 7.19 0.828
#> 3 1328. 7.19 0.828
#> 4 1328. 7.19 0.828as_survey_design_tbl() envuelve
survey::svydesign() y retorna un objeto
tbl_svy compatible con el ecosistema srvyr
/ survey (Lumley
2010).
design <- as_survey_design_tbl(
data = data,
weight = "weight",
strata = "strata",
cluster = "upm",
nest = TRUE
)
class(design)
#> [1] "tbl_svy" "survey.design2" "survey.design"Configuraciones soportadas:
| Configuración | Argumentos |
|---|---|
| Muestreo aleatorio simple (MAS) | solo weight |
| Estratificado | weight + strata |
| Por conglomerados (etapa única) | weight + cluster |
| Estratificado multietápico | weight + strata +
cluster |
| Con corrección de población finita | cualquiera de los anteriores + fpc |
La función valida que los pesos \(w_k\) sean estrictamente positivos (\(w_k > 0\)) y sin valores faltantes, y
opcionalmente verifica que las UPMs no se compartan entre estratos
(check_psu = TRUE).
Nota: Cuando un estrato \(h\) contiene una única UPM (\(\alpha_h = 1\)), la estimación de \(\hat{V}_p\) por linealización de Taylor no está definida. La función establece automáticamente
options(survey.lonely.psu = "adjust")para usar la aproximación conservadora centrada en la media del estrato (Cochran 1977).
describe_survey_design(design)
#> # A tibble: 1 × 7
#> n_obs n_strata n_clusters weight_min weight_max weight_mean weight_cv
#> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 3438 5 100 205. 1500. 848. 0.444La tabla de diagnóstico reporta:
| Columna | Descripción |
|---|---|
n_obs |
Tamaño total de la muestra \(n = \lvert s \rvert\) |
n_strata |
Número de estratos \(H\) |
n_clusters |
Número de UPMs \(\sum_h \alpha_h\) |
weight_min |
\(\min_{k \in s} w_k\) |
weight_max |
\(\max_{k \in s} w_k\) |
weight_mean |
\(\bar{w} = \hat{N}_{HT}/n\) |
weight_cv |
\(CV(w) = s_w / \bar{w}\) |
Todos los estimadores se calculan con estimate_survey().
La función retorna un tibble con las siguientes
columnas:
| Columna | Descripción |
|---|---|
variable |
Nombre de la variable objetivo |
estimator |
Tipo de estimador |
estimate |
Estimación puntual \(\hat{\theta}\) |
se |
Error estándar \(ee(\hat{\theta}) = \sqrt{\hat{V}_p(\hat{\theta})}\) |
cv |
Coeficiente de variación \(CV = ee(\hat{\theta})/\hat{\theta}\) |
deff |
Efecto de diseño \(\widehat{\text{DEFF}}\) |
lci |
Límite inferior del intervalo de confianza |
uci |
Límite superior del intervalo de confianza |
quality |
Etiqueta de precisión basada en el \(CV\) |
Etiquetas de precisión (basadas en el coeficiente de variación):
| \(CV\) | Etiqueta |
|---|---|
| \(< 5\%\) | Precisión muy alta |
| \(5\%\)–\(10\%\) | Precisión alta |
| \(10\%\)–\(20\%\) | Precisión aceptable |
| \(20\%\)–\(30\%\) | Usar con precaución |
| \(\geq 30\%\) | Precisión baja |
El total poblacional ponderado se estima mediante el estimador HT:
\[ \hat{Y}_w = \sum_{k \in s} w_k\, y_k, \qquad \hat{N}_w = \sum_{k \in s} w_k. \]
La media ponderada (estimador de razón de Horvitz–Thompson) es:
\[ \bar{y}_w = \frac{\hat{Y}_w}{\hat{N}_w} = \frac{\displaystyle\sum_{k \in s} w_k\, y_k}{\displaystyle\sum_{k \in s} w_k}. \]
La varianza de \(\bar{y}_w\) se estima por linealización de Taylor (Särndal et al. 1992):
\[ \hat{V}_p\!\left(\bar{y}_w\right) = \frac{1}{\hat{N}_w^2}\, \hat{V}_p\!\left(\hat{Y}_w\right). \]
r_media <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "mean"
)
r_media
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc mean 1579. 71.6 0.0453 8.05 1439. 1720. Very high precis…El estimador HT del total, bajo un diseño estratificado con UPMs, es:
\[ \hat{Y}_w = \sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h}\sum_{k=1}^{n_{h\alpha}} \omega_{h\alpha k}\, y_{h\alpha k}. \]
Su varianza se estima por estratos y conglomerados:
\[ \hat{V}_p\!\left(\hat{Y}_w\right) = \sum_{h=1}^{H} \hat{V}_{p,h}\!\left(\hat{Y}_{w,h}\right), \]
donde \(\hat{V}_{p,h}\) se calcula dentro de cada estrato \(h\) usando los residuos de los totales de UPM respecto a su media en el estrato.
r_total <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "total"
)
r_total
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc total 4607014476. 261136568. 0.0567 12.6 4.10e9 5.12e9 High p…Para una variable indicadora \(y_k \in \{0, 1\}\), la proporción poblacional \(\pi\) se estima como:
\[ \hat{p} = \frac{\displaystyle\sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h} \sum_{k=1}^{n_{h\alpha}} \omega_{h\alpha k}\, I(y_k = 1)} {\displaystyle\sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h} \sum_{k=1}^{n_{h\alpha}} \omega_{h\alpha k}} = \frac{\hat{N}_1}{\hat{N}_w}. \]
La varianza de \(\hat{p}\) se aproxima por linealización de Taylor (Heeringa et al. 2017):
\[ \hat{V}_p(\hat{p}) \;\dot{=}\; \frac{\hat{V}_p(\hat{N}_1) + \hat{p}^2\,\hat{V}_p(\hat{N}_w) - 2\hat{p}\,\widehat{\text{cov}}(\hat{N}_1, \hat{N}_w)} {\hat{N}_w^2}. \]
r_pobre <- estimate_survey(
design = design,
variable = "pobre",
estimator = "prop"
)
r_pobre
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 pobre prop 0.259 0.00936 0.0361 1.57 0.241 0.277 Very high precis…Para una variable con categorías \(\mathcal{K} = \{k_1, k_2, \ldots\}\), la proporción de la categoría \(k\) es:
\[ \hat{p}_k = \frac{\displaystyle\sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h} \sum_{i=1}^{n_{h\alpha}} \omega_{h\alpha i}\, I(y_i = k)} {\displaystyle\sum_{h=1}^{H}\sum_{\alpha=1}^{\alpha_h} \sum_{i=1}^{n_{h\alpha}} \omega_{h\alpha i}} = \frac{\hat{N}_k}{\hat{N}_w}. \]
La función construye automáticamente la variable indicadora \(I(y_i = k)\) para cada categoría:
r_empleo <- estimate_survey(
design = design,
variable = "empleo",
estimator = "prop"
)
r_empleo
#> # A tibble: 3 × 10
#> variable estimator estimate se cv deff empleo lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl> <chr>
#> 1 empleo prop 0.331 0.00815 0.0246 1.03 Formal 0.315 0.347 Very h…
#> 2 empleo prop 0.341 0.00903 0.0265 1.25 Informal 0.323 0.359 Very h…
#> 3 empleo prop 0.328 0.00866 0.0264 1.17 Unemploy… 0.311 0.345 Very h…El estimador de razón de dos totales poblacionales es (Cochran 1977):
\[ \hat{R} = \frac{\hat{Y}_w}{\hat{X}_w} = \frac{\displaystyle\sum_{k \in s} w_k\, y_k} {\displaystyle\sum_{k \in s} w_k\, x_k}. \]
La varianza se estima por linealización de Taylor de primer orden:
\[ \hat{V}_p(\hat{R}) \approx \frac{1}{\hat{X}_w^2}\, \hat{V}_p\!\left(\hat{Y}_w - \hat{R}\,\hat{X}_w\right). \]
Numérico / Numérico:
r_razon <- estimate_survey(
design = design,
estimator = "ratio",
numerator = "ingreso_pc",
denominator = "gasto_pc"
)
r_razon
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc_over_… ratio 1.34 0.00579 0.00432 NA 1.33 1.35 Very h…Categórico / Categórico — razón de trabajadores Formales respecto a Informales (\(\hat{N}_{\text{Formal}} / \hat{N}_{\text{Informal}}\)):
r_razon_cat <- estimate_survey(
design = design,
estimator = "ratio",
numerator = "empleo",
denominator = "empleo",
ratio_num_level = "Formal",
ratio_den_level = "Informal"
)
r_razon_cat
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 empleo_over_empleo ratio 0.970 0.0429 0.0442 NA 0.886 1.05 Very hi…Numérico / Categórico — ingreso promedio entre trabajadores formales, equivalente a \(\hat{Y}_{\text{ingreso}} / \hat{N}_{\text{Formal}}\):
r_razon_mix <- estimate_survey(
design = design,
estimator = "ratio",
numerator = "ingreso_pc",
denominator = "empleo",
ratio_den_level = "Formal"
)
r_razon_mix
#> # A tibble: 1 × 9
#> variable estimator estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc_over_emp… ratio 4773. 242. 0.0507 NA 4299. 5247. High p…Los cuantiles se derivan de la función de distribución acumulada empírica ponderada (Woodruff 1952):
\[ \hat{F}_w(t) = \frac{\displaystyle\sum_{k \in s} w_k\, I(y_k \le t)} {\displaystyle\sum_{k \in s} w_k} = \frac{\hat{N}(y \le t)}{\hat{N}_w}. \]
El cuantil de orden \(p \in (0,1)\) se define como:
\[ \hat{q}_p = \inf\bigl\{t : \hat{F}_w(t) \ge p\bigr\}. \]
Los intervalos de confianza se calculan con el método de linealización de Woodruff, que transforma el problema a la escala de la proporción acumulada:
\[ IC_p[\hat{q}_p] = \left\{t : \hat{F}_w(t) \in \left[p \pm t_{1-\alpha/2,\,gl}\; ee(\hat{F}_w(t))\right]\right\}. \]
r_cuant <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "quantile",
probs = c(0.10, 0.25, 0.50, 0.75, 0.90)
)
r_cuant
#> # A tibble: 5 × 10
#> variable estimator quantile estimate se cv deff lci uci quality
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc quantile 0.1 499. 28.0 0.0562 NA 444. 554. High pr…
#> 2 ingreso_pc quantile 0.25 736. 32.3 0.0438 NA 673. 800. Very hi…
#> 3 ingreso_pc quantile 0.5 1127. 42.0 0.0373 NA 1045. 1209. Very hi…
#> 4 ingreso_pc quantile 0.75 1895. 106. 0.0561 NA 1686. 2103. High pr…
#> 5 ingreso_pc quantile 0.9 3196. 221. 0.0691 NA 2763. 3629. High pr…En encuestas de hogares es frecuente estimar parámetros para subpoblaciones o dominios \(U_d \subset U\). El estimador de razón en el dominio \(d\) es:
\[ \bar{y}_{w,d} = \frac{\displaystyle\sum_{k \in s} w_k\, y_k\, I(k \in U_d)} {\displaystyle\sum_{k \in s} w_k\, I(k \in U_d)} = \frac{\hat{Y}_{w,d}}{\hat{N}_{w,d}}. \]
La estimación de \(\hat{V}_p(\bar{y}_{w,d})\) se realiza sobre la muestra completa \(s\), preservando la estructura del diseño y evitando el sesgo por subsetting incorrecto (Lumley 2010).
El efecto de diseño para el dominio \(d\) se define de forma análoga al DEFF global (Kish 1965):
\[ \widehat{\text{DEFF}}_d = \frac{\hat{V}_p(\hat{\theta}_d)} {\hat{V}_{\text{SRS}}(\hat{\theta}_d)}, \]
donde \(\hat{V}_{\text{SRS}}(\hat{\theta}_d)\) es la varianza que se obtendría bajo un MAS restringido al dominio \(d\). Para la media de dominio, esta expresión se simplifica a:
\[ \hat{V}_{\text{SRS}}(\bar{y}_{w,d}) = \left(1 - \frac{n_d}{N_d}\right)\frac{S_{y,d}^2}{n_d}, \]
con \(n_d = \sum_{k \in s} I(k \in U_d)\) el tamaño muestral en el dominio, \(N_d \approx \hat{N}_{w,d}\) el tamaño poblacional estimado del dominio, y \(S_{y,d}^2\) la varianza muestral no ponderada dentro del dominio. Valores \(\widehat{\text{DEFF}}_d > 1\) indican que la conglomeración o la ponderación desigual inflan la varianza incluso dentro del dominio.
El argumento by controla los dominios de estimación:
r_region <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "mean",
by = "region"
)
r_region
#> # A tibble: 3 × 10
#> variable estimator region estimate se cv deff lci uci quality
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc mean Center 1597. 88.6 0.0555 4.03 1423. 1770. High prec…
#> 2 ingreso_pc mean North 1616. 85.2 0.0527 3.62 1449. 1783. High prec…
#> 3 ingreso_pc mean South 1523. 71.1 0.0467 2.89 1384. 1662. Very high…Se admiten múltiples variables de dominio (dominios cruzados \(U_{d_1} \cap U_{d_2}\)):
r_region_area <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "mean",
by = c("region", "area")
)
r_region_area
#> # A tibble: 6 × 11
#> # Groups: region [3]
#> variable estimator region area estimate se cv deff lci uci
#> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ingreso_pc mean Center Rural 1642. 109. 0.0663 2.91 1429. 1856.
#> 2 ingreso_pc mean Center Urban 1541. 110. 0.0713 3.44 1325. 1756.
#> 3 ingreso_pc mean North Rural 1687. 115. 0.0679 2.76 1462. 1911.
#> 4 ingreso_pc mean North Urban 1545. 90.9 0.0588 2.57 1367. 1723.
#> 5 ingreso_pc mean South Rural 1512. 91.6 0.0606 2.39 1332. 1691.
#> 6 ingreso_pc mean South Urban 1536. 89.0 0.0579 2.29 1362. 1711.
#> # ℹ 1 more variable: quality <chr>Proporciones por dominio:
r_pobre_region <- estimate_survey(
design = design,
variable = "pobre",
estimator = "prop",
by = "region"
)
r_pobre_region
#> # A tibble: 3 × 10
#> variable estimator region estimate se cv deff lci uci quality
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 pobre prop Center 0.250 0.0155 0.0621 1.42 0.220 0.281 High preci…
#> 2 pobre prop North 0.252 0.0132 0.0523 1.11 0.227 0.278 High preci…
#> 3 pobre prop South 0.275 0.0148 0.0537 1.24 0.246 0.304 High preci…format_results_table() redondea columnas numéricas,
calcula el \(CV\) o los intervalos de
confianza faltantes, y garantiza que la salida contenga siempre las
columnas estimate, se, cv,
lci y uci.
format_results_table(r_region, digits = 3)
#> # A tibble: 3 × 10
#> variable estimator region estimate se cv deff lci uci quality
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso_pc mean Center 1597. 88.6 0.056 4.03 1423. 1770. High preci…
#> 2 ingreso_pc mean North 1616. 85.2 0.053 3.62 1449. 1783. High preci…
#> 3 ingreso_pc mean South 1523. 71.1 0.047 2.89 1384. 1662. Very high …plot_results_bar() genera un gráfico de barras de
ggplot2 con barras de error que representan el intervalo de
confianza \([\hat{\theta} - t\,
ee(\hat{\theta}),\; \hat{\theta} + t\, ee(\hat{\theta})]\). Las
variables de dominio se detectan automáticamente como cualquier columna
que no forme parte de las columnas de salida estándar.
Ingreso per cápita por región — \(\bar{y}_{w,d}\) con IC 95%
Ingreso per cápita por región y área — \(\bar{y}_{w,d}\) con IC 95%
Los gráficos de proporción restringen automáticamente el eje \(y\) a \([0, 1]\):
Tasa de pobreza por región — \(\hat{p}_d\) con IC 95%
El paquete incluye una aplicación Shiny interactiva completa que cubre todo el proceso de análisis:
Inicie la aplicación con:
library(complexr)
# 1. Generar / cargar datos
data <- generate_example_data(n_upm = 100, seed = 2024)
# 2. Derivar nuevas variables
data <- mutate_survey_data(
data,
definitions = list(
log_ingreso = ~ log(ingreso_pc + 1)
)
)
# 3. Construir diseño muestral (estratificado multietápico)
design <- as_survey_design_tbl(
data = data,
weight = "weight",
strata = "strata",
cluster = "upm",
nest = TRUE
)
# 4. Diagnosticar el diseño
describe_survey_design(design)
#> # A tibble: 1 × 7
#> n_obs n_strata n_clusters weight_min weight_max weight_mean weight_cv
#> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 3371 5 100 208. 1498. 850. 0.439
# 5. Estimar media por dominio y formatear
res <- estimate_survey(
design = design,
variable = "ingreso_pc",
estimator = "mean",
by = c("region", "area")
)
format_results_table(res, digits = 2)
#> # A tibble: 6 × 11
#> variable estimator region area estimate se cv deff lci uci quality
#> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 ingreso… mean Center Rural 1559. 103. 0.07 2.13 1357. 1762. High p…
#> 2 ingreso… mean Center Urban 1482. 85.7 0.06 3.03 1314. 1650. High p…
#> 3 ingreso… mean North Rural 1540. 106. 0.07 2.76 1331. 1748. High p…
#> 4 ingreso… mean North Urban 1512. 71.0 0.05 1.71 1373. 1652. Very h…
#> 5 ingreso… mean South Rural 1520. 86.8 0.06 2.65 1349. 1690. High p…
#> 6 ingreso… mean South Urban 1474. 77.3 0.05 1.89 1322. 1625 High p…