Objetivo

Mediante los datos recaudados por el Instituto Nacional de Salud Publica, que pueden ser descargados de la siguiente liga: https://ensanut.insp.mx/encuestas/ensanut2016/descargas.php.

Vamos a intentar contestar la siguiente pregunta:

Cual es la distribucion de incidencia de obesidad segun la edad?

Para ello, vamos a empezar utilizando los siguientes paquetes:

library("tidyverse")
library("vroom")

Cargamos la tabla con los datos recaudados de la encuesta, y también nos devuelve un resumen del contenido de la tabla:

datos_salud <- vroom::vroom(file = "C:/Users/User/Documents/CienciadeDatos/adultos_cronicas.csv")
## Observations: 8,824
## Variables: 242
## chr  [ 17]: folio, entidad, desc_ent, munici, desc_mun, locali, desc_loc, maq, n_comp, ...
## dbl  [180]: INT, completa, a1400, a14a11, a14a12, a101h, a101m, a101ah, a101am, a101bh,...
## lgl  [ 44]: a105f, a105g, a105j, a105esp, a306c, a306d, a306e, a306f, a306i, a306k, a30...
## date [  1]: TIEMPO_GEN
## 
## Call `spec()` for a copy-pastable column specification
## Specify the column types with `col_types` to quiet this message

Análisis

Para hacer más amigable y veloz el análisis podemos extraer los datos que nos interesan para responder nuestras preguntas, para ello utilizamos:

datos_interes <- datos_salud %>% select(edad, sexo, diabetes)
## # A tibble: 6 x 3
##    edad  sexo diabetes
##   <dbl> <dbl>    <dbl>
## 1    45     2        1
## 2    83     2        0
## 3    29     2        0
## 4    47     2        0
## 5    25     1        0
## 6    45     2        0

Para poder ver como se distribuyen los datos vamos a necesitar del paquete:

library("ggplot2")

Ahora podemos utilizar la siguiente sucesion de funciones para poder visualizar como se distribuyen los datos de acuerdo a la edad:

datos_interes %>% 
  group_by(edad) %>%
  filter(diabetes == 1) %>%
  summarize(casos = n()) %>%
  ggplot(mapping = aes(x = edad,
                        y = casos)) +
  geom_point()

El problema con esto es que los datos no están normalizados con el numero de personas encuenstadas para cada edad, para ello podemos empezar definiendo el numero de personas encuestadas para cada edad, y por separado el numero que tienen diabetes:

total_por_edades <- datos_interes %>% 
  group_by(edad) %>%
  summarize(total = n())
total_con_diabetes <- datos_interes %>% 
  group_by(edad) %>%
  filter(diabetes == 1) %>%
  summarize(casos = n())

Luego combinamos los dos data frames de casos totales y con diabestes:

union <- dplyr::left_join(x = total_con_diabetes,
                              y = total_por_edades,
                              suffix = c("diabetes", "total"),
                              by = c("edad" = "edad"))

Finalmente generamos una nueva columna con la division de los casos con diabetes sobre el total para cada edad, y graficamos un scatter plot:

union %>%
  mutate(casos_normalizados = casos/total) %>%
  ggplot(mapping = aes(x = edad,
                       y = casos_normalizados)) +
  geom_point() +
  labs(title = "Distrubucion por edades normalizada")

Conclusión

Análisis por sexo

Ya que también tenemos los datos de que sexo es cada entrevistado, podemos separar el análisis de distribucion por edades de acuerdo al sexo. Para ello es necesario generar los data frames para cada sexo:

hombres <- datos_interes %>% 
  filter(sexo == 1)

mujeres <- datos_interes %>%
  filter(sexo == 2)
dim(hombres)
## [1] 3062    3
dim(mujeres)
## [1] 5734    3

Agregamos una columnas definiendo de donde provienen los datos, para cuando lo unamos en un solo data frame podamos identificarlos:

hombres$sexos <- 'hombres'
mujeres$sexos <- 'mujeres'

los unimos:

ambos <- rbind(hombres, mujeres)

Y ahora si podemos graficar.

Density plot

Debido a que hay distinta cantidad de hombres y mujeres en la encuesta, podemos graficar la densidad de los datos para poder comprarlos:

ggplot(ambos, aes(edad, fill = sexos)) + 
  geom_density(alpha = 0.2)+
  scale_fill_manual(
    values = c("green", "orange"),
    name = "Sexo"
  )

Y para discernir mejor entre las edades podemos graficar la densidad en un histograma y mediante el paquete de cowplot unirlo con el grafico de densidad:

library("cowplot")
histograma <- ggplot(ambos, aes(edad, fill = sexos)) + 
  geom_histogram(binwidth = 2, alpha = 0.5, aes(y = ..density..), position = 'identity') +
  scale_fill_manual(
    values = c("green", "orange"),
    name = "Sexo"
  )
plot_grid(density + theme(legend.position = ""),
          histograma + theme(axis.title.y=element_blank()),
            nrow = 1, ncol = 2,
            rel_widths = c(0.4, 0.7)
)

Eso fue todo, espero que les haya gustado

Muchas gracias por su atención!!