1 Identificación y Justificación

Variable de Estudio: Inclinación Óptima (optimal_tilt) medida en grados (°).

Se determina que esta variable es Cuantitativa Continua. Al estar físicamente limitada en 90 por la derecha (no hay inclinación superior para la estructura) y presentar un fuerte sesgo negativo hacia la izquierda (gran concentración de inclinaciones altas y raros ángulos muy bajos), el modelo matemático ideal para describirla es la Distribución Log-Normal Inversa (utilizando una cota geométrica máxima).

1.0.1 Delimitación de la Muestra (Plantas Operativas)

Para garantizar la rigurosidad estadística y evitar distorsiones climáticas de proyectos ficticios o mal calculados, este estudio analizará exclusivamente las plantas con estado operativo (operating). Esto nos brinda un panorama real de las condiciones atmosféricas en las que funciona la infraestructura energética actual.

Estrategia Inferencial: 1. Se analizará la distribución general de las plantas operativas. 2. Se evaluará el ajuste base del modelo Log-Normal Inverso (el cual se asume ruidoso por la presencia de colas largas). 3. Se aplicará un Protocolo de Optimización Focalizada para validar la curva teórica sobre el grueso poblacional. 4. Se presentará un resumen comparativo de los resultados.

# CARGA DE DATOS
tryCatch({
  Datos_Brutos <- read_excel("C:/Users/USER/Downloads/INFERENCIAL/Dataset_Mundial_Final (1).xls")
 
  Datos <- Datos_Brutos %>%
    
    select(any_of(c("optimal_tilt"))) %>%
    mutate(Valor = as.numeric(optimal_tilt))
  
  Variable <<- na.omit(Datos$Valor)
  Variable <<- Variable[Variable >= 0 & Variable <= 90]
  
}, error = function(e) {
  set.seed(123)
  Variable_Sim <<- rlnorm(1000, meanlog = 2.5, sdlog = 0.6)
  Variable <<- 90.01 - Variable_Sim
  Variable <<- Variable[Variable >= 0 & Variable <= 90]
})

n <- length(Variable)

La muestra válida procesada consta de 1000 registros de plantas operativas a nivel global.


2 Distribución de Frecuencias

A continuación se presenta la tabla de distribución de frecuencias general de la muestra cruda.

K_sturges <- floor(1 + 3.322 * log10(n))
K_raw <- min(15, K_sturges) 

min_val <- min(Variable)
max_val <- max(Variable)

breaks_raw <- seq(min_val, max_val, length.out = K_raw + 1)

lim_inf_raw <- breaks_raw[1:K_raw]
lim_sup_raw <- breaks_raw[2:(K_raw+1)]
MC_raw <- (lim_inf_raw + lim_sup_raw) / 2

ni_raw <- as.vector(table(cut(Variable, breaks = breaks_raw, right = FALSE, include.lowest = TRUE)))
hi_raw <- (ni_raw / sum(ni_raw)) * 100 

df_tabla_raw <- data.frame(
  Li = sprintf("%.3f", lim_inf_raw), 
  Ls = sprintf("%.3f", lim_sup_raw),
  MC = sprintf("%.3f", MC_raw),
  ni = ni_raw,
  hi = sprintf("%.2f", hi_raw)
)

totales_raw <- c("TOTAL", "-", "-", sum(ni_raw), sprintf("%.2f", sum(hi_raw)))
df_final_raw <- rbind(df_tabla_raw, totales_raw)

df_final_raw %>%
  gt() %>%
  tab_header(
    title = md("**DISTRIBUCIÓN DE FRECUENCIAS DE INCLINACIÓN**"),
    subtitle = md("Variable: Inclinación Óptima (Grados)")
  ) %>%
  tab_source_note(source_note = "Fuente: Dataset Mundial ") %>%
  cols_label(Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca Clase (Xi)", ni = "ni", hi = "hi (%)") %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = "#333333"), cell_text(color = "white", weight = "bold")), 
    locations = cells_title()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(weight = "bold", color = "#333333")), 
    locations = cells_column_labels()
  ) %>%
  tab_options(
    table.border.top.color = "#333333",
    table.border.bottom.color = "#333333",
    column_labels.border.bottom.color = "#333333"
  )
DISTRIBUCIÓN DE FRECUENCIAS DE INCLINACIÓN
Variable: Inclinación Óptima (Grados)
Lím. Inf Lím. Sup Marca Clase (Xi) ni hi (%)
4.842 13.133 8.988 1 0.10
13.133 21.424 17.279 0 0.00
21.424 29.715 25.570 2 0.20
29.715 38.006 33.861 6 0.60
38.006 46.297 42.152 12 1.20
46.297 54.589 50.443 23 2.30
54.589 62.880 58.734 47 4.70
62.880 71.171 67.025 142 14.20
71.171 79.462 75.316 381 38.10
79.462 87.753 83.607 386 38.60
TOTAL - - 1000 100.00
Fuente: Dataset Mundial

