##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE TIPO DE APTITUD SOLAR ####
## DATASET ##
setwd("~/R INFERENCIAL/SOLAR_APTITUDE_CLASS")
# 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
# Definir el orden específico
orden_solar <- c("Baja", "Media", "Alta")
# Traducción y Mapeo
Datos <- Datos %>%
mutate(Solar = case_when(
grepl("Baja", solar_aptittude_class, ignore.case = TRUE) ~ "Baja",
grepl("Media", solar_aptittude_class, ignore.case = TRUE) ~ "Media",
grepl("Alta", solar_aptittude_class, ignore.case = TRUE) ~ "Alta",
TRUE ~ NA_character_
)) %>%
filter(!is.na(Solar))
# Crear el Factor
Solar <- factor(
Datos$Solar,
levels = orden_solar,
ordered = TRUE
)
# Tabla de distribución de frecuencias
TDF_Solar <- table(Solar)# Tabla de frecuencias absolutas
Tabla <- as.data.frame(TDF_Solar)
# Renombrar columna de frecuencia
colnames(Tabla) <- c("Solar", "ni")
# Asegurar tipo character
Tabla$Solar <- as.character(Tabla$Solar)
# Crear porcentaje
Tabla$`hi (%)` <- (Tabla$ni / sum(Tabla$ni)) * 100
# Fila total
fila_total_Solar <- tibble(
Solar = "TOTAL",
ni = sum(Tabla$ni),
`hi (%)` = sum(Tabla$`hi (%)`)
)
# Unir fila total
tabla_Final <- bind_rows(Tabla, fila_total_Solar)
# TABLA GT
tabla_solar_gt <- tabla_Final %>%
gt() %>%
tab_header(
title = md("**Tabla N°1 de Distribución de Frecuencias del Tipo de Aptitud Solar de las Plantas Solares**")
) %>%
tab_source_note(
source_note = "Autor: Martin Sarmiento"
) %>%
cols_label(
Solar = "Tipo de Aptitud Solar",
ni = "Frecuencia (ni)",
`hi (%)` = "Porcentaje (hi%)"
) %>%
fmt_number(
columns = `hi (%)`,
decimals = 2
) %>%
tab_options(
heading.title.font.size = px(16),
column_labels.background.color = "#F0F0F0"
)
# Mostrar tabla
tabla_solar_gt| Tabla N°1 de Distribución de Frecuencias del Tipo de Aptitud Solar de las Plantas Solares | ||
| Tipo de Aptitud Solar | Frecuencia (ni) | Porcentaje (hi%) |
|---|---|---|
| Baja | 23 | 0.45 |
| Media | 1871 | 36.87 |
| Alta | 3181 | 62.68 |
| TOTAL | 5075 | 100.00 |
| Autor: Martin Sarmiento | ||
# Reordenar los niveles del factor para que las barras aparezcan en la secuencia correcta
Tabla_Plot <- Tabla
Tabla_Plot$Solar <- factor(Tabla_Plot$Solar, levels = orden_solar)
par(mar = c(10, 4, 4, 2))
barplot(Tabla_Plot$`hi (%)`,
main = "Gráfica N°1: Distribución Porcentual de las Plantas Solares por Tipo de Aptitud Solar",
xlab = "",
ylab = "Porcentaje %",
col = "#F0E68C",
ylim = c(0,100),
names.arg = Tabla_Plot$Solar,
cex.names = 0.7,
cex.main = 0.9,
las = 2)
mtext("Tipo de Aptitud Solar", side = 1, line = 9)# Crear Tabla de Frecuencias y Mapeo
TDF_Bin <- as.data.frame(TDF_Solar)
colnames(TDF_Bin) <- c("Solar", "ni")
# Mapeo
TDF_Bin$X <- 0:(nrow(TDF_Bin) - 1)
TDF_Bin$hi <- TDF_Bin$ni / sum(TDF_Bin$ni)
# Estimación de Parametros Binomiales
Media_Obs <- sum(TDF_Bin$X * TDF_Bin$ni) / sum(TDF_Bin$ni)
n_param <- 2
p_param <- Media_Obs / n_param
# Visualización del Mapeo
TDF_Bin %>%
select(Solar, X, ni, hi) %>%
gt() %>%
tab_header(
title = md("**Tabla N°2 de Distribución de Frecuencias del Tipo de Aptitud Solar - Mapeado**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_label(
Solar = "Tipo de Aptitud Solar",
X = "Valor Asignado",
ni = "Frecuencia (ni)",
hi = "Porcentaje (hi%)"
) %>%
fmt_number(columns = hi, decimals = 4) %>%
tab_options(
heading.title.font.size = px(16),
heading.subtitle.font.size = px(14),
column_labels.background.color = "#F0F0F0"
)| Tabla N°2 de Distribución de Frecuencias del Tipo de Aptitud Solar - Mapeado | |||
| Tipo de Aptitud Solar | Valor Asignado | Frecuencia (ni) | Porcentaje (hi%) |
|---|---|---|---|
| Baja | 0 | 23 | 0.0045 |
| Media | 1 | 1871 | 0.3687 |
| Alta | 2 | 3181 | 0.6268 |
| Autor: Martin Sarmiento | |||
# PCálculo de Probabilidades Teóricas
Prob_Teorica_Bin <- dbinom(TDF_Bin$X, size = n_param, prob = p_param)
# Gráfico
par(mar = c(8, 4, 4, 2))
barplot(rbind(TDF_Bin$hi, Prob_Teorica_Bin),
beside = TRUE,
main = "Gráfica N°2: Comparado de lo Observado frente a lo Esperado del Tipo de Aptitud Solar de las Plantas Solares",
ylab = "Porcentaje (%)",
names.arg = TDF_Bin$Solar,
col = c("#F0E68C", "yellow"),
legend.text = c("Observado", "Esperado"),
args.legend = list(x = "topleft"),
las = 2,
cex.names = 0.8,
cex.main = 0.7,
ylim = c(0, 1))
mtext("Tipo de Aptitud Solar", side = 1, line = 6)# Definir Frecuencia Observada y Esperada
Fo_B <- TDF_Bin$hi
Fe_B <- Prob_Teorica_Bin
# Gráfico de Correlación
plot(Fo_B, Fe_B,
main = "Gráfica N°3: Correlación del Modelo Observado y Esperado del Tipo de Aptitud Solar de las Plantas Solares",
cex.main = 0.7,
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
pch = 19, col = "#458B00")
abline(lm(Fe_B ~ Fo_B), col = "red", lwd = 2)## [1] 98.50915
# Cálculo de Chi-cuadrado
x2_B <- sum(((Fo_B - Fe_B)^2) / Fe_B)
# Grados de libertad (k - 1)
gl_B <- length(Fo_B) - 1
# Valor crítico
vc_B <- qchisq(0.95, gl_B)
# Mostrar resultados
x2_B## [1] 0.04131476
## [1] 5.991465
## [1] TRUE
# Crear data frame resumen
tabla_resumen_B <- data.frame(
Variable = "Tipo de Aspecto",
Pearson = round(Correlacion_B, 2),
Chi2 = round(x2_B, 4),
Umbral = round(vc_B, 2)
)
# Visualizar con GT
tabla_resumen_B %>%
gt() %>%
cols_label(
Variable = ("Variable"),
Pearson = "Test Pearson (%)",
Chi2 = ("Chi Cuadrado"),
Umbral = "Umbral de Aceptación"
) %>%
tab_header(
title = md("**Tabla N°3 Resumen del Test de Bondad al Modelo de Probabilidad**")) %>%
tab_source_note(
source_note = "Autor: Martin Sarmiento") %>%
cols_align(
align = "center",
everything()) %>%
tab_options(
heading.title.font.size = px(16),
column_labels.background.color = "#F0F0F0")| Tabla N°3 Resumen del Test de Bondad al Modelo de Probabilidad | |||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de Aceptación |
|---|---|---|---|
| Tipo de Aspecto | 98.51 | 0.0413 | 5.99 |
| Autor: Martin Sarmiento | |||