\(Variable\) \(de\) \(Estudio\): Orientación de Ladera (aspect_type).
Se determina que esta variable es Cualitativa Ordinal, categorizada en nueve niveles direccionales (desde North hasta Flat). La orientación del terreno condiciona directamente la captación de radiación solar y el diseño óptimo de la instalación. Debido a la concentración natural de los emplazamientos hacia orientaciones favorables, se opta por una Estrategia de Modelado Único:
\(Modelo Aceptado\): Distribución Normal (Validado mediante Test de Pearson, lo que permite una planificación segura y optimizada 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 aspect_type, omitimos las celdas en blanco y verificamos el tamaño muestral.
Extraemos la variable size 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)
})
aspect_levels <- c("North", "Northeast", "East", "Southeast",
"South", "Southwest", "West", "Northwest", "Flat")
aspect_vec <- factor(Datos$aspect_type,
levels = aspect_levels,
ordered = TRUE)
conteo_aspect_raw <- table(aspect_vec)
ni_aspect_val <- as.numeric(conteo_aspect_raw)
hi_aspect_val <- (ni_aspect_val / sum(ni_aspect_val)) * 100
df_aspect_final <- data.frame(
Asignacion = 1:9,
Orientacion = names(conteo_aspect_raw),
ni = ni_aspect_val,
hi = hi_aspect_val
)
df_aspect_final %>%
gt() %>%
tab_header(
title = md("**TABLA N\u00ba 1: DISTRIBUCI\u00d3N DE FRECUENCIAS DE LA ORIENTACI\u00d3N DE LADERA**"),
) %>%
cols_label(
Asignacion = "Asignaci\u00f3n",
Orientacion = "Orientaci\u00f3n (Aspect)",
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 ORIENTACIÓN DE LADERA | |||
| Asignación | Orientación (Aspect) | ni | hi (%) |
|---|---|---|---|
| 1 | North | 4906 | 8.32 |
| 2 | Northeast | 6981 | 11.84 |
| 3 | East | 8270 | 14.02 |
| 4 | Southeast | 8051 | 13.65 |
| 5 | South | 8335 | 14.13 |
| 6 | Southwest | 7733 | 13.11 |
| 7 | West | 7645 | 12.96 |
| 8 | Northwest | 5952 | 10.09 |
| 9 | Flat | 1105 | 1.87 |
par(mar = c(10, 4, 4, 2))
barplot(df_aspect_final$hi,
main = "GRAFICO No 1: PORCENTAJE DE LA ORIENTACION DE LADERA",
ylab = "Porcentaje (%)",
col = "#B0C4DE", # Azul profesional
# Nombres de las categorias (ajustados para las 9 barritas)
names.arg = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
las = 1,
cex.names = 0.8,
cex.axis = 0.8,
cex.main = 0.9,
ylim = c(0, max(df_aspect_final$hi) + 10))
mtext("Orientacion (Aspect)", side = 1, line = 8)Se eligió el modelo normal porque la orientación del terreno tiende a concentrarse en direcciones más frecuentes (como el Sur y el Este) y disminuye gradualmente hacia las demás. Este comportamiento forma una curva de campana que refleja perfectamente la distribución natural y simétrica del relieve topográfico.
X_indices_aspect <- 1:9
n_total_aspect <- sum(df_aspect_final$ni)
media_obs_aspect <- sum(X_indices_aspect * df_aspect_final$ni) / n_total_aspect
sd_obs_aspect <- sd(rep(X_indices_aspect, df_aspect_final$ni))
P_Normal_raw <- dnorm(X_indices_aspect, mean = media_obs_aspect, sd = sd_obs_aspect)
P_Normal_Aspect <- (P_Normal_raw / sum(P_Normal_raw)) * 100
par(mar = c(9, 4, 4, 2))
max_y_aspect <- max(max(df_aspect_final$hi), max(P_Normal_Aspect))
barplot(rbind(df_aspect_final$hi, P_Normal_Aspect),
beside = TRUE,
main = "GRAFICO No 2: Comparado de lo Observado frente a lo Esperado (Normal)",
ylab = "Porcentaje (%)",
names.arg = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
col = c("#B0C4DE", "#5DADE2"),
ylim = c(0, max_y_aspect + 20),
las = 1,
cex.names = 0.8,
cex.main = 0.85)
legend("topright",
legend = c("Realidad", "Modelo Normal"),
fill = c("#B0C4DE", "#5DADE2"),
bty = "n", cex = 0.8)
mtext("Orientacion (Aspect Type)", side = 1, line = 7)Fo_Aspect <- df_aspect_final$hi
Fe_Aspect <- P_Normal_Aspect
test_correlacion_aspect <- cor.test(Fo_Aspect, Fe_Aspect)
r_valor_aspect <- round(test_correlacion_aspect$estimate, 4)
par(mar = c(5, 5, 4, 2))
plot(Fo_Aspect, Fe_Aspect,
main = "GRAFICO No 3: CORRELACION DEL MODELO NORMAL (ORIENTACION)",
cex.main = 0.85,
xlab = "Frecuencia Observada (%)",
ylab = "Frecuencia Esperada (%)",
pch = 19,
col = "#2E4053",
cex = 1.5)
abline(lm(Fe_Aspect ~ Fo_Aspect), col = "red", lwd = 2)
text(x = min(Fo_Aspect), y = max(Fe_Aspect),
labels = paste("r =", r_valor_aspect),
pos = 4, font = 2, col = "#2E4053")## [1] 83.92916
x2_Aspect_Normal <- sum(((Fo_Aspect - P_Normal_Aspect)^2) / P_Normal_Aspect)
gl_Aspect <- length(Fo_Aspect) - 1
vc_Aspect <- qchisq(0.95, gl_Aspect)
cat("Estadistico Chi-cuadrado (Calculado):", round(x2_Aspect_Normal, 4), "\n")## Estadistico Chi-cuadrado (Calculado): 9.7192
## Valor Critico (Tabla): 15.5073
## ¿Se acepta el modelo Normal? (Calculado < Critico): TRUE
tabla_resumen_Aspect <- data.frame(
Variable = "Orientacion de Ladera",
Pearson = round(Correlacion_Aspect_Normal, 2),
Chi2 = round(x2_Aspect_Normal, 4),
Umbral = round(vc_Aspect, 2),
Resultado = ifelse(x2_Aspect_Normal < vc_Aspect, "Modelo Aceptado", "Modelo Rechazado")
)
library(gt)
library(dplyr)
tabla_resumen_Aspect %>%
gt() %>%
tab_header(
title = md("**TABLA No 2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (ORIENTACION)**")
) %>%
cols_label(
Variable = "Variable",
Pearson = "Test Pearson (%)",
Chi2 = "Chi Cuadrado",
Umbral = "Umbral de Aceptacion",
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 No 2: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD (ORIENTACION) | ||||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de Aceptacion | Resultado Final |
|---|---|---|---|---|
| Orientacion de Ladera | 83.93 | 9.7192 | 15.51 | Modelo Aceptado |
| Autor: Fernando Neira | ||||
## [1] 14.13239
La probabilidad de encontrar un terreno orientado al Sur es de aproximadamente \(14.13\)%. Este dato es fundamental para la ingeniería del proyecto solar, ya que en gran parte del mundo (especialmente en el hemisferio norte), esta orientación garantiza la máxima captación de radiación solar directa a lo largo del día, optimizando la generación de energía.
## [1] 1.87358
La probabilidad de encontrar un terreno completamente plano es del \(1.87\)%. Aunque son escasos, estos terrenos son los más valiosos para la ingeniería, ya que permiten instalar seguidores solares y orientar los paneles libremente sin las restricciones topográficas del relieve.
El modelo normal y el coeficiente de Pearson confirman la predominancia de orientaciones favorables (Sur, Este y Sureste). Esto brinda un respaldo estadístico sólido para el diseño de la planta, garantizando una óptima captación de radiación solar a pesar de la variabilidad natural del terreno.