1 Identificación y Justificación de la Variable

Variable de Estudio: Latitud (°).

Se determina que esta variable es Cuantitativa Continua. Dado que su dominio \(D = \{ x \in \mathbb{R} \mid -90 \leq x \leq 90 \}\) presenta una distribución bimodal global con sesgos específicos por hemisferio, se utilizará un Modelo Tri-Híbrido (Normal, Log-Normal Reflexivo y Log-Normal Estándar).

Estrategia Inferencial:

  1. Se organiza la variabilidad geográfica mediante una tabla de distribución matemática estricta basada en la regla de Sturges.

  2. Para optimizar el ajuste estadístico, la muestra se divide en tres zonas: Sur (Normal), Norte Crecimiento (Log-Normal Reflexivo) y Norte Polar (Log-Normal Estándar).

  3. Se realizan pruebas de bondad de ajuste mediante el Coeficiente de Pearson (\(R\)) para cada zona y se aplica el Teorema del Límite Central para estimar la media poblacional mundial con un 95% de confianza.

2 Configuración y Carga de Datos

# Carga del archivo
Datos <- read.csv("Dataset_Mundial_Final.csv", sep = ";", dec = ",")

# Extraemos latitud, omitimos nulos
lat_variable <- na.omit(as.numeric(Datos$latitude))
n_total <- length(lat_variable)

# Cargamos las librerias
library(dplyr)
## 
## 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
library(ggplot2)
library(gt)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.0
## ✔ purrr     1.2.0     ✔ tidyr     1.3.2
## ✔ readr     2.1.6
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(gt)
library(MASS)
## 
## Adjuntando el paquete: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(dplyr)

3 Tabla de Distribución de Frecuencias

Se aplica la regla de Sturges para organizar sistemáticamente la variabilidad geográfica, utilizando intervalos de 10° para facilitar la interpretación en ingeniería.

# CÁLCULO PARA TABLA ENTEROS 
BASE <- 10
min_int <- floor(min(lat_variable) / BASE) * BASE
max_int <- ceiling(max(lat_variable) / BASE) * BASE
cortes_int <- seq(from = min_int, to = max_int, by = 10)
K_int <- length(cortes_int) - 1

ni_int <- as.vector(table(cut(lat_variable, breaks = cortes_int, include.lowest = TRUE, right = FALSE)))
hi_int <- (ni_int / n_total) * 100

df_tabla_lat <- data.frame(
  Li = cortes_int[1:K_int], Ls = cortes_int[2:(K_int+1)],
  MC = (cortes_int[1:K_int] + cortes_int[2:(K_int+1)]) / 2,
  ni = ni_int, hi = hi_int,
  Ni_asc = cumsum(ni_int), Ni_desc = rev(cumsum(rev(ni_int))),
  Hi_asc = cumsum(hi_int), Hi_desc = rev(cumsum(rev(hi_int)))
)