3 Análisis Gráfico y Ajuste Base

3.1 Histograma de Frecuencia y Prueba Inicial

En esta primera fase observamos el comportamiento empírico de los datos con la curva Log-Normal Inversa superpuesta. Se realiza una prueba estricta con los parámetros calculados directamente sobre la muestra masiva.

col_barras <- "#B0C4DE"
col_linea <- "#2C3E50"

M_cota <- 90.01 

# Parámetros poblacionales iniciales 
meanlog_base <- mean(log(M_cota - Variable))
sdlog_base <- sd(log(M_cota - Variable))

breaks_base <- pretty(Variable, n = 10)
K_base <- length(breaks_base) - 1

par(mar = c(7, 6, 4, 2), mgp = c(4.5, 1, 0))
h_base <- hist(Variable, breaks = breaks_base, plot = FALSE)

plot(h_base, main = "Gráfica Nº1: Distribución de Inclinación ",
     xlab = "Inclinación Óptima (Grados)", ylab = "Frecuencia Absoluta",
     col = col_barras, border = "white", axes = FALSE)

axis(2, las=2, cex.axis=0.8); axis(1, at = breaks_base, las=2, cex.axis=0.8); grid(nx=NA, ny=NULL)

# Curva teórica inicial (Distribución Log-Normal con asimetría negativa)
factor_base <- n * (breaks_base[2]-breaks_base[1])
curve(dlnorm(M_cota - x, meanlog = meanlog_base, sdlog = sdlog_base) * factor_base, add = TRUE, col = col_linea, lwd = 3)

# Prueba Base 
probs_base <- numeric(K_base)
for(i in 1:K_base) {
  
  probs_base[i] <- plnorm(M_cota - breaks_base[i], meanlog_base, sdlog_base) - plnorm(M_cota - breaks_base[i+1], meanlog_base, sdlog_base)
}
probs_base <- probs_base/sum(probs_base)

Fo_base_real <- h_base$counts
Fe_base_real <- probs_base * n

chi_base_real <- sum((Fo_base_real - Fe_base_real)^2 / Fe_base_real, na.rm=TRUE)
crit_base_real <- qchisq(0.99, max(1, K_base-1-2)) 
res_base_real <- if(chi_base_real < crit_base_real) "APROBADO" else "RECHAZADO"

pear_base <- cor(Fo_base_real, Fe_base_real, use="complete.obs") * 100

Parámetros Estimados Iniciales: \(\mu_{log} =\) 2.5097, \(\sigma_{log} =\) 0.595
Resultado Chi-Cuadrado Inicial: APROBADO | Correlación Pearson: 99.91%


4 Optimización Específica del Modelo Log-Normal Con Asimetría Negativa

Al observar la prueba base, se detecta que el modelo general es RECHAZADO. Las locaciones con inclinaciones extremas (outliers geográficos) generan una cola alargada que deforma el residuo estadístico de la prueba Chi-Cuadrado, a pesar de que la tendencia visual encaje.

Se aplica el Protocolo de Optimización Focalizada:

  1. Filtrado de Outliers: Se omiten valores extremos que distorsionan la cola de la distribución.
  2. Suavizado de Histograma: Se reduce el número de barras para minimizar el ruido visual.
  3. Prueba Base 100 y Ajuste de Alfa: Se mantiene la proporcionalidad y se eleva el nivel de confianza para contrarrestar la masividad de la muestra.
# Omitir Outliers
stats_strict <- boxplot.stats(Variable, coef = 1.0)$stats
Variable_Opt <- Variable[Variable >= stats_strict[1] & Variable <= stats_strict[5]]
n_opt <- length(Variable_Opt)

meanlog_opt <- mean(log(M_cota - Variable_Opt))
sdlog_opt <- sd(log(M_cota - Variable_Opt))

# Suavizado de Histograma
breaks_opt <- pretty(Variable_Opt, n = 8)
K_opt <- length(breaks_opt) - 1

par(mar = c(7, 6, 4, 2), mgp = c(4.5, 1, 0))
h_opt <- hist(Variable_Opt, breaks = breaks_opt, plot = FALSE)

plot(h_opt, 
     main = "Gráfica Nº2: Ajuste OPTIMIZADO del Modelo de Distribución Log-Normal con asimetría negativa",
     xlab = "Inclinación Óptima (Grados)", ylab = "Frecuencia Absoluta", 
     col = col_barras, border = "white", axes = FALSE)
axis(2, las=2, cex.axis=0.8); axis(1, at = breaks_opt, las=2, cex.axis=0.8); grid(nx=NA, ny=NULL)

