complexr: Análisis de Datos de Encuestas Complejas

Stalyn Guerrero Gómez

2026-06-30

Descripción general

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).

1 Marco conceptual y notación

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).

1.1 Población y muestra

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}. \]

1.2 Pesos de diseño y pesos ajustados

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).

1.3 Estimador de Horvitz–Thompson

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\).

1.4 Varianza bajo el enfoque de diseño

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}\).

1.5 Diseño estratificado multietápico

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\).

1.6 Efecto del diseño (DEFF)

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.

2 Instalación

# Instalar desde GitHub
# install.packages("remotes")
remotes::install_github("stalynGuerrero/complexr")
library(complexr)

3 Datos simulados

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…

3.1 Variables

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)

3.2 Jerarquía y consistencia interna

La simulación garantiza las siguientes consistencias:

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.

4 Lectura de datos externos

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.

5 Derivación de variables

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.828

6 Diseño muestral

6.1 Construcción del objeto de diseño

as_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).

6.2 Diagnóstico del 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  3438        5        100       205.      1500.        848.     0.444

La 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}\)

7 Estimación

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

7.1 Media poblacional

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…

7.2 Total poblacional

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…

7.3 Proporciones

7.3.1 Variable binaria

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…

7.3.2 Variable categórica multinomial

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…

7.4 Estimador de razón

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…

7.5 Cuantiles

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…

8 Estimación por dominios

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).

8.1 Efecto de diseño de dominio

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…

9 Presentación de resultados

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 …

10 Visualización

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.

plot_results_bar(r_region)
Ingreso per cápita por región — $\bar{y}_{w,d}$ con IC 95%

Ingreso per cápita por región — \(\bar{y}_{w,d}\) con IC 95%

plot_results_bar(r_region_area)
Ingreso per cápita por región y área — $\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]\):

plot_results_bar(r_pobre_region)
Tasa de pobreza por región — $\hat{p}_d$ con IC 95%

Tasa de pobreza por región — \(\hat{p}_d\) con IC 95%


11 Aplicación Shiny

El paquete incluye una aplicación Shiny interactiva completa que cubre todo el proceso de análisis:

  1. Datos — cargue CSV / RDS / XLSX o use los datos de ejemplo integrados
  2. Diseño muestral — elija MAS, estratificado o conglomerados multietápico; seleccione las variables \(w_k\), \(h\), \(\alpha\); consulte la teoría con MathJax
  3. Estimación — seleccione estimador (\(\bar{y}_w\), \(\hat{Y}_w\), \(\hat{p}_k\), \(\hat{R}\), \(\hat{q}_p\)), variable objetivo y dominios; ejecute e inspeccione resultados con indicadores de precisión basados en el \(CV\)

Inicie la aplicación con:

ComplexSurvey_app()

12 Ejemplo de flujo de trabajo completo

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…

Referencias

Cochran, William G. 1977. Sampling Techniques. 3rd ed. John Wiley & Sons.
Gutiérrez, Andrés, Stalyn Guerrero, Cristian Téllez, and Giovany Babativa. 2025. Análisis de Encuestas Con R. https://psirusteam.github.io/2021ASDA/.
Heeringa, Steven G., Brady T. West, and Patricia A. Berglund. 2017. Applied Survey Data Analysis. 2nd ed. Chapman; Hall/CRC. https://doi.org/10.1201/9781315153278.
Horvitz, Daniel G., and Donovan J. Thompson. 1952. “A Generalization of Sampling Without Replacement from a Finite Universe.” Journal of the American Statistical Association 47 (260): 663–85. https://doi.org/10.1080/01621459.1952.10483446.
Kish, Leslie. 1965. Survey Sampling. John Wiley & Sons.
Lumley, Thomas. 2010. Complex Surveys: A Guide to Analysis Using R. John Wiley & Sons. https://doi.org/10.1002/9780470580066.
Särndal, Carl-Erik, Bengt Swensson, and Jan Wretman. 1992. Model Assisted Survey Sampling. Springer-Verlag. https://doi.org/10.1007/978-1-4612-4378-6.
Woodruff, Ralph S. 1952. “Confidence Intervals for Medians and Other Position Measures.” Journal of the American Statistical Association 47 (260): 635–46. https://doi.org/10.1080/01621459.1952.10483443.