library(readr)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Carga tu archivo csv
nacimientos <- read_csv("Nacimientos_2023.csv")
## Rows: 1521280 Columns: 64
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (21): ENTIDADNACIMIENTO, MUNICIPIONACIMIENTO, FECHANACIMIENTOMADRE, ENT...
## dbl  (41): NACIOEXTRANJERO, EDAD, SECONSIDERAINDIGENA, HABLALENGUAINDIGENA, ...
## time  (2): HORANACIMIENTO, TIEMPOTRASLADO
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Ejercicio 1. Filtrado y resumen de indicadores por mes

A partir del nacimientos, extrae sólo los datos de los nacidos en enero, febrero y marzo de 2023.

Para cada uno de esos tres meses, calcula:

El número total de nacimientos,

El peso promedio al nacer,

El porcentaje de madres que hablan lengua indígena.

Guarda el resultado en un nuevo data frame llamado resumen_trimestre_1.

nacimientos$FECHANACIMIENTO <- as.Date(nacimientos$FECHANACIMIENTO, format = "%d/%m/%Y")
resumen_trimestre_1 <- nacimientos %>%
  filter(format(FECHANACIMIENTO, "%Y-%m") %in% c("2023-01", "2023-02", "2023-03")) %>%
  group_by(mes = format(FECHANACIMIENTO, "%Y-%m")) %>%
  summarise(
    total_nacimientos = n(),
    peso_promedio = mean(PESO, na.rm = TRUE),
    porcentaje_lengua_indigena = mean(HABLALENGUAINDIGENA == "1", na.rm = TRUE) * 100
  )

Ejercicio 2. Recodificación múltiple y exportación

Genera el data frame nacimientos_nl (sólo Nuevo León) y crea una nueva variable rango_edad con estas categorías:

“< 18”

“18–24”

“25–34”

“≥ 35”

Renombra las columnas clave a minúsculas y con guiones bajos.

Exporta el resultado con write_csv() a un archivo llamado nacimientos_nl_edad_por_rango.csv.

nacimientos_nl <- nacimientos %>%
  filter(ENTIDADFEDERATIVAPARTO == 19) %>%
  mutate(
    rango_edad = case_when(
      EDAD < 18 ~ "< 18",
      EDAD >= 18 & EDAD <= 24 ~ "18–24",
      EDAD >= 25 & EDAD <= 34 ~ "25–34",
      EDAD >= 35 ~ "≥ 35",
      TRUE ~ NA_character_
    )
  ) %>%
  rename_with(~ tolower(gsub(" ", "_", .x)))
write_csv(nacimientos_nl, "nacimientos_nl_edad_por_rango.csv")

Ejercicio 3. Visualización y línea de tendencia

Con el data frame nacimientos, crea un gráfico de barras (geom_col()) de total_personas por cada categoría de estado_conyugal.

Después, usando el objeto original nacimientos, haz un scatterplot de EDAD vs. NUMEROEMBARAZOS, coloreando por estado_conyugal.

Sobre ese scatterplot, añade una línea de tendencia (geom_smooth) que muestre la tendencia de número de embarazos en función de la edad.

library(ggplot2)
# Re-codificar variable de estado conyugal
nacimientos <- nacimientos %>%
  mutate(ESTADOCONYUGAL = case_when(
    ESTADOCONYUGAL == "1" ~ "Soltera",
    ESTADOCONYUGAL == "2" ~ "Casada",
    ESTADOCONYUGAL == "3" ~ "Unión libre",
    ESTADOCONYUGAL == "4" ~ "Divorciada",
    ESTADOCONYUGAL == "5" ~ "Viuda",
    TRUE ~ "Desconocido"
  ))
# Gráfico de barras de total_personas por estado_conyugal
ggplot(nacimientos, aes(x = ESTADOCONYUGAL)) +
  geom_bar(fill = "skyblue") +
  labs(title = "Total de nacimientos por estado conyugal",
       x = "Estado conyugal",
       y = "Total de nacimientos") +
  theme_minimal()