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
| 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")
