6.5 Diagrama de barras para variables categoricas

Los gráficos de barras son una de las formas más comunes de representar información categórica en el análisis de encuestas. Permiten mostrar la magnitud de las estimaciones asociadas a distintas categorías, ya sea en términos de conteos o proporciones, incorporando los factores de expansión para que los resultados representen de manera adecuada a la población. A diferencia de los gráficos de barras construidos con datos no ponderados, el uso de pesos garantiza que la visualización corresponda a una estimación válida a nivel poblacional.

Es recomendable acompañar las barras con líneas de error que indiquen los intervalos de confianza de las estimaciones puntuales. Esta práctica no solo comunica el valor central de interés, sino que también transmite la incertidumbre asociada al proceso de estimación muestral. De esta forma, los gráficos de barras no solo son útiles para describir patrones generales, sino también para evaluar la precisión y robustez de las conclusiones.

La construcción de gráficos de barras en R requiere en primera instancia calcular las estimaciones que se desean graficar. Para ello, se utilizan funciones como survey_total() dentro de la librería srvyr, que permiten obtener tanto los estimadores puntuales como sus errores estándar e intervalos de confianza. A continuación, estas estimaciones se representan gráficamente mediante funciones del paquete ggplot2, lo que ofrece gran flexibilidad para definir colores, títulos, escalas y otros elementos visuales.

Una de las ventajas de los gráficos de barras es que pueden extenderse fácilmente a comparaciones entre varias variables categóricas. Por ejemplo, es posible analizar el tamaño poblacional de distintos grupos de pobreza cruzado con la situación de empleo, distinguiendo además subcategorías como desempleo o población infantil. Este tipo de análisis gráfico resulta especialmente útil para identificar intersecciones de vulnerabilidad, al mostrar de manera simultánea dos o más características poblacionales.

En síntesis, los gráficos de barras permiten no solo una descripción clara de los patrones de consumo, empleo o pobreza en la población, sino también una visualización intuitiva de la incertidumbre estadística. Cuando se aplican correctamente, constituyen una herramienta poderosa para comunicar hallazgos de encuestas de hogares a tomadores de decisiones, investigadores y público en general, manteniendo siempre el rigor estadístico en la representación de los resultados.

tamano_zona <- diseno %>%
  group_by(Zone) %>%
  summarise( Nd = survey_total(vartype = c("se", "ci")))
tamano_zona 
## # A tibble: 2 × 5
##   Zone      Nd Nd_se Nd_low Nd_upp
##   <chr>  <dbl> <dbl>  <dbl>  <dbl>
## 1 Rural 72102. 3062. 66039. 78165.
## 2 Urban 78164. 2847. 72526. 83802.

Ahora, se procede a hacer el gráfico como se mostró en las secciones anteriores:

plot25_Ponde <- ggplot(
  data = tamano_zona, 
  aes(
    x = Zone,         
    y = Nd,           
    ymax = Nd_upp,    
    ymin = Nd_low,    
    fill = Zone)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(position = position_dodge(width = 0.9),
    width = 0.3) +
  theme_bw()
plot25_Ponde

Como se ha visto en los gráficos anteriores, se pueden extender a variables con muchas más categorías:

tamano_pobreza <- diseno %>%
  group_by(Poverty) %>%
  summarise(Nd = survey_total(vartype = c("se", "ci")))
tamano_pobreza
## # A tibble: 3 × 5
##   Poverty      Nd Nd_se Nd_low  Nd_upp
##   <fct>     <dbl> <dbl>  <dbl>   <dbl>
## 1 NotPoor  91398. 4395. 82696. 100101.
## 2 Extreme  21519. 4949. 11719.  31319.
## 3 Relative 37349. 3695. 30032.  44666.

El gráfico se obtiene con una sintaxis homologa a la anterior:

plot26_Ponde <- ggplot(
  data = tamano_pobreza,
  aes(
    x = Poverty,
    y = Nd,
    ymax = Nd_upp,
    ymin = Nd_low,
    fill = Poverty)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    position = position_dodge(width = 0.9),
    width = 0.3) +
  theme_bw()
plot26_Ponde

De forma similar a los gráficos Boxplot, es posible realizar comparaciones entre más dos variables.

tamano_ocupacion_pobreza <- diseno %>%
  group_by(desempleo, Poverty) %>%
  summarise(Nd = survey_total(vartype = c("se", "ci"))) %>% as.data.frame() %>% 
  mutate(desempleo = ifelse(is.na(desempleo),"Ninos",desempleo))
tamano_ocupacion_pobreza
##   desempleo  Poverty    Nd  Nd_se  Nd_low Nd_upp
## 1         0  NotPoor 68946 3676.3 61666.8  76226
## 2         0  Extreme 11549 2208.8  7175.8  15923
## 3         0 Relative 22847 2558.5 17780.5  27913
## 4         1  NotPoor  1768  405.4   965.7   2571
## 5         1  Extreme  1169  348.1   479.9   1859
## 6         1 Relative  1697  457.8   790.7   2604
## 7     Ninos  NotPoor 20684 1256.6 18195.4  23172
## 8     Ninos  Extreme  8800 2979.9  2899.7  14701
## 9     Ninos Relative 12805 1551.0  9733.9  15876

El gráfico para la tabla anterior queda de la siguiente manera:

plot27_Ponde <- ggplot(
  data = tamano_ocupacion_pobreza,
    aes(
      x = Poverty,
      y = Nd,
      ymax = Nd_upp,
      ymin = Nd_low,
      fill = as.factor(desempleo))) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    position = position_dodge(width = 0.9),
    width = 0.3) +
  theme_bw()
