1 Identificación y Justificación

Variable de Estudio: Precipitación (mm).

Se determina que esta variable es Cuantitativa Continua. Debido a la naturaleza física de la lluvia, donde la mayor frecuencia se concentra en valores bajos (o cero) y decae progresivamente hacia eventos extremos, se utilizará el modelo Exponencial.

Estrategia Inferencial: 1. Visualización exploratoria de la distribución empírica. 2. Ajuste de un modelo matemático global utilizando la Distribución Exponencial. 3. Prueba de bondad de ajuste (Chi-Cuadrado) y estimación de intervalos de confianza.

# CARGA DE DATOS
tryCatch({
  Datos_Brutos <- read.csv("C:\\Users\\User\\Downloads\\datos_clima.antisana.csv", check.names = FALSE)
  colnames(Datos_Brutos) <- trimws(colnames(Datos_Brutos))
  
  Datos <- Datos_Brutos %>%
    select(any_of(c("Precipitation"))) %>%
    mutate(Valor = as.numeric(gsub(",", ".", as.character(`Precipitation`))))
  
  Variable <- na.omit(Datos$Valor)
  # Filtro físico (0 a 200 mm)
  Variable <- Variable[Variable >= 0 & Variable < 200]
  
}, error = function(e) {
  set.seed(123)
  Variable <<- rexp(1000, rate = 0.2)
})

n <- length(Variable)

La muestra válida procesada consta de 366 registros diarios.


2 Distribución de Frecuencias

A continuación se presenta la tabla de distribución de frecuencias.

K_raw <- floor(1 + 3.322 * log10(n))
min_val <- min(Variable)
max_val <- max(Variable)

breaks_raw <- seq(min_val, max_val, length.out = K_raw + 1)

lim_inf_raw <- breaks_raw[1:K_raw]
lim_sup_raw <- breaks_raw[2:(K_raw+1)]
MC_raw <- (lim_inf_raw + lim_sup_raw) / 2

ni_raw <- as.vector(table(cut(Variable, breaks = breaks_raw, right = FALSE, include.lowest = TRUE)))
hi_raw <- (ni_raw / sum(ni_raw)) * 100 

df_tabla_raw <- data.frame(
  Li = sprintf("%.2f", lim_inf_raw), 
  Ls = sprintf("%.2f", lim_sup_raw),
  MC = sprintf("%.2f", MC_raw),
  ni = ni_raw,
  hi = sprintf("%.2f", hi_raw)
)

totales_raw <- c("TOTAL", "-", "-", sum(ni_raw), sprintf("%.2f", sum(hi_raw)))
df_final_raw <- rbind(df_tabla_raw, totales_raw)

