ESTADÍSTICAS VITALES EN EPIDEMIOLOGÍA

Fecha: 11 de Diciembre 2025

Alumna: LN. Lucia Anahí Sandoval Chávez

ESTADÍSTICAS VITALES DE MEXICO 2018-2021

library(readr)
estadisticas_vitales_mexico_2018_2021 <- read_csv("Downloads/estadisticas_vitales_mexico_2018_2021.csv")
View(estadisticas_vitales_mexico_2018_2021)
print(estadisticas_vitales_mexico_2018_2021)
NA

1-Crear un conjunto de datos

# Crear data frame
datos <- data.frame(estadisticas_vitales_mexico_2018_2021)
#Renombrar una columna con funcion "rename" con dplyr
datos <- datos %>% rename(año  = anio)

# Mostrar los primeros datos
print(datos)
NA

2-Calcular Tasa de Natalidad por 1000 habitantes

str(datos)
'data.frame':   4 obs. of  7 variables:
 $ año                          : num  2018 2019 2020 2021
 $ poblacion_total              : num  1.25e+08 1.26e+08 1.26e+08 1.27e+08
 $ nacimientos_registrados      : num  2162535 2092214 1629211 1912178
 $ defunciones_registradas      : num  722611 747784 1086743 1122249
 $ incremento_natural           : num  1439924 1344430 542468 789929
 $ casos_covid_confirmados      : num  0 0 1437185 NA
 $ defunciones_covid_confirmadas: num  0 0 126507 NA
print(datos)

# Calcular tasas de natalidad
datos$tasa_natalidad <- (datos$nacimientos_registrados / datos$poblacion_total) * 1000

# Crear Gráfico
ggplot(datos, aes(x = año, y = tasa_natalidad, fill = año)) +
  geom_bar(stat = "identity") +
  labs(title = "Tasa de Natalidad por Año",
       x = "año", y = "Tasa de Natalidad (por 1,000 habitantes)") +
  theme_classic()

3-Calcular Tasa de Mortalidad por 1000 habitantes

str(datos)
'data.frame':   4 obs. of  8 variables:
 $ año                          : num  2018 2019 2020 2021
 $ poblacion_total              : num  1.25e+08 1.26e+08 1.26e+08 1.27e+08
 $ nacimientos_registrados      : num  2162535 2092214 1629211 1912178
 $ defunciones_registradas      : num  722611 747784 1086743 1122249
 $ incremento_natural           : num  1439924 1344430 542468 789929
 $ casos_covid_confirmados      : num  0 0 1437185 NA
 $ defunciones_covid_confirmadas: num  0 0 126507 NA
 $ tasa_natalidad               : num  17.3 16.6 12.9 15.1
print(datos)

# Calcular tasas de mortalidad
datos$tasa_mortalidad <- (datos$defunciones_registradas / datos$poblacion_total) * 1000

# Crear gráfico
ggplot(datos, aes(x = año, y = tasa_mortalidad, fill = año)) +
  geom_bar(stat = "identity") +
  labs(title = "Tasa de Mortalidad por Año", x = "Año", y = "Tasa de Mortalidad (por 1,000 habitantes)") +
  theme_classic()

4- Tasa de incremento natural por 1 000 habitantes.

str(datos)
'data.frame':   4 obs. of  10 variables:
 $ año                          : num  2018 2019 2020 2021
 $ poblacion_total              : num  1.25e+08 1.26e+08 1.26e+08 1.27e+08
 $ nacimientos_registrados      : num  2162535 2092214 1629211 1912178
 $ defunciones_registradas      : num  722611 747784 1086743 1122249
 $ incremento_natural           : num  1439924 1344430 542468 789929
 $ casos_covid_confirmados      : num  0 0 1437185 NA
 $ defunciones_covid_confirmadas: num  0 0 126507 NA
 $ tasa_natalidad               : num  17.3 16.6 12.9 15.1
 $ tasa_mortalidad              : num  5.79 5.94 8.62 8.86
 $ tasa_incremento_natural      : num  11.54 10.68 4.3 6.23
