# Carpeta raíz
root_dir <- "C:/Users/PC/Documents/Modelacion y Simulacion/Analisis de natalidad y muerte en Guatemala"
years <- 2021:2023
path_birth <- file.path(root_dir,"Data","Natalidad",
paste0("nacimientos-",years,".xlsx"))
path_death <- file.path(root_dir,"Data","Muerte",
paste0("defunciones-",years,".xlsx"))
leer_vitales <- function(path, anio){
readxl::read_excel(path, col_types = "text", .name_repair = "unique") |>
janitor::clean_names() |>
dplyr::mutate(anio = as.integer(anio))
}
birth_list <- purrr::map2(path_birth, years, leer_vitales) |>
purrr::map(readr::type_convert, na = c("","NA","999"))
death_list <- purrr::map2(path_death, years, leer_vitales) |>
purrr::map(readr::type_convert, na = c("","NA","999"))
harmonizar <- function(lst){
cols_char <- unique(unlist(
purrr::map(lst, ~ names(.x)[vapply(.x,is.character,logical(1))])))
purrr::map(lst, ~ dplyr::mutate(.x,
dplyr::across(all_of(cols_char), as.character)))
}
birth_list <- harmonizar(birth_list)
death_list <- harmonizar(death_list)
nacimientos <- dplyr::bind_rows(birth_list)
defunciones <- dplyr::bind_rows(death_list)
# re‑codificar valores vacíos
na_recode <- function(df){
df |>
dplyr::mutate(across(where(is.character), ~ dplyr::na_if(.x,""))) |>
dplyr::mutate(across(where(is.character), ~ dplyr::na_if(.x,"NA"))) |>
dplyr::mutate(across(where(is.character), ~ dplyr::na_if(.x,"999"))) |>
janitor::remove_empty("rows") |>
janitor::remove_empty("cols")
}
nacimientos <- na_recode(nacimientos)
defunciones <- na_recode(defunciones)
str(nacimientos, max.level = 1)
## tibble [1,033,712 × 46] (S3: tbl_df/tbl/data.frame)
str(defunciones, max.level = 1)
## tibble [309,799 × 28] (S3: tbl_df/tbl/data.frame)
cat("\\nDimensiones → Nacimientos:", dim(nacimientos),
"| Defunciones:", dim(defunciones), "\\n")
## \nDimensiones → Nacimientos: 1033712 46 | Defunciones: 309799 28 \n
na_birth <- colSums(is.na(nacimientos)); na_birth[na_birth>0]
## via_par edadp pueblo_pp edadm pueblo_pm viapar pueblopp pueblopm
## 688563 139015 688563 242 688563 345149 345149 345149
na_death <- colSums(is.na(defunciones)); na_death[na_death>0]
## edadif
## 726
summary(dplyr::select(nacimientos, where(is.numeric)))
## depreg mesreg anoreg tipo_ins
## Min. : 1.00 Min. : 1.000 Min. :2021 Min. :1.000
## 1st Qu.: 5.00 1st Qu.: 3.000 1st Qu.:2021 1st Qu.:3.000
## Median :12.00 Median : 6.000 Median :2022 Median :3.000
## Mean :10.67 Mean : 6.433 Mean :2022 Mean :2.725
## 3rd Qu.:16.00 3rd Qu.: 9.000 3rd Qu.:2023 3rd Qu.:3.000
## Max. :22.00 Max. :12.000 Max. :2024 Max. :4.000
##
## depocu libras onzas diaocu
## Min. : 1.00 Min. : 0.000 Min. : 0.000 Min. : 1.00
## 1st Qu.: 5.00 1st Qu.: 6.000 1st Qu.: 0.000 1st Qu.: 8.00
## Median :12.00 Median : 6.000 Median : 5.000 Median :16.00
## Mean :10.58 Mean : 6.398 Mean : 5.372 Mean :15.64
## 3rd Qu.:16.00 3rd Qu.: 7.000 3rd Qu.: 8.000 3rd Qu.:23.00
## Max. :22.00 Max. :99.000 Max. :99.000 Max. :31.00
##
## mesocu anoocu sexo tipar
## Min. : 1.000 Min. :2021 Min. :1.000 Min. :1.000
## 1st Qu.: 4.000 1st Qu.:2021 1st Qu.:1.000 1st Qu.:1.000
## Median : 7.000 Median :2022 Median :1.000 Median :1.000
## Mean : 6.566 Mean :2022 Mean :1.492 Mean :1.013
## 3rd Qu.:10.000 3rd Qu.:2023 3rd Qu.:2.000 3rd Qu.:1.000
## Max. :12.000 Max. :2023 Max. :2.000 Max. :4.000
##
## via_par edadp paisrep deprep
## Min. :1.0 Min. :13.00 Min. : 4 Min. : 1.00
## 1st Qu.:1.0 1st Qu.:24.00 1st Qu.: 320 1st Qu.: 7.00
## Median :1.0 Median :28.00 Median : 320 Median :13.00
## Mean :1.4 Mean :29.82 Mean :1645 Mean :22.86
## 3rd Qu.:2.0 3rd Qu.:34.00 3rd Qu.: 320 3rd Qu.:17.00
## Max. :2.0 Max. :91.00 Max. :9999 Max. :99.00
## NA's :688563 NA's :139015
## pueblo_pp escivp paisnacp depnap
## Min. :1.0 Min. :1.000 Min. : 8 Min. : 1.00
## 1st Qu.:1.0 1st Qu.:1.000 1st Qu.: 320 1st Qu.: 8.00
## Median :4.0 Median :2.000 Median : 320 Median :13.00
## Mean :3.8 Mean :2.473 Mean :1622 Mean :23.02
## 3rd Qu.:4.0 3rd Qu.:2.000 3rd Qu.: 320 3rd Qu.:18.00
## Max. :9.0 Max. :9.000 Max. :9999 Max. :99.00
## NA's :688563
## escolap edadm paisrem deprem
## Min. :1.000 Min. :10.00 Min. : 76.0 Min. : 1.00
## 1st Qu.:2.000 1st Qu.:21.00 1st Qu.: 320.0 1st Qu.: 5.00
## Median :3.000 Median :25.00 Median : 320.0 Median :12.00
## Mean :3.703 Mean :25.91 Mean : 422.5 Mean :11.71
## 3rd Qu.:4.000 3rd Qu.:30.00 3rd Qu.: 320.0 3rd Qu.:16.00
## Max. :9.000 Max. :59.00 Max. :9999.0 Max. :99.00
## NA's :242
## pueblo_pm escivm paisnacm depnam
## Min. :1.0 Min. :1.000 Min. : 8.0 Min. : 1.00
## 1st Qu.:1.0 1st Qu.:1.000 1st Qu.: 320.0 1st Qu.: 6.00
## Median :4.0 Median :1.000 Median : 320.0 Median :12.00
## Mean :3.4 Mean :1.387 Mean : 322.5 Mean :11.21
## 3rd Qu.:4.0 3rd Qu.:2.000 3rd Qu.: 320.0 3rd Qu.:16.00
## Max. :9.0 Max. :9.000 Max. :9999.0 Max. :99.00
## NA's :688563
## escolam asisrec sitioocu tohite
## Min. :1.000 Min. :1.00 Min. :1.000 Min. : 1.000
## 1st Qu.:2.000 1st Qu.:1.00 1st Qu.:1.000 1st Qu.: 1.000
## Median :2.000 Median :1.00 Median :2.000 Median : 2.000
## Mean :3.177 Mean :1.96 Mean :2.884 Mean : 4.417
## 3rd Qu.:4.000 3rd Qu.:4.00 3rd Qu.:6.000 3rd Qu.: 3.000
## Max. :9.000 Max. :9.00 Max. :9.000 Max. :99.000
##
## tohinm tohivi anio viapar
## Min. : 0.000 Min. : 0.000 Min. :2021 Min. :1.0
## 1st Qu.: 0.000 1st Qu.: 1.000 1st Qu.:2021 1st Qu.:1.0
## Median : 0.000 Median : 2.000 Median :2022 Median :1.0
## Mean : 2.386 Mean : 4.074 Mean :2022 Mean :1.4
## 3rd Qu.: 0.000 3rd Qu.: 3.000 3rd Qu.:2023 3rd Qu.:2.0
## Max. :99.000 Max. :99.000 Max. :2023 Max. :2.0
## NA's :345149
## pueblopp pueblopm
## Min. :1.0 Min. :1.0
## 1st Qu.:1.0 1st Qu.:1.0
## Median :4.0 Median :4.0
## Mean :3.9 Mean :3.5
## 3rd Qu.:4.0 3rd Qu.:4.0
## Max. :9.0 Max. :9.0
## NA's :345149 NA's :345149
summary(dplyr::select(defunciones, where(is.numeric)))
## depreg mesreg anoreg depocu
## Min. : 1.000 Min. : 1.000 Min. :2021 Min. : 1.00
## 1st Qu.: 1.000 1st Qu.: 4.000 1st Qu.:2021 1st Qu.: 1.00
## Median : 9.000 Median : 7.000 Median :2022 Median : 9.00
## Mean : 8.702 Mean : 6.479 Mean :2022 Mean : 8.67
## 3rd Qu.:14.000 3rd Qu.: 9.000 3rd Qu.:2023 3rd Qu.:14.00
## Max. :22.000 Max. :12.000 Max. :2024 Max. :22.00
##
## sexo diaocu mesocu anoocu
## Min. :1.000 Min. : 1.00 Min. : 1.000 Min. :2021
## 1st Qu.:1.000 1st Qu.: 8.00 1st Qu.: 4.000 1st Qu.:2021
## Median :1.000 Median :16.00 Median : 7.000 Median :2022
## Mean :1.445 Mean :15.68 Mean : 6.576 Mean :2022
## 3rd Qu.:2.000 3rd Qu.:23.00 3rd Qu.: 9.000 3rd Qu.:2023
## Max. :2.000 Max. :31.00 Max. :12.000 Max. :2023
##
## edadif perdif puedif ecidif
## Min. : 0.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.: 41.00 1st Qu.:3.000 1st Qu.:1.000 1st Qu.:1.000
## Median : 64.00 Median :3.000 Median :4.000 Median :1.000
## Mean : 58.14 Mean :2.918 Mean :3.948 Mean :1.475
## 3rd Qu.: 79.00 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:2.000
## Max. :120.00 Max. :9.000 Max. :9.000 Max. :9.000
## NA's :726
## escodif pnadif dnadif nacdif
## Min. :1.000 Min. : 10.0 Min. : 1.00 Min. : 10.0
## 1st Qu.:1.000 1st Qu.: 320.0 1st Qu.: 5.00 1st Qu.: 320.0
## Median :2.000 Median : 320.0 Median :10.00 Median : 320.0
## Mean :2.162 Mean : 348.9 Mean :10.51 Mean : 348.9
## 3rd Qu.:2.000 3rd Qu.: 320.0 3rd Qu.:15.00 3rd Qu.: 320.0
## Max. :9.000 Max. :9999.0 Max. :99.00 Max. :9999.0
##
## predif dredif asist ocur cerdef
## Min. : 84 Min. : 1.00 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.: 320 1st Qu.: 3.00 1st Qu.:1.000 1st Qu.:4.000 1st Qu.:1.000
## Median : 320 Median :10.00 Median :1.000 Median :6.000 Median :3.000
## Mean :1239 Mean :17.64 Mean :3.131 Mean :4.905 Mean :4.989
## 3rd Qu.: 320 3rd Qu.:16.00 3rd Qu.:5.000 3rd Qu.:6.000 3rd Qu.:9.000
## Max. :9999 Max. :99.00 Max. :9.000 Max. :9.000 Max. :9.000
##
## anio
## Min. :2021
## 1st Qu.:2021
## Median :2022
## Mean :2022
## 3rd Qu.:2023
## Max. :2023
##
Nacimientos totales por año (2021-2023)
Descripción de la gráfica 1
Muestra la cantidad total de nacimientos por año.
- 2021 → 2022: ligero incremento (unos cientos de
nacimientos).
- 2022 → 2023: descenso más pronunciado; 2023 cae por debajo de
2021.
Balance del trienio: disminución neta aproximada de 0,6 % tras un breve repunte en 2022.
Nacimientos por sexo y año
Descripción de la gráfica 2
- H > M cada año (~51 % vs 49 %).
- 2021 → 2022: ligero aumento en ambos sexos.
- 2022 → 2023: descenso similar para H y M; la brecha se mantiene.
Distribución de edad materna por año
Descripción de la gráfica 3
Caja 20-30 años; mediana ≈ 25-26 años.
Distribución casi idéntica 2021-2023; pocos partos <15 o >45
años.
Peso al nacer (1 000–6 000 g)
Descripción de la gráfica 4
Media ≈ 3 011 g; mayor concentración 2 500–3 500 g.
Pocos < 2 500 g (bajo peso) y > 4 000 g (macrosomía).
Nacimientos por mes y año
Descripción de la gráfica 5
Pico Jun–Sep (máx. Sep-2021 >32 k).
Mínimos en febreros (~24 k).
Tonos más fríos en 2023 ⇒ menor volumen general.
Top‑10 departamentos con más nacimientos
Descripción de la gráfica 6
Guatemala ~165 k (≈2× Alta Verapaz).
Top-3 (Guate, Alta V., Huehue) ≈45 % del total.
Volumen cae gradualmente hasta Suchitepéquez (~48 k).
Peso medio al nacer vs edad de la madre
Descripción de la gráfica 7
↑ rápido 10→25; pico ~3 050 g a 30-35.
Leve descenso >35; <3 000 g y mayor variabilidad >45.
Distribución de peso al nacer por sexo
Descripción de la gráfica 8
Distribuciones casi idénticas.
Mediana ♂ ~30 g > ♀; diferencia mínima.
Defunciones por sexo (2021‑2023)
Descripción de la gráfica 9
♂ ≈55 % | ♀ ≈45 %; mayor mortalidad masculina.
Distribución de edad al fallecer por sexo
Descripción de la gráfica 10
Pico neonatal en ambos.
♂ máx. ~65-70 a; ♂ más dispersión 20-60 a.
♀ máx. ~75-80 a y mayor densidad >80 a (mayor longevidad).