df_tabla_lat %>%
  mutate(across(everything(), ~as.character(round(as.numeric(.), 2)))) %>%
  rbind(c("TOTAL", "-", "-", n_total, "100", "-", "-", "-", "-")) %>%
  gt() %>%
  tab_header(title = md("**Tabla N°1 de Distribución de Frecuencias de Latitud (°) de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Carlos Ramirez") %>%
  cols_label(Li = "Lim. Inf", Ls = "Lim. Sup", MC = "Marca Clase", ni = "ni", hi = "hi (%)") %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_options(column_labels.background.color = "#F0F0F0")
Tabla N°1 de Distribución de Frecuencias de Latitud (°) de las Plantas Solares
Lim. Inf Lim. Sup Marca Clase ni hi (%) Ni_asc Ni_desc Hi_asc Hi_desc
-50 -40 -45 2 0 2 58978 0 100
-40 -30 -35 428 0.73 430 58976 0.73 100
-30 -20 -25 931 1.58 1361 58548 2.31 99.27
-20 -10 -15 863 1.46 2224 57617 3.77 97.69
-10 0 -5 495 0.84 2719 56754 4.61 96.23
0 10 5 1019 1.73 3738 56259 6.34 95.39
10 20 15 3223 5.46 6961 55240 11.8 93.66
20 30 25 6086 10.32 13047 52017 22.12 88.2
30 40 35 23597 40.01 36644 45931 62.13 77.88
40 50 45 14351 24.33 50995 22334 86.46 37.87
50 60 55 7983 13.54 58978 7983 100 13.54
TOTAL - - 58978 100 - - - -
Autor: Carlos Ramirez

4 Análisis Gráfico

El diseño de barras estilizadas permite visualizar la bimodalidad, destacando la predominancia de proyectos en el Hemisferio Norte.

4.1 Histograma de Frecuencia

# Configuración de márgenes profesionales
par(mar = c(8, 6, 5, 2)) 

# Generación del gráfico con ajuste dinámico de ylim
posiciones <- barplot(df_tabla_lat$hi, 
                      names.arg = df_tabla_lat$MC,
                      col = "#B0C4DE", 
                      border = "black", 
                      # El factor 1.3 asegura espacio para la leyenda y títulos superiores
                      ylim = c(0, max(df_tabla_lat$hi) * 1.3), 
                      space = 0,        
                      axes = FALSE,  
                      las = 2,       
                      cex.names = 0.6)

# Personalización de ejes y rejilla técnica
axis(2, las = 2) 
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted") 

# Inserción de Cortes Estratégicos (Modelo Tri-Híbrido)
abline(v = posiciones[which.min(abs(df_tabla_lat$MC - (-10)))], col = "#C0392B", lwd = 2, lty = 2)
abline(v = posiciones[which.min(abs(df_tabla_lat$MC - 45))], col = "#C0392B", lwd = 2, lty = 2)

# Rotulación con posicionamiento corregido
mtext("Porcentaje (%)", side = 2, line = 4, cex = 1, font = 1)
mtext("Latitud (°)", side = 1, line = 4, cex = 1)
mtext("Gráfica N°1: Distribución Porcentual de las Plantas Solares por Latitud", 
      side = 3, line = 2, adj = 0.5, cex = 1.1, font = 2)

# Leyenda Técnica y cierre visual
legend("topleft", 
       legend = c("Datos Emp\u00edricos", "Cortes Estrat\u00e9gicos"), 
       fill = c("#B0C4DE", NA), 
       border = c("black", NA), 
       lty = c(NA, 2),
       col = c(NA, "#C0392B"), 
       bty = "n", 
       cex = 0.8)

abline(h = 0, col = "black", lwd = 1.5)

5 Estratificación y Validación del Modelo

# ZONA 1: Sur (-41 a -10)
z1 <- lat_variable[lat_variable >= -41 & lat_variable <= -10]
mu1 <- mean(z1); sd1 <- sd(z1)

# ZONA 2: Norte Crecimiento (10 a 45)
z2 <- lat_variable[lat_variable >= 10 & lat_variable <= 45]
c2 <- max(z2) + 1; fit2 <- fitdistr(c2 - z2, "lognormal")

# ZONA 3: Norte Polar (> 45)
z3 <- lat_variable[lat_variable > 45]
fit3 <- fitdistr(z3, "lognormal")

5.1 Bloque Hemisferio Sur (Zona 1: -41° a -10°)

Justificación: Representa el mercado solar austral. Se ajusta un Modelo Normal debido a que los datos se distribuyen de forma equilibrada alrededor de las latitudes desérticas de Atacama y Australia.

par(mar = c(8, 6, 5, 2))
h1 <- hist(z1, breaks = 10, plot = FALSE)
h1$counts <- (h1$counts / length(z1)) * 100

x_curva <- seq(min(h1$breaks), max(h1$breaks), length.out = 100)
y_curva <- dnorm(x_curva, mu1, sd1) * (h1$breaks[2] - h1$breaks[1]) * 100

y_max <- max(c(h1$counts, y_curva)) * 1.2

plot(h1, 
     main = "Gráfica N°2: Bloque Hemisferio Sur (Modelo Normal)", 
     xlab = "Latitud (°)", 
     ylab = "Porcentaje (%)", 
     col = "#B0C4DE", 
     border = "black", 
     cex.main = 0.9,
     ylim = c(0, y_max),
     axes = FALSE)

curve(dnorm(x, mu1, sd1) * (h1$breaks[2] - h1$breaks[1]) * 100, 
      add = TRUE, col = "#C0392B", lwd = 3)

axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

5.2 Crecimiento Hemisferio Norte (Zona 2: 10° a 45°)

Justificación: Es la zona de mayor densidad. Se aplica el Modelo Log-Normal Reflexivo para capturar la saturación de proyectos hacia los 45°, donde el clima templado optimiza la relación irradiación-temperatura.

par(mar = c(8, 6, 5, 2))
h2 <- hist(z2, breaks = 12, plot = FALSE)
h2$counts <- (h2$counts / length(z2)) * 100

x_c2 <- seq(10, 45, length.out = 100)
y_c2 <- dlnorm(c2 - x_c2, fit2$estimate[1], fit2$estimate[2]) * (h2$breaks[2] - h2$breaks[1]) * 100

y_max2 <- max(c(h2$counts, y_c2)) * 1.2

plot(h2, 
     main = "Gráfica N°3: Crecimiento Hemisferio Norte (Modelo Log-Normal Reflexivo)", 
     xlab = "Latitud (°)", 
     ylab = "Porcentaje (%)", 
     col = "#B0C4DE", 
     border = "black", 
     cex.main = 0.9,
     ylim = c(0, y_max2),
     axes = FALSE)

lines(x_c2, y_c2, col = "#C0392B", lwd = 3)

axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

5.3 Dispersión Hemisferio Norte (Zona 3: > 45°)

Justificación: A latitudes extremas, el recurso decae. El Modelo Log-Normal Estándar captura con fidelidad la “cola larga” de proyectos que disminuyen conforme nos acercamos al círculo polar.

par(mar = c(8, 6, 5, 2))
h3 <- hist(z3, breaks = 10, plot = FALSE)
h3$counts <- (h3$counts / length(z3)) * 100

x_curva3 <- seq(min(h3$breaks), max(h3$breaks), length.out = 200)
y_curva3 <- dlnorm(x_curva3, fit3$estimate[1], fit3$estimate[2]) * (h3$breaks[2] - h3$breaks[1]) * 100

y_max3 <- max(c(h3$counts, y_curva3)) * 1.2

plot(h3, 
     main = "Gráfica N°4: Dispersión Hemisferio Norte (Modelo Log-Normal Estándar)", 
     xlab = "Latitud (°)", 
     ylab = "Porcentaje (%)", 
     col = "#B0C4DE", 
     border = "black", 
     cex.main = 0.9,
     ylim = c(0, y_max3), 
     axes = FALSE)

lines(x_curva3, y_curva3, col = "#C0392B", lwd = 3)

axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")

6 Tabla de Resumen de Bondad de Ajuste

La validación de los modelos se realizó mediante la Correlación de Pearson (\(R\)), comparando las frecuencias observadas frente a las teóricas. Un coeficiente superior al 90% indica un ajuste óptimo para proyecciones de ingeniería.

# Zona 1: Normal
h1_val <- hist(z1, breaks = 10, plot = FALSE)
teorico1 <- dnorm(h1_val$mids, mu1, sd1)
pearson1 <- cor(h1_val$counts, teorico1) * 100

# Zona 2: Log-Normal Reflexiva
h2_val <- hist(z2, breaks = 12, plot = FALSE)
teorico2 <- dlnorm(c2 - h2_val$mids, fit2$estimate[1], fit2$estimate[2])
pearson2 <- cor(h2_val$counts, teorico2) * 100

# Zona 3: Log-Normal Estándar
h3_val <- hist(z3, breaks = 10, plot = FALSE)
teorico3 <- dlnorm(h3_val$mids, fit3$estimate[1], fit3$estimate[2])
pearson3 <- cor(h3_val$counts, teorico3) * 100

resumen_ajuste <- data.frame(
  "Segmento" = c("Zona 1 (Hemisferio Sur)", "Zona 2 (Norte Crecimiento)", "Zona 3 (Norte Polar)"),
  "Modelo_Aplicado" = c("Distribución Normal", "Log-Normal Reflexivo", "Log-Normal Estándar"),
  "Pearson_R" = c(pearson1, pearson2, pearson3),
  "Estado" = "APROBADO"
)

resumen_ajuste %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N\u00ba 2 de Resumen de Validación Geográfica**")
  ) %>%
  tab_source_note(source_note = "Autor: Carlos Ramirez") %>%
  cols_label(
    Segmento = "Segmento Operativo",
    Modelo_Aplicado = "Modelo de Ajuste",
    Pearson_R = "Test Pearson (%)",
    Estado = "Validaci\u00f3n"
  ) %>%
  fmt_number(columns = Pearson_R, decimals = 2) %>% 
  cols_align(align = "center", columns = everything()) %>%
  tab_options(column_labels.background.color = "#F0F0F0") %>%
  tab_style(
    style = list(cell_text(color = "#1D8348", weight = "bold")),
    locations = cells_body(columns = Estado)
  )
