Lectura de bases de datos

if (exists('nacimientos.Rdata')){
  load('nacimientos.Rdata')
} else{
  bases <- tibble(archivo = dir('Nacimientos 1984-2015')) %>% 
  filter(!str_detect(archivo, '~\\$'))

bases <- bases %>% 
  mutate(archivo_info = str_replace_all(archivo, '(\\.xlsx)', '')) %>% 
  mutate(base = map(paste0('Nacimientos 1984-2015/', archivo), ~ read_excel(.x) %>% clean_names %>% mutate_all(as.integer)),
         variables = map(base, names))

bases %>% 
  select(archivo, variables) %>% 
  mutate(variables = paste(variables)) %>% kable()
}
## Warning in strptime(x, format, tz = tz): unknown timezone 'default/America/
## Santiago'
archivo variables
nacim1984.xlsx c(“año_nacim”, “mes_nacim”, “sexo_nacido”, “edad_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “provincia_madre”, “semana_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “curso_padre”, “curso_madre”)
nacim1985.xlsx c(“sexo”, “fecha_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “comuna_madre”)
nacim1986.xlsx c(“sexo”, “fecha_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “comuna_madre”)
nacim1987.xlsx c(“sexo”, “fecha_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “comuna_madre”)
nacim1988.xlsx c(“sexo”, “fecha_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “comuna_madre”)
nacim1989.xlsx c(“sexo”, “fecha_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla_al_nacer”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condic_activ_madre”, “comuna_madre”)
nacim1990.xlsx c(“sexo_nacido”, “dia_nacim”, “mes_nacim”, “año_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “condic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condi_activ_madre”, “comuna_madre”)
nacim1991.xlsx c(“sexo_nacido”, “dia_nacim”, “mes_nacim”, “año_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “codic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condi_activ_madre”, “comuna_madre”)
nacim1992.xlsx c(“sexo_nacido”, “dia_nacim”, “mes_nacim”, “año_nacim”, “semanas_gestacion”, “peso_al_nacer”, “talla”, “edad_padre”, “curso_padre”, “nivel_instruc_padre”, “codic_activ_padre”, “edad_madre”, “curso_madre”, “nivel_instruc_madre”, “condi_activ_madre”, “comuna_madre”)
nacim1993.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1994.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1995.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1996.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1997.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “conact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1998.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim1999.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2000.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2001.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2002.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2003.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2004.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2005.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_padre”, “curso_padre”, “nivel_padre”, “condact_padre”, “edad_madre”, “curso_madre”, “nivel_madre”, “condact_madre”, “comuna”)
nacim2006.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “año_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2007.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2008.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2009.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2010.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2011.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2012.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2013.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2014.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)
nacim2015.xlsx c(“sexo”, “dia_nac”, “mes_nac”, “ano_nac”, “semanas”, “peso”, “talla”, “edad_p”, “ins_c_p”, “ins_n_p”, “activ_p”, “edad_m”, “ins_c_m”, “ins_n_m”, “activ_m”, “comuna”)

Casos dentro de cada archivo, antes de ser limpiado.

save(bases, file = 'nacimientos.Rdata')

bases %>% 
  transmute(archivo, 
            casos = map_int(base, nrow))
## # A tibble: 32 x 2
##           archivo  casos
##             <chr>  <int>
##  1 nacim1984.xlsx 251765
##  2 nacim1985.xlsx 248879
##  3 nacim1986.xlsx 259347
##  4 nacim1987.xlsx 265774
##  5 nacim1988.xlsx 281752
##  6 nacim1989.xlsx 288608
##  7 nacim1990.xlsx 292146
##  8 nacim1991.xlsx 284483
##  9 nacim1992.xlsx 279098
## 10 nacim1993.xlsx 275916
## # ... with 22 more rows

Generar base plana

nacimientos <- unnest(bases, base) 
  # mutate(sexo = map_chr(.x = sexo, .f = ~ str_trunc(.x, width = 1, ellipsis = '')),
  #        email = if_else(is.na(email_universidad), email_personal, email_universidad)) %>% 
  # group_by_at(vars(-id)) %>% 
  # summarise(n_unicos = n(),
  #           id = first(id)) %>% 
  # ungroup()

names(nacimientos)
##  [1] "archivo"             "archivo_info"        "año_nacim"          
##  [4] "mes_nacim"           "sexo_nacido"         "edad_padre"         
##  [7] "nivel_instruc_padre" "condic_activ_padre"  "edad_madre"         
## [10] "nivel_instruc_madre" "condic_activ_madre"  "provincia_madre"    
## [13] "semana_gestacion"    "peso_al_nacer"       "talla_al_nacer"     
## [16] "curso_padre"         "curso_madre"         "sexo"               
## [19] "fecha_nacim"         "semanas_gestacion"   "comuna_madre"       
## [22] "dia_nacim"           "talla"               "condi_activ_madre"  
## [25] "codic_activ_padre"   "dia_nac"             "mes_nac"            
## [28] "año_nac"             "semanas"             "peso"               
## [31] "nivel_padre"         "condact_padre"       "nivel_madre"        
## [34] "condact_madre"       "comuna"              "conact_padre"       
## [37] "ano_nac"             "edad_p"              "ins_c_p"            
## [40] "ins_n_p"             "activ_p"             "edad_m"             
## [43] "ins_c_m"             "ins_n_m"             "activ_m"

