library(leaflet)
# Coordenadas:
lat <- -14.693 # Latitud
lng <- -74.369 # Longitud
# Mapa
leaflet() %>%
addTiles() %>% # Agregar mapa base
addMarkers(lng = lng, lat = lat, popup = "RESERVA NACIONAL PAMPA GALERAS")Parámetros a estudiar:
#Lectura
library(readr)
datos <- read_csv("DatosPAMPAG.csv", skip =11 )## Rows: 63 Columns: 15
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): PARAMETER
## dbl (14): YEAR, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, ANN
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#head(datos[,2:14])
#Limpieza
# Temperatura
temperatura<-datos[43:63,-c(1,15)]
años <- temperatura[[1]]
# Matriz con solo los valores numéricos
Temp <- as.matrix(temperatura[, -1]) # Excluyendo la columna "años"
# Pasando años de numeric a characte
rownames(Temp) <-as.character(años)
# Precipitación
precipitacion<-datos[1:21,-c(1,15)]
Precip<-as.matrix(precipitacion[, -1])
row.names(Precip)<-as.character(años)
# Humedad
humedad<-datos[22:42,-c(1,15)]
Hum<-as.matrix(humedad[, -1])
row.names(Hum)<-as.character(años)library(fda)
# Base spline para X (Temp)
nbasis <-7
basis <- create.bspline.basis(rangeval = c(1, 12), nbasis = nbasis)
# Suavizar cada curva
fdX <- Data2fd(argvals = 1:12, y = t(Temp), basisobj = basis)
# Visualizar las curvas
plot(fdX, main = "Curvas suavizadas con fda - Temperatura",
ylab = "Temperatura", xlab = "Años")## [1] "done"
# Regresión funcional
# Definir Y
Y<- apply(Precip,1,sum)
# Usamos fRegress
regre <- fRegress(Y ~ fdX)
# Ver coeficiente funcional estimado
plot(regre$betaestlist$fdX$fd,
main = "Coeficiente funcional beta para Temperatura")## [1] "done"
Gráfico
pred <- predict(regre)
#summary(Y)
xy <- data.frame(Y,pred)
head(xy)## Y pred
## 2000 8.93 11.444365
## 2001 7.02 8.574920
## 2002 10.70 9.063128
## 2003 10.01 9.816697
## 2004 9.07 6.993585
## 2005 7.08 8.812703
plot(años,xy$Y,pch=19, col="blue",main = "Valores Observados vs Predichos
Precipitación ~ Temperatura 2000-2022") #valores observados
lines(años,Y)
points(años,pred,col="red",pch=19) #Valores predichos
lines(años,pred,col="red") # Coeficiente de determinación (R-cuadrado)
SSE <- sum((Y - pred)^2)
SST <- sum((Y - mean(Y))^2)
R2 <- 1 - SSE/SST
cat("R-cuadrado:", R2, "\n")## R-cuadrado: 0.6319766
# SSE total (SST): Variabilidad total de Y (Precipitación total anual)
SSE0 <- sum((Y - mean(Y))^2)
# SSE del modelo: error cuadrático de los residuos (observado - predicho)
error <- Y - pred
SSE1 <- sum(error^2)
# R-cuadrado manual (verifica que coincide con el cálculo anterior)
R2 <- (SSE0 - SSE1) / SSE0
cat("R-cuadrado (manual):", R2, "\n")## R-cuadrado (manual): 0.6319766
# Prueba F para evaluar si el modelo explica significativamente la variabilidad
n.obs <- length(Y) # Número de observaciones (años)
gl.num <- nbasis # Grados de libertad del numerador
gl.den <- n.obs - 1 - gl.num # Grados de libertad del denominador
Fratio <- ((SSE0 - SSE1) / gl.num) / (SSE1 / gl.den)
p.valor <- 1 - pf(Fratio, gl.num, gl.den)
cat("F-ratio:", Fratio, "\n")## F-ratio: 3.18912
cat("p-valor:", p.valor, "\n")## p-valor: 0.03391955
En Pampa Galeras, la temperatura mensual tiene una fuerte influencia explicativa sobre la precipitación anual.
# Precipitación~Humedad
fdXh <- Data2fd(argvals = 1:12, y = t(Hum), basisobj = basis)
plot(fdXh, main = "Curvas suavizadas (fda) - Humedad")## [1] "done"
fregh <- fRegress(Y ~ fdXh)
plot(fregh$betaestlist$fdXh$fd, main = "Coeficiente funcional beta(t) Precipitación ~ Humedad")## [1] "done"
predh <- predict(fregh)
#summary(Y)
xyh <- data.frame(Y,predh)
head(xyh)## Y predh
## 2000 8.93 11.391241
## 2001 7.02 7.299067
## 2002 10.70 11.544394
## 2003 10.01 10.593278
## 2004 9.07 8.645891
## 2005 7.08 6.666908
Gráfico
plot(años,xyh$Y,pch=19, col="blue",lwd = 1,
main = "Valores Observados vs Predichos
Precipitación ~ Humedad 2000-2022") #valores observados
lines(años,Y)
points(años,predh,col="orange",pch=19) #Valores predichos
lines(años,predh,col="orange") # Coeficiente de determinación (R-cuadrado)
SSE <- sum((Y - predh)^2)
SST <- sum((Y - mean(Y))^2)
R2 <- 1 - SSE/SST
cat("R-cuadrado:", R2, "\n")## R-cuadrado: 0.7269204
# SSE total (SST): Variabilidad total de Y (Precipitación total anual)
SSE0 <- sum((Y - mean(Y))^2)
# SSE del modelo: error cuadrático de los residuos (observado - predicho)
error <- Y - predh
SSE1 <- sum(error^2)
# R-cuadrado manual (verifica que coincide con el cálculo anterior)
R2 <- (SSE0 - SSE1) / SSE0
cat("R-cuadrado (manual):", R2, "\n")## R-cuadrado (manual): 0.7269204
# Prueba F para evaluar si el modelo explica significativamente la variabilidad
n.obs <- length(Y) # Número de observaciones (años)
gl.num <- nbasis # Grados de libertad del numerador
gl.den <- n.obs - 1 - gl.num # Grados de libertad del denominador
Fratio <- ((SSE0 - SSE1) / gl.num) / (SSE1 / gl.den)
p.valor <- 1 - pf(Fratio, gl.num, gl.den)
cat("F-ratio:", Fratio, "\n")## F-ratio: 4.943595
cat("p-valor:", p.valor, "\n")## p-valor: 0.006458682
R-cuadrado (R²): 0.727
El modelo explica el 72.7% de la variabilidad en la precipitación anual.Es un ajuste fuerte.
F-ratio: 4.944
p-valor: 0.0065 Esto es muy significativo (menor que 0.01), entonces la humedad tiene una relación funcional significativa con la precipitación en Pampa Galeras.
Conclusión:
La humedad relativa mensual es un mejor predictor funcional que la
temperatura en esta zona. Puede tener que ver con que la humedad refleja
mejor el contenido de vapor en el aire, lo cual está directamente
relacionado con la formación de lluvias, sobre todo en zonas
altoandinas.