Tabla Nº 2 de Resumen de Validación Geográfica
Segmento Operativo Modelo de Ajuste Test Pearson (%) Validación
Zona 1 (Hemisferio Sur) Distribución Normal 91.14 APROBADO
Zona 2 (Norte Crecimiento) Log-Normal Reflexivo 95.83 APROBADO
Zona 3 (Norte Polar) Log-Normal Estándar 98.33 APROBADO
Autor: Carlos Ramirez

7 Cálculo de Probabilidades

Utilizando el Modelo Log-Normal Reflexivo de la Zona 2 (10° a 45°), proyectamos los escenarios operativos para la toma de decisiones estratégicas:

Pregunta 1: ¿Cuál es la probabilidad de que una planta se sitúe en la franja premium entre 30° y 45°?

Pregunta 2: En una cartera de 200 proyectos, ¿cuántos se estiman en este rango?

m2 <- fit2$estimate["meanlog"]
s2 <- fit2$estimate["sdlog"]

prob_premium <- plnorm(c2 - 30, m2, s2) - plnorm(c2 - 45, m2, s2)

par(mar = c(6, 8, 4, 2))

y_vals_c2 <- dlnorm(c2 - x_c2, m2, s2)
y_max_c2 <- max(y_vals_c2) * 1.2

plot(x_c2, y_vals_c2, type = "n", axes = FALSE,
     main = "Gráfica N°5: Zonas de Probabilidad Latitudinal (Modelo Reflexivo)", 
     xlab = "Latitud (°)", ylab = "",
     ylim = c(0, y_max_c2))

