1 CARGA DE DATOS Y LIBRERÍAS

##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
### AUTOR: FERNANDO NEIRA ###
### CARRERA: INGENIERÍA EN PETRÓLEOS #####

# 1. Cargar librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── 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)

# 2. Cargar el archivo y almacenarlo en la variable 'Datos'
# Usamos la ruta que ya validamos en tu equipo
Datos <- read_excel("C:/Users/ASUS/OneDrive/Escritorio/ESTADÍSTICA/EXPO/Variables/plantas_dep.xls", 
                    sheet = "Fernando_Depuracion")

# 3. Verificar que se almacenó correctamente
str(Datos)
## tibble [58,812 × 29] (S3: tbl_df/tbl/data.frame)
##  $ objectid             : num [1:58812] 127 129 131 132 133 137 138 139 140 145 ...
##  $ code                 : chr [1:58812] "00127-ARG-P" "00129-ARG-G" "00131-ARG-P" "00132-ARG-P" ...
##  $ plant_name           : chr [1:58812] "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Anchoris solar farm" "Antu Newen solar farm" ...
##  $ country              : chr [1:58812] "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ operational_status   : chr [1:58812] "announced" "operating" "construction" "cancelled - inferred 4 y" ...
##  $ longitude            : num [1:58812] -68.9 -66.9 -68.9 -70.3 -66.8 ...
##  $ latitude             : num [1:58812] -33 -24.1 -33.3 -37.4 -28.6 ...
##  $ elevation            : num [1:58812] 929 4000 937 865 858 ...
##  $ area                 : num [1:58812] 250 4397290 645 241 30 ...
##  $ size                 : chr [1:58812] "Pequeña" "Grande" "Pequeña" "Pequeña" ...
##  $ initial_letter_size  : chr [1:58812] "P" "G" "P" "P" ...
##  $ slope                : num [1:58812] 0.574 1.603 0.903 1.791 1.872 ...
##  $ slope_type           : chr [1:58812] "Plano o casi plano" "Plano o casi plano" "Plano o casi plano" "Plano o casi plano" ...
##  $ curvature            : num [1:58812] 0.000795 -0.002781 0.002781 -0.002384 -0.009137 ...
##  $ curvature_type       : chr [1:58812] "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies planas o intermedias" ...
##  $ aspect               : num [1:58812] 55.1 188.7 108.4 239.3 56.2 ...
##  $ aspect_type          : chr [1:58812] "Northeast" "South" "East" "Southwest" ...
##  $ dist_to_road         : num [1:58812] 127 56015 336 34 314 ...
##  $ ambient_temperature  : num [1:58812] 12.6 6.8 13.1 11.4 18.8 ...
##  $ ghi                  : num [1:58812] 6.11 8.01 6.12 6.22 6.74 ...
##  $ humidity             : num [1:58812] 53.7 53.7 53.7 53.7 51.5 ...
##  $ wind_speed           : num [1:58812] 3.78 7.02 3.87 6.56 7.19 ...
##  $ wind_direction       : num [1:58812] 55.1 55.1 55.1 55.1 114.8 ...
##  $ dt_wind              : chr [1:58812] "Northeast" "Northeast" "Northeast" "Northeast" ...
##  $ solar_aptitude       : num [1:58812] 0.746 0.8 0.595 0.657 0.743 ...
##  $ solar_aptittude_class: chr [1:58812] "Alta" "Alta" "Media" "Alta" ...
##  $ capacity             : num [1:58812] 25 101 180 20 50.4 ...
##  $ optimal_tilt         : num [1:58812] 31 26 31 33 30 31 29 31 27 32 ...
##  $ pv_potential         : num [1:58812] 4.98 6.39 4.97 5 5.37 ...
Variable <- na.omit(Datos$area)
N <- length(Variable)
cat("La muestra válida procesada consta de", N, "registros.")
## La muestra válida procesada consta de 58812 registros.

2 TABLA DE DISTRIBUCIÓN DE FRECUENCIA

library(gt)
library(tidyverse)

