knitr::opts_chunk$set(
  echo = TRUE, 
  warning = FALSE, 
  message = FALSE, 
  fig.align = "center",
  fig.width = 10, 
  fig.height = 5
)
options(scipen = 999)

library(tidyverse)
library(gridExtra)

# Carga del archivo CSV con delimitador correcto (;)
if(file.exists("EDF_2024.csv")){
  # read_csv2 es para archivos con punto y coma
  df_eval <- read_csv2("EDF_2024.csv", show_col_types = FALSE)
  names(df_eval) <- toupper(trimws(names(df_eval)))
} else {
  set.seed(2026)
  df_eval <- data.frame(
    PESO = rnorm(1000, 3150, 450),
    SEXO = sample(c("Hombre", "Mujer"), 1000, replace = TRUE)
  )
}

#Introducción El análisis de datos demográficos y de salud pública es fundamental para la toma de decisiones informadas. En este informe, se aborda el estudio de la base de datos de Nacidos Vivos y Defunciones del INEC.

#Parte 1: Modelado de Distribución Discreta (Binomial)

# Definición: X = número de registros de SEXO "Hombre" en n = 15 casos.
p_exito <- mean(df_eval$SEXO == "Hombre", na.rm = TRUE)
n_ensayos <- 15

# Probabilidades
prob_exacta <- dbinom(8, size = n_ensayos, prob = p_exito)
prob_acumulada <- pbinom(5, size = n_ensayos, prob = p_exito)

# Dataframe para gráficos
df_bin <- data.frame(k = 0:n_ensayos) %>%
  mutate(
    fmp = dbinom(k, n_ensayos, p_exito), 
    fda = pbinom(k, n_ensayos, p_exito)
  )

g1 <- ggplot(df_bin, aes(x = k, y = fmp)) + 
  geom_col(fill = "steelblue", alpha = 0.8) + 
  labs(title = "FMP: Probabilidad Puntual", x = "Hombres (X)", y = "P(X=k)") + 
  theme_light()

g2 <- ggplot(df_bin, aes(x = k, y = fda)) + 
  geom_step(color = "firebrick", size = 1) + 
  labs(title = "FDA: Probabilidad Acumulada", x = "Hombres (X)", y = "P(X<=k)") + 
  theme_light()

grid.arrange(g1, g2, ncol = 2)

#Interpretación: La probabilidad de que exactamente 8 de los 15 registros sean hombres es 0.1993. Existe una probabilidad de 0.0682 de encontrar 5 o menos hombres en la muestra. Binomial (Discreta): Usas barras (geom_col) porque no existen “7.5 hombres”, los valores saltan de uno en uno.

Normal (Continua): Usas una curva suave (geom_line) porque el peso puede ser cualquier número decimal (ej. 1725.56g).

#Parte 2: Modelado de Distribución Continua (Normal)

# 1. Limpieza de datos: Convertimos a numérico y filtramos
# Usamos as.numeric para que "Sin información" pase a ser NA
df_eval$PESO_NUM <- as.numeric(as.character(df_eval$PESO))
v_peso <- df_eval$PESO_NUM[df_eval$PESO_NUM > 500 & df_eval$PESO_NUM < 5000]

# 2. Momentos Estadísticos (Asegúrate de que todo sea minúscula)
esperanza  <- mean(v_peso, na.rm = TRUE)
desviacion <- sd(v_peso, na.rm = TRUE)
varianza   <- var(v_peso, na.rm = TRUE) # AQUÍ ESTABA EL ERROR

# 3. Cálculo de Probabilidad P(X < 2500)
prob_bajo_peso <- pnorm(2500, mean = esperanza, sd = desviacion)

cat(sprintf("Esperanza (Peso): %.2f g\nProbabilidad < 2500g: %.4f\n", 
            esperanza, prob_bajo_peso))
## Esperanza (Peso): 1725.56 g
## Probabilidad < 2500g: 0.7832
# 4. Representación Gráfica
x_vals <- seq(esperanza - 3*desviacion, esperanza + 3*desviacion, length.out = 100)
df_norm <- data.frame(x = x_vals) %>% 
  mutate(fdp = dnorm(x, esperanza, desviacion), 
         fda = pnorm(x, esperanza, desviacion))

g3 <- ggplot(df_norm, aes(x = x, y = fdp)) + 
  geom_line(color = "darkgreen", size = 1) + 
  geom_area(fill = "darkgreen", alpha = 0.2) + 
  labs(title = "FDP: Densidad de Peso", x = "Peso (g)", y = "Densidad") + 
  theme_minimal()

g4 <- ggplot(df_norm, aes(x = x, y = fda)) + 
  geom_line(color = "darkorange", size = 1) + 
  labs(title = "FDA: Probabilidad Acumulada", x = "Peso (g)", y = "Probabilidad") + 
  theme_minimal()

grid.arrange(g3, g4, ncol = 2)

#Interpretación: La Esperanza Matemática del peso es de 1725.56 g, con una Varianza de 978097.65. La probabilidad de bajo peso (menos de 2500g) es del 78.32% * Distribución Binomial: Representa eventos discretos (conteo de personas).