x_area <- seq(30, 45, length.out = 100)
y_area <- dlnorm(c2 - x_area, m2, s2)
polygon(c(30, x_area, 45), c(0, y_area, 0), col = "#7FB3D5", border = NA)

lines(x_c2, y_vals_c2, col = "#C0392B", lwd = 4)

axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
mtext("Densidad de Probabilidad", side = 2, line = 5.5, cex = 1)

legend("topleft", 
       legend = c("Modelo Log-Normal Reflexivo", paste0("Zona (", round(prob_premium*100, 2), "%)")), 
       col = c("#C0392B", "#7FB3D5"), lwd = c(4, 10), bty = "n", cex = 0.7)

Respuesta 1: La probabilidad de ubicación en la franja premium (30-45°) según el modelo ajustado es del 76.14%.

Respuesta 2: En una proyección de 200 proyectos internacionales, se estima que 152 se localizarán en este rango de alta eficiencia.

8 Teorema del Límite Central

El Teorema del Límite Central (TLC) representa el puente fundamental entre los modelos empíricos observados (Normal y Log-Normales) y la estimación poblacional. Aunque la distribución original de la Latitud presenta bimodalidad y asimetría, el TLC garantiza que la distribución de las medias muestrales tenderá a la normalidad debido al volumen masivo de datos (\(n = 58978\)).

Los postulados de confianza empírica sugieren:

\[P(\bar{x} - E < \mu < \bar{x} + E) \approx 68\%\]

\[P(\bar{x} - 2E < \mu < \bar{x} + 2E) \approx 95\%\]

\[P(\bar{x} - 3E < \mu < \bar{x} + 3E) \approx 99\%\]

Donde el Margen de Error (E) se define como:

\(E = \frac{\sigma}{\sqrt{n}}\)

# ESTADÍSTICOS BÁSICOS
x_bar <- mean(lat_variable)
sigma <- sd(lat_variable)
n_total <- length(lat_variable)

# CÁLCULO DEL ERROR Y MARGEN (E)
E <- 1.96 * (sigma / sqrt(n_total))

# CONSTRUCCIÓN DE LA TABLA CON GT
data.frame(
  Parametro = "Latitud Promedio Mundial (\u00ba)",
  Lim_Inferior = x_bar - E,
  Media_Muestral = x_bar,
  Lim_Superior = x_bar + E,
  Error_Estandar = paste0("+/- ", round(E, 4)),
  Confianza = "95% (Z=1.96)"
) %>% 
  gt() %>%
  tab_header(
    title = md("**Tabla N\u00ba 3 de Estimación de la Media Poblacional (TLC)**")
  ) %>%
  tab_source_note(source_note = "Autor: Carlos Ramirez") %>%
  fmt_number(columns = 2:4, decimals = 3) %>%
  tab_style(
    style = list(cell_fill(color = "#E8F8F5"), cell_text(color = "#145A32", weight = "bold")), 
    locations = cells_body(columns = Media_Muestral)
  ) %>%
  tab_options(
    column_labels.background.color = "#F0F0F0",
    column_labels.font.weight = "bold",
    table.width = pct(100)
  )
Tabla Nº 3 de Estimación de la Media Poblacional (TLC)
Parametro Lim_Inferior Media_Muestral Lim_Superior Error_Estandar Confianza
Latitud Promedio Mundial (º) 34.733 34.862 34.992 +/- 0.1292 95% (Z=1.96)
Autor: Carlos Ramirez

9 Conclusiones

La variable Latitud fue analizada mediante un enfoque Tri-Híbrido (Normal y Log-Normal), lo que permitió una caracterización geográfica integral de la inversión solar a nivel global. A diferencia de modelos simplificados, esta segmentación logró capturar de manera independiente la dinámica operativa del Hemisferio Sur, el crecimiento acelerado en franjas templadas del Norte y el decaimiento técnico en zonas polares.

Gracias a la robustez del dataset y la aplicación del Teorema del Límite Central, afirmamos con un 95% de confianza que la media poblacional de ubicación de proyectos se sitúa en el intervalo de [34.73°; 34.99°].

Este resultado garantiza que la planificación estratégica en “la Central” cuenta con un sustento estadístico de alta fidelidad, permitiendo estandarizar los criterios de localización y optimización de recursos para la infraestructura energética mundial (\(\mu = 34.86 \pm 0.13\)°).