library(readxl)
# 1. Asegúrate de que la ruta sea la correcta para tu archivo Excel
Datos <- read_xlsx("C:/Users/LEO/Documents/Antisana/weatherdataANTISANA.csv.xlsx")

Min_Temperature <- Datos$Min_Temperature

Min_Temperature <- as.numeric(Min_Temperature)
# Ajustamos el filtro: Las mínimas suelen estar entre 0 y 12 grados
Min_Temperature <- Min_Temperature[!is.na(Min_Temperature) & Min_Temperature >= 0 & Min_Temperature <= 15]


# Agrupaciones de 2 en 2 desde 0 hasta 12
mis_breaks <- seq(0, 12, by = 2)

histograma <- hist(Min_Temperature, freq = FALSE, main="Gráfica 103.Modelo de probabilidad Normal",
                   xlab="Grados Celsius", ylab="Densidad de probabilidad", col="blue")

# Ajuste del modelo al histograma
histograma <- hist(Min_Temperature, breaks = mis_breaks, freq = FALSE, main="Gráfica 104 .Modelo de probabilidad Normal 
de Mínima Temperatura",
                   xlab="Grados Celsius", ylab="Densidad de probabilidad", col="blue")
h <- length(histograma$counts)

# Usamos media y desviación estándar para el modelo Normal
u_norm <- mean(Min_Temperature)
sigma_norm <- sd(Min_Temperature)

# Curva suave
x <- seq(min(Min_Temperature), max(Min_Temperature), length.out = 100)
curve(dnorm(x, u_norm, sigma_norm), type="l", add=TRUE, lwd=4, col="black")

# Frecuencia simple observada
Fo <- histograma$counts

# Frecuencia simple esperada
P <- c(0)
for (i in 1:h) {
  P[i] <- (pnorm(histograma$breaks[i+1], u_norm, sigma_norm) -
             pnorm(histograma$breaks[i], u_norm, sigma_norm))
}
Fe <- P * length(Min_Temperature)

n <- length(Min_Temperature)

# 2. Test de Pearson
plot(Fo, Fe, main="Gráfica 105: Correlación de frecuencias en el modelo normal de Mínima Temperatura",
     xlab="Frecuencia Observada", ylab="Frecuencia esperada", col="blue3", pch=19)

abline(lm(Fe ~ Fo), col="red", lwd=2)

Correlación <- cor(Fo, Fe) * 100

# TEST DE CHI-CUADRADO
grados_libertad <- (length(histograma$counts)-1)
nivel_significancia <- 0.05

x2 <- sum((Fe - Fo)^2 / Fe)

# Umbral
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)

# ¿Pasa la prueba?
# x2 < umbral_aceptacion

# 3. Tabla resumen
Variable <- c("Min_Temperature")
tabla_resumen <- data.frame(Variable, round(Correlación, 2), round(x2, 2), round(umbral_aceptacion, 2))
colnames(tabla_resumen) <- c("Variable", "Test Pearson (%)", "Chi Cuadrado", "Umbral de aceptación")

library(knitr)
kable(tabla_resumen, format = "markdown", caption = "Tabla.Resumen de test para Mínima Temperatura")
Tabla.Resumen de test para Mínima Temperatura
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Min_Temperature 99.94 10.11 11.07
# 4. Gráfica con área sombreada (Rango de 4 a 8 grados para la mínima)
limite_inf <- 4 
limite_sup <- 8

prob_area <- pnorm(limite_sup, u_norm, sigma_norm) - pnorm(limite_inf, u_norm, sigma_norm)

x_grafica <- seq(0, 15, length.out = 1000)
y_grafica <- dnorm(x_grafica, u_norm, sigma_norm)

plot(x_grafica, y_grafica, type = "l", col = "skyblue3", lwd = 2, 
     main="Distribución de Mínima Temperatura",
     ylab="Densidad de Probabilidad", 
     xlab="Mínima Temperatura (°C)", 
     xaxt="n")

x_sombra <- seq(limite_inf, limite_sup, length.out = 100)
y_sombra <- dnorm(x_sombra, u_norm, sigma_norm)
polygon(c(x_sombra, rev(x_sombra)), c(y_sombra, rep(0, length(y_sombra))), 
        col = rgb(1, 0, 0, 0.4), border = "red")

axis(1, at = seq(0, 15, by = 1), las = 2)

legend("topright", 
       legend = c("Modelo Normal", paste("Probabilidad:", round(prob_area*100, 2), "%")), 
       fill = c(NA, rgb(1, 0, 0, 0.4)), border = c("skyblue3", "red"), bty = "n")