##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### MODELO DE REGRESIÓN EXPONENCIAL ####
## DATASET ##
setwd("~/R REGRESION/EXPONENCIAL")
# Cargar dataset
Datos <- read.csv("DataSet_prov.csv", sep = ";", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)## 'data.frame': 5075 obs. of 30 variables:
## $ FID_ : int 0 2 3 4 5 6 10 11 12 13 ...
## $ OBJECTID : int 127 129 130 131 132 133 137 138 139 140 ...
## $ code : chr "00127-ARG-P" "00129-ARG-G" "00130-ARG-P" "00131-ARG-P" ...
## $ plant_name : chr "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Altiplano 200 Solar Power Plant" "Anchoris solar farm" ...
## $ country : chr "Argentina" "Argentina" "Argentina" "Argentina" ...
## $ operational_status : chr "announced" "operating" "operating" "construction" ...
## $ longitude : chr "-68,8713" "-66,895798" "-66,926102" "-68,915001" ...
## $ latitude : chr "-32,998501" "-24,1392" "-24,073999" "-33,330101" ...
## $ elevation : int 929 4000 4000 937 865 858 570 1612 665 3989 ...
## $ area : chr "250,337006" "4397290" "5774,399902" "645,163025" ...
## $ size : chr "Small" "Big" "Small" "Small" ...
## $ slope : chr "0,574179" "1,60257" "6,24265" "0,902748" ...
## $ slope_type : chr "Plano o casi plano" "Plano o casi plano" "Moderado" "Plano o casi plano" ...
## $ curvature : chr "0,000795" "-0,002781" "-0,043699" "0,002781" ...
## $ curvature_type : chr "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies cóncavas / Valles" "Superficies planas o intermedias" ...
## $ aspect : chr "55,124672" "188,707367" "270,913513" "108,434952" ...
## $ aspect_type : chr "Northeast" "South" "West" "East" ...
## $ dist_to_road : chr "127,2827045" "56014,95403" "52696,78572" "335,9280031" ...
## $ ambient_temperature : chr "12,6" "6,8" "6,8" "13,1" ...
## $ ghi : chr "6,11" "8,012" "7,878" "6,119" ...
## $ humidity : chr "53,74" "53,74" "53,74" "53,74" ...
## $ wind_speed : chr "3,7789" "7,02062" "8,32836" "3,87037" ...
## $ wind_direction : chr "55,099998" "55,099998" "55,099998" "55,099998" ...
## $ dt_wind : chr "Northeast" "Northeast" "Northeast" "Northeast" ...
## $ solar_aptitude : chr "0,746197" "0,8" "0,726996" "0,595309" ...
## $ solar_aptitude_rounded: int 7 8 7 6 7 7 7 8 7 8 ...
## $ solar_aptittude_class : chr "Alta" "Alta" "Alta" "Media" ...
## $ capacity : chr "25" "101" "107" "180" ...
## $ optimal_tilt : int 31 26 26 31 33 30 31 29 31 27 ...
## $ pv_potential : chr "4,983" "6,389" "6,392" "4,969" ...
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Limpieza y conversión
datos_base <- Datos %>%
select(longitude, ghi) %>%
mutate(
x_var = as.numeric(gsub(",", ".", longitude)),
y_var = as.numeric(gsub(",", ".", ghi))
) %>%
filter(!is.na(x_var), !is.na(y_var), y_var > 0)
# Omitir Outliers
lim_x <- quantile(datos_base$x_var, probs = c(0.05, 0.95))
lim_y <- quantile(datos_base$y_var, probs = c(0.05, 0.95))
datos_limpios <- datos_base %>%
filter(x_var >= lim_x[1] & x_var <= lim_x[2],
y_var >= lim_y[1] & y_var <= lim_y[2])
# Agrupación Técnica
datos_agrupados <- datos_limpios %>%
mutate(long_bin = round(x_var / 5) * 5) %>%
group_by(long_bin) %>%
summarise(
x = mean(x_var),
y = mean(y_var)
)
x_val <- datos_agrupados$x
y_val <- datos_agrupados$yplot(x_val, y_val,
main = "Gráfica N°1: Diagrama de Dispersión de la GHI (kWh/m²)\n en función de la Longitud (°)",
xlab = "Longitud (°)",
ylab = "GHI (kWh/m²)",
col = rgb(0, 0, 1, 0.3),
pch = 20)La ecuación es \(y = a \cdot e^{b \cdot x}\). Para linealizar, aplicamos logaritmo solo a la variable dependiente: \(\ln(y) = \ln(a) + b \cdot x\).
plot(x_val, y_val,
main = "Gráfica N°2: Modelo de Regresión Potencial de la GHI (kWh/m²)",
xlab = "Longitud (°)",
ylab = "GHI (kWh/m²)",
col = rgb(0, 0, 1, 0.3),
pch = 20)
curve(a_param * exp(b_param * x), add = TRUE, col = "red", lwd = 3)## [1] "y = 6.3623 * e ^ (0.0018 * x)"
tabla_resumen <- data.frame(
Variable = c("Longitud (°)", "GHI (kWh/m²)"),
Tipo = c("Independiente (x)", "Dependiente (y)"),
Pearson = c("", round(r, 2)),
R2 = c("", round(r2, 2)),
Parametro_a = c("", round(a_param, 4)),
Exponente_b = c("", round(b_param, 4)),
Ecuación = c("", ecuacion)
)
tabla_resumen %>%
gt() %>%
tab_header(title = md("**Tabla N°1 del Resumen del Modelo de Regresión Exponencial**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_align(align = "center", everything())| Tabla N°1 del Resumen del Modelo de Regresión Exponencial | ||||||
| Variable | Tipo | Pearson | R2 | Parametro_a | Exponente_b | Ecuación |
|---|---|---|---|---|---|---|
| Longitud (°) | Independiente (x) | |||||
| GHI (kWh/m²) | Dependiente (y) | 65.62 | 43.06 | 6.3623 | 0.0018 | y = 6.3623 * e ^ (0.0018 * x) |
| Autor: Martin Sarmiento | ||||||
¿Qué irradiancia se estima para una longitud de -78° (Cercano a la zona de Ecuador/Quito)?
long_test <- -78
ghi_est <- a_param * exp(b_param * long_test)
cat("Para una longitud de", long_test, "°, el GHI estimado es:", round(ghi_est, 4), "kWh/m²")## Para una longitud de -78 °, el GHI estimado es: 5.533 kWh/m²
………