# 1. PREPARACIÓN CON FILTRO ESTRICTO
# Filtramos valores menores a 0.1 para eliminar ceros o errores de carga
Variable_Area <- na.omit(Datos$area[Datos$area > 0.1])
N_area <- length(Variable_Area)

# 2. CÁLCULOS DE INTERVALOS
min_area_real <- min(Variable_Area) # El mínimo real mayor a cero
max_area_real <- max(Variable_Area)
k_area <- 9 

# Creamos los cortes empezando DESDE el mínimo real
cortes_area <- seq(min_area_real, max_area_real, length.out = k_area + 1)
cortes_area[length(cortes_area)] <- max_area_real + 0.01 

# 3. FRECUENCIAS
inter_area <- cut(Variable_Area, breaks = cortes_area, include.lowest = TRUE, right = FALSE)
ni_area <- as.vector(table(inter_area))

# 4. CONSTRUCCIÓN DE LA TABLA
TDF_Area <- data.frame(
  Li = cortes_area[1:k_area], 
  Ls = cortes_area[2:(k_area+1)],
  MC = (cortes_area[1:k_area] + cortes_area[2:(k_area+1)]) / 2,
  ni = ni_area, 
  hi = (ni_area / N_area) * 100
)

# 5. FORMATO FINAL (Ojo aquí con el redondeo)
TDF_Area_Final <- data.frame(
  Li = format(TDF_Area$Li, big.mark = ",", scientific = FALSE), 
  Ls = format(TDF_Area$Ls, big.mark = ",", scientific = FALSE),
  MC = format(TDF_Area$MC, big.mark = ",", scientific = FALSE), 
  ni = as.character(TDF_Area$ni),
  hi = paste0(round(TDF_Area$hi, 2), "%")
)

# Totales
totales_area <- c("TOTAL", "-", "-", sum(TDF_Area$ni), "100.00%")
TDF_Area_Final <- rbind(TDF_Area_Final, totales_area)

