
\(Variable\) \(de\) \(Estudio\): Humedad (%).
Variable Cuantitativa Continua con dominio \(D=\{x \in \mathbb{R} \mid 0 \leq x \leq 95\}\). Debido a su comportamiento unimodal, se aplica un Modelo de Distribución Normal global.
\(Estrategia\) \(Inferencial\):
Validación: Se utiliza el Coeficiente de Pearson (\(R\)) y Chi-Cuadrado (\(\chi^2\)). El ajuste de \(86.76\)% valida el modelo para proyecciones operativas.
Estimación: Mediante el Teorema del Límite Central (TLC), se estima la media poblacional con un \(95\)% de confianza.
Precisión: El análisis arroja un intervalo de [\(66.80\)%; \(66.99\)%], lo que permite estandarizar criterios técnicos con un margen de error mínimo (\(\pm 0.09\)).
## ── 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.0
## ✔ 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)
library(gt)
library(dplyr)
# FILTRADO: Este dataset es el que usarás para TODO lo demás
Datos <- read_excel(("Dataset_Mundial_Final (1).xls"),
sheet = "Dataset_Mundial_Final")
# Estructura de los datos
str(Datos)## tibble [58,978 × 29] (S3: tbl_df/tbl/data.frame)
## $ OBJECTID : num [1:58978] 2 3 4 5 6 7 8 9 10 11 ...
## $ code : chr [1:58978] "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
## $ plant_name : chr [1:58978] "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
## $ country : chr [1:58978] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ operational_status : chr [1:58978] "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
## $ longitude : num [1:58978] 62.9 67.1 70.4 66.2 65.7 ...
## $ latitude : num [1:58978] 35.1 36.7 34.4 33.8 31.7 ...
## $ elevation : num [1:58978] 918 359 629 2288 1060 ...
## $ area : num [1:58978] 6.74 10.72 487.73 111.8 1929.96 ...
## $ size : chr [1:58978] "Small" "Small" "Small" "Small" ...
## $ slope : num [1:58978] 7.38 0.49 1.1 6.16 1.23 ...
## $ slope_type : chr [1:58978] "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
## $ curvature : num [1:58978] -0.024 0 0 0.045 -0.005 -0.005 -0.015 0 0 -0.009 ...
## $ curvature_type : chr [1:58978] "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
## $ aspect : num [1:58978] 96.8 358.5 36.2 305.8 248.4 ...
## $ aspect_type : chr [1:58978] "East" "North" "Northeast" "Northwest" ...
## $ dist_to_road : num [1:58978] 7037.1 92.7 112.1 1705.3 115.8 ...
## $ ambient_temperature : num [1:58978] 14.4 17.88 21.32 8.86 19.64 ...
## $ ghi : num [1:58978] 5.82 5.58 5.8 6.75 6.62 ...
## $ humidity : num [1:58978] 47.7 42.3 36.4 37.3 24.2 ...
## $ wind_speed : num [1:58978] 0.039 0.954 0.234 0.943 0.37 ...
## $ wind_direction : num [1:58978] 187.5 207.4 255.6 160.3 97.7 ...
## $ dt_wind : chr [1:58978] "South" "Southwest" "West" "South" ...
## $ solar_aptitude : num [1:58978] 0.72 0.635 0.685 0.659 0.819 0.819 0.818 0.642 0.63 0.374 ...
## $ solar_aptitude_rounded: num [1:58978] 7 6 7 7 8 8 8 6 6 4 ...
## $ solar_aptittude_class : chr [1:58978] "Alta" "Alta" "Alta" "Alta" ...
## $ capacity : num [1:58978] 32 40 60 3000 100 100 36 50 25 100 ...
## $ optimal_tilt : num [1:58978] 30 31 31.1 33 31 ...
## $ pv_potential : num [1:58978] 4.61 4.41 4.57 5.42 5.17 ...
Se aplica la Regla de Sturges para organizar sistemáticamente la variabilidad atmosférica, utilizando intervalos de 10% para facilitar la interpretación técnica en ingeniería.
library(gt)
library(dplyr)
library(gt)
library(dplyr)
Q1 <- quantile(Datos$humidity, 0.25, na.rm = TRUE)
Q3 <- quantile(Datos$humidity, 0.75, na.rm = TRUE)
IQR_h <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_h
lim_sup <- Q3 + 1.5 * IQR_h
# 1. Preparación de la variable
hum_variable <- Datos$humidity[!is.na(Datos$humidity)]
n_total <- length(hum_variable)
# 2. Aplicación de la Regla de Sturges
K_sturges <- ceiling(1 + 3.322 * log10(n_total))
Rango <- max(hum_variable) - min(hum_variable)
Amplitud <- Rango / K_sturges
# 3. Definición de cortes dinámicos
cortes_int <- seq(min(hum_variable), max(hum_variable), length.out = K_sturges + 1)
# 4. Cálculo de frecuencias
ni_int <- as.vector(table(cut(hum_variable, breaks = cortes_int, include.lowest = TRUE, right = FALSE)))
hi_int <- (ni_int / n_total) * 100
# 5. Construcción del Dataframe
df_tabla_hum <- data.frame(
Li = cortes_int[1:K_sturges],
Ls = cortes_int[2:(K_sturges+1)],
MC = (cortes_int[1:K_sturges] + cortes_int[2:(K_sturges+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)))
)
# 6. Generación de Tabla GT
df_tabla_hum %>%
mutate(across(everything(), ~as.character(round(as.numeric(.), 2)))) %>%
rbind(c("TOTAL", "-", "-", n_total, "100", "-", "-", "-", "-")) %>%
gt() %>%
tab_header(title = md("**Tabla N°2: Distribución de Frecuencias de Humedad (%) (Regla de Sturges)**")) %>%
tab_source_note(source_note = "Autor: Juleydi Miles") %>%
cols_label(
Li = "Lim. Inf", Ls = "Lim. Sup", MC = "Marca Clase",
ni = "ni", hi = "hi (%)",
Ni_asc = "Ni \u2191", Ni_desc = "Ni \u2193",
Hi_asc = "Hi \u2191", Hi_desc = "Hi \u2193"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_options(column_labels.background.color = "#F0F0F0")| Tabla N°2: Distribución de Frecuencias de Humedad (%) (Regla de Sturges) | ||||||||
| Lim. Inf | Lim. Sup | Marca Clase | ni | hi (%) | Ni ↑ | Ni ↓ | Hi ↑ | Hi ↓ |
|---|---|---|---|---|---|---|---|---|
| 0 | 5.59 | 2.79 | 3 | 0.01 | 3 | 58978 | 0.01 | 100 |
| 5.59 | 11.18 | 8.38 | 17 | 0.03 | 20 | 58975 | 0.03 | 99.99 |
| 11.18 | 16.76 | 13.97 | 47 | 0.08 | 67 | 58958 | 0.11 | 99.97 |
| 16.76 | 22.35 | 19.56 | 150 | 0.25 | 217 | 58911 | 0.37 | 99.89 |
| 22.35 | 27.94 | 25.15 | 513 | 0.87 | 730 | 58761 | 1.24 | 99.63 |
| 27.94 | 33.53 | 30.74 | 706 | 1.2 | 1436 | 58248 | 2.43 | 98.76 |
| 33.53 | 39.12 | 36.32 | 765 | 1.3 | 2201 | 57542 | 3.73 | 97.57 |
| 39.12 | 44.71 | 41.91 | 1286 | 2.18 | 3487 | 56777 | 5.91 | 96.27 |
| 44.71 | 50.29 | 47.5 | 1817 | 3.08 | 5304 | 55491 | 8.99 | 94.09 |
| 50.29 | 55.88 | 53.09 | 4089 | 6.93 | 9393 | 53674 | 15.93 | 91.01 |
| 55.88 | 61.47 | 58.68 | 4403 | 7.47 | 13796 | 49585 | 23.39 | 84.07 |
| 61.47 | 67.06 | 64.26 | 8607 | 14.59 | 22403 | 45182 | 37.99 | 76.61 |
| 67.06 | 72.65 | 69.85 | 14841 | 25.16 | 37244 | 36575 | 63.15 | 62.01 |
| 72.65 | 78.24 | 75.44 | 16563 | 28.08 | 53807 | 21734 | 91.23 | 36.85 |
| 78.24 | 83.82 | 81.03 | 4797 | 8.13 | 58604 | 5171 | 99.37 | 8.77 |
| 83.82 | 89.41 | 86.62 | 367 | 0.62 | 58971 | 374 | 99.99 | 0.63 |
| 89.41 | 95 | 92.21 | 7 | 0.01 | 58978 | 7 | 100 | 0.01 |
| TOTAL | - | - | 58978 | 100 | - | - | - | - |
| Autor: Juleydi Miles | ||||||||
Se ajusta el diseño de barras para visualizar la distribución unimodal, destacando la alta concentración de proyectos en el rango de humedad moderada-alta.
# 1. Configuración de márgenes ampliados
par(mar = c(10, 7, 6, 3))
# 2. Generación del gráfico con espacio extra en el eje Y (Factor 1.5)
y_max_frec <- max(df_tabla_hum$hi) * 1.5
posiciones <- barplot(df_tabla_hum$hi,
names.arg = df_tabla_hum$MC,
col = "#B0C4DE",
border = "black",
ylim = c(0, y_max_frec),
space = 0,
axes = FALSE,
las = 2, # Rotación vertical de etiquetas
cex.names = 0.8) # Tamaño de fuente para que no se amontonen
# 3. Personalización de ejes y rejilla
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
# 4. Rotulación con distancias (line) corregidas para evitar solapamiento
# Se baja la etiqueta de 'Humedad' a la línea 7 para que no toque los números
mtext("Porcentaje (%)", side = 2, line = 4, cex = 1, font = 1)
mtext("Humedad (%)", side = 1, line = 7, cex = 1, font = 1)
# Título con mayor elevación (line = 3)
mtext("Gráfica N°2: Distribución Porcentual de las Plantas Solares por Humedad",
side = 3, line = 3, adj = 0.5, cex = 1.2, font = 2)
# 5. Leyenda Técnica posicionada para no obstruir
legend("topright",
legend = c("Frecuencia Observada"),
fill = c("#B0C4DE"),
border = c("black"),
bty = "n",
cex = 0.9)
# 6. Línea de base (eje X)
abline(h = 0, col = "black", lwd = 1.5)Se ajusta un Modelo Log-Normal debido a que los datos de humedad presentan una asimetría positiva, agrupándose alrededor de un valor central (\(\approx 67\%\)). Este modelo es técnicamente más preciso que el normal para variables climáticas, ya que garantiza que los valores se mantengan siempre en el rango positivo (\(x > 0\)) y reconoce que la humedad es el resultado de la interacción multiplicativa de factores atmosféricos y geográficos.
# 1. Limpieza de Outliers (Para asegurar el ajuste del modelo)
Q1_h <- quantile(Datos$humidity, 0.25, na.rm = TRUE)
Q3_h <- quantile(Datos$humidity, 0.75, na.rm = TRUE)
IQR_h <- Q3_h - Q1_h
# Filtramos datos para que la curva no se distorsione
hum_clean <- Datos$humidity[Datos$humidity >= (Q1_h - 1.5 * IQR_h) &
Datos$humidity <= (Q3_h + 1.5 * IQR_h) &
Datos$humidity > 0 & !is.na(Datos$humidity)]
n_total <- length(hum_clean)
# 1. Parámetros Log-Normal (Usando datos limpios)
mu_ln <- mean(log(hum_clean))
sd_ln <- sd(log(hum_clean))
n_total <- length(hum_clean)
# 2. Histograma
cortes <- seq(0, 100, by = 10)
h_hum <- hist(hum_clean, breaks = cortes, plot = FALSE)
h_hum$counts <- (h_hum$counts / n_total) * 100
# 3. Curva Log-Normal con escalado corregido
x_curva <- seq(1, 100, length.out = 500)
# Multiplicamos por 10 (ancho de barra) para que el área coincida con los porcentajes
y_curva <- dlnorm(x_curva, meanlog = mu_ln, sdlog = sd_ln) * 10 * 100
# 4. Gráfico
y_max <- max(c(h_hum$counts, y_curva)) * 1.2
plot(h_hum,
main = "Gráfica N°3: Distribución de Humedad (Modelo Log-Normal)",
xlab = "Humedad (%)", ylab = "Porcentaje (%)",
col = "#B0C4DE", border = "black",
ylim = c(0, y_max), axes = FALSE)
lines(x_curva, y_curva, col = "#C0392B", lwd = 3)
axis(1); axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
abline(h = 0, col = "black", lwd = 1.5)
## Test de Pearson y Chi-Cuadrado
``` r
Q1_h <- quantile(Datos$humidity, 0.25, na.rm = TRUE)
Q3_h <- quantile(Datos$humidity, 0.75, na.rm = TRUE)
IQR_h <- Q3_h - Q1_h
hum_clean <- Datos$humidity[Datos$humidity >= (Q1_h - 1.5 * IQR_h) &
Datos$humidity <= (Q3_h + 1.5 * IQR_h) &
Datos$humidity > 0 & !is.na(Datos$humidity)]
n_total_c <- length(hum_clean)
mu_ln_c <- mean(log(hum_clean))
sd_ln_c <- sd(log(hum_clean))
breaks_h <- seq(0, 100, by = 10)
probs_h <- diff(plnorm(breaks_h, meanlog = mu_ln_c, sdlog = sd_ln_c))
probs_h <- probs_h / sum(probs_h) # Renormalización estratégica
n_base <- 100
Fo_h <- as.vector(table(cut(hum_clean, breaks = breaks_h,
include.lowest = TRUE, right = FALSE))) * (n_base / n_total_c)
# Frecuencias Esperadas (Fe)
Fe_h <- probs_h * n_base
Fe_h[Fe_h == 0] <- 1e-6
chi_h <- sum((Fo_h - Fe_h)^2 / Fe_h)
pear_h <- cor(Fo_h, Fe_h) * 100
# Resultado de la Conjetura
res_h <- if (pear_h > 80) "APROBADO" else "RECHAZADO"
# RESULTADOS
cat("RESULTADOS TÉCNICOS (LOG-NORMAL):\n")
## RESULTADOS TÉCNICOS (LOG-NORMAL):
## Test Pearson (Correlación): 89.39 %
## Chi-Cuadrado (Discrepancia): 24.12
## Estado de Validación: APROBADO
Se ajusta un Modelo Log-Normal debido a que los datos de humedad presentan una asimetría positiva, concentrándose cerca del \(67\%\). La validación se apoya en un análisis dual: el Coeficiente de Pearson (\(R\)) confirma la forma de la curva logarítmica, mientras que el Chi-Cuadrado (\(\chi^2\)) valida el ajuste de las frecuencias en base \(100\).
library(gt)
library(dplyr)
resumen_ajuste_hum <- data.frame(
"Variable" = "Humedad (%)",
"Modelo_Aplicado" = "Distribución Log-Normal",
"Pearson_R" = pear_h,
"Chi_Sq" = chi_h,
"Estado" = res_h
)
resumen_ajuste_hum %>%
gt() %>%
tab_header(title = md("**Tabla N°3 de Resumen de Validación de Humedad**")) %>%
tab_source_note(source_note = "Autor: Juleydi Miles") %>%
cols_label(
Variable = "Variable",
Modelo_Aplicado = "Modelo de Ajuste",
Pearson_R = "Test Pearson (%)",
Chi_Sq = "Chi-Cuadrado (X²)",
Estado = "Validación"
) %>%
fmt_number(columns = c(Pearson_R, Chi_Sq), 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, rows = Estado == "APROBADO")
)| Tabla N°3 de Resumen de Validación de Humedad | ||||
| Variable | Modelo de Ajuste | Test Pearson (%) | Chi-Cuadrado (X²) | Validación |
|---|---|---|---|---|
| Humedad (%) | Distribución Log-Normal | 89.39 | 24.12 | APROBADO |
| Autor: Juleydi Miles | ||||
\(Pregunta\) \(1\): ¿Cuál es la probabilidad de que una planta se sitúe en la franja óptima entre \(60\)% y \(80\)%?
\(Pregunta\) \(2\): En una cartera de \(200\) proyectos, ¿cuántos se estiman en este rango?
mu_h <- mean(Datos$humidity, na.rm = TRUE)
sd_h <- sd(Datos$humidity, na.rm = TRUE)
# 2. Cálculo de Probabilidades
# Probabilidad de estar entre 60% y 80%
prob_optima <- pnorm(80, mu_h, sd_h) - pnorm(60, mu_h, sd_h)
proyectos_200 <- round(prob_optima * 200)
# 3. Configuración de márgenes y gráfico
par(mar = c(6, 8, 4, 2))
# Generación de la curva normal
x_h <- seq(20, 100, length.out = 500)
y_vals <- dnorm(x_h, mu_h, sd_h)
y_max <- max(y_vals) * 1.2
plot(x_h, y_vals, type = "n", axes = FALSE,
main = "Gráfica N°5: Zonas de Probabilidad de Humedad (Modelo Normal)",
xlab = "Humedad (%)", ylab = "",
ylim = c(0, y_max))
# Sombreado del área de interés (60% - 80%)
x_area <- seq(60, 80, length.out = 100)
y_area <- dnorm(x_area, mu_h, sd_h)
polygon(c(60, x_area, 80), c(0, y_area, 0), col = "#7FB3D5", border = NA)
# Línea del modelo
lines(x_h, y_vals, col = "#C0392B", lwd = 4)
# Personalización técnica
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)
# Leyenda
legend("topleft",
legend = c("Modelo Normal (Humedad)",
paste0("Zona Óptima (", round(prob_optima * 100, 2), "%)")),
col = c("#C0392B", "#7FB3D5"),
lwd = c(4, 10),
bty = "n",
cex = 0.8)# 1. Parámetros obtenidos en el paso de validación (mu_ln_c y sd_ln_c)
lim_inf_p <- 60
lim_sup_p <- 80
# 2. Cálculo de probabilidad acumulada (P(60 < X < 80))
prob_h <- plnorm(lim_sup_p, meanlog = mu_ln_c, sdlog = sd_ln_c) -
plnorm(lim_inf_p, meanlog = mu_ln_c, sdlog = sd_ln_c)
# 3. Estimación para una cartera de 200 proyectos
n_proyectos <- 200
proyectos_estimados <- prob_h * n_proyectos
# IMPRESIÓN DE RESULTADOS
cat("RESULTADOS DEL CÁLCULO:\n")## RESULTADOS DEL CÁLCULO:
## Probabilidad (60-80%): 72.15 %
## Proyectos estimados (en 200): 144 proyectos
\(Respuesta\) \(1\): Existe una probabilidad del \(59.29\)% de que cualquier planta solar del dataset opere en condiciones de humedad de entre el \(60\)% y el \(80\)%. Esto confirma que la mayoría de los activos están sujetos a niveles de humedad medio-altos.
\(Respuesta\) \(2\): Si se planificara una expansión de \(200\) proyectos nuevos, el modelo proyecta que aproximadamente \(119\) de ellos se ubicarán dentro de esta franja de incidencia.
Se implementa el Modelo Log-Normal para el cálculo de intervalos de confianza debido a que la humedad presenta una asimetría positiva. A diferencia del modelo normal, este enfoque reconoce que la variable tiene un límite natural en cero y que los errores de estimación se distribuyen de forma multiplicativa. El uso de la media geométrica como estimador puntual proporciona una visión más precisa del comportamiento predominante en las zonas de estudio fotovoltaico. \[E = Z \cdot\frac{\sigma_{log}}{\sqrt{n}}\]Donde \(\sigma_{log}\)
library(gt)
library(dplyr)
# 1. ESTADÍSTICOS EN ESCALA LOGARÍTMICA (Requerido para Log-Normal)
# Usamos los datos filtrados (hum_clean) para evitar que los atípicos dañen el intervalo
hum_datos <- Datos$humidity[Datos$humidity > 0 & !is.na(Datos$humidity)]
log_datos <- log(hum_datos)
mu_log <- mean(log_datos)
sd_log <- sd(log_datos)
n_total <- length(log_datos)
# 2. CÁLCULO DEL ERROR Y MARGEN (E) AL 95%
# El error se calcula sobre la desviación del logaritmo
E_log <- 1.96 * (sd_log / sqrt(n_total))
# 3. CONSTRUCCIÓN DE LA TABLA (Re-transformando con exp())
# La media poblacional estimada en una Log-Normal es exp(mu + sigma^2/2)
media_lognormal <- exp(mu_log + (sd_log^2) / 2)
df_estimacion <- data.frame(
Parametro = "Humedad Promedio (%)",
Lim_Inferior = exp(mu_log - E_log),
Media_Muestral = media_lognormal,
Lim_Superior = exp(mu_log + E_log),
Error_Estandar = paste0("+/- ", round(E_log, 4), " (log)"),
Confianza = "95% (Z=1.96)"
)
# 4. FORMATO CON GT
df_estimacion %>%
gt() %>%
tab_header(
title = md("**Tabla N°4 de Estimación de la Media Poblacional (Modelo Log-Normal)**")
) %>%
tab_source_note(source_note = "Autor: Juleydi Miles") %>%
fmt_number(columns = 2:4, decimals = 3) %>%
cols_label(
Lim_Inferior = "Límite Inf.",
Media_Muestral = "Media Estimada",
Lim_Superior = "Límite Sup.",
Error_Estandar = "Margen de Error",
Confianza = "Confianza"
) %>%
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°4 de Estimación de la Media Poblacional (Modelo Log-Normal) | |||||
| Parametro | Límite Inf. | Media Estimada | Límite Sup. | Margen de Error | Confianza |
|---|---|---|---|---|---|
| Humedad Promedio (%) | 65.454 | 67.146 | 65.685 | +/- 0.0018 (log) | 95% (Z=1.96) |
| Autor: Juleydi Miles | |||||
El análisis de la Humedad mediante el Modelo Log-Normal permitió caracterizar con precisión el entorno operativo de la infraestructura solar global. Los resultados validan que la mayoría de los proyectos operan bajo condiciones de humedad moderada-alta, estabilizadas por los patrones climáticos de las zonas de mayor inversión.
Con un \(95\)% de confianza, se determina que la media poblacional de humedad se sitúa en el intervalo de [\(65.454\)%; \(65.685\)%]. Esta precisión, respaldada por un margen de error mínimo de \(\pm\) \(0.0018\), garantiza un sustento estadístico sólido para optimizar el mantenimiento y la protección del parque energético mundial basado en una media de \(67.146\)%.