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:

Guarda el resultado en un nuevo data frame llamado resumen_trimestre_1.

library(readr)
library(dplyr)
library(ggplot2)
library(lubridate) 
resumen_trimestre_1 <- nacimientos4.2 %>%
  select(FECHANACIMIENTO,
         PESO,
         HABLALENGUAINDIGENA) %>%
  mutate(fechaform=dmy(FECHANACIMIENTO),
         anofechnac=year(fechaform),
         mesfechanac=month(fechaform),
         mes=case_when(mesfechanac == 1 ~ "Enero",
                mesfechanac == 2 ~ "Febrero",
                mesfechanac == 3 ~ "Marzo")) %>%
  filter(mes %in% c("Enero","Febrero","Marzo")) %>%
  group_by(mes) %>%
  summarise(total_nacimientos = n(),
            peso_promedio = mean(PESO, na.rm=TRUE),
            porcentaje_habla_lengua_indigena = mean(HABLALENGUAINDIGENA == "1", na.rm=TRUE) * 100)
resumen_trimestre_1
## # A tibble: 3 × 4
##   mes     total_nacimientos peso_promedio porcentaje_habla_lengua_indigena
##   <chr>               <int>         <dbl>                            <dbl>
## 1 Enero              129966         3500.                             6.63
## 2 Febrero            112738         3480.                             6.57
## 3 Marzo              126580         3476.                             6.70

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 (de 5-8 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 <- nacimientos4.2 %>%
  filter(ENTIDADFEDERATIVAPARTO == 19) %>%
  select(EDAD, 
         EDADPADRE, 
         TALLA, 
         NUMEROEMBARAZOS,
         PESO,
         HIJOSNACIDOSVIVOS,
         TOTALCONSULTAS) %>%
  rename(edad_madre = EDAD,
         edad_padre = EDADPADRE,
         talla = TALLA,
         num_embarazos = NUMEROEMBARAZOS,
         peso = PESO,
         hijos_nacidos_vivos = HIJOSNACIDOSVIVOS,
         total_consultas = TOTALCONSULTAS) %>%
  mutate(rango_edad = case_when(edad_madre < 18 ~ "< 18",
                                edad_madre >= 18 & edad_madre <= 24 ~ "18-24",
                                edad_madre >= 25 & edad_madre <= 34 ~ "25-34",
                                edad_madre >= 35 ~ ">= 35")) %>%
  group_by(rango_edad) %>%
  summarise(edad_padre =mean(edad_padre, na.rm=TRUE),
            talla=mean(talla, na.rm=TRUE),
            num_embarazos=mean(num_embarazos, na.rm=TRUE),
            peso=mean(peso, na.rm=TRUE),
            hijos_nacidos_vivos=mean(hijos_nacidos_vivos, na.rm=TRUE),
            total_consultas=mean(total_consultas,na.rm=TRUE))
nacimientos_nl
## # A tibble: 4 × 7
##   rango_edad edad_padre talla num_embarazos  peso hijos_nacidos_vivos
##   <chr>           <dbl> <dbl>         <dbl> <dbl>               <dbl>
## 1 18-24            31.1  49.7          1.71 3339.                1.55
## 2 25-34            34.7  49.7          2.51 3354.                2.22
## 3 < 18             47.4  49.4          1.13 3241.                1.08
## 4 >= 35            41.0  49.4          3.09 3368.                2.66
## # ℹ 1 more variable: total_consultas <dbl>

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.

nacimientos_estado_conyugal <- nacimientos4.2 %>%
  select(ESTADOCONYUGAL) %>%
  mutate(estado_conyugal = case_when(ESTADOCONYUGAL == 0 ~ "No especificado",
                                     ESTADOCONYUGAL == 1 ~ "Soltera",
                                     ESTADOCONYUGAL == 2 ~ "Viuda",
                                     ESTADOCONYUGAL == 3 ~ "Divorciada",
                                     ESTADOCONYUGAL == 4 ~ "Unión libre",
                                     ESTADOCONYUGAL == 5 ~ "Casada",
                                     ESTADOCONYUGAL == 6 ~ "Separada",
                                     ESTADOCONYUGAL == 8 ~ "No aplica",
                                     ESTADOCONYUGAL == 9 ~ "Se ignora")) %>%
  group_by(estado_conyugal) %>%
  summarise(total_nacimientos=n())
ggplot(data=nacimientos_estado_conyugal, aes(x=estado_conyugal, y=total_nacimientos, fill=estado_conyugal)) +
  geom_col()+
  labs(title="Número de personas por estado conyugal",
       x="Estado conyugal",
       y="Número de personas") +
  theme_minimal()

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.

ggplot(data=nacimientos4.2, aes(x=EDAD, y=NUMEROEMBARAZOS, color=factor(ESTADOCONYUGAL))) +
  geom_point() +
  geom_smooth(method="lm", se=FALSE, color="red") +
  scale_color_manual(values= c("coral1","darkorange","gold","darkolivegreen2","skyblue","purple","hotpink","black","coral3"), labels = c("No especificado","Soltera", "Viuda","Divorciada","Unión libre","Casada","Separada","No aplica", "Se ignora")) + 
  labs(title="Relación entre edad y número de embarazos",
       x="Edad de la madre",
       y="Número de embarazos",
       color="Estado conyugal") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'