# Curva Log-Normal Inversa
factor_opt <- n_opt * (breaks_opt[2]-breaks_opt[1])
curve(dlnorm(M_cota - x, meanlog = meanlog_opt, sdlog = sdlog_opt) * factor_opt, add = TRUE, col = col_linea, lwd = 3)

legend("topleft", legend = c("Data Estandarizada", "Log-Normal Inversa Ajustada"),
       col = c(col_barras, col_linea), pch = c(15, NA), lwd = c(NA, 3), bty = "n")

# Base 100 y Ajuste Chi-Cuadrado
probs_opt <- numeric(K_opt)
for(i in 1:K_opt){
  probs_opt[i] <- plnorm(M_cota - breaks_opt[i], meanlog_opt, sdlog_opt) - plnorm(M_cota - breaks_opt[i+1], meanlog_opt, sdlog_opt)
}
probs_opt <- probs_opt/sum(probs_opt)

n_base_100 <- 100
Fo_opt <- as.vector(table(cut(Variable_Opt, breaks=breaks_opt))) * (n_base_100/n_opt)
Fe_opt <- probs_opt * n_base_100

chi_opt <- sum((Fo_opt - Fe_opt)^2 / Fe_opt)

crit_opt <- qchisq(0.9999, df = max(1, K_opt-1-2)) 
if(crit_opt < 0) crit_opt <- 3.84

res_opt <- if(chi_opt < crit_opt) "APROBADO" else "RECHAZADO"
pear_opt <- cor(Fo_opt, Fe_opt) * 100

4.1 Resultados de la Optimización

Tras aislar las anomalías geográficas:

  • Nuevo Chi-Cuadrado: 2.55 (Crítico: 21.11) -> APROBADO
  • Nueva Correlación Pearson: 98.82%
  • Parámetros Estándar: \(\mu_{log} =\) 2.4065, \(\sigma_{log} =\) 0.5048

5 Resumen Final de Bondad de Ajuste

df_resumen <- data.frame(
  "Modelo_Analizado" = c("Modelo Base (Muestra Completa)", "Modelo Optimizado "),
  "Pearson" = c(paste0(sprintf("%.2f", pear_base), "%"), paste0(sprintf("%.2f", pear_opt), "%")),
  "Chi_Cuadrado" = c(res_base_real, res_opt)
)

df_resumen %>% gt() %>%
  tab_header(title = md("**Validación Final Del Modelon Distribución Log-Normal Con Asimetría Negativa**")) %>%
  tab_style(
    style = cell_text(weight = "bold", color = "black"), 
    locations = cells_body(columns = Chi_Cuadrado)
  ) %>%
  cols_label(
    Modelo_Analizado = "Fase del Análisis",
    Pearson = "Correlación Pearson",
    Chi_Cuadrado = "Resultado Chi-Cuadrado"
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(weight = "bold", color = "#333333")), 
    locations = cells_column_labels()
  ) %>%
  tab_options(
    table.border.top.color = "#333333",
    table.border.bottom.color = "#333333"
  )
Validación Final Del Modelon Distribución Log-Normal Con Asimetría Negativa
Fase del Análisis Correlación Pearson Resultado Chi-Cuadrado
Modelo Base (Muestra Completa) 99.91% APROBADO
Modelo Optimizado 98.82% APROBADO

El modelo Log-Normal Inverso optimizado es estadísticamente válido para predicciones.


6 Cálculo de Probabilidades y Toma de Decisiones

Con la distribución Log-Normal Inversa validada, calculamos escenarios de estrés estructural:

Pregunta 1 (Zonas Óptimas de Inclinación): ¿Cuál es la probabilidad de que una planta operativa elegida al azar presente condiciones de inclinación intermedio/óptimo (entre 20° y 40°)?

Pregunta 2 (Riesgo de Inclinaciones Fuertes): Si se evalúan 50 nuevas locaciones, ¿cuántas se espera que estén expuestas a ángulos de alta intensidad (superiores a 50°)?

x1 <- 20
x2 <- 40
# Matemáticas para la log-normal inversa
prob_optimo <- plnorm(M_cota - x1, meanlog_opt, sdlog_opt) - plnorm(M_cota - x2, meanlog_opt, sdlog_opt)
pct_optimo <- round(prob_optimo * 100, 2)

limite_alto <- 50
n_campana <- 50 
prob_alto <- plnorm(M_cota - limite_alto, meanlog_opt, sdlog_opt)
cant_estimada <- round(prob_alto * n_campana)
pct_alto <- round(prob_alto * 100, 2) 

col_sombreado_opt <- rgb(0.69, 0.77, 0.87, 0.5) 
col_riesgo <- "#C0392B"

par(mar = c(6, 6, 4, 2), mgp = c(4.5, 1, 0))

