library(readxl)
Datos <- read_xlsx("C:/Users/LEO/Documents/Antisana/weatherdataANTISANA.csv.xlsx")

Max_Temperatura <- Datos$Max_Temperature


Max_Temperatura <- as.numeric(Max_Temperatura)
# Ajustamos el filtro para que sea de 8 a 24 como pediste
Max_Temperatura <- Max_Temperatura[!is.na(Max_Temperatura) & Max_Temperatura >= 8 & Max_Temperatura <= 24]
# ----------------------------------------------------------------

histograma <- hist(Max_Temperatura, 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(Max_Temperatura, breaks = seq(9, 24, by = 3), freq = FALSE, main="Gráfica 104 .Modelo de probabilidad Normal 
de Max 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(Max_Temperatura)
sigma_norm <- sd(Max_Temperatura)

# Usamos length.out=100 para que la curva sea suave independientemente del tamaño de los datos
x <- seq(min(Max_Temperatura), max(Max_Temperatura), 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(Max_Temperatura)

# Comparar tamaño real y el modelo
sum(Fe)
## [1] 361.8433
n <- length(Max_Temperatura)

# 2. Test de Pearson
# Grado de correlación entre Fe Y Fo

plot(Fo, Fe, main="Gráfica 105: Correlación de frecuencias en el modelo normal de Max Temperatura",
     xlab="Frecuencia Observada", ylab="Frecuencia esperada", col="blue3", pch=19)

# Dibujar la línea de tendencia
abline(lm(Fe ~ Fo), col="red", lwd=2)

Correlación <- cor(Fo, Fe) * 100
Correlación
## [1] 96.59274
#TEST DE CHI-CUADRADO
#Creación de grados de libertad y nivel de significancia

grados_libertad <- (length(histograma$counts)-1)
grados_libertad
## [1] 4
nivel_significancia <- 0.05

# Usamos las frecuencias absolutas para el test
x2 <- sum((Fe - Fo)^2 / Fe)
x2
## [1] 8.082922
#Calcular el umbral de aceptación

umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion
## [1] 9.487729
x2 < umbral_aceptacion
## [1] TRUE
#3 Tabla resumen de test

Variable <- c("Max_Temperatura")
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 de bondad al modelo de probabilidad")
Tabla.Resumen de test de bondad al modelo de probabilidad
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Max_Temperatura 96.59 8.08 9.49
# 4. Cálculo de probabilidades corregido
# Usaremos un rango de interés (ejemplo: 12 a 15 grados)
limite_inf <- 12 
limite_sup <- 15

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

# Ajustamos el eje X para que cubra el rango de 8 a 24
x_grafica <- seq(8, 24, length.out = 1000)
y_grafica <- dnorm(x_grafica, u_norm, sigma_norm)

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

# Sombreado de la probabilidad
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")

# Eje X con saltos de 2 en 2 grados
axis(1, at = seq(8, 24, by = 2), las = 2)

# Leyenda explicativa
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")