Se procede a la importación del dataset mundial para el análisis de los parámetros de diseño estructural.
dataSOLAR <- read_delim("Dataset_Mundial_Final.csv",
delim = ";",
escape_double = FALSE,
trim_ws = TRUE,
locale = locale(decimal_mark = ","))
Se han seleccionado la Latitud Absoluta y la Inclinación Óptima porque la geometría solar dicta que, para maximizar la captación de energía anual, un panel debe estar inclinado en un ángulo proporcional a su distancia respecto al ecuador. En latitudes bajas, la radiación incide de forma casi vertical, requiriendo inclinaciones mínimas; sin embargo, al desplazarse hacia los polos, el ángulo solar decae de forma acelerada.
Analizar esta relación mediante un modelo potencial permite describir la aceleración técnica del ángulo de inclinación requerido para compensar la curvatura terrestre y la declinación solar estacional, optimizando así la construcción de estructuras fotovoltaicas.
Definición de variables del estudio:
Variable independiente (X): Latitud Absoluta (°).
Variable dependiente (Y): Inclinación Óptima (°).
Se comparan las variables por su relación de diseño geográfico y técnico.
# Procesamiento: Filtramos valores > 0 para evitar errores en logaritmos
Dataset_Pot <- dataSOLAR %>%
mutate(x_pot = abs(as.numeric(latitude)),
y_pot = as.numeric(optimal_tilt)) %>%
filter(x_pot > 0.5, y_pot > 0.5) %>% # Filtro para evitar valores cercanos a cero
select(x_pot, y_pot)
x_vec <- Dataset_Pot$x_pot
y_vec <- Dataset_Pot$y_pot
tabla_pares <- data.frame(Latitud_Abs = x_vec, Inclinacion_Opt = y_vec)
head(tabla_pares, 10) %>% gt() %>%
tab_header(title = md("**TABLA DE PARES DE VALORES (DISEÑO GEOMÉTRICO)**")) %>%
cols_label(Latitud_Abs = "Latitud Absoluta (°)", Inclinacion_Opt = "Inclinación (Tilt °)") %>%
cols_align("center") %>%
tab_options(column_labels.background.color = "#F0F0F0") %>%
tab_style(style = cell_text(weight = "bold"), locations = cells_column_labels())
| TABLA DE PARES DE VALORES (DISEÑO GEOMÉTRICO) | |
| Latitud Absoluta (°) | Inclinación (Tilt °) |
|---|---|
| 35.078 | 30.000 |
| 36.714 | 31.000 |
| 34.407 | 31.063 |
| 33.768 | 33.000 |
| 31.654 | 31.000 |
| 31.654 | 31.000 |
| 33.429 | 33.000 |
| 36.658 | 31.000 |
| 36.660 | 31.986 |
| 34.373 | 31.636 |
ggplot(Dataset_Pot, aes(x = x_pot, y = y_pot)) +
geom_point(color = "darkblue", alpha = 0.2, size = 1.5) +
theme_minimal() +
labs(title = "Gráfica No.1: Dispersión entre Latitud(x) entre Inclinación(y)",
subtitle = "Tendencia de Diseño Estructural Mundial",
x = "Latitud Absoluta (°)",
y = "Inclinación Óptima (°)") +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
# Ajuste sobre logaritmos
modelo_potencial <- lm(log(y_pot) ~ log(x_pot), data = Dataset_Pot)
b_pot <- coef(modelo_potencial)[2]
a_pot <- exp(coef(modelo_potencial)[1])
a_txt <- format(a_pot, scientific = FALSE, digits = 5)
b_txt <- round(b_pot, 4)
cat(" PARÁMETROS DEL MODELO POTENCIAL\n",
"Parámetro a (constante): ", a_txt, "\n",
"Parámetro b (exponente): ", b_txt, "\n",
"La ecuación es: y =", a_txt, "* x ^ (", b_txt, ")\n")
## PARÁMETROS DEL MODELO POTENCIAL
## Parámetro a (constante): 2.3808
## Parámetro b (exponente): 0.7173
## La ecuación es: y = 2.3808 * x ^ ( 0.7173 )
a_vis <- format(a_pot, scientific = FALSE, digits = 4)
b_vis <- round(b_pot, 3)
sub_pot <- paste0("Modelo Potencial: <span style='color:#e67e22;'>**y = ",
a_vis, " · x<sup>", b_vis, "</sup>**</span>")
ggplot(Dataset_Pot, aes(x = x_pot, y = y_pot)) +
geom_point(color = "darkblue", alpha = 0.3, size = 1.5) +
stat_function(fun = function(x) { a_pot * x^b_pot },
color = "#e67e22", size = 1.5) +
theme_minimal() +
labs(title = "Gráfica No.2: Modelo Potencial de Diseño Solar",
subtitle = sub_pot,
x = "Latitud Absoluta (°)",
y = "Inclinación Óptima (°)") +
theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
plot.subtitle = element_markdown(hjust = 0.5, size = 11))
test_p_pot <- cor.test(log(Dataset_Pot$x_pot), log(Dataset_Pot$y_pot), method = "pearson")
r_pot <- as.numeric(test_p_pot$estimate)
r2_pot_val <- r_pot^2
cat(" VALIDACIÓN ESTADÍSTICA: MODELO POTENCIAL\n",
"Coeficiente de correlacion (r): ", round(r_pot, 4), "\n",
"Relacion porcentual: ", round(r_pot * 100, 2), "%\n",
"Coeficiente de determinacion: ", round(r2_pot_val, 4), "\n")
## VALIDACIÓN ESTADÍSTICA: MODELO POTENCIAL
## Coeficiente de correlacion (r): 0.9433
## Relacion porcentual: 94.33 %
## Coeficiente de determinacion: 0.8898
Visualizamos la distribución de la inclinación óptima para identificar los valores extremos que podrían estar vinculados a errores de carga o restricciones de terreno inusuales.
boxplot(Dataset_Pot$y_pot,
main = "Distribución de Inclinación Óptima",
xlab = "Inclinación (°)",
col = "lightblue",
border = "darkblue",
horizontal = TRUE)
stats_p <- boxplot.stats(Dataset_Pot$y_pot)
cat("Número de valores atípicos detectados:", length(stats_p$out))
## Número de valores atípicos detectados: 2501
r_abs <- abs(r_pot)
fuerza_label <- case_when(
r_abs >= 0.85 ~ "Muy Alta",
r_abs >= 0.7 ~ "Alta",
r_abs >= 0.4 ~ "Moderada",
TRUE ~ "Baja"
)
test_status <- case_when(
test_p_pot$p.value < 0.05 & r_abs >= 0.85 ~ "Aprobado (Fuerte)",
test_p_pot$p.value < 0.05 & r_abs >= 0.6 ~ "Aprobado",
TRUE ~ "Aprobación Parcial"
)
color_semaforo <- case_when(
test_status == "Aprobado (Fuerte)" ~ "#27ae60",
test_status == "Aprobado" ~ "#2ecc71",
TRUE ~ "#f1c40f"
)
# 2. Creación del DataFrame
resumen_pot_df <- data.frame(
conjetura = "Potencial",
ecuacion = sprintf("y = %.4f * x ^ (%.4f)", a_pot, b_pot),
test = sprintf("%s (%s%%)", test_status, round(r_pot * 100, 2)),
determinacion = sprintf("%.4f (%s)", r_pot^2, fuerza_label)
)
# 3. Generación de tabla con formato Gris #F0F0F0
resumen_pot_df %>%
gt() %>%
tab_header(
title = md("**CONCLUSIONES Y ESTADÍSTICOS: MODELO POTENCIAL**"),
subtitle = "Variables: Latitud Absoluta e Inclinación Óptima (Global)"
) %>%
cols_label(
conjetura = "Conjetura del Modelo",
ecuacion = html("Ecuación (ŷ = ax<sup>b</sup>)"),
test = "Validación Pearson",
determinacion = html("Coeficiente de Determinación (R<sup>2</sup>)")
) %>%
cols_align("center") %>%
tab_options(column_labels.background.color = "#F0F0F0") %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
) %>%
tab_style(
style = cell_text(color = color_semaforo, weight = "bold"),
locations = cells_body(columns = c(test, determinacion))
)
| CONCLUSIONES Y ESTADÍSTICOS: MODELO POTENCIAL | |||
| Variables: Latitud Absoluta e Inclinación Óptima (Global) | |||
| Conjetura del Modelo | Ecuación (ŷ = axb) | Validación Pearson | Coeficiente de Determinación (R2) |
|---|---|---|---|
| Potencial | y = 2.3808 * x ^ (0.7173) | Aprobado (Fuerte) (94.33%) | 0.8898 (Muy Alta) |
# Bloque para procesar valores del TLC sobre la variable dependiente (Inclinación)
y_media <- mean(Dataset_Pot$y_pot)
sigma_y <- sd(Dataset_Pot$y_pot)
n_total <- nrow(Dataset_Pot)
error_est <- sigma_y / sqrt(n_total)
margen_error <- 1.96 * error_est
Entre la Latitud Absoluta y la Inclinación Óptima mundial existe una r fuerza_label relación de tipo Potencial, cuya ecuación matemática está representada por \(\hat{y} = 2.3808 \cdot x^{0.7173}\), donde ‘x’ es la Latitud Absoluta (°) y ‘y’ la inclinación estimada (°).
El coeficiente de correlación de Pearson es de 94.33%, lo que confirma que el modelo tiene un ajuste sólido para la toma de decisiones técnicas en la fase de diseño estructural. Es fundamental señalar que el modelo presenta una restricción de validez operativa: su aplicación es confiable únicamente para latitudes mayores a 1°, evitando el valor cero donde la función pierde estabilidad geométrica, y asegurando que la inclinación se mantenga dentro de los límites mecánicos de los seguidores solares.
A pesar de que la variabilidad geográfica suele presentar valores atípicos, se optó por trabajar con la serie de datos representativa para no ignorar las condiciones reales de instalación en diversas regiones. Por ejemplo, para una latitud de 30°, se estima una inclinación óptima (\(\hat{y}\)) de 27.31°.Finalmente, gracias al Teorema del Límite Central, afirmamos con un 95% de confianza que la inclinación promedio poblacional de los emplazamientos solares globales se sitúa en 31.3 ± 0.06°, con una desviación estándar muestral de 7.46°, consolidando un valor de referencia crítico para la estandarización de estructuras fotovoltaicas a nivel mundial.