1 ENSANUT 2018

Para responder la pregunta vamos a utilizar información de la Encuesta Nacional de Salud y Nutrición (ENSANUT) de 2018. Para ver más detalles de la encuesta se puede consultar la siguiente liga.

Seleccionamos la tabla CS_ANTROPEMETRIA.csv de la componente de Nutrición.

#librerias a ocupar
library(reactable)
library(ggplot2)
library(plotly)
library(dplyr)
library(leaflet)

Importamos la base de datos

df <- read.csv("dataset/CN_ANTROPOMETRIA.csv", header=T)

La base de datos se compone de 33818 personas entrevistadas y 57 preguntas.

Verificamos el nombre de las variables

names(df)
##  [1] "UPM"                 "VIV_SEL"             "HOGAR"              
##  [4] "NUMREN"              "PESO1_1"             "PESO1_2"            
##  [7] "P2"                  "P3"                  "TALLA4_1"           
## [10] "TALLA4_2"            "P5"                  "P6"                 
## [13] "P7_1"                "CIRCUNFERENCIA8_1"   "CIRCUNFERENCIA8_2"  
## [16] "P9"                  "P10"                 "P11"                
## [19] "PESO12_1"            "PESO12_2"            "P13"                
## [22] "P14"                 "TALLA15_1"           "TALLA15_2"          
## [25] "P16"                 "TALLAPIE17_1"        "P18"                
## [28] "CIRCPANTORRILLA19_1" "P20"                 "CINTURA21_1"        
## [31] "CINTURA21_2"         "P22"                 "HEMIENVERGADURA23_1"
## [34] "P24"                 "MEDIABRAZO25_1"      "P26"                
## [37] "P27_1_1"             "P27_1_2"             "P27_2_1"            
## [40] "P27_2_2"             "P28"                 "P29"                
## [43] "P30"                 "EDAD"                "EDAD_MESES"         
## [46] "SEXO"                "ENT"                 "DOMINIO"            
## [49] "ALTITUD"             "REGION"              "EST_DIS"            
## [52] "UPM_DIS"             "ESTRATO"             "F_ANTROP"           
## [55] "F_ANTROP_INSP"       "GPO_INSP"            "DIAS"

En particular para nuestra pregunta sólo consideramos personas mayores de 20 años. También para evitar sesgos por datos atípicos ó mal llenado truncamos alturas mayores a 2.20 mts.

df <- subset(df, df$EDAD>=20 & df$TALLA4_1<=220)

#numero de adultos con talla medida valida
nrow(df)
## [1] 13082

2 Estimación de la altura promedio

Para estimar la estatura promedio de los mexicanos, consideramos los dominios de sexo y entidad federativa y utilizamos el estimador de razón

\[\hat {\bar {Y_{d}}} =\dfrac{\hat t_{y_d}}{\hat N_{d}}, \] donde:

  • \(\hat{t}_{y_d} =\sum_{i\in s} \dfrac{z_{id} y_i}{\pi_i}\) es el estimador de Horvitz-Thompson(HT) del total de la talla en el dominio \(d\), donde \(z_{id}\) es una variable que toma el valor 1 si el i-ésimo individuo está el dominio \(d\), y
  • \(\hat N_d =\sum_{i\in \mathcal{s}}\dfrac{z_{id}}{\pi_i}\) es el estimador HT del total de la población del sexo en el dominio \(d\).

En este caso, \(\pi_{i}\) denota la probabilidad de inclusión del \(i\)-ésimo individuo en la muestra \(s\). En general se suele reportar el factor de expansión, definido como el inverso de la probabilidad de inclusión, esto es, \(f_i =1/\pi_i\)1. En la base de datos se encuentra etiquetada como F_ANTRO_INSP.

Con el siguiente código obtenemos la altura promedio por sexo y entidad federativa

library(dplyr)

estados <-df %>% filter(TALLA4_1 !=is.na(TALLA4_1)) %>% 
          mutate( sumando = TALLA4_1* F_ANTROP_INSP) %>%
          group_by(SEXO,ENT) %>%
          summarise( totales  = sum(sumando), N = sum(F_ANTROP_INSP))

estados <- estados %>% mutate( talla.hat  = round( totales/N,2)) 

#pegamos la etiqueta de los estados
catalog <- read.csv("dataset/catalogo.csv",header=T)

estados <- left_join(estados, catalog, by = c('ENT'= 'ENTIDAD'))

names(estados)[6] <- 'ENTIDAD'

Obtenemos la gráfica de barras para hombres

mygraph <- ggplot(estados[estados$SEXO==1,], aes(x=reorder(ENTIDAD,talla.hat),y= talla.hat,fill= as.factor(ENTIDAD))) + theme(legend.position = 'none')+ scale_fill_hue(c = 50) +
     geom_bar(stat='identity')+ coord_flip()+labs(title ="Estatura promedio estimada",y="Altura (cm)", x="Entidad")

ggplotly(mygraph)

Obtenemos ahora el mapa para la distribución de la altura en el País

library(rgdal)
library(htmltools)

mexico <- readOGR(dsn="dataset/desta4mgw.shp",verbose=F)

mexico$CVE_EDO <-as.numeric(mexico$CVE_EDO)

mexico@data <- left_join(mexico@data,
                         estados[estados$SEXO==1, c('ENT','talla.hat','ENTIDAD')],
                         by =c('CVE_EDO'='ENT'))

names(mexico)[names(mexico)=='talla.hat'] <-'talla_hombres'

pal <- colorNumeric('Greens',domain = mexico$talla_hombres)

labels <- sprintf(
  "<strong>%s</strong><br/>Talla promedio: %g  cm",
  mexico$ENTIDAD, mexico$talla_hombres
) %>% lapply(htmltools::HTML)

mymap <- leaflet(mexico) %>% 
  addPolygons(color="white",
              weight=1,
              fillOpacity = 0.7,
              fillColor = ~pal(talla_hombres),
              label = labels) %>%
  addLegend(pal = pal, values = ~talla_hombres, opacity = 0.7, title = 'Talla',
  position = "bottomright")
mymap

Y la estimación de la altura promedio de mujeres

mygraph <- ggplot(estados[estados$SEXO==2,], aes(x=reorder(ENTIDAD,talla.hat),y= talla.hat, fill =  as.factor(ENTIDAD))) +  scale_fill_hue(c = 50) +
     geom_bar(stat='identity')+theme(legend.position="none")+
  coord_flip()+labs(title ="Estatura promedio estimada",y="Altura (cm)", x="Entidad")

ggplotly(mygraph)

Y el mapa de las estaturas para las entidades federativas

mexico@data <- left_join(mexico@data,
                         estados[estados$SEXO==2, c('ENT','talla.hat')],
                         by =c('CVE_EDO'='ENT'))

names(mexico)[names(mexico)=='talla.hat'] <-'talla_mujeres'

pal <- colorNumeric('Purples',domain = mexico$talla_mujeres)

labels <- sprintf(
  "<strong>%s</strong><br/>Talla promedio: %g  cm",
  mexico$ENTIDAD, mexico$talla_mujeres
) %>% lapply(htmltools::HTML)

mymap <- leaflet(mexico) %>% 
  addPolygons(color="white",
              weight=1,
              fillOpacity = 0.7,
              fillColor = ~pal(talla_mujeres),
              label = labels) %>%
  addLegend(pal = pal, values = ~talla_mujeres, opacity = 0.7, title = 'Talla',
  position = "bottomright")
mymap

  1. Särndal, C., et.al.(1992). Model Assisted Survey Sampling. Springer-Verlag↩︎