1 Carga de datos

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 = ","))

2 Justificación de selección de variables

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 (°).

3 Tabla de pares de valores

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

4 Gráfica de nubes de puntos

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))

5 Conjetura de un Modelo Potencial y Cálculo de parámetros

# 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 )

6 Sobre escritura del modelo potencial sobre la nube de puntos

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))

7 Test de Pearson

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

8 Optimización y omisión temporal de outliers para mejorar el test

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

8.1 Tabla resumen - Modelo Potencial

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

9 Conclusiones

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.