plot27_Ponde

En estos gráficos también se pueden presentar proporciones, como se muestra a continuación:

prop_ZonaH_Pobreza <- sub_Hombre %>%
  group_by(Zone, Poverty) %>%
  summarise(prop = survey_prop(vartype = c("se", "ci")))
prop_ZonaH_Pobreza
## # A tibble: 6 × 6
## # Groups:   Zone [2]
##   Zone  Poverty   prop prop_se prop_low prop_upp
##   <chr> <fct>    <dbl>   <dbl>    <dbl>    <dbl>
## 1 Rural NotPoor  0.549  0.0626   0.424     0.668
## 2 Rural Extreme  0.198  0.0675   0.0958    0.364
## 3 Rural Relative 0.254  0.0372   0.187     0.334
## 4 Urban NotPoor  0.660  0.0366   0.584     0.728
## 5 Urban Extreme  0.113  0.0245   0.0726    0.171
## 6 Urban Relative 0.227  0.0260   0.180     0.283

Después de tener la tabla con los valores a presentar en el gráfico, los códigos computacionales para realizar el gráfico es el siguiente:

plot28_Ponde <- ggplot(
  data = prop_ZonaH_Pobreza,
  aes(
    x = Poverty, y = prop,
    ymax = prop_upp, ymin = prop_low,
    fill = Zone)) + 
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    position = position_dodge(width = 0.9),
    width = 0.3
  ) + scale_fill_manual(values = colorZona) +
  theme_bw()
plot28_Ponde

Ahora bien, grafiquemos la proporción de hombres en condición de pobreza por región:

prop_RegionH_Pobreza <- sub_Hombre %>%
  group_by(Region, pobreza) %>%
  summarise(
    prop = survey_prop(vartype = c("se", "ci"))) %>%
  data.frame()
prop_RegionH_Pobreza
##       Region pobreza   prop prop_se prop_low prop_upp
## 1      Norte       0 0.6315 0.05523   0.5171   0.7327
## 2      Norte       1 0.3685 0.05523   0.2673   0.4829
## 3        Sur       0 0.6134 0.05672   0.4970   0.7181
## 4        Sur       1 0.3866 0.05672   0.2819   0.5030
## 5     Centro       0 0.6453 0.08464   0.4666   0.7910
## 6     Centro       1 0.3547 0.08464   0.2090   0.5334
## 7  Occidente       0 0.6259 0.04387   0.5358   0.7080
## 8  Occidente       1 0.3741 0.04387   0.2920   0.4642
## 9    Oriente       0 0.5450 0.10125   0.3480   0.7289
## 10   Oriente       1 0.4550 0.10125   0.2711   0.6520

El gráfico de barras es el siguiente:

plot29_Ponde <- ggplot(
  data = prop_RegionH_Pobreza,
  aes(
    x = Region, y = prop,
    ymax = prop_upp, ymin = prop_low,
    fill = as.factor(pobreza))) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_errorbar(
    position = position_dodge(width = 0.9),
    width = 0.3
  ) +
  theme_bw()
plot29_Ponde