Análisis de Regresión Logarítmica (Un solo bloque)

# 1. LIBRERÍAS Y DATOS
library(readr)
# Carga de la base de datos meteorológica
datasetf <- read_csv("weatherdataANTISANA.csv", show_col_types = FALSE)
# 2. SELECCIÓN DE DATOS
# X = Precipitation (Precipitación en mm)
# Y = Relative Humidity (Humedad Relativa expresada en fracción de 0 a 1)
df_log <- data.frame(
  Precipitacion = datasetf$Precipitation,
  Humedad = datasetf$`Relative Humidity`
)

# 3. LIMPIEZA CRÍTICA PARA MODELO LOGARÍTMICO
# IMPORTANTE: En regresión logarítmica, solo X debe ser mayor a 0 estricto para poder usar log(X).
df_log <- na.omit(df_log)
df_log <- df_log[df_log$Precipitacion > 0, ]
# 4. MODELO LOGARÍTMICO
# Aplicamos logaritmo natural SOLO a la variable independiente (X): Y ~ log(X)
modelo_log <- lm(Humedad ~ log(Precipitacion), data = df_log)

# 5. CÁLCULO DE PARÁMETROS (Y = a + b * ln(X))
# OJO: En este modelo NO se usa exp(a), se extrae directo.
a <- coef(modelo_log)[1] # Intercepto (punto de base)
b <- coef(modelo_log)[2] # Pendiente logarítmica (tasa de desaceleración)

# 6. GRÁFICA DEL MODELO (Todo ejecutado al mismo tiempo)
plot(df_log$Precipitacion, df_log$Humedad, 
     main="Regresión Logarítmica: Precipitación vs Humedad",
     xlab="Precipitación o Lluvia (mm)", ylab="Humedad Relativa (0.0 a 1.0)",
     pch=16, col="darkgreen")

# Añadimos la curva logarítmica predicha ( Y = a + b * ln(X) )
x_seq <- seq(min(df_log$Precipitacion), max(df_log$Precipitacion), length.out=100)
y_pred <- a + (b * log(x_seq))
lines(x_seq, y_pred, col="red", lwd=3)

# 7. ESTIMACIÓN Y RESULTADOS EN CONSOLA
precip_test <- 50
prediccion_humedad <- a + (b * log(precip_test))

cat("\n--- RESULTADOS DEL MODELO LOGARÍTMICO ---\n")
## 
## --- RESULTADOS DEL MODELO LOGARÍTMICO ---
cat("Constante inicial (a):", round(a, 4), "\n")
## Constante inicial (a): 0.8195
cat("Tasa de cambio (b):", round(b, 4), "\n")
## Tasa de cambio (b): 0.0413
cat("Estimación de humedad relativa para lluvia fuerte de 50 mm: ", round(prediccion_humedad * 100, 2), "%\n\n")
## Estimación de humedad relativa para lluvia fuerte de 50 mm:  98.1 %
cat("--- RESUMEN ESTADÍSTICO ---\n")
## --- RESUMEN ESTADÍSTICO ---
print(summary(modelo_log))
## 
## Call:
## lm(formula = Humedad ~ log(Precipitacion), data = df_log)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.21689 -0.02171  0.01158  0.03625  0.18052 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        0.819540   0.003910  209.58   <2e-16 ***
## log(Precipitacion) 0.041271   0.001357   30.41   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.05781 on 364 degrees of freedom
## Multiple R-squared:  0.7176, Adjusted R-squared:  0.7169 
## F-statistic: 925.1 on 1 and 364 DF,  p-value: < 2.2e-16
cat("\nCONCLUSIÓN:\nEl modelo logarítmico (Y = a + b * ln(X)) describe a la perfección el comportamiento de la humedad relativa. Los primeros milímetros de lluvia disparan la humedad ambiente velozmente, pero a medida que llueve más fuerte (como en nuestra estimación de 50 mm), el incremento se desacelera hasta estancarse contra su límite natural de saturación atmosférica (1.0 o 100%). La curva roja refleja matemáticamente ese 'techo' que impide a la humedad crecer infinitamente.\n")
## 
## CONCLUSIÓN:
## El modelo logarítmico (Y = a + b * ln(X)) describe a la perfección el comportamiento de la humedad relativa. Los primeros milímetros de lluvia disparan la humedad ambiente velozmente, pero a medida que llueve más fuerte (como en nuestra estimación de 50 mm), el incremento se desacelera hasta estancarse contra su límite natural de saturación atmosférica (1.0 o 100%). La curva roja refleja matemáticamente ese 'techo' que impide a la humedad crecer infinitamente.