0.- Librerías

library(readr)
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)

1.- leer datos

variables <- read_csv("C:/Users/CESAR/Downloads/proyecto x/GlobalWeatherRepository.csv", show_col_types = TRUE)

2.- Selección de las variables (Causa y Efecto)

Causa y Efecto:

Elegimos analizar la Humedad y la Precipitación porque queríamos observar cómo la cantidad de vapor de agua acumulada en el aire (la causa) influye directamente en la cantidad de lluvia que termina cayendo (el efecto). para le analísis meteorológico en las capitales del mundo

y <- variables$humidity
x <- variables$precip_mm
TPP <- data.frame(y, x)
n <- nrow(TPP)
cat("Tamaño muestral del modelo = ", n)
## Tamaño muestral del modelo =  141703

3.- Tabla de pares de valores

Antes de realizar la tabla pares de valores, debemos comprobar que estas variables tengan el mismo tamaño muestral para no tener algún error a la hora de hacer la tabla y el gráfico

limpiar_columna <- function(df, cols) {
  for (col in cols) {
    df[[col]] <- as.numeric(as.character(df[[col]]))
  }
  return(df)
}

# Aplicar la función a tus variables climáticas
datos <- limpiar_columna(variables, c("precip_mm", "humidity"))

# Filtrar filas completas (eliminar los NA)
datos_limpios <- datos %>% filter(!is.na(precip_mm) & !is.na(humidity))

# Asignar variables para el análisis
y  <- datos_limpios$precip_mm
x  <- datos_limpios$humidity


TPP <- data.frame(y, x)
n <- nrow(TPP)
cat("Tamaño muestral del modelo = ", n)
## Tamaño muestral del modelo =  141703
# Creamos el data frame con tus variables limpias
tabla_pares_valores <- head(data.frame(
 `Humedad %` = datos_limpios$humidity,
  `Precipitación (mm)` = datos_limpios$precip_mm,
 check.names = FALSE
), 300)

# 2. Generar la tabla con tu estilo personalizado
kable(
  tabla_pares_valores,    
  align = "c",      
  booktabs = TRUE,
  caption = "Tabla N.1: Pares de valores entre humedad y precipitación para el análisis
  meteorológico en capitales del mundo
  Periodo: Mayo 2024 a Mayo 2026 "
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed"), 
    full_width = FALSE,                                    
    position = "center"                                     
  ) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#1F4E79") %>%
  footnote(
    general = "Fuente: Global Weather Repository.",
    general_title = "Nota: ", 
    footnote_as_chunk = TRUE
  )%>%
  scroll_box(height = "400px", width = "100%") 