# 6. TABLA GT
TDF_Area_Final %>% gt() %>%
  tab_header(
    title = md("**Tabla N°1: Distribución de Frecuencias de Superficie Ocupada**")
  ) %>%
  cols_label(Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca Clase", ni = "ni", hi = "hi (%)") %>%
  cols_align(align = "center") %>%
  gt::tab_options(heading.title.font.size = px(14), column_labels.background.color = "#F0F0F0")
Tabla N°1: Distribución de Frecuencias de Superficie Ocupada
Lím. Inf Lím. Sup Marca Clase ni hi (%)
0.1121733 26,077,778 13,038,889 42457 99.96%
26,077,777.8774873 52,155,556 39,116,667 14 0.03%
52,155,555.6428014 78,233,333 65,194,445 1 0%
78,233,333.4081155 104,311,111 91,272,222 1 0%
104,311,111.1734296 130,388,889 117,350,000 0 0%
130,388,888.9387437 156,466,667 143,427,778 0 0%
156,466,666.7040578 182,544,444 169,505,556 0 0%
182,544,444.4693719 208,622,222 195,583,333 1 0%
208,622,222.2346859 234,700,000 221,661,111 1 0%
TOTAL - - 42475 100.00%
Para garantizar la integridad de los resultados, se realizó una fase de limpieza y filtrado de datos. La base original contaba con 58,812 registros; sin embargo, tras eliminar celdas vacías (NAs) y registros con áreas iguales o menores a \(0 \, m^2\) (considerados inconsistencias técnicas o errores de digitalización), la muestra efectiva se ajustó a 42,475 datos válidos. Esta depuración es fundamental para evitar sesgos en el cálculo de la media y asegurar un ajuste óptimo del modelo probabilístico.

3 GRAFICA DE DISTRIBUCION DE PROBABILIDAD

Con el fin de analizar visualmente la dispersión y la concentración de las superficies, se presenta a continuación la Gráfica N°1.
Este histograma permite identificar de forma clara el comportamiento de la variable área, mostrando la predominancia de ciertos rangos de tamaño en el conjunto de plantas solares registradas.

3.1 Histograma de Frecuencia

# 1. PREPARACIÓN DE DATOS
Variable <- na.omit(Datos$area[Datos$area >= 0.1])
N <- length(Variable)

k_int <- 9 
min_int <- min(Variable)
max_int <- max(Variable)

# Crear los puntos de corte
cortes_int <- seq(from = min_int, to = max_int, length.out = k_int + 1)
cortes_int[length(cortes_int)] <- max_int + 0.0001 

# Cálculo de Frecuencias y Marca de Clase
inter_int <- cut(Variable, breaks = cortes_int, include.lowest = TRUE, right = FALSE)
ni_int <- as.vector(table(inter_int))
MC_int <- (cortes_int[1:k_int] + cortes_int[2:(k_int+1)]) / 2

# 2. CONFIGURACIÓN DE LA GRÁFICA
par(mar = c(9, 6, 4, 2)) # Ajusté un pelito el margen para que no se corte el m²

bp <- barplot(ni_int, 
              names.arg = round(MC_int, 2), 
              main = "", 
              xlab = "", 
              ylab = "", 
              col = "#B0C4DE", 
              space = 0, 
              las = 2, 
              cex.axis = 0.6, 
              cex.names = 0.6)

# 3. TEXTOS TÉCNICOS Y UNIDADES
mtext("Frecuencia Absoluta", side = 2, line = 3.5, cex = 0.7)

# Código especial para que aparezca m² correctamente
mtext(expression(paste("Superficie Ocupada (", m^2, ")")), side = 1, line = 6, cex = 0.7)

mtext("Gráfica N°1: Distribución de Plantas Solares por Superficie ocupada", 
      side = 3, line = 2, adj = 0.5, cex = 0.8, font = 2)

4 CONJETURA DEL MODELO

Justificación del Modelo Aplicado
Tras contrastar la Tabla N°1 de Distribución de Frecuencias con la Gráfica N°1, se concluye que la variable Área (\(m^{2}\)) presenta un comportamiento que hace imperativo el uso del Modelo Log-Normal por las siguientes evidencias observadas:
Concentración Extrema en el Umbral Inferior: La tabla de frecuencias revela que el primer intervalo (\(Li - Ls\)) contiene la gran mayoría de la muestra depurada contando con 42457 registros. Este “pico” inicial tan pronunciado seguido de un descenso abrupto es incompatible con una distribución Normal (Campana de Gauss), pero es el rasgo definitorio de una distribución Log-Normal, donde la moda está muy cerca del origen.
Presencia de Valores Extremos (Outliers Técnicos): La tabla muestra un rango que se extiende hasta los 234,700,000 \(m^{2}\). Aunque la frecuencia en los intervalos superiores es mínima o nula, su existencia desplaza la media mucho más allá de la mediana. El régimen Log-Normal es el único capaz de integrar matemáticamente estos proyectos de gran escala sin invalidar la probabilidad de los proyectos pequeños.
Decaimiento Asintótico (Cola Larga): Visualmente, la gráfica muestra una “cola” que se arrastra hacia la derecha. Esto indica que la probabilidad de encontrar plantas solares disminuye exponencialmente a medida que aumenta el tamaño, una propiedad que la función de densidad Log-Normal modela con precisión mediante su parámetro de escala (\(\sigma\)).
Consistencia con la Ley de Gibrat: En ingeniería, el crecimiento de superficies a menudo sigue un proceso de crecimiento proporcional. Esto implica que el aumento de tamaño es una función del tamaño actual, lo que deriva naturalmente en una distribución Log-Normal. Este fundamento teórico valida nuestra conjetura como la más robusta para representar la realidad de la infraestructura solar analizada.
# 1. PREPARACIÓN DE LA VARIABLE (42,475 registros depurados)
Variable <- na.omit(Datos$area[Datos$area > 0.1])
N <- length(Variable)

# 2. CÁLCULO DE PARÁMETROS DEL MODELO (Log-Normal)
# Calculamos la media y desviación estándar de los logaritmos
meanlog_area <- mean(log(Variable))
sdlog_area <- sd(log(Variable))

# 3. DEFINICIÓN DE INTERVALOS (k = 9)
k_int <- 9 
min_int <- min(Variable)
max_int <- max(Variable)

cortes_int <- seq(from = min_int, to = max_int, length.out = k_int + 1)
cortes_int[length(cortes_int)] <- max_int + 0.0001 

inter_int <- cut(Variable, breaks = cortes_int, include.lowest = TRUE, right = FALSE)
ni_int <- as.vector(table(inter_int))
MC_int <- (cortes_int[1:k_int] + cortes_int[2:(k_int+1)]) / 2

# 4. CONFIGURACIÓN DE LA GRÁFICA
par(mar = c(9, 6, 4, 2)) # Margen amplio para números grandes y m²

# Dibujamos el histograma base
bp <- barplot(ni_int, 
              names.arg = round(MC_int, 2), 
              main = "", 
              xlab = "", 
              ylab = "", 
              col = "#B0C4DE", 
              space = 0, 
              las = 2, 
              cex.axis = 0.6, 
              cex.names = 0.6,
              ylim = c(0, max(ni_int) * 1.3)) # Espacio para la curva y leyenda

# 5. SUPERPOSICIÓN DEL MODELO TEÓRICO
# Creamos la secuencia teórica para la curva
x_teorico <- seq(min_int, max_int, length.out = 500)
ancho_clase <- cortes_int[2] - cortes_int[1]

# Calculamos la densidad y la escalamos a la frecuencia absoluta (ni)
y_teorico <- dlnorm(x_teorico, meanlog_area, sdlog_area) * N * ancho_clase

# Ajuste de coordenadas X para el barplot (de 0 a k_int)
x_plot <- (x_teorico - min_int) / (max_int - min_int) * k_int

# Dibujamos la curva de la conjetura
lines(x_plot, y_teorico, col = "#922B21", lwd = 3)

# 6. ETIQUETAS Y LEYENDA
mtext("Frecuencia Absoluta", side = 2, line = 4, cex = 0.7)
mtext(expression(paste("Superficie Ocupada (", m^2, ")")), side = 1, line = 7, cex = 0.7)
mtext("Gráfica N°2: Conjetura del Modelo (Distribución Log-Normal)", 
      side = 3, line = 2, adj = 0.5, cex = 0.8, font = 2)

legend("topright", 
       legend = c("Datos (Histograma)", "Modelo Log-Normal"), 
       fill = c("#B0C4DE", NA), 
       border = c("black", NA), 
       col = c(NA, "#922B21"), 
       lty = c(NA, 1), 
       lwd = c(NA, 3), 
       bty = "n", 
       cex = 0.7)

5 TEST DE APROBACIÓN

library(gt)
library(tidyverse)

# 1. PREPARACIÓN DE LA VARIABLE ÁREA
Variable <- na.omit(Datos$area[Datos$area > 0.1]) 
meanlog_tot <- mean(log(Variable))
sdlog_tot <- sd(log(Variable))

# 2. PARÁMETROS DE LOS INTERVALOS
k_int <- 9 
min_val <- min(Variable)
max_val <- max(Variable)
breaks_tot <- seq(min_val, max_val, length.out = k_int + 1)
breaks_tot[length(breaks_tot)] <- max_val + 0.0001

# 3. FRECUENCIAS OBSERVADAS
inter_tot <- cut(Variable, breaks = breaks_tot, include.lowest = TRUE, right = FALSE)
ni_tot <- as.vector(table(inter_tot))

# 4. PROBABILIDADES TEÓRICAS (MODELO LOG-NORMAL)
probs_tot <- numeric(k_int)
for(i in 1:k_int) {
  probs_tot[i] <- plnorm(breaks_tot[i+1], meanlog_tot, sdlog_tot) - 
                  plnorm(breaks_tot[i], meanlog_tot, sdlog_tot)
}
probs_tot <- probs_tot / sum(probs_tot)

# 5. ESCALAMIENTO A BASE n = 100 PARA VALIDACIÓN
n_base <- 100 
Fo_tot <- ni_tot * (n_base / sum(ni_tot)) 
Fe_tot <- probs_tot * n_base              

# 6. ESTADÍSTICOS DE PRUEBA
chi2 <- sum((Fo_tot - Fe_tot)^2 / Fe_tot)
gl <- k_int - 1 - 2 
crit2 <- qchisq(0.99, gl)

if(is.na(crit2) || crit2 < 0) crit2 <- 3.84 

res2 <- if(chi2 < crit2) "APROBADO" else "RECHAZADO (Ajuste Visual)"
pear2 <- cor(Fo_tot, Fe_tot) * 100

# 7. GENERACIÓN DE LA TABLA FINAL (CORREGIDA PARA RENDERIZAR)
data.frame(
  Indicador = c("Prueba Chi-Cuadrado", "Correlación de Pearson"), 
  Valor = c(paste(round(chi2, 2), "<", round(crit2, 2)), 
            paste0(round(pear2, 2), "%")), 
  Conclusion = c(res2, "Nivel de Ajuste")
) %>%
  gt() %>% 
  tab_header(
    title = md("**Tabla N°3: Resultados de la Validación Estadística del Modelo (Área)**"),
    # AQUÍ ESTÁ EL CAMBIO: Quitamos el md() y el $ para evitar el error de katex
    subtitle = "Variable: Superficie ocupada en m²" 
  ) %>%
  cols_label(
    Indicador = "Indicador Estadístico",
    Valor = "Resultado Obtenido",
    Conclusion = "Veredicto"
  ) %>%
  cols_align(align = "center") %>% 
  gt::tab_options(
    heading.title.font.size = 14, 
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°3: Resultados de la Validación Estadística del Modelo (Área)
Variable: Superficie ocupada en m²
Indicador Estadístico Resultado Obtenido Veredicto
Prueba Chi-Cuadrado 0.43 < 16.81 APROBADO
Correlación de Pearson 100% Nivel de Ajuste

6 CÁLCULO DE PROBABILIDADES

Una vez confirmada la validez estadística del modelo Log-Normal mediante los indicadores de bondad de ajuste, procedemos a utilizar los parámetros de forma (\(\sigma_{log}\)) y escala (\(\mu_{log}\)) como herramientas predictivas. El objetivo de esta sección es transitar del análisis descriptivo a la inferencia estadística, permitiendo cuantificar la probabilidad de ocurrencia de proyectos solares de distintas magnitudes. Estos cálculos son vitales para la planificación energética nacional, ya que permiten anticipar requerimientos de suelo, inversión en infraestructura de red y posibles impactos ambientales asociados a la extensión superficial de las plantas
Pregunta 1 : ¿Cuál es la probabilidad de que una nueva planta solar a ser digitalizada en el país tenga una superficie considerada “estándar” o de escala media (por ejemplo, entre \(1,000,000\) y \(3,000,000\) \(m^2\))?
Pregunta 2 : Si el gobierno decide impulsar una nueva fase de expansión con 80 nuevos registros de plantas, ¿cuántas de ellas se estima que superarán los \(10,000,000\) \(m^2\) de superficie (Mega-plantas), donde la gestión de permisos ambientales y la adquisición de tierras representan el mayor desafío operativo?
# 1. PARÁMETROS DEL MODELO (Basado en tus 42,475 datos)
Variable_Area <- na.omit(Datos$area[Datos$area > 0.1])
mean_gl <- mean(log(Variable_Area))
sd_gl <- sd(log(Variable_Area))

# 2. DEFINICIÓN DE ESCENARIOS (En metros cuadrados)
# Escenario 1: Escala Estándar (1M a 3M m2)
x1_area <- 1000000
x2_area <- 3000000
prob_ventana <- plnorm(x2_area, meanlog = mean_gl, sdlog = sd_gl) - 
                plnorm(x1_area, meanlog = mean_gl, sdlog = sd_gl)
pct_ventana <- round(prob_ventana * 100, 2)

# Escenario 2: Límite de Mega-proyectos (> 10M m2)
limite_area <- 10000000
prob_critica <- 1 - plnorm(limite_area, meanlog = mean_gl, sdlog = sd_gl)
pct_critica <- round(prob_critica * 100, 2)

# 3. GRÁFICA DE ESCENARIOS
col_ejes <- "#2E4053"
col_rojo <- "#C0392B"
col_azul_claro <- rgb(0.2, 0.6, 0.8, 0.5)

par(mar = c(7, 7, 4, 2)) 

# Dibujar la curva teórica
curve(dlnorm(x, meanlog = mean_gl, sdlog = sd_gl), 
      from = 0, 
      to = max(Variable_Area) * 1.1, 
      col = col_ejes, lwd = 2, las = 1, xaxt = "n", yaxt = "n",
      main = "", xlab = "", ylab = "") 

# Sombrear la zona óptima (1M - 3M)
x_fill <- seq(x1_area, x2_area, length.out = 200)
y_fill <- dlnorm(x_fill, meanlog = mean_gl, sdlog = sd_gl)
polygon(c(x1_area, x_fill, x2_area), c(0, y_fill, 0), col = col_azul_claro, border = NA)

# Línea de umbral crítico (10M)
abline(v = limite_area, col = col_rojo, lwd = 2, lty = 2)

# Ejes y etiquetas con formato m2
axis(1, at = seq(0, max(Variable_Area), by = 5000000), 
     labels = format(seq(0, max(Variable_Area), by = 5000000), big.mark = ","), cex.axis = 0.7)
axis(2, las = 1, cex.axis = 0.7)

mtext("Densidad de Probabilidad", side = 2, line = 4.5, cex = 0.9)
mtext(expression(paste("Superficie Ocupada (", m^2, ")")), side = 1, line = 5, cex = 0.9)
mtext("Gráfica N°3: Proyección de Escenarios de Superficie (Modelo Global)", 
      side = 3, line = 1.5, adj = 0.5, cex = 1.0, font = 2)

legend("topright", 
       legend = c("Distribución Log-Normal", 
                  "Escala Estándar (1M - 3M)", 
                  "Mega-proyectos (> 10M)"), 
       col = c(col_ejes, col_azul_claro, col_rojo), 
       lwd = c(2, 10, 2), pch = c(NA, 15, NA), lty = c(1, 1, 2), bty = "n", cex = 0.8)

7 RESPUESTAS

Interpretación General de Resultados y Toma de Decisiones
Tras la aplicación del modelo probabilístico Log-Normal sobre la muestra depurada de 42,475 registros, se presentan las siguientes conclusiones técnicas derivadas del análisis de escenarios:
Análisis de la Zona de Escala Estándar (1M - 3M \(m^2\))
La probabilidad obtenida para este rango indica la frecuencia esperada de proyectos de escala media.
Interpretación: Este porcentaje representa el “corazón” de la distribución operativa. Para un ingeniero, esto significa que la mayoría de los requerimientos técnicos, financieros y de mantenimiento deben estar estandarizados para este tamaño de planta, ya que es el escenario con mayor probabilidad de ocurrencia en nuevas digitalizaciones.
Decisión Técnica: Se recomienda optimizar los protocolos de inspección y los kits de repuestos para este rango de superficie, maximizan
Evaluación de Riesgo de Suelo y Mega-proyectos (> 10M \(m^2\))
Aunque la probabilidad de encontrar plantas que superen los 10 millones de \(m^2\) es baja (debido a la “cola larga” del modelo), su impacto en la planificación es crítico.
Interpretación: La proyección realizada para 80 nuevos proyectos permite cuantificar la carga administrativa y logística futura. Si el modelo estima, por ejemplo, que 2 o 3 plantas entrarán en esta categoría, no se pueden ignorar.
Decisión Técnica: Debido a la magnitud de estos proyectos, se deben prever estudios de impacto ambiental más rigurosos y planes de gestión de tierras específicos. La baja probabilidad confirma que son eventos extremos, pero su alta superficie exige una reserva presupuestaria mayor por concepto de obra civil y nivelación de TERRENOS.
El modelo Log-Normal no solo ha sido validado matemáticamente, sino que se consolida como una herramienta de gestión de incertidumbre. Al conocer la probabilidad exacta de cada escenario de superficie, la toma de decisiones deja de ser intuitiva y pasa a ser basada en datos, permitiendo una planificación energética más robusta y menos propensa a sobrecostos por subestimación de áreas.

7.1 TEOREMA DEL LÍMITE CENTRAL (ÁREA)

El Teorema del Límite Central (TLC) establece que, dada una muestra suficientemente grande (\(n > 30\)), la distribución de las medias muestrales seguirá una distribución Normal, independientemente de la distribución original de la variable (en este caso, Log-Normal).Para nuestro estudio, contamos con 42,475 registros válidos de superficie, lo que garantiza el cumplimiento absoluto del TLC. Esto nos permite asegurar que nuestra media muestral (\(\bar{x}\)) es un estimador sumamente preciso de la media poblacional (\(\mu\)). Los intervalos de confianza empírica para la media se definen como:
\[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), también conocido como Error Estándar de la Media, se calcula mediante la fórmula:

\[E = \frac{\sigma}{\sqrt{n}}\]
library(gt)
library(tidyverse)

# 1. PREPARACIÓN DE LA VARIABLE (Área)
Variable <- na.omit(Datos$area[Datos$area > 0.1])

# 2. FILTRADO DE OUTLIERS (Usando la lógica de boxplot para el TLC)
stats_global <- boxplot.stats(Variable)$stats
Variable_TLC <- Variable[Variable >= stats_global[1] & Variable <= stats_global[5]]

# 3. CÁLCULOS DEL TEOREMA DEL LÍMITE CENTRAL
x_bar <- mean(Variable_TLC)
sigma_muestral <- sd(Variable_TLC)
n_tlc <- length(Variable_TLC)

error_est <- sigma_muestral / sqrt(n_tlc)
margen_error_95 <- 2 * error_est # Aproximación empírica al 95% de confianza

lim_inf_tlc <- x_bar - margen_error_95
lim_sup_tlc <- x_bar + margen_error_95

# 4. GENERACIÓN DE LA TABLA FINAL
data.frame(
  Parametro = "Superficie Promedio (m²)", 
  Lim_Inferior = lim_inf_tlc, 
  Media_Muestral = x_bar, 
  Lim_Superior = lim_sup_tlc, 
  Error_Estandar = paste0("+/- ", sprintf("%.2f", margen_error_95)), 
  Confianza = "95% (2*SE)"
) %>%
  gt() %>% 
  tab_header(
    title = md("**Tabla N°5: Estimación de la Media Poblacional (Área)**"), 
    subtitle = "Aplicación del Teorema del Límite Central"
  ) %>%
  fmt_number(
    columns = c(Lim_Inferior, Media_Muestral, Lim_Superior), 
    decimals = 2
  ) %>%
  cols_align(align = "center") %>% 
  tab_options(
    heading.title.font.size = px(14), 
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°5: Estimación de la Media Poblacional (Área)
Aplicación del Teorema del Límite Central
Parametro Lim_Inferior Media_Muestral Lim_Superior Error_Estandar Confianza
Superficie Promedio (m²) 21,846.01 22,199.82 22,553.63 +/- 353.81 95% (2*SE)

8 CONCLUSIÓN GENERAL DEL ESTUDIO

La variable Superficie Ocupada (Área) sigue un modelo Log-Normal (Sesgo Derecho) con parámetros calculados de \(\mu_{log} \approx\) r round(meanlog_tot, 4) y \(\sigma_{log} \approx\) r round(sdlog_tot, 4). Tras un proceso de depuración técnica que ajustó la muestra de 58,812 a 42,475 registros válidos, y gracias a la robustez del ajuste (Pearson = r round(pear2, 2)%) junto con la aplicación del Teorema del Límite Central, afirmamos con un 95% de confianza que la verdadera superficie promedio de las plantas solares en el sector se encuentra entre r round(lim_inf_tlc, 2) \(m^2\) y r round(lim_sup_tlc, 2) \(m^2\). La media muestral obtenida de r round(x_bar, 2) \(m^2\) con un margen de error de \(\pm\) r round(margen_error_95, 2) \(m^2\) valida la estabilidad del modelo y proporciona una base científica para la planificación operativa y la gestión de suelos en futuros proyectos de energía renovable.