print(datos)

#Se calcula restando la Tasa de Natalidad menos la Tasa de Mortaliad, donde ambas se expresan por cada mil individuos.

# Calcular tasas de incremento natural
datos$tasa_incremento_natural <- (datos$tasa_natalidad - datos$tasa_mortalidad) 

#Eliminar una columna 
datos <- datos %>% select(-contains('tasa_letalidad'))

# Crear gráfico
ggplot(datos, aes(x = año, y = tasa_incremento_natural, fill = año)) +
  geom_bar(stat = "identity") +
  labs(title = "Tasa de Incremento Natural por Año", x = "Año", y = "Tasa de Incremento Natural (por 1,000 habitantes)") +
  theme_classic()

5- Tasa de letalidad por COVID-19 (%) donde existan casos.

str(datos)
'data.frame':   4 obs. of  11 variables:
 $ año                          : num  2018 2019 2020 2021
 $ poblacion_total              : num  1.25e+08 1.26e+08 1.26e+08 1.27e+08
 $ nacimientos_registrados      : num  2162535 2092214 1629211 1912178
 $ defunciones_registradas      : num  722611 747784 1086743 1122249
 $ incremento_natural           : num  1439924 1344430 542468 789929
 $ casos_covid_confirmados      : num  0 0 1437185 NA
 $ defunciones_covid_confirmadas: num  0 0 126507 NA
 $ tasa_natalidad               : num  17.3 16.6 12.9 15.1
 $ tasa_mortalidad              : num  5.79 5.94 8.62 8.86
 $ tasa_incremento_natural      : num  11.54 10.68 4.3 6.23
 $ tasa_letalidad               : num  NaN NaN 8.8 NA
print(datos)

# Calcular tasas de letalidad
datos$tasa_letalidad <- (datos$defunciones_covid_confirmadas / datos$casos_covid_confirmados) * 100
#Tasa de letalidad
Datos_defunciones_covid_confirmadas <- 126507    # Número de fallecidos por la enfermedad 
casos_covid_confirmados <- 1437185   # Número total de casos registrados

# Cálculo de la tasa de letalidad
tasa_letalidad <- (Datos_defunciones_covid_confirmadas / casos_covid_confirmados) * 100

# Resultado
cat("Tasa de letalidad:", tasa_letalidad, "% de los casos que fallecen por COVID\n")
Tasa de letalidad: 8.802416 % de los casos que fallecen por COVID

NOTA: Decidí no hacer gráfico debido a que sólo se presentó en un año y me pareció más coherente presentar el resultado de esta manera. 

6- Construir una tabla con Flexatable

# Crear data frame
datos <- data.frame(estadisticas_vitales_mexico_2018_2021)
#Renombrar una columna con funcion "rename" con dplyr
datos <- datos %>% rename(año  = anio)
print(datos)

# Calcular las tasas
datos$tasa_natalidad <- (datos$nacimientos_registrados / datos$poblacion_total) * 1000

datos$tasa_mortalidad <- (datos$defunciones_registradas / datos$poblacion_total) * 1000

datos$tasa_incremento_natural <- (datos$tasa_natalidad - datos$tasa_mortalidad) 

datos$tasa_letalidad <- (datos$defunciones_covid_confirmadas / datos$casos_covid_confirmados) * 100

# Redondear solo columnas numéricas
datos_redondeados <- datos %>%
  mutate_if(is.numeric, round, 2)

# Crear la tabla con flextable
flextable(datos_redondeados) %>% 
  autofit()

año

poblacion_total

nacimientos_registrados

defunciones_registradas

incremento_natural

casos_covid_confirmados

defunciones_covid_confirmadas

tasa_natalidad

tasa_mortalidad

tasa_incremento_natural

tasa_letalidad

2,018

124,738,000

2,162,535

722,611

1,439,924

0

0

17.34

5.79

11.54

2,019

125,930,000

2,092,214

747,784