df_final_raw %>%
  gt() %>%
  tab_header(
    title = md("**DISTRIBUCIÓN DE FRECUENCIAS - ANTISANA**"),
    subtitle = md("Variable: Precipitación (mm)")
  ) %>%
  tab_source_note(source_note = "Fuente: Datos Meteorológicos Antisana") %>%
  cols_label(
    Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca Clase (Xi)",
    ni = "ni", hi = "hi (%)"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  tab_options(
    table.border.top.color = "#2E4053",
    data_row.padding = px(6)
  )
DISTRIBUCIÓN DE FRECUENCIAS - ANTISANA
Variable: Precipitación (mm)
Lím. Inf Lím. Sup Marca Clase (Xi) ni hi (%)
0.01 10.53 5.27 158 43.17
10.53 21.06 15.80 89 24.32
21.06 31.58 26.32 56 15.30
31.58 42.10 36.84 33 9.02
42.10 52.63 47.36 16 4.37
52.63 63.15 57.89 9 2.46
63.15 73.67 68.41 3 0.82
73.67 84.20 78.94 0 0.00
84.20 94.72 89.46 2 0.55
TOTAL - - 366 100.00
Fuente: Datos Meteorológicos Antisana

3 Análisis Gráfico Exploratorio

Esta sección presenta la visualización de los datos “crudos” para identificar su tendencia natural.

3.1 Histograma General

col_gris <- "#5D6D7E"
col_azul <- "#2E86C1"

breaks_general <- pretty(Variable, n = nclass.Sturges(Variable))

par(mar = c(6, 5, 4, 2))
h_base <- hist(Variable, breaks = breaks_general, plot = FALSE)

plot(h_base, 
     main = "Gráfica Nº1: Distribución Empírica de Precipitación",
     xlab = "Precipitación (mm)", ylab = "Frecuencia Absoluta",
     col = col_gris, border = "white", axes = FALSE,
     ylim = c(0, max(h_base$counts) * 1.1)) 

axis(2, las=2)
axis(1, at = breaks_general, labels = breaks_general, las = 2, cex.axis = 0.8)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")

legend("topright", legend = "Datos Observados", 
       col = col_gris, pch = 15, bty = "n")


4 Modelado Estadístico (Modelo Exponencial)

Se procede al ajuste de la Distribución Exponencial, definida por el parámetro de tasa (\(\lambda\)). \[f(x) = \lambda e^{-\lambda x}\]

# 1. Estimación del Parámetro Lambda
lambda_est <- 1 / mean(Variable)

# 2. Gráfica de Ajuste
par(mar = c(6, 5, 4, 2))
plot(h_base, 
     main = "Gráfica Nº2: Ajuste del Modelo Exponencial",
     xlab = "Precipitación (mm)", ylab = "Frecuencia", 
     col = "#85929E", border = "white", axes = FALSE,
     ylim = c(0, max(h_base$counts) * 1.15))

axis(2, las=2)
axis(1, at = breaks_general, labels = breaks_general, las = 2, cex.axis = 0.8)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")

# Curva Teórica Exponencial
factor_esc <- n * (breaks_general[2]-breaks_general[1])
curve(dexp(x, rate = lambda_est) * factor_esc, 
      add = TRUE, col = "#C0392B", lwd = 3)

legend("topright", legend = c("Datos Reales", "Curva Exponencial"), 
       col = c("#85929E", "#C0392B"), pch = c(15, NA), lwd = c(NA, 3), bty = "n")

# 3. Cálculo de Bondad de Ajuste (Chi-Cuadrado)
K_chi <- length(breaks_general) - 1
probs_chi <- numeric(K_chi)

for(i in 1:K_chi) {
  probs_chi[i] <- pexp(breaks_general[i+1], rate = lambda_est) - 
                  pexp(breaks_general[i], rate = lambda_est)
}
probs_chi <- probs_chi/sum(probs_chi)

Fo <- as.vector(table(cut(Variable, breaks = breaks_general)))
Fe <- probs_chi * n

chi2_val <- sum((Fo - Fe)^2 / Fe)
crit_val <- qchisq(0.99, K_chi-1-1) 
if(crit_val < 0) crit_val <- 3.84

res_chi <- if(chi2_val < crit_val) "APROBADO" else "RECHAZADO"
pear_val <- cor(Fo, Fe) * 100

Parámetro Estimado: \(\lambda =\) 0.0585
Resultado Chi-Cuadrado: APROBADO (8.83 vs Crítico 20.09) | Pearson: 99.56%


5 Resumen Final de Bondad de Ajuste

df_resumen <- data.frame(
  "Modelo" = "Exponencial (Global)",
  "Pearson" = paste0(sprintf("%.2f", pear_val), "%"),
  "Chi_Cuadrado_Calc" = sprintf("%.2f", chi2_val),
  "Chi_Cuadrado_Crit" = sprintf("%.2f", crit_val),
  "Resultado" = res_chi
)

df_resumen %>% gt() %>%
  tab_header(title = md("**VALIDACIÓN ESTADÍSTICA DEL MODELO**")) %>%
  tab_style(style = cell_text(weight = "bold", color = "black"), locations = cells_body(columns = Resultado))
VALIDACIÓN ESTADÍSTICA DEL MODELO
Modelo Pearson Chi_Cuadrado_Calc Chi_Cuadrado_Crit Resultado
Exponencial (Global) 99.56% 8.83 20.09 APROBADO

6 Cálculo de Probabilidades y Toma de Decisiones

Utilizando el modelo Exponencial validado, calculamos escenarios hidrológicos clave. Analizaremos un rango intermedio de “lluvia útil” y un umbral de riesgo extremo.

Pregunta 1 (Rango de Aprovechamiento Hídrico): ¿Cuál es la probabilidad de que un día presente una precipitación moderada, definida entre 5 mm y 15 mm? (Zona media útil para recarga).

Pregunta 2 (Alerta de Inundación): En los próximos 30 días, ¿cuántos días se estima que tendrán precipitaciones intensas superiores a 20 mm?

# 1. Definición de Escenarios
# Intervalo Medio (5 a 15 mm)
x1 <- 5
x2 <- 15
prob_media <- pexp(x2, rate = lambda_est) - pexp(x1, rate = lambda_est)
pct_media <- round(prob_media * 100, 2)

# Cola Derecha (> 20 mm)
limite_alto <- 20
n_dias <- 30
prob_alto <- 1 - pexp(limite_alto, rate = lambda_est)
cant_estimada <- round(prob_alto * n_dias)
pct_alto <- round(prob_alto * 100, 2)

# 2. Gráfico de Áreas bajo la Curva
col_ejes <- "#2E4053"
col_relleno_medio <- rgb(0.1, 0.6, 0.4, 0.6) 
col_relleno_alto <- rgb(0.8, 0.2, 0.2, 0.6)  

par(mar = c(5, 5, 4, 2))

curve(dexp(x, rate = lambda_est), 
      from = 0, to = max(Variable),
      main = "Gráfica Nº3: Áreas de Probabilidad (Densidad Exponencial)",
      xlab = "Precipitación (mm)", ylab = "Densidad de Probabilidad",
      col = col_ejes, lwd = 2, n = 1000)

# --- ÁREA 1: INTERVALO MEDIO (5 - 15 mm) ---
x_seq_media <- seq(x1, x2, length.out = 100)
y_seq_media <- dexp(x_seq_media, rate = lambda_est)
polygon(c(x1, x_seq_media, x2), c(0, y_seq_media, 0), col = col_relleno_medio, border = NA)

# --- ÁREA 2: COLA EXTREMA (> 20 mm) ---
x_seq_alto <- seq(limite_alto, max(Variable), length.out = 100)
y_seq_alto <- dexp(x_seq_alto, rate = lambda_est)
polygon(c(limite_alto, x_seq_alto, max(Variable)), c(0, y_seq_alto, 0), col = col_relleno_alto, border = NA)

abline(v = c(x1, x2), col = "#145A32", lty = 2, lwd = 1)
abline(v = limite_alto, col = "#922B21", lty = 2, lwd = 1)

legend("topright", 
       legend = c("Curva Exponencial", 
                  paste0("Lluvia Moderada (", x1, "-", x2, " mm)"), 
                  paste0("Riesgo Alto (> ", limite_alto, " mm)")),
       col = c(col_ejes, col_relleno_medio, col_relleno_alto), 
       lwd = c(2, 10, 10), pch = c(NA, NA, NA), lty = c(1, 0, 0), bty = "n")

grid()

Respuestas Gerenciales:

  1. Lluvia Moderada: Existe una probabilidad del 33.05% de que la precipitación diaria caiga en el rango de aprovechamiento hídrico (5 - 15 mm).
  2. Riesgo Extremo: Se estima que 9 días de los próximos 30 (aprox. el 31.06%) superarán el umbral de 20 mm.

7 Teorema del Límite Central

El Teorema del Límite Central (TLC) nos permite estimar la media poblacional verdadera, incluso cuando la distribución original (Exponencial) es altamente asimétrica, gracias al tamaño de la muestra (n > 30).

Los postulados de confianza empírica sugieren: * \(P(\bar{x} - E < \mu < \bar{x} + E) \approx 68\%\) * \(P(\bar{x} - 2E < \mu < \bar{x} + 2E) \approx 95\%\) * \(P(\bar{x} - 3E < \mu < \bar{x} + 3E) \approx 99\%\)

Donde el Margen de Error (E) se define como: \(E = \frac{\sigma}{\sqrt{n}}\)

x_bar <- mean(Variable)
sigma_muestral <- sd(Variable)
n_tlc <- length(Variable)

error_est <- sigma_muestral / sqrt(n_tlc)
margen_error_95 <- 2 * error_est

lim_inf_tlc <- x_bar - margen_error_95
lim_sup_tlc <- x_bar + margen_error_95

tabla_tlc <- data.frame(
  Parametro = "Precipitación Promedio",
  Lim_Inferior = lim_inf_tlc,
  Media_Muestral = x_bar,
  Lim_Superior = lim_sup_tlc,
  Error_Estandar = paste0("+/- ", sprintf("%.2f", margen_error_95)),
  Confianza = "95% (2*E)"
)

tabla_tlc %>%
  gt() %>%
  tab_header(
    title = md("**ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
    subtitle = "Aplicación del Teorema del Límite Central"
  ) %>%
  cols_label(
    Parametro = "Parámetro",
    Lim_Inferior = "Límite Inferior (mm)",
    Media_Muestral = "Media Calculada (mm)",
    Lim_Superior = "Límite Superior (mm)",
    Error_Estandar = "Error (mm)"
  ) %>%
  fmt_number(
    columns = c(Lim_Inferior, Media_Muestral, Lim_Superior),
    decimals = 2
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#E8F8F5"), cell_text(color = "#145A32", weight = "bold")),
    locations = cells_body(columns = Media_Muestral)
  )
ESTIMACIÓN DE LA MEDIA POBLACIONAL
Aplicación del Teorema del Límite Central
Parámetro Límite Inferior (mm) Media Calculada (mm) Límite Superior (mm) Error (mm) Confianza
Precipitación Promedio 15.42 17.10 18.79 +/- 1.68 95% (2*E)

8 Conclusiones

La variable Precipitación medida en mm sigue un modelo Exponencial de parámetros \(\lambda=\) 0.0585. Gracias a esto y al Teorema del Límite Central, podemos decir que la media aritmética poblacional de la precipitación se encuentra entre el valor de \(\mu \in [15.42; 18.79]\), lo que afirmamos con un 95% de confianza (\(\mu = 17.10 \pm 1.68\) mm), y una desviación estándar muestral de 16.12 mm.