##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### MODELO DE REGRESIÓN POTENCIAL ####
## DATASET ##
setwd("~/R REGRESION/POTENCIAL")
# Cargar dataset
Datos <- read.csv("Dataset_Mundial_Final.csv", sep = ";", fileEncoding = "latin1")
## Estructura de los datos
str(Datos)'data.frame': 58978 obs. of 29 variables:
$ ï..OBJECTID : int 2 3 4 5 6 7 8 9 10 11 ...
$ code : chr "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
$ plant_name : chr "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
$ country : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
$ operational_status : chr "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
$ longitude : chr "62,874" "67,121" "70,413" "66,239" ...
$ latitude : chr "35,078" "36,714" "34,407" "33,768" ...
$ elevation : int 918 359 629 2288 1060 1060 1392 398 410 1012 ...
$ area : chr "6,735" "10,718" "487,729" "111,801" ...
$ size : chr "Small" "Small" "Small" "Small" ...
$ slope : chr "7,375" "0,49" "1,099" "6,162" ...
$ slope_type : chr "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
$ curvature : chr "-0,024" "0" "0" "0,045" ...
$ curvature_type : chr "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
$ aspect : chr "96,77" "358,452" "36,18" "305,766" ...
$ aspect_type : chr "East" "North" "Northeast" "Northwest" ...
$ dist_to_road : chr "7037,104" "92,748" "112,117" "1705,255" ...
$ ambient_temperature : chr "14,402" "17,875" "21,315" "8,857" ...
$ ghi : chr "5,824" "5,579" "5,805" "6,749" ...
$ humidity : chr "47,743" "42,305" "36,396" "37,344" ...
$ wind_speed : chr "0,039" "0,954" "0,234" "0,943" ...
$ wind_direction : chr "187,481" "207,422" "255,601" "160,331" ...
$ dt_wind : chr "South" "Southwest" "West" "South" ...
$ solar_aptitude : chr "0,72" "0,635" "0,685" "0,659" ...
$ solar_aptitude_rounded: int 7 6 7 7 8 8 8 6 6 4 ...
$ solar_aptittude_class : chr "Alta" "Alta" "Alta" "Alta" ...
$ capacity : chr "32" "40" "60" "3000" ...
$ optimal_tilt : chr "30" "31" "31,063" "33" ...
$ pv_potential : chr "4,613" "4,408" "4,572" "5,424" ...
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
Se definió la Velocidad del Viento (m/s) como variable independiente (x), dado que representa una condición atmosférica que puede influir en el comportamiento del sistema fotovoltaico.
El Potencial Fotovoltaico (kWh/kWp) actúa como variable dependiente (y), pues refleja la capacidad de generación energética resultante bajo determinadas condiciones ambientales.
Esta relación modela la correspondencia energética del sistema analizado: en los datos evaluados, existe una tendencia no lineal donde las variaciones en la velocidad del viento se encuentran correlacionadas con cambios progresivos en el potencial fotovoltaico, comportamiento que se ajusta idealmente a una Ley de Potencia.
# Selección de variables
datos_raw <- Datos %>%
select(wind_speed, pv_potential) %>%
mutate(
x_raw = abs(as.numeric(gsub(",", ".", as.character(wind_speed)))),
y_raw = abs(as.numeric(gsub(",", ".", as.character(pv_potential))))
) %>%
filter(!is.na(x_raw) & !is.na(y_raw) &
x_raw > 0 & y_raw > 0) %>%
filter(x_raw < 8.05) Previo a la ejecución del agrupamiento, se analiza la distribución inicial de los datos con el fin de fundamentar técnicamente el uso de la técnica de Binning.
datos_plot <- datos_raw
par(mar = c(5, 5, 4, 2))
plot(datos_plot$x_raw, datos_plot$y_raw,
main = "Gráfica N°1: Diagrama de Dispersión del Potencial Fotovoltaico (kWh/kWp)\n en función de la Velocidad del Viento (m/s)",
xlab = "Velocidad del Viento (m/s)",
ylab = "Potencial Fotovoltaico (kWh/kWp)",
col = "#3498DB",
pch = 16,
cex = 0.6,
cex.main = 0.9,
frame.plot = FALSE)
grid(nx = NULL, ny = NULL, col = "gray", lty = "dotted")Para mitigar el ruido visual de la Gráfica N°1, se aplicó un agrupamiento por Binning en 20 intervalos de igual magnitud para la velocidad del viento, facilitando así la identificación del comportamiento estadístico de los datos.
# Número de bins
n_bins <- 20
# Crear bins y calcular promedios
datos_binned <- datos_raw %>%
mutate(bin = cut(x_raw, breaks = n_bins)) %>%
group_by(bin) %>%
summarise(
x_mean = mean(x_raw, na.rm = TRUE),
y_mean = mean(y_raw, na.rm = TRUE),
.groups = "drop"
) %>%
filter(!is.na(x_mean), !is.na(y_mean),
x_mean > 0, y_mean > 0)La ecuación es \(y = a \cdot x^{b}\). Para lograr la linealización del modelo y aplicar una regresión lineal simple, aplicamos logaritmo natural a ambos lados de la igualdad:\[\ln(y) = \ln(a) + b \cdot \ln(x)\]
Se exhibe el ajuste del modelo acompañado por su correspondiente banda de incertidumbre, definida mediante un intervalo de confianza del 95%.
x_seq <- seq(min(datos_binned$x_mean),
max(datos_binned$x_mean),
length.out = 500)
pred_log <- predict(modelo_potencial,
newdata = data.frame(x_log = log(x_seq)),
interval = "confidence",
level = 0.95)
y_fit <- exp(pred_log[, "fit"])
y_lwr <- exp(pred_log[, "lwr"])
y_upr <- exp(pred_log[, "upr"])
plot(datos_binned$x_mean, datos_binned$y_mean,
main = "Gráfica N°2: Modelo de Regresión Potencial del Potencial Fotovoltaico (kWh/kWp)\n en función de la Velocidad del Viento (m/s)",
xlab = "Velocidad del Viento (m/s)",
ylab = "Potencial Fotovoltaico (kWh/kWp)",
col = "#3498DB",
cex.main = 0.9,
pch = 20)
polygon(c(x_seq, rev(x_seq)),
c(y_lwr, rev(y_upr)),
col = rgb(0.5, 0.5, 0.5, 0.2),
border = NA)
lines(x_seq, y_fit,
col = "red",
lwd = 3)
legend("topleft",
legend = c("Datos promediados (binning)",
"Modelo Potencial",
"IC 95%"),
col = c("#3498DB", "red", "gray"),
pch = c(19, NA, 15),
lwd = c(NA, 3, NA),
pt.cex = c(1.3, NA, 2),
bty = "n")# Coeficientes del modelo
log_a <- coef(modelo_potencial)[1]
b_param <- coef(modelo_potencial)[2]
a_param <- exp(log_a)
# Construcción elegante de ecuación
ecuacion <- paste0("y = ", round(a_param, 4),
"x^", round(b_param, 4))
cat("La ecuación estimada del modelo es:\n\n",
"y =", round(a_param,4), "x^", round(b_param,4))La ecuación estimada del modelo es:
y = 3.9835 x^ 0.081
tabla_resumen <- data.frame(
Variable = c("Velocidad del Viento (m/s)", "Potencial Fotovoltaico (kWh/kWp)"),
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 Potencial**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_align(align = "center", everything())| Tabla N°1 del Resumen del Modelo de Regresión Potencial | ||||||
| Variable | Tipo | Pearson | R2 | Parametro_a | Exponente_b | Ecuación |
|---|---|---|---|---|---|---|
| Velocidad del Viento (m/s) | Independiente (x) | |||||
| Potencial Fotovoltaico (kWh/kWp) | Dependiente (y) | 81.01 | 65.62 | 3.9835 | 0.081 | y = 3.9835x^0.081 |
| Autor: Martin Sarmiento | ||||||
¿Qué Potencial Fotovoltaico se estima para una Velocidad del Viento de 6 m/s?
wind_test <- 6
pv_est <- a_param * (wind_test^b_param)
cat("Para una Velocidad del Viento de", wind_test, "m/s, el Potencial Fotovoltaico estimado es:", round(pv_est, 4), "kWh/kWp")Para una Velocidad del Viento de 6 m/s, el Potencial Fotovoltaico estimado es: 4.6056 kWh/kWp
Entre la Velocidad del Viento y el Potencial Fotovoltaico existe una relación directa de tipo potencial, explicada por un coeficiente de determinación R² ≈ 66%.
Esto indica que el 66% de la variabilidad del Potencial Fotovoltaico puede ser explicada por la variación en la Velocidad del Viento, lo que representa una relación estadísticamente significativa y de magnitud considerable.
La ecuación matemática estimada del modelo es: \(y = 3.9825 \cdot x^{0.081}\)
Dado que el exponente b = 0.081 es positivo, la relación es creciente; sin embargo, al ser un valor pequeño, el efecto de la Velocidad del Viento sobre el Potencial Fotovoltaico es moderado y de crecimiento suave.