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:
Se organiza la variabilidad geográfica mediante una tabla de distribución matemática estricta basada en la regla de Sturges.
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).
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.
# 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
## ── 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
##
## Adjuntando el paquete: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
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 | ||||||||
El diseño de barras estilizadas permite visualizar la bimodalidad, destacando la predominancia de proyectos en el Hemisferio Norte.
# 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)# 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")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")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")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")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 | |||
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.
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 | |||||
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\)°).