Revisar y homologar fechas de nacimiento

nacimientos %>% 
  group_by(archivo) %>% 
  summarise_at(vars(año_nacim, año_nac, ano_nac, fecha_nacim), funs((!is.na(.)) %>% sum))
## # A tibble: 32 x 5
##           archivo año_nacim año_nac ano_nac fecha_nacim
##             <chr>     <int>   <int>   <int>       <int>
##  1 nacim1984.xlsx    251765       0       0           0
##  2 nacim1985.xlsx         0       0       0      248879
##  3 nacim1986.xlsx         0       0       0      259347
##  4 nacim1987.xlsx         0       0       0      265774
##  5 nacim1988.xlsx         0       0       0      281752
##  6 nacim1989.xlsx         0       0       0      288608
##  7 nacim1990.xlsx    292146       0       0           0
##  8 nacim1991.xlsx    284483       0       0           0
##  9 nacim1992.xlsx    279098       0       0           0
## 10 nacim1993.xlsx         0  275916       0           0
## # ... with 22 more rows
nacimientos %>% 
  group_by(archivo) %>% 
  summarise(fecha_nacim = first(fecha_nacim)) %>% 
  filter(!is.na(fecha_nacim)) %>% 
  pull(fecha_nacim) %>% lubridate::dmy() %>% year()
## [1] 1985 1986 1987 1988 1989
nacimientos %$% 
  table(año_nacim, año_nac, useNA = 'ifany')
##          año_nac
## año_nacim      95    1993    1994    1996    1997    1998    1999    2000
##      1984       0       0       0       0       0       0       0       0
##      1990       0       0       0       0       0       0       0       0
##      1991       0       0       0       0       0       0       0       0
##      1992       0       0       0       0       0       0       0       0
##      <NA>  265932  275916  273766  264793  259959  257105  250674  248893
##          año_nac
## año_nacim    2003    2004    2005    2006    <NA>
##      1984       0       0       0       0  251765
##      1990       0       0       0       0  292146
##      1991       0       0       0       0  284483
##      1992       0       0       0       0  279098
##      <NA>  234486  230352  230831  231383 4048155
nacimientos <- nacimientos %>% 
  mutate(año_nac = if_else(año_nac == 95, 1995L, año_nac),
         año_nacim = if_else(is.na(año_nacim), año_nac, año_nacim),
         año_nacim = if_else(is.na(año_nacim), ano_nac, año_nacim),
         mes_nacim = if_else(is.na(mes_nacim), mes_nac, mes_nacim),
         dia_nacim = if_else(is.na(dia_nacim), dia_nac, dia_nacim),
         año_nacim = if_else(is.na(año_nacim), lubridate::dmy(fecha_nacim) %>% year() %>% as.integer(), año_nacim),
         mes_nacim = if_else(is.na(mes_nacim), lubridate::dmy(fecha_nacim) %>% month() %>% as.integer(), mes_nacim),
         dia_nacim = if_else(is.na(dia_nacim), lubridate::dmy(fecha_nacim) %>% day() %>% as.integer(), dia_nacim))
## Warning: 14 failed to parse.

## Warning: 14 failed to parse.

## Warning: 14 failed to parse.
# nacimientos %$% 
#   table(año_nacim, año_nac, useNA = 'ifany')
nacimientos <- nacimientos %>% 
  mutate(fecha_nacimiento = lubridate::make_date(year = año_nacim, month = mes_nacim, day = dia_nacim),
         fecha_mes_dia = lubridate::make_date(month = mes_nacim, day = dia_nacim))

nacimientos %$% 
  table(year(fecha_nacimiento), useNA = 'ifany')
## 
##   1985   1986   1987   1988   1989   1990   1991   1992   1993   1994 
## 248879 259341 265767 281752 288607 292124 284482 279098 275916 273766 
##   1995   1996   1997   1998   1999   2000   2001   2002   2003   2004 
## 265931 264793 259952 257105 250674 248893 246116 238981 234486 230352 
##   2005   2006   2007   2008   2009   2010   2011   2012   2013   2014 
## 230831 231378 240569 246580 252240 250643 247358 243635 242005 250997 
##   2015   <NA> 
## 244670 251816
nacimientos %>% 
  filter(is.na(fecha_nacimiento)) %>% 
  select(archivo, fecha_nacimiento, fecha_nacim, año_nacim, mes_nacim, dia_nacim)