1,344,430

0

0

16.61

5.94

10.68

2,020

126,014,024

1,629,211

1,086,743

542,468

1,437,185

126,507

12.93

8.62

4.30

8.8

2,021

126,705,138

1,912,178

1,122,249

789,929

15.09

8.86

6.23

REFLEXIÓN

  • ¿En qué año se observa la mayor tasa de mortalidad y cómo se relaciona con la pandemia? La mayor tasa de mortalidad se presenta en el año 2021, sin embargo, se muestra un aumento significativo desde el año 2020, año donde inició la pandemia, y por ende los registros de defunciones relacionados con los casos registrados por COVID.

  • ¿Cómo cambia la tasa de natalidad entre 2018 y 2021? Se presentó una reducción en la natalidad en el año 2021, comparado con el año 2018.

  • ¿Qué ocurre con el incremento natural durante ese periodo? Presenta un decrecimiento o reducción en la población, casi del 50%.

  • ¿Qué significa la tasa de letalidad por COVID-19 que obtuviste para 2020? Nos dice que 8.8% de los casos confirmados por COVID fallecieron.

LS0tCnRpdGxlOiAiVEFSRUEgMTogRVNUQUTDjVNUSUNBUyBWSVRBTEVTIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojICoqRVNUQUTDjVNUSUNBUyBWSVRBTEVTIEVOIEVQSURFTUlPTE9Hw41BKioKCioqRmVjaGE6KiogMTEgZGUgRGljaWVtYnJlIDIwMjUKCioqQWx1bW5hOioqIExOLiBMdWNpYSBBbmFow60gU2FuZG92YWwgQ2jDoXZlegoKIyMjICoqRVNUQUTDjVNUSUNBUyBWSVRBTEVTIERFIE1FWElDTyAyMDE4LTIwMjEqKgoKYGBge3J9CmxpYnJhcnkocmVhZHIpCmVzdGFkaXN0aWNhc192aXRhbGVzX21leGljb18yMDE4XzIwMjEgPC0gcmVhZF9jc3YoIkRvd25sb2Fkcy9lc3RhZGlzdGljYXNfdml0YWxlc19tZXhpY29fMjAxOF8yMDIxLmNzdiIpClZpZXcoZXN0YWRpc3RpY2FzX3ZpdGFsZXNfbWV4aWNvXzIwMThfMjAyMSkKcHJpbnQoZXN0YWRpc3RpY2FzX3ZpdGFsZXNfbWV4aWNvXzIwMThfMjAyMSkKCmBgYAoKIyMjICoqMSoqLUNyZWFyIHVuIGNvbmp1bnRvIGRlIGRhdG9zCgpgYGB7cn0KIyBDcmVhciBkYXRhIGZyYW1lCmRhdG9zIDwtIGRhdGEuZnJhbWUoZXN0YWRpc3RpY2FzX3ZpdGFsZXNfbWV4aWNvXzIwMThfMjAyMSkKI1Jlbm9tYnJhciB1bmEgY29sdW1uYSBjb24gZnVuY2lvbiAicmVuYW1lIiBjb24gZHBseXIKZGF0b3MgPC0gZGF0b3MgJT4lIHJlbmFtZShhw7FvICA9IGFuaW8pCgojIE1vc3RyYXIgbG9zIHByaW1lcm9zIGRhdG9zCnByaW50KGRhdG9zKQoKYGBgCgojIyMgKioyKiotQ2FsY3VsYXIgVGFzYSBkZSAqKk5hdGFsaWRhZCoqIHBvciAxMDAwIGhhYml0YW50ZXMKCmBgYHtyfQpzdHIoZGF0b3MpCnByaW50KGRhdG9zKQoKIyBDYWxjdWxhciB0YXNhcyBkZSBuYXRhbGlkYWQKZGF0b3MkdGFzYV9uYXRhbGlkYWQgPC0gKGRhdG9zJG5hY2ltaWVudG9zX3JlZ2lzdHJhZG9zIC8gZGF0b3MkcG9ibGFjaW9uX3RvdGFsKSAqIDEwMDAKCiMgQ3JlYXIgR3LDoWZpY28KZ2dwbG90KGRhdG9zLCBhZXMoeCA9IGHDsW8sIHkgPSB0YXNhX25hdGFsaWRhZCwgZmlsbCA9IGHDsW8pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgTmF0YWxpZGFkIHBvciBBw7FvIiwKICAgICAgIHggPSAiYcOxbyIsIHkgPSAiVGFzYSBkZSBOYXRhbGlkYWQgKHBvciAxLDAwMCBoYWJpdGFudGVzKSIpICsKICB0aGVtZV9jbGFzc2ljKCkKCmBgYAoKIyMjICoqMyoqLUNhbGN1bGFyICoqVGFzYSBkZSBNb3J0YWxpZGFkKiogcG9yIDEwMDAgaGFiaXRhbnRlcwoKYGBge3J9CnN0cihkYXRvcykKcHJpbnQoZGF0b3MpCgojIENhbGN1bGFyIHRhc2FzIGRlIG1vcnRhbGlkYWQKZGF0b3MkdGFzYV9tb3J0YWxpZGFkIDwtIChkYXRvcyRkZWZ1bmNpb25lc19yZWdpc3RyYWRhcyAvIGRhdG9zJHBvYmxhY2lvbl90b3RhbCkgKiAxMDAwCgojIENyZWFyIGdyw6FmaWNvCmdncGxvdChkYXRvcywgYWVzKHggPSBhw7FvLCB5ID0gdGFzYV9tb3J0YWxpZGFkLCBmaWxsID0gYcOxbykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIGxhYnModGl0bGUgPSAiVGFzYSBkZSBNb3J0YWxpZGFkIHBvciBBw7FvIiwgeCA9ICJBw7FvIiwgeSA9ICJUYXNhIGRlIE1vcnRhbGlkYWQgKHBvciAxLDAwMCBoYWJpdGFudGVzKSIpICsKICB0aGVtZV9jbGFzc2ljKCkKYGBgCgojIyMgKio0KiotIFRhc2EgZGUgKippbmNyZW1lbnRvIG5hdHVyYWwqKiBwb3IgMSAwMDAgaGFiaXRhbnRlcy4KCmBgYHtyfQpzdHIoZGF0b3MpCnByaW50KGRhdG9zKQoKI1NlIGNhbGN1bGEgcmVzdGFuZG8gbGEgVGFzYSBkZSBOYXRhbGlkYWQgbWVub3MgbGEgVGFzYSBkZSBNb3J0YWxpYWQsIGRvbmRlIGFtYmFzIHNlIGV4cHJlc2FuIHBvciBjYWRhIG1pbCBpbmRpdmlkdW9zLgoKIyBDYWxjdWxhciB0YXNhcyBkZSBpbmNyZW1lbnRvIG5hdHVyYWwKZGF0b3MkdGFzYV9pbmNyZW1lbnRvX25hdHVyYWwgPC0gKGRhdG9zJHRhc2FfbmF0YWxpZGFkIC0gZGF0b3MkdGFzYV9tb3J0YWxpZGFkKSAKCiNFbGltaW5hciB1bmEgY29sdW1uYSAKZGF0b3MgPC0gZGF0b3MgJT4lIHNlbGVjdCgtY29udGFpbnMoJ3Rhc2FfbGV0YWxpZGFkJykpCgojIENyZWFyIGdyw6FmaWNvCmdncGxvdChkYXRvcywgYWVzKHggPSBhw7FvLCB5ID0gdGFzYV9pbmNyZW1lbnRvX25hdHVyYWwsIGZpbGwgPSBhw7FvKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgbGFicyh0aXRsZSA9ICJUYXNhIGRlIEluY3JlbWVudG8gTmF0dXJhbCBwb3IgQcOxbyIsIHggPSAiQcOxbyIsIHkgPSAiVGFzYSBkZSBJbmNyZW1lbnRvIE5hdHVyYWwgKHBvciAxLDAwMCBoYWJpdGFudGVzKSIpICsKICB0aGVtZV9jbGFzc2ljKCkKCmBgYAoKIyMjICoqNSoqLSBUYXNhIGRlICoqbGV0YWxpZGFkKiogcG9yIENPVklELTE5ICglKSBkb25kZSBleGlzdGFuIGNhc29zLgoKYGBge3J9CnN0cihkYXRvcykKcHJpbnQoZGF0b3MpCgojIENhbGN1bGFyIHRhc2FzIGRlIGxldGFsaWRhZApkYXRvcyR0YXNhX2xldGFsaWRhZCA8LSAoZGF0b3MkZGVmdW5jaW9uZXNfY292aWRfY29uZmlybWFkYXMgLyBkYXRvcyRjYXNvc19jb3ZpZF9jb25maXJtYWRvcykgKiAxMDAKCmBgYAoKYGBge3J9CiNUYXNhIGRlIGxldGFsaWRhZApEYXRvc19kZWZ1bmNpb25lc19jb3ZpZF9jb25maXJtYWRhcyA8LSAxMjY1MDcJICMgTsO6bWVybyBkZSBmYWxsZWNpZG9zIHBvciBsYSBlbmZlcm1lZGFkIApjYXNvc19jb3ZpZF9jb25maXJtYWRvcyA8LSAxNDM3MTg1CSAjIE7Dum1lcm8gdG90YWwgZGUgY2Fzb3MgcmVnaXN0cmFkb3MKCiMgQ8OhbGN1bG8gZGUgbGEgdGFzYSBkZSBsZXRhbGlkYWQKdGFzYV9sZXRhbGlkYWQgPC0gKERhdG9zX2RlZnVuY2lvbmVzX2NvdmlkX2NvbmZpcm1hZGFzIC8gY2Fzb3NfY292aWRfY29uZmlybWFkb3MpICogMTAwCgojIFJlc3VsdGFkbwpjYXQoIlRhc2EgZGUgbGV0YWxpZGFkOiIsIHRhc2FfbGV0YWxpZGFkLCAiJSBkZSBsb3MgY2Fzb3MgcXVlIGZhbGxlY2VuIHBvciBDT1ZJRFxuIikKYGBgCgpOT1RBOiBEZWNpZMOtIG5vIGhhY2VyIGdyw6FmaWNvIGRlYmlkbyBhIHF1ZSBzw7NsbyBzZSBwcmVzZW50w7MgZW4gdW4gYcOxbyB5IG1lIHBhcmVjacOzIG3DoXMgY29oZXJlbnRlIHByZXNlbnRhciBlbCByZXN1bHRhZG8gZGUgZXN0YSBtYW5lcmEuwqAKCiMjIyAqKjYqKi0gQ29uc3RydWlyIHVuYSAqKnRhYmxhKiogY29uIEZsZXhhdGFibGUKCmBgYHtyfQojIENyZWFyIGRhdGEgZnJhbWUKZGF0b3MgPC0gZGF0YS5mcmFtZShlc3RhZGlzdGljYXNfdml0YWxlc19tZXhpY29fMjAxOF8yMDIxKQojUmVub21icmFyIHVuYSBjb2x1bW5hIGNvbiBmdW5jaW9uICJyZW5hbWUiIGNvbiBkcGx5cgpkYXRvcyA8LSBkYXRvcyAlPiUgcmVuYW1lKGHDsW8gID0gYW5pbykKcHJpbnQoZGF0b3MpCgojIENhbGN1bGFyIGxhcyB0YXNhcwpkYXRvcyR0YXNhX25hdGFsaWRhZCA8LSAoZGF0b3MkbmFjaW1pZW50b3NfcmVnaXN0cmFkb3MgLyBkYXRvcyRwb2JsYWNpb25fdG90YWwpICogMTAwMAoKZGF0b3MkdGFzYV9tb3J0YWxpZGFkIDwtIChkYXRvcyRkZWZ1bmNpb25lc19yZWdpc3RyYWRhcyAvIGRhdG9zJHBvYmxhY2lvbl90b3RhbCkgKiAxMDAwCgpkYXRvcyR0YXNhX2luY3JlbWVudG9fbmF0dXJhbCA8LSAoZGF0b3MkdGFzYV9uYXRhbGlkYWQgLSBkYXRvcyR0YXNhX21vcnRhbGlkYWQpIAoKZGF0b3MkdGFzYV9sZXRhbGlkYWQgPC0gKGRhdG9zJGRlZnVuY2lvbmVzX2NvdmlkX2NvbmZpcm1hZGFzIC8gZGF0b3MkY2Fzb3NfY292aWRfY29uZmlybWFkb3MpICogMTAwCgojIFJlZG9uZGVhciBzb2xvIGNvbHVtbmFzIG51bcOpcmljYXMKZGF0b3NfcmVkb25kZWFkb3MgPC0gZGF0b3MgJT4lCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCAyKQoKIyBDcmVhciBsYSB0YWJsYSBjb24gZmxleHRhYmxlCmZsZXh0YWJsZShkYXRvc19yZWRvbmRlYWRvcykgJT4lIAogIGF1dG9maXQoKQpgYGAKCiMjIyAqKlJFRkxFWEnDk04qKgoKLSAgICoqwr9FbiBxdcOpIGHDsW8gc2Ugb2JzZXJ2YSBsYSBtYXlvciB0YXNhIGRlIG1vcnRhbGlkYWQgeSBjw7NtbyBzZSByZWxhY2lvbmEgY29uIGxhIHBhbmRlbWlhPyoqICpMYSBtYXlvciB0YXNhIGRlIG1vcnRhbGlkYWQgc2UgcHJlc2VudGEgZW4gZWwgYcOxbyAyMDIxLCBzaW4gZW1iYXJnbywgc2UgbXVlc3RyYSB1biBhdW1lbnRvIHNpZ25pZmljYXRpdm8gZGVzZGUgZWwgYcOxbyAyMDIwLCBhw7FvIGRvbmRlIGluaWNpw7MgbGEgcGFuZGVtaWEsIHkgcG9yIGVuZGUgbG9zIHJlZ2lzdHJvcyBkZSBkZWZ1bmNpb25lcyByZWxhY2lvbmFkb3MgY29uIGxvcyBjYXNvcyByZWdpc3RyYWRvcyBwb3IgQ09WSUQuKgoKLSAgICoqwr9Dw7NtbyBjYW1iaWEgbGEgdGFzYSBkZSBuYXRhbGlkYWQgZW50cmUgMjAxOCB5IDIwMjE/KiogKlNlIHByZXNlbnTDsyB1bmEgcmVkdWNjacOzbiBlbiBsYSBuYXRhbGlkYWQgZW4gZWwgYcOxbyAyMDIxLCBjb21wYXJhZG8gY29uIGVsIGHDsW8gMjAxOC4qCgotICAgKirCv1F1w6kgb2N1cnJlIGNvbiBlbCBpbmNyZW1lbnRvIG5hdHVyYWwgZHVyYW50ZSBlc2UgcGVyaW9kbz8qKiBQcmVzZW50YSB1biBkZWNyZWNpbWllbnRvIG8gcmVkdWNjacOzbiBlbiBsYSBwb2JsYWNpw7NuLCBjYXNpIGRlbCA1MCUuXAoKLSAgICoqwr9RdcOpIHNpZ25pZmljYSBsYSB0YXNhIGRlIGxldGFsaWRhZCBwb3IgQ09WSUQtMTkgcXVlIG9idHV2aXN0ZSBwYXJhIDIwMjA/KiogKk5vcyBkaWNlIHF1ZSA4LjglIGRlIGxvcyBjYXNvcyBjb25maXJtYWRvcyBwb3IgQ09WSUQgZmFsbGVjaWVyb24uKlwK