Tabla N.1: Pares de valores entre humedad y precipitación para el análisis meteorológico en capitales del mundo Periodo: Mayo 2024 a Mayo 2026
Humedad % Precipitación (mm)
24 0.00
94 0.10
29 0.00
61 0.30
89 0.00
84 0.02
93 0.00
40 0.13
87 0.00
63 0.00
68 0.00
89 0.00
33 0.00
31 0.00
74 0.00
29 0.00
94 0.25
89 0.00
79 0.02
50 0.16
77 0.00
64 0.00
43 0.00
98 0.04
84 0.00
77 0.00
67 0.00
66 0.02
44 0.00
69 0.00
45 0.00
78 0.00
71 0.00
60 0.00
27 0.00
93 0.00
22 0.00
62 0.00
73 0.10
66 0.00
100 0.17
82 0.00
84 0.00
39 0.00
49 0.00
67 0.00
55 0.00
68 0.00
78 0.03
94 0.00
92 0.03
32 0.00
94 0.30
89 0.20
42 0.15
43 0.00
39 0.00
48 0.05
89 0.00
33 0.00
72 0.01
75 0.00
83 0.00
68 0.02
38 0.00
84 0.00
38 0.00
79 0.06
88 0.09
94 0.01
89 0.00
100 0.08
88 0.00
57 0.00
78 0.28
43 0.00
93 0.29
13 0.00
63 0.02
25 0.00
17 0.00
94 0.00
54 0.00
57 0.00
84 0.10
47 0.00
29 0.00
34 0.00
61 0.06
75 0.00
44 0.00
59 0.05
74 0.03
48 0.00
65 0.00
52 0.00
94 0.00
63 0.00
72 0.00
39 0.00
88 0.31
53 0.00
64 0.00
84 1.86
76 0.04
74 0.00
45 0.00
79 0.27
79 0.00
83 0.14
47 0.00
89 0.70
34 0.00
82 0.37
17 0.00
88 0.34
60 0.00
65 0.00
36 0.00
40 0.00
56 0.00
48 0.00
94 0.71
77 0.01
80 0.01
36 0.00
67 0.00
27 0.00
88 0.10
49 0.00
56 0.00
15 0.00
75 0.01
83 0.00
94 0.06
90 1.79
79 0.00
89 0.00
56 0.00
34 0.00
77 0.01
37 0.00
26 0.00
42 0.00
61 0.79
79 0.00
84 0.06
84 0.01
94 0.79
88 0.60
94 0.03
7 0.00
78 0.00
56 0.00
89 0.35
79 0.00
89 1.75
55 0.00
82 0.06
87 0.09
89 0.00
35 0.00
35 0.00
10 0.00
47 0.00
94 1.01
10 0.00
96 0.00
40 0.00
82 0.13
31 0.00
37 0.05
57 0.00
75 0.11
77 0.03
43 0.00
100 2.09
89 0.03
57 0.00
45 0.02
69 0.02
100 2.00
60 0.02
53 0.25
19 0.00
88 0.20
58 0.00
87 0.00
73 0.01
83 0.02
84 0.05
62 0.03
27 0.01
46 0.00
37 0.00
41 0.03
45 0.00
39 0.00
76 0.22
63 0.00
75 0.02
76 0.00
77 0.20
100 0.00
72 0.00
59 0.00
79 0.00
42 0.00
41 0.00
75 0.02
34 0.00
77 0.04
79 0.00
89 0.05
90 0.17
37 0.00
83 0.02
19 0.00
61 0.00
100 3.01
82 0.15
94 0.23
55 0.34
48 0.00
58 0.00
75 0.00
56 0.22
63 0.00
53 0.00
25 0.00
87 0.00
47 0.00
61 0.00
79 0.04
56 0.00
89 0.02
68 0.68
75 0.00
54 0.00
49 0.02
56 0.00
42 0.00
53 0.00
79 0.04
84 0.03
66 0.00
23 0.00
89 0.33
80 0.03
52 0.67
37 0.00
38 0.00
39 0.00
100 0.40
30 0.00
52 0.04
71 1.17
52 0.00
88 0.00
31 0.00
71 0.00
43 0.00
66 0.03
83 0.27
71 0.05
44 0.00
84 0.03
61 0.03
69 0.00
69 0.01
38 0.00
66 0.09
23 0.00
84 2.05
17 0.00
16 0.00
64 0.00
51 0.00
69 0.00
66 0.00
44 0.00
21 0.00
41 0.00
54 0.95
77 0.01
51 0.00
97 1.23
95 0.25
40 0.00
61 0.00
24 0.00
75 0.00
89 0.16
60 0.92
34 0.01
63 0.03
64 0.00
47 0.00
100 0.02
77 0.00
Nota: Fuente: Global Weather Repository.

4.- Gráfica de dispersión

x <- datos_limpios$humidity
y <- datos_limpios$precip_mm

# Graficamos con la escala fija en el eje Y
plot(
  x, y, 
  type = "p",              
  pch = 16,                
  col = "green",           
  main = "Gráfico N°1: Pares de valores precipitación según Humedad\nPeriodo: Mayo 2024 a Mayo 2026",
  xlab = "Humedad (%)", 
  ylab = "Precipitación (mm)"

)

5.- Conjetura

Dado de se observa una distribución heterogenea no podemos definir como tal certesa un modelo de regresión, aplicamos alguna estratejia para asi lograr conjeturar, procedemos hacer el tratamiento de datos

Tratamiento de datos

Estrategia calculamos la media del porcentaje de nubosidad para cada porcentaje de humedad