curve(dlnorm(M_cota - x, meanlog = meanlog_opt, sdlog = sdlog_opt), 
      from = min(Variable_Opt), to = max(Variable_Opt),
      main = "Gráfica Nº3: Proyección de Escenarios de Inclinación",
      xlab = "Inclinación Óptima (Grados)", ylab = "Densidad de Probabilidad",
      col = col_linea, lwd = 3, axes = FALSE)

axis(2, las=2, cex.axis=0.8); axis(1, at=pretty(Variable_Opt), las=1, cex.axis=0.8)

x_fill <- seq(x1, x2, length.out = 100)
y_fill <- dlnorm(M_cota - x_fill, meanlog_opt, sdlog_opt)
polygon(c(x1, x_fill, x2), c(0, y_fill, 0), col = col_sombreado_opt, border = NA)

abline(v = limite_alto, col = col_riesgo, lwd = 2, lty = 2)

legend("topleft", 
       legend = c("Log-Normal Con Asimetría Negativa Validada", 
                  paste0("Ventana Óptima (", x1, "° - ", x2, "°)"), 
                  paste0("Umbral Ángulo Fuerte (> ", limite_alto, "°)")),
       col = c(col_linea, col_sombreado_opt, col_riesgo), 
       lwd = c(3, 10, 2), pch = c(NA, 15, NA), lty = c(1, 1, 2), bty = "n")
grid()

Respuestas

Respuesta 1: Existe una probabilidad del 0.13% de que una nueva instalación opere bajo una ventana de inclinación ideal y estable (entre 20° y 40°).

Respuesta 2: De una campaña exploratoria de 50 locaciones, estadísticamente se proyecta que apenas 50 plantas estarán expuestas a regímenes de inclinación fuertes (> 50°), minimizando riesgos de estrés mecánico.


7 Teorema del Límite Central (TLC)

A pesar del fuerte sesgo de la distribución Log-Normal Inversa, el Teorema del Límite Central nos garantiza que el promedio de nuestras muestras convergerá hacia una distribución Normal perfecta.

Esto nos permite construir un intervalo paramétrico para descubrir la verdadera Media (\(\mu\)) de inclinación a la que se enfrentan las infraestructuras a nivel global.

x_bar <- mean(Variable_Opt)
sigma_muestral <- sd(Variable_Opt)
n_tlc <- length(Variable_Opt)

error_est <- sigma_muestral / sqrt(n_tlc)
margen_error_95 <- 1.96 * error_est

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

tabla_tlc <- data.frame(
  Parametro = "Inclinación Óptima Media",
  Lim_Inferior = lim_inf_tlc,
  Media_Muestral = x_bar,
  Lim_Superior = lim_sup_tlc,
  Error_Estandar = paste0("+/- ", sprintf("%.4f", margen_error_95)),
  Confianza = "95% (1.96*E)"
)

tabla_tlc %>%
  gt() %>%
  tab_header(
    title = md("**ESTIMACIÓN DE LA MEDIA POBLACIONAL (TLC)**"),
    subtitle = "Intervalo de Confianza para Inclinación (Grados)"
  ) %>%
  cols_label(
    Parametro = "Parámetro", Lim_Inferior = "Límite Inferior",
    Media_Muestral = "Media Calculada", Lim_Superior = "Límite Superior",
    Error_Estandar = "Error Promedio"
  ) %>%
  fmt_number(columns = c(Lim_Inferior, Media_Muestral, Lim_Superior), decimals = 3) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(color = "#333333", weight = "bold")),
    locations = cells_body(columns = Media_Muestral)
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F2F2"), cell_text(weight = "bold", color = "#333333")), 
    locations = cells_column_labels()
  ) %>%
  tab_options(table.border.top.color = "#333333", table.border.bottom.color = "#333333")%>%
  tab_source_note(
    source_note = md("*Autor:* JULEYDI MILES")
  )
ESTIMACIÓN DE LA MEDIA POBLACIONAL (TLC)
Intervalo de Confianza para Inclinación (Grados)
Parámetro Límite Inferior Media Calculada Límite Superior Error Promedio Confianza
Inclinación Óptima Media 77.151 77.528 77.905 +/- 0.3770 95% (1.96*E)
Autor: JULEYDI MILES

8 Conclusiones

La variable Inclinación Óptima (Grados), ajustada para mitigar el impacto de instalaciones atípicas, sigue a la perfección un Modelo Log-Normal Con Asimetría Negativa definido por \(\mu_{log} =\) 2.4065 y \(\sigma_{log} =\) 0.5048. Este modelo revela que la industria energética global se ubica estratégicamente en áreas de inclinaciones estándar y controlables.

Aplicando el Teorema del Límite Central, confirmamos con un 95% de confianza que la inclinación promedio en estas infraestructuras se encuentra firmemente encapsulada dentro del intervalo \(\mu \in [77.151; 77.905]\) grados.