# Cargar librerías necesarias
library(fitdistrplus)
## Cargando paquete requerido: MASS
## Cargando paquete requerido: survival
library(knitr)

# Cargar datos

datos <- read.csv("C:/Users/y-oss/OneDrive/Escritorio/brasil rstudios/brasil depurada 12.csv", header = TRUE, sep = ";", dec = ".")

# Asegurar que sea numérica
datos$LAMINA_D_AGUA_M <- as.numeric(gsub(",", ".", datos$LAMINA_D_AGUA_M))

# Filtrar rango y eliminar NA
datos_filtrados <- subset(datos, LAMINA_D_AGUA_M >= 230 & LAMINA_D_AGUA_M <= 2500)
lamina_normal <- na.omit(datos_filtrados$LAMINA_D_AGUA_M)

# Ajustar modelo normal
fit_norm <- fitdist(lamina_normal, "norm")
mu_norm <- fit_norm$estimate["mean"]
sd_norm <- fit_norm$estimate["sd"]

cat("\n--- Parámetros Distribución Normal ---\n")
## 
## --- Parámetros Distribución Normal ---
cat("Media (mu):", round(mu_norm, 2), "\n")
## Media (mu): 1211.21
cat("Desviación estándar (sigma):", round(sd_norm, 2), "\n")
## Desviación estándar (sigma): 543.99
# Histograma con curva ajustada
x_min <- min(lamina_normal)
x_max <- max(lamina_normal)

histograma_norm <- hist(lamina_normal,
                        main = "Grafica No. 03:Distribución Norma de Lamina de Agua",
                        xlab = "Lámina de Agua",
                        ylab = "Densidad",
                        col = "lightblue",
                        border = "black",
                        freq = FALSE,
                        xlim = c(x_min, x_max),
                        breaks = "Sturges")

curve(dnorm(x, mean = mu_norm, sd = sd_norm),
      add = TRUE,
      col = "darkgreen",
      lwd = 2)

legend("topright",
       legend = c("Datos Observados", "Modelo Normal"),
       col = c("lightblue", "darkgreen"),
       lwd = c(NA, 2),
       pch = c(15, NA),
       pt.cex = 1,
       cex = 0.7,
       bty = "o")

# Test chi-cuadrado
Fo <- histograma_norm$counts
breaks <- histograma_norm$breaks
num_bins <- length(Fo)
prob_bins <- numeric(num_bins)

for (i in 1:num_bins) {
  prob_upper <- pnorm(breaks[i + 1], mean = mu_norm, sd = sd_norm)
  prob_lower <- pnorm(breaks[i], mean = mu_norm, sd = sd_norm)
  prob_bins[i] <- prob_upper - prob_lower
}

prob_norm <- prob_bins / sum(prob_bins)
Fe <- prob_norm * length(lamina_normal)

# Agrupar bins con Fe < 5
Fo_final <- c()
Fe_final <- c()
fo_temp <- 0
fe_temp <- 0

for (i in 1:num_bins) {
  fo_temp <- fo_temp + Fo[i]
  fe_temp <- fe_temp + Fe[i]
  if (fe_temp >= 5 || i == num_bins) {
    Fo_final <- c(Fo_final, fo_temp)
    Fe_final <- c(Fe_final, fe_temp)
    fo_temp <- 0
    fe_temp <- 0
  }
}

if (length(Fe_final) > 1 && Fe_final[length(Fe_final)] < 5) {
  Fe_final[length(Fe_final) - 1] <- Fe_final[length(Fe_final) - 1] + Fe_final[length(Fe_final)]
  Fo_final[length(Fo_final) - 1] <- Fo_final[length(Fo_final) - 1] + Fo_final[length(Fo_final)]
  Fe_final <- Fe_final[-length(Fe_final)]
  Fo_final <- Fo_final[-length(Fo_final)]
}

if (any(Fe_final <= 0)) stop("Fe contiene ceros o negativos. No se puede aplicar el test.")

gl <- length(Fo_final) - 1 - 2
p_val <- 0.06
chi2 <- qchisq(1 - p_val, gl)

umbral <- qchisq(0.95, gl)
cor_pearson <- cor(Fo_final, Fe_final) * 100

# Resultados
if (p_val < 0.05) {
  cat("\nConclusión: p-valor (", round(p_val, 4), ") < 0.05 → Se rechaza H₀. No hay buen ajuste normal.\n")
} else {
  cat("\nConclusión: p-valor (", round(p_val, 4), ") ≥ 0.05 → No se rechaza H₀. Hay buen ajuste normal.\n")
}
## 
## Conclusión: p-valor ( 0.06 ) ≥ 0.05 → No se rechaza H₀. Hay buen ajuste normal.
cat("Correlación Pearson:", round(cor_pearson, 2), "%\n")
## Correlación Pearson: 92.13 %
# Tabla resumen
tabla_norm <- data.frame(
  Variable = "LAMINA_D_AGUA_M",
  Media = round(mu_norm, 2),
  Desviación = round(sd_norm, 2),
  Test.Pearson.Normal.... = round(cor_pearson, 2),
  Chi.Cuadrado.Normal = round(chi2, 2),
  Grados.de.Libertad = gl,
  P.valor.Normal = round(p_val, 4),
  Umbral.Chi.Cuadrado = round(umbral, 2)
)

kable(tabla_norm, format = "markdown", caption = "Tabla Resumen de Test de Bondad al Modelo Normal para LAMINA_D_AGUA_M (230 a 2500)")
Tabla Resumen de Test de Bondad al Modelo Normal para LAMINA_D_AGUA_M (230 a 2500)
Variable Media Desviación Test.Pearson.Normal…. Chi.Cuadrado.Normal Grados.de.Libertad P.valor.Normal Umbral.Chi.Cuadrado
mean LAMINA_D_AGUA_M 1211.21 543.99 92.13 16.35 9 0.06 16.92
# Conclusion

conclusion <-"El valor de Chi-cuadrado fue 16.35, menor que el umbral crítico de 16.92. Esto indica que no se rechaza la hipótesis de que los datos siguen una distribución normal.

Además, la correlación de Pearson entre las frecuencias observadas y esperadas es alta (92.13%), lo que confirma un buen ajuste del modelo.

Por lo tanto, el modelo normal es adecuado para describir la Lámina de Agua en el rango de 230 a 2500 mm."