datos_n <- aggregate(precip_mm ~ humidity, data = datos_limpios, FUN = mean)
nrow(datos_n)
## [1] 99
colnames(datos_n) <- c("Humedad", "Precipitación")
x <- datos_n$Humedad
y <- datos_n$Precipitación

plot(
  x, 
  y, 
  type = "p",               
  pch = 16,                  
  col = "green",           
  main = "Gráfico N°2: Promedio de precipitación según Humedad para el análisis
  meteorológico en capitales del mundo
  Periodo: Mayo 2024 a Mayo 2026 ",
  xlab = "Humedad (%)", 
  ylab = "Precipitación (mm)"
)

Al observar el comportamiento de los datos, se evidencia una tendencia de crecimiento no lineal donde la tasa de cambio de la precipitación aumenta a medida que la humedad se incrementa. Por lo tanto, se propone un modelo exponencial para capturar mejor esta relación curva.

Modelo Exponencial

\[Y = \alpha \cdot e^{\beta X}\]

Para poder estimar sus parámetros mediante regresión lineal, aplicamos una transformación logarítmica (linealización del modelo):

\[\ln(Y) = \ln(\alpha) + \beta X\]

Donde:

  • \(Y\): Precipitación (mm).

  • \(X\): Humedad atmosférica (%).

  • \(\alpha\): El valor base de la precipitación cuando la humedad es cero (tras aplicar el exponencial).

  • \(\beta\): La tasa de crecimiento exponencial de la lluvia respecto a la humedad.

6.- Cálculo de parametros

Para evitar errores matemáticos, como la humedad al principio se ve valores de precipitación de exactamente 0.0 (y el logaritmo de 0 no existe, da un error de infinito), le sumamos una cantidad mínima (+ 0.0001) al hacer la regresión.

# 1. Ajustar el modelo exponencial linealizado
# Usamos log() que en R es el Logaritmo Natural
modelo_exponencial <- lm(log(y + 0.0001) ~ x, data = tabla_pares_valores)

# 2. Extraer y despejar los parámetros originales
parametros <- coef(modelo_exponencial)
parametros
## (Intercept)           x 
## -8.03891392  0.07980233
# Despejamos alpha aplicando la función exponencial (exp) al intercepto
alpha <- exp(parametros[1]) 
alpha
##  (Intercept) 
## 0.0003226592
beta <- parametros[2]  
beta# Beta es directamente la pendiente de la humedad
##          x 
## 0.07980233
# 3. Mostrar los parámetros despejados
cat("El parámetro Alpha (Base) es:", round(alpha, 5), "\n")
## El parámetro Alpha (Base) es: 0.00032
cat("El parámetro Beta (Exponente) es:", round(beta, 5), "\n")
## El parámetro Beta (Exponente) es: 0.0798
alpha_formateado <- format(alpha, scientific = FALSE, digits = 5)

ecuacion_exponencial <- paste0("Y = ", alpha_formateado, " * e^(", round(beta, 4), " * X)")

cat("La ecuación del modelo exponencial es:\n", ecuacion_exponencial)
## La ecuación del modelo exponencial es:
##  Y = 0.00032266 * e^(0.0798 * X)

7.- Sobreponer la realidad con el modelo

# 1. Graficar los puntos originales (en verde)
plot(
  x, y, 
  type = "p",              
  pch = 16,                
  col = "green",           
  main = "Gráfico N°3: Modelo Exponencial: Precipitación según Humedad para el
  análisis meteorológico en capitales del mundo
  Periodo: Mayo 2024 a Mayo 2026",
  xlab = "Humedad (%)", 
  ylab = "Precipitación (mm)"
)
# 2. Definir la función del modelo exponencial para dibujarla
# Usamos la curva: Y = alpha * exp(beta * x)
curve(alpha * exp(beta * x), from = 0, to = 100, add = TRUE, col = "blue", lwd = 2)

# 3. Agregar la leyenda con la ecuación exponencial
# Usamos el formato que definimos antes
ecuacion_exponencial <- paste0("Y = ", format(alpha, scientific = FALSE, digits = 3), 
                               " * e^(", round(beta, 4), " * X)")

