\(Variable\) \(de\) \(Estudio\): Tipo de Aptitud Solar (Solar_aptitude_class).
Se determina que esta variable es Cualitativa Ordinal, categorizada en tres niveles jerárquicos (Baja, Media y Alta). El tipo de aptitud solar condiciona directamente la progresión energética y el diseño integral de la instalación. Debido a la estructura de las frecuencias observadas en el terreno, se opta por una Estrategia de Modelado Único:
\(Modelo\) \(Aceptado\): Distribución Binomial \(B(2, p)\) (Validado exitosamente mediante el Test de Pearson y la Prueba Chi-cuadrado \(\chi^2\), lo que demuestra que la distribución es estadísticamente coherente y confiable para el diseño del proyecto).
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readxl))
Datos <- read_excel(file.choose(), sheet = "Dataset_Mundial_Final")
str(Datos)## tibble [58,978 × 29] (S3: tbl_df/tbl/data.frame)
## $ OBJECTID : num [1:58978] 2 3 4 5 6 7 8 9 10 11 ...
## $ code : chr [1:58978] "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
## $ plant_name : chr [1:58978] "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
## $ country : chr [1:58978] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ operational_status : chr [1:58978] "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
## $ longitude : num [1:58978] 62.9 67.1 70.4 66.2 65.7 ...
## $ latitude : num [1:58978] 35.1 36.7 34.4 33.8 31.7 ...
## $ elevation : num [1:58978] 918 359 629 2288 1060 ...
## $ area : num [1:58978] 6.74 10.72 487.73 111.8 1929.96 ...
## $ size : chr [1:58978] "Small" "Small" "Small" "Small" ...
## $ slope : num [1:58978] 7.38 0.49 1.1 6.16 1.23 ...
## $ slope_type : chr [1:58978] "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
## $ curvature : num [1:58978] -0.024 0 0 0.045 -0.005 -0.005 -0.015 0 0 -0.009 ...
## $ curvature_type : chr [1:58978] "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
## $ aspect : num [1:58978] 96.8 358.5 36.2 305.8 248.4 ...
## $ aspect_type : chr [1:58978] "East" "North" "Northeast" "Northwest" ...
## $ dist_to_road : num [1:58978] 7037.1 92.7 112.1 1705.3 115.8 ...
## $ ambient_temperature : num [1:58978] 14.4 17.88 21.32 8.86 19.64 ...
## $ ghi : num [1:58978] 5.82 5.58 5.8 6.75 6.62 ...
## $ humidity : num [1:58978] 47.7 42.3 36.4 37.3 24.2 ...
## $ wind_speed : num [1:58978] 0.039 0.954 0.234 0.943 0.37 ...
## $ wind_direction : num [1:58978] 187.5 207.4 255.6 160.3 97.7 ...
## $ dt_wind : chr [1:58978] "South" "Southwest" "West" "South" ...
## $ solar_aptitude : num [1:58978] 0.72 0.635 0.685 0.659 0.819 0.819 0.818 0.642 0.63 0.374 ...
## $ solar_aptitude_rounded: num [1:58978] 7 6 7 7 8 8 8 6 6 4 ...
## $ solar_aptittude_class : chr [1:58978] "Alta" "Alta" "Alta" "Alta" ...
## $ capacity : num [1:58978] 32 40 60 3000 100 100 36 50 25 100 ...
## $ optimal_tilt : num [1:58978] 30 31 31.1 33 31 ...
## $ pv_potential : num [1:58978] 4.61 4.41 4.57 5.42 5.17 ...
Extraemos la variable solar_aptittude_class, omitimos las celdas en blanco y verificamos el tamaño muestral.
Extraemos la variable solar_aptittude_class para obtener su frecuencia absoluta (ni) y calculamos el porcentaje (hi) sobre el total. Finalmente, añadimos una Asignación jerárquica y consolidamos todo en el data frame TDF_Solar con un diseño profesional y centrado.
suppressPackageStartupMessages({
library(gt)
library(dplyr)
library(readxl)
})
solar_vec <- factor(Datos$solar_aptittude_class,
levels = c("Baja", "Media", "Alta"),
ordered = TRUE)
conteo_raw <- table(solar_vec)
ni_val <- as.numeric(conteo_raw)
hi_val <- (ni_val / sum(ni_val)) * 100
df_solar_final <- data.frame(
Asignacion = 1:3,
Tipo = names(conteo_raw),
ni = ni_val,
hi = hi_val
)
df_solar_final %>%
gt() %>%
tab_header(
title = md("**TABLA N\u00ba 1: DISTRIBUCI\u00d3N DE FRECUENCIAS DE LA APTITUD SOLAR**"),
) %>%
cols_label(
Asignacion = "Asignaci\u00f3n",
Tipo = "Tipo de Aptitud Solar",
ni = "ni",
hi = "hi (%)"
) %>%
fmt_number(columns = hi, decimals = 2) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_options(
table.width = pct(90),
data_row.padding = px(12),
column_labels.padding = px(15),
table.border.top.style = "solid",
table.border.top.color = "#2E4053",
table.border.bottom.style = "solid",
table.border.bottom.color = "#2E4053"
)| TABLA Nº 1: DISTRIBUCIÓN DE FRECUENCIAS DE LA APTITUD SOLAR | |||
| Asignación | Tipo de Aptitud Solar | ni | hi (%) |
|---|---|---|---|
| 1 | Baja | 1892 | 3.21 |
| 2 | Media | 12791 | 21.69 |
| 3 | Alta | 44295 | 75.10 |
par(mar = c(5, 4, 4, 2))
barplot(df_solar_final$hi,
main = "GRAFICO No 1: PORCENTAJE DE LA APTITUD SOLAR",
ylab = "Porcentaje (%)",
col = "#B0C4DE",
names.arg = c("1", "2", "3"),
las = 1,
cex.names = 1.0,
cex.axis = 0.8,
cex.main = 1.1,
ylim = c(0, max(df_solar_final$hi) + 10))
mtext("Tipo de Aptitud Solar", side = 1, line = 3)Se aplicó un modelo de Distribución Binomial \(B(2, p)\) para validar la consistencia de la Aptitud Solar. A diferencia de otros modelos, el Binomial se ajusta con precisión a variables ordinales de categorías fijas, permitiendo contrastar la realidad observada frente a una tendencia teórica. El alto grado de similitud entre las barras demuestra que el potencial solar sigue una distribución probabilística coherente, fortaleciendo la validez del análisis de campo.
n_total_Solar <- sum(df_solar_final$ni)
size_binom <- 2
X_indices <- 0:2
media_obs <- sum(X_indices * df_solar_final$ni) / n_total_Solar
prob_p <- media_obs / size_binom
P_Binomial <- dbinom(X_indices, size = size_binom, prob = prob_p) * 100
par(mar = c(9, 4, 4, 2))
max_y <- max(max(df_solar_final$hi), max(P_Binomial))
barplot(rbind(df_solar_final$hi, P_Binomial),
beside = TRUE,
main = "GR\u00c1FICO N\u00ba 2: Comparado de lo Observado frente a lo Esperado de la Aptitud Solar",
ylab = "Porcentaje (%)",
names.arg = c("1", "2", "2"),
col = c("#B0C4DE", "#AED6F1"), # Azul fuerte y Azul claro
ylim = c(0, max_y + 25),
las = 1,
cex.names = 0.9,
cex.main = 0.85)
legend("topright",
legend = c("Realidad", "Modelo"),
fill = c("#B0C4DE", "#AED6F1"),
bty = "n", cex = 0.8)
mtext("Nivel de Aptitud Solar", side = 1, line = 6)Fo_S <- df_solar_final$hi
Fe_S <- P_Binomial
test_correlacion <- cor.test(Fo_S, Fe_S)
r_valor <- round(test_correlacion$estimate, 4)
par(mar = c(5, 5, 4, 2))
plot(Fo_S, Fe_S,
main = "GR\u00c1FICO N\u00ba 3: CORRELACI\u00d3N DEL MODELO (OBSERVADO VS. ESPERADO)",
cex.main = 0.85,
xlab = "Frecuencia Observada (%)",
ylab = "Frecuencia Esperada (%)",
pch = 19,
col = "#2E4053",
cex = 1.5)
abline(lm(Fe_S ~ Fo_S), col = "red", lwd = 2)
text(x = min(Fo_S), y = max(Fe_S),
labels = paste("r =", r_valor),
pos = 4, font = 2, col = "#2E4053")## [1] 99.8438
x2_S <- sum(((Fo_S - Fe_S)^2) / Fe_S)
gl_S <- length(Fo_S) - 1
vc_S <- qchisq(0.95, gl_S)
cat("Estad\u00edstico Chi-cuadrado (Calculado):", round(x2_S, 4), "\n")## Estadístico Chi-cuadrado (Calculado): 1.043
## Valor Crítico (Tabla): 5.9915
## ¿Se acepta el modelo? (Calculado < Crítico): TRUE
tabla_resumen_S <- data.frame(
Variable = "Aptitud Solar",
Pearson = round(Correlacion_S, 2),
Chi2 = round(x2_S, 4),
Umbral = round(vc_S, 2),
Resultado = ifelse(x2_S < vc_S, "Modelo Aceptado", "Modelo Rechazado")
)
tabla_resumen_S %>%
gt() %>%
tab_header(
title = md("**TABLA N\u00ba 2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD**")
) %>%
cols_label(
Variable = "Variable",
Pearson = "Test Pearson (%)",
Chi2 = "Chi Cuadrado",
Umbral = "Umbral de Aceptaci\u00f3n",
Resultado = "Resultado Final"
) %>%
tab_source_note(
source_note = "Autor: Fernando Neira"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
locations = cells_title()
) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_options(
table.width = pct(95),
table.border.top.color = "#2E4053",
table.border.bottom.color = "#2E4053",
column_labels.border.bottom.color = "#2E4053",
data_row.padding = px(10)
)| TABLA Nº 2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD | ||||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de Aceptación | Resultado Final |
|---|---|---|---|---|
| Aptitud Solar | 99.84 | 1.043 | 5.99 | Modelo Aceptado |
| Autor: Fernando Neira | ||||
## [1] 75.10428
La probabilidad de que un punto seleccionado al azar presente una aptitud solar Alta es del 75.10428%. Este valor es fundamental para el proyecto, ya que confirma la proporción del terreno que posee las condiciones óptimas de radiación para maximizar la eficiencia de los paneles fotovoltaicos.
## [1] 3.207976
La probabilidad de encontrar puntos con Aptitud Baja es apenas del 3.207976%. Este valor es excelente para el proyecto, ya que confirma que el riesgo de seleccionar un terreno con baja eficiencia energética es mínimo, asegurando que la mayor parte del área es técnicamente aprovechable.
El análisis modeló la Aptitud Solar mediante una distribución binomial, confirmando un predominio de zonas con alto potencial energético. Las pruebas de bondad de ajuste validaron la coherencia entre los datos observados y el modelo teórico, brindando un respaldo estadístico sólido para la zonificación técnica del proyecto.