## # A tibble: 251,816 x 6
##           archivo fecha_nacimiento fecha_nacim año_nacim mes_nacim
##             <chr>           <date>       <int>     <int>     <int>
##  1 nacim1984.xlsx               NA          NA      1984         5
##  2 nacim1984.xlsx               NA          NA      1984         7
##  3 nacim1984.xlsx               NA          NA      1984         7
##  4 nacim1984.xlsx               NA          NA      1984        10
##  5 nacim1984.xlsx               NA          NA      1984         9
##  6 nacim1984.xlsx               NA          NA      1984         7
##  7 nacim1984.xlsx               NA          NA      1984         9
##  8 nacim1984.xlsx               NA          NA      1984         8
##  9 nacim1984.xlsx               NA          NA      1984         8
## 10 nacim1984.xlsx               NA          NA      1984         6
## # ... with 251,806 more rows, and 1 more variables: dia_nacim <int>
fecha_mes_dia_min <- nacimientos %>% 
  filter(año_nacim != 1984) %>% 
  group_by(fecha_mes_dia) %>% 
  summarise(nacimientos = n()) %>% 
  arrange(nacimientos) %>% 
  filter(!is.na(fecha_mes_dia)) %>% 
  head(11) %>% pull(fecha_mes_dia)

names(fecha_mes_dia_min) <- paste0(lubridate::mday(fecha_mes_dia_min), '-', lubridate::month(fecha_mes_dia_min))

fecha_mes_dia_min_df <- tibble(fechas = fecha_mes_dia_min,
                               texto = names(fecha_mes_dia_min))

Gráficos

nacimientos_total <- nacimientos %>% 
  filter(año_nacim != 1984) %>% 
  group_by(fecha_mes_dia) %>% 
  summarise(nacimientos = n()) %>% 
  filter(!is.na(fecha_mes_dia)) %>% pull(nacimientos) %>% sum()

nacimientos %>% 
  filter(año_nacim != 1984) %>% 
  group_by(fecha_mes_dia) %>% 
  summarise(nacimientos = n()) %>% 
  ggplot(aes(x = fecha_mes_dia, y = nacimientos)) +
  geom_smooth() +
  # geom_vline(xintercept = make_date(month = '9', day = '16'), color = 'yellow') +
  geom_vline(xintercept = fecha_mes_dia_min, color = 'red', alpha = .5) +
  ggrepel::geom_label_repel(data = fecha_mes_dia_min_df, aes(x = fechas, y = 5000, label = texto),
             size = 3) +
  geom_line(alpha = 1) +
  scale_x_date(date_labels = '%m', date_breaks = 'month') +
  scale_color_gradient(low = 'red', high = 'blue') +
  labs(title = 'Nacimientos en Chile a lo largo del año',
       subtitle = paste0('Total entre 1985 y 2015, para un total de ', nacimientos_total, ' nacimientos'),
       caption = 'Datos INE',
       x = 'fecha de nacimiento (días)') +
  theme(legend.position = 'top')
## `geom_smooth()` using method = 'loess'
## Warning: Removed 1 rows containing non-finite values (stat_smooth).
## Warning: Removed 1 rows containing missing values (geom_path).

nacimientos %>% 
  filter(año_nacim != 1984) %>% 
  group_by(fecha_nacimiento) %>% 
  summarise(nacimientos = n()) %>% 
  ggplot(aes(x = fecha_nacimiento, y = nacimientos)) +
  geom_smooth() +
  geom_line(size = .1, alpha = .5) +
  scale_x_date(date_labels = '%y', date_breaks = 'year') +
  scale_color_gradient(low = 'red', high = 'blue') +
  labs(title = 'Nacimientos en Chile entre 1985 y 2015',
       subtitle = 'Total nacimientos,',
       caption = 'Datos INE',
       x = 'fecha de nacimiento (días)') +
  theme(legend.position = 'top')
## `geom_smooth()` using method = 'gam'
## Warning: Removed 1 rows containing non-finite values (stat_smooth).
## Warning: Removed 1 rows containing missing values (geom_path).

nacimientos %>% 
  filter(año_nacim != 1984) %>% 
  group_by(año_nacim, fecha_mes_dia) %>% 
  summarise(nacimientos = n()) %>% 
  ggplot(aes(x = fecha_mes_dia, y = nacimientos, color = año_nacim)) +
  geom_line(alpha = .05) +
  geom_smooth(aes(group = año_nacim), alpha = .1, se = FALSE) +
  scale_x_date(date_labels = '%m', date_breaks = 'month') +
  scale_color_gradient(low = 'blue', high = 'red', guide = 'legend') +
  labs(title = 'Nacimientos en chile',
       subtitle = 'Entre 1985 y 2015 por año',
       caption = 'Datos INE',
       x = 'fecha de nacimiento (días)') +
  theme(legend.position = 'top')
## `geom_smooth()` using method = 'loess'
## Warning: Removed 12 rows containing non-finite values (stat_smooth).
## Warning: Removed 12 rows containing missing values (geom_path).