legend("topleft", legend = ecuacion_exponencial, col = "blue", lty = 1, lwd = 2)

8.- Test de Bondad

Correlación de pearson

r <- cor(y, x)
r
## [1] 0.8471449

9.- Restricciones

Humedad:D = {x ∈ ℝ | 0 ≤ x ≤ 100}

Precipitación: D = {y ∈ ℝ | y ≥ 0}

Error del modelo: ¿Existe un valor de humedad que reemplazado en la ecuación del modelo genere un valor fuera del dominio de precipitación ?

No hay dicho valor de restricción ya que el dominio de precipitación perdetece a cualquier número mayor a cero y la humedad esta dada su dominio entre 0% y 100% si se reemplaza el 100 en la ecuación del modelo va a seguir dentro del dominio de la variable dependiente

10.- Estimaciones

¿Cuántos mililitros de precipitación se obtendra cuando el porcentaje de humedad sea de 80%?

Humedad_input <- 80 

# 2. Calcular la precipitación estimada usando el modelo exponencial
# Usamos tu fórmula: Y = alpha * exp(beta * X)
Precipitacion_esperada <- alpha * exp(beta * Humedad_input)

# Mostrar el resultado en consola
cat("Para una humedad del 65%, se estima una precipitación de:", round(Precipitacion_esperada, 4), "mm")
## Para una humedad del 65%, se estima una precipitación de: 0.1911 mm
# 3. Graficar (usamos type = "n" para crear el lienzo vacío)
plot(
  x, y, 
  type = "n",               
  main = "Gráfico N°3: Modelo Exponencial: Predicción de Precipitación para el 
  análisis meteorológico en capitales del mundo
  Periodo: Mayo 2024 a Mayo 2026",
  xlab = "Humedad (%)", 
  ylab = "Precipitación (mm)"
)

# 4. Plasmar la curva exponencial (el modelo completo)
curve(alpha * exp(beta * x), from = 0, to = 100, add = TRUE, col = "blue", lwd = 2)

# 5. Líneas entrecortadas hacia los ejes
segments(x0 = Humedad_input, y0 = 0, x1 = Humedad_input, y1 = Precipitacion_esperada, col = "red", lty = 2) 
segments(x0 = 0, y0 = Precipitacion_esperada, x1 = Humedad_input, y1 = Precipitacion_esperada, col = "red", lty = 2)

# 6. Punto de la estimación
points(Humedad_input, Precipitacion_esperada, col = "red", pch = 19, cex = 1.5)

# 7. Agregar valores de texto en los ejes
text(Humedad_input, 0, labels = paste(Humedad_input, "%"), pos = 3, col = "red", font = 2)
text(10, Precipitacion_esperada, labels = paste(round(Precipitacion_esperada, 3), "mm"), pos = 3, col = "red", font = 2)

# 8. Leyenda final
leyenda_ecuacion <- paste("Y =", format(alpha, digits=3), "* e^(", round(beta, 5), "* X)")
legend("topleft", legend = c(leyenda_ecuacion, "Estimación en 80%"), 
       col = c("blue", "red"), lty = c(1, 2), pch = c(NA, 19), lwd = 2)

¿Cuántos dias de un mes se espera que tengan la cantidad 0.191 mm de precipitación con un 80% de humedadad?

dias <- 30*0.80
dias
## [1] 24
# Mostrar el resultado
cat("Para una humedad del 80%, se estima que", dias, "dias del mes van a tener dicho 0.191 mm de precipitación")
## Para una humedad del 80%, se estima que 24 dias del mes van a tener dicho 0.191 mm de precipitación

11.- Conclusión

Entre la humedad (%) y la precipitación (mm) existe una relación de tipo exponencial definida por la ecuación \(Y = 0.000323 \cdot e^{(0.0798 \cdot X)}\),Se observa una correlación de Pearson de \(0.847\) donde la precipitación presenta un crecimiento acelerado a medida que la humedad aumenta. El modelo presenta restricciones claras, es válido únicamente dentro del dominio de \([0, 100]\%\); , fuera de este dominio el modelo tiende a fallar y carre se sentido logico