1 Configuración y Carga de Datos

##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: JULEYDI MILES ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####


#### VARIABLE CAPACIDAD ####
## DATASET ##
# Cargar dataset
Datos <- read_excel("C:/Users/USER/Downloads/Variables/Dataset_Mundial_Final.xls")
# 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 ...

2 Cálculo de Intervalos y Frecuencias

library(dplyr)
library(gt)

# 1. Extracción y Limpieza de la variable dist_to_road
# Eliminamos NA y valores atípicos
apt_variable_raw <- Datos$dist_to_road %>% na.omit()

q1 <- quantile(apt_variable_raw, 0.25)
q3 <- quantile(apt_variable_raw, 0.75)
iqr <- q3 - q1
# Filtrado de Outliers
apt_clean <- apt_variable_raw[apt_variable_raw >= (q1 - 1.5 * iqr) & 
                               apt_variable_raw <= (q3 + 1.5 * iqr)]

# 2. Aplicación de Regla de Sturges
n_total_apt <- length(apt_clean)
K_sturges <- ceiling(1 + 3.322 * log10(n_total_apt)) # Salen 17 intervalos
min_val <- min(apt_clean)
max_val <- max(apt_clean)

# Generar cortes
cortes_int_apt <- seq(from = min_val, to = max_val, length.out = K_sturges + 1)

# 3. Construcción de la Tabla
ni_int_apt <- as.vector(table(cut(apt_clean, breaks = cortes_int_apt, include.lowest = TRUE, right = FALSE)))
hi_int_apt <- (ni_int_apt / n_total_apt) * 100

df_tabla_apt <- data.frame(
  Li = cortes_int_apt[1:K_sturges], 
  Ls = cortes_int_apt[2:(K_sturges+1)],
  MC = (cortes_int_apt[1:K_sturges] + cortes_int_apt[2:(K_sturges+1)]) / 2,
  ni = ni_int_apt, 
  hi = hi_int_apt,
  Ni_asc = cumsum(ni_int_apt), 
  Ni_desc = rev(cumsum(rev(ni_int_apt))),
  Hi_asc = cumsum(hi_int_apt), 
  Hi_desc = rev(cumsum(rev(hi_int_apt)))
)

# 4. Generación de la Tabla con tu formato visual
df_tabla_apt %>%
  mutate(across(everything(), ~as.character(round(as.numeric(.), 3)))) %>%
  rbind(c("TOTAL", "-", "-", n_total_apt, "100", "-", "-", "-", "-")) %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3 de Distribución de Frecuencias de Distancia a la Vía de las Plantas Solares**")) %>%
  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°3 de Distribución de Frecuencias de Distancia a la Vía de las Plantas Solares
Lim. Inf Lim. Sup Marca Clase ni hi (%) Ni ↑ Ni ↓ Hi ↑ Hi ↓
0 371.058 185.529 20357 39.575 20357 51439 39.575 100
371.058 742.115 556.587 9509 18.486 29866 31082 58.061 60.425
742.115 1113.173 927.644 6090 11.839 35956 21573 69.9 41.939
1113.173 1484.231 1298.702 2790 5.424 38746 15483 75.324 30.1
1484.231 1855.289 1669.76 2183 4.244 40929 12693 79.568 24.676
1855.289 2226.346 2040.817 1709 3.322 42638 10510 82.89 20.432
2226.346 2597.404 2411.875 1423 2.766 44061 8801 85.657 17.11
2597.404 2968.462 2782.933 1141 2.218 45202 7378 87.875 14.343
2968.462 3339.519 3153.99 998 1.94 46200 6237 89.815 12.125
3339.519 3710.577 3525.048 892 1.734 47092 5239 91.549 10.185
3710.577 4081.635 3896.106 898 1.746 47990 4347 93.295 8.451
4081.635 4452.692 4267.164 731 1.421 48721 3449 94.716 6.705
4452.692 4823.75 4638.221 641 1.246 49362 2718 95.962 5.284
4823.75 5194.808 5009.279 583 1.133 49945 2077 97.096 4.038
5194.808 5565.866 5380.337 583 1.133 50528 1494 98.229 2.904
5565.866 5936.923 5751.394 487 0.947 51015 911 99.176 1.771
5936.923 6307.981 6122.452 424 0.824 51439 424 100 0.824
TOTAL - - 51439 100 - - - -
Autor: Juleydi Miles

3 Tabla de Frecuencias con intervalos de 100 en 100 ( Conversión de m a Km)

library(dplyr)
library(gt)

# 1. Preparación y Limpieza (NA y Outliers)
dist_raw <- Datos$dist_to_road %>% na.omit()

q1 <- quantile(dist_raw, 0.25)
q3 <- quantile(dist_raw, 0.75)
iqr <- q3 - q1
# Filtramos para quedarnos con los datos "limpios"
dist_clean <- dist_raw[dist_raw >= (q1 - 1.5 * iqr) & dist_raw <= (q3 + 1.5 * iqr)]

# 2. Definición de Intervalos (de 100 en 100 metros)
BASE_M <- 100
min_m <- 0 # Empezamos desde 0 metros
max_m <- ceiling(max(dist_clean) / BASE_M) * BASE_M
cortes_m <- seq(from = min_m, to = max_m, by = BASE_M)

# 3. Cálculo de Frecuencias
n_total <- length(dist_clean)
ni <- as.vector(table(cut(dist_clean, breaks = cortes_m, include.lowest = TRUE, right = FALSE)))
hi <- (ni / n_total) * 100

# 4. Creación del DataFrame y Transformación a Kilómetros (/1000)
df_tabla_road <- data.frame(
  Li = cortes_m[1:length(ni)] / 1000, 
  Ls = cortes_m[2:(length(ni)+1)] / 1000,
  MC = ((cortes_m[1:length(ni)] + cortes_m[2:(length(ni)+1)]) / 2) / 1000,
  ni = ni, 
  hi = hi,
  Ni_asc = cumsum(ni), 
  Ni_desc = rev(cumsum(rev(ni))),
  Hi_asc = cumsum(hi), 
  Hi_desc = rev(cumsum(rev(hi)))
)

# 5. Formateo Final con gt()
df_tabla_road %>%
  mutate(across(everything(), ~as.numeric(.))) %>%
  mutate(across(c(Li, Ls, MC, hi, Hi_asc, Hi_desc), ~round(., 3))) %>%
  mutate(across(everything(), as.character)) %>%
  rbind(c("TOTAL", "-", "-", n_total, "100", "-", "-", "-", "-")) %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3 de Distribución de Frecuencias: Distancia a la Vía (KM)**")) %>%
  tab_source_note(source_note = "Autor: Juleydi Miles") %>%
  cols_label(Li = "Lim. Inf (Km)", Ls = "Lim. Sup (Km)", MC = "Marca Clase (Km)", 
             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°3 de Distribución de Frecuencias: Distancia a la Vía (KM)
Lim. Inf (Km) Lim. Sup (Km) Marca Clase (Km) ni hi (%) Ni ↑ Ni ↓ Hi ↑ Hi ↓
0 0.1 0.05 8503 16.53 8503 51439 16.53 100
0.1 0.2 0.15 5619 10.924 14122 42936 27.454 83.47
0.2 0.3 0.25 3911 7.603 18033 37317 35.057 72.546
0.3 0.4 0.35 3236 6.291 21269 33406 41.348 64.943
0.4 0.5 0.45 2766 5.377 24035 30170 46.725 58.652
0.5 0.6 0.55 2602 5.058 26637 27404 51.784 53.275
0.6 0.7 0.65 2331 4.532 28968 24802 56.315 48.216
0.7 0.8 0.75 2113 4.108 31081 22471 60.423 43.685
0.8 0.9 0.85 1972 3.834 33053 20358 64.257 39.577
0.9 1 0.95 1908 3.709 34961 18386 67.966 35.743
1 1.1 1.05 884 1.719 35845 16478 69.684 32.034
1.1 1.2 1.15 848 1.649 36693 15594 71.333 30.316
1.2 1.3 1.25 746 1.45 37439 14746 72.783 28.667
1.3 1.4 1.35 724 1.407 38163 14000 74.191 27.217
1.4 1.5 1.45 705 1.371 38868 13276 75.561 25.809
1.5 1.6 1.55 622 1.209 39490 12571 76.771 24.439
1.6 1.7 1.65 592 1.151 40082 11949 77.921 23.229
1.7 1.8 1.75 544 1.058 40626 11357 78.979 22.079
1.8 1.9 1.85 533 1.036 41159 10813 80.015 21.021
1.9 2 1.95 488 0.949 41647 10280 80.964 19.985
2 2.1 2.05 479 0.931 42126 9792 81.895 19.036
2.1 2.2 2.15 399 0.776 42525 9313 82.671 18.105
2.2 2.3 2.25 411 0.799 42936 8914 83.47 17.329
2.3 2.4 2.35 413 0.803 43349 8503 84.273 16.53
2.4 2.5 2.45 354 0.688 43703 8090 84.961 15.727
2.5 2.6 2.55 367 0.713 44070 7736 85.674 15.039
2.6 2.7 2.65 326 0.634 44396 7369 86.308 14.326
2.7 2.8 2.75 306 0.595 44702 7043 86.903 13.692
2.8 2.9 2.85 302 0.587 45004 6737 87.49 13.097
2.9 3 2.95 311 0.605 45315 6435 88.095 12.51
3 3.1 3.05 296 0.575 45611 6124 88.67 11.905
3.1 3.2 3.15 229 0.445 45840 5828 89.115 11.33
3.2 3.3 3.25 250 0.486 46090 5599 89.601 10.885
3.3 3.4 3.35 260 0.505 46350 5349 90.107 10.399
3.4 3.5 3.45 231 0.449 46581 5089 90.556 9.893
3.5 3.6 3.55 234 0.455 46815 4858 91.011 9.444
3.6 3.7 3.65 257 0.5 47072 4624 91.51 8.989
3.7 3.8 3.75 246 0.478 47318 4367 91.989 8.49
3.8 3.9 3.85 272 0.529 47590 4121 92.517 8.011
3.9 4 3.95 241 0.469 47831 3849 92.986 7.483
4 4.1 4.05 197 0.383 48028 3608 93.369 7.014
4.1 4.2 4.15 219 0.426 48247 3411 93.795 6.631
4.2 4.3 4.25 183 0.356 48430 3192 94.15 6.205
4.3 4.4 4.35 194 0.377 48624 3009 94.527 5.85
4.4 4.5 4.45 188 0.365 48812 2815 94.893 5.473
4.5 4.6 4.55 208 0.404 49020 2627 95.297 5.107
4.6 4.7 4.65 153 0.297 49173 2419 95.595 4.703
4.7 4.8 4.75 140 0.272 49313 2266 95.867 4.405
4.8 4.9 4.85 149 0.29 49462 2126 96.157 4.133
4.9 5 4.95 168 0.327 49630 1977 96.483 3.843
5 5.1 5.05 155 0.301 49785 1809 96.785 3.517
5.1 5.2 5.15 167 0.325 49952 1654 97.109 3.215
5.2 5.3 5.25 192 0.373 50144 1487 97.482 2.891
5.3 5.4 5.35 144 0.28 50288 1295 97.762 2.518
5.4 5.5 5.45 154 0.299 50442 1151 98.062 2.238
5.5 5.6 5.55 126 0.245 50568 997 98.307 1.938
5.6 5.7 5.65 128 0.249 50696 871 98.556 1.693
5.7 5.8 5.75 124 0.241 50820 743 98.797 1.444
5.8 5.9 5.85 142 0.276 50962 619 99.073 1.203
5.9 6 5.95 139 0.27 51101 477 99.343 0.927
6 6.1 6.05 110 0.214 51211 338 99.557 0.657
6.1 6.2 6.15 105 0.204 51316 228 99.761 0.443
6.2 6.3 6.25 107 0.208 51423 123 99.969 0.239
6.3 6.4 6.35 16 0.031 51439 16 100 0.031
TOTAL - - 51439 100 - - - -
Autor: Juleydi Miles

4 Análisis Gráfico

4.1 Histogramas de Cantidad

dist_global_km <- na.omit(Datos$dist_to_road) / 1000
par(mar = c(8, 7, 5, 2))
hist_global <- hist(dist_global_km, breaks = 50, plot = FALSE)

barplot(hist_global$counts, 
        names.arg = round(hist_global$mids, 1),
        main = "", xlab = "", ylab = "",
        col = "#EED5D2", 
        ylim = c(0, max(hist_global$counts) * 1.2),
        space = 0, las = 2, cex.names = 0.6)

mtext("Cantidad de Plantas", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Distancia a la vía (km)", side = 1, line = 4)
mtext("Gráfica N°1: Distribución de Cantidad de Plantas Solares por Distancia de la via", 
      side = 3, line = 2, adj = 0.5, cex = 1, font = 2)
mtext("Autor: Juleydi Miles", side = 1, line = 6, adj = 1, cex = 0.8)

dist_raw <- Datos$dist_to_road %>% na.omit()
q1 <- quantile(dist_raw, 0.25); q3 <- quantile(dist_raw, 0.75)
iqr <- q3 - q1
dist_local <- dist_raw[dist_raw <= (q3 + 1.5 * iqr)]
BASE_M <- 100
cortes_m <- seq(0, ceiling(max(dist_local)/BASE_M)*BASE_M, by = BASE_M)
ni_local <- as.vector(table(cut(dist_local, breaks = cortes_m, include.lowest = TRUE, right = FALSE)))
etiquetas_km <- round(cortes_m[-1] / 1000, 1)
par(mar = c(9, 7, 5, 2)) 
barplot(ni_local, 
        names.arg = etiquetas_km, 
        main = "", 
        xlab = "", 
        ylab = "",
        col = "#EED5D2",      
        border = "black",    
        ylim = c(0, max(ni_local) * 1.2),
        space = 0,           
        las = 2,              
        cex.names = 0.5)      

mtext("Cantidad de Plantas", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Distancia a la vía (km) - Límite superior del intervalo", side = 1, line = 6)
mtext("Gráfica N°2: Distribución de Cantidad de Plantas Solares por Distancia de la via", 
      side = 3, line = 2, adj = 0.5, cex = 1, font = 2)
mtext("Autor: Juleydi Miles", side = 1, line = 8, adj = 1, cex = 0.8)

## Histogramas Porcentuales ##

dist_global_km <- na.omit(Datos$dist_to_road) / 1000
n_total <- length(dist_global_km)
par(mar = c(8, 7, 5, 2))
hist_global <- hist(dist_global_km, breaks = 50, plot = FALSE)
frec_rel_global <- (hist_global$counts / n_total) * 100
bp_global <- barplot(frec_rel_global, 
                     names.arg = round(hist_global$mids, 1),
                     main = "", 
                     xlab = "", 
                     ylab = "Porcentaje (%)", 
                     col = "#EED5D2", 
                     border = "black",      
                     ylim = c(0, max(frec_rel_global) * 1.3), 
                     space = 0, 
                     las = 2, 
                     cex.names = 0.6)
text(x = bp_global[frec_rel_global > 0.1], 
     y = frec_rel_global[frec_rel_global > 0.1], 
     labels = paste0(round(frec_rel_global[frec_rel_global > 0.1], 1), "%"), 
     pos = 3, cex = 0.5, col = "black")
mtext("Distancia a la vía (km)", side = 1, line = 4)
mtext("Gráfica N°3:Distribución Porcentual de Plantas Solares por Distancia de la via", 
      side = 3, line = 2, adj = 0.5, cex = 1, font = 2)
mtext("Autor: Juleydi Miles", side = 1, line = 6, adj = 1, cex = 0.8)

dist_raw <- Datos$dist_to_road %>% na.omit()
q1 <- quantile(dist_raw, 0.25); q3 <- quantile(dist_raw, 0.75)
iqr <- q3 - q1
dist_local_km <- dist_raw[dist_raw <= (q3 + 1.5 * iqr)] / 1000
cortes <- seq(0, ceiling(max(dist_local_km) * 10) / 10, by = 0.1)
ni <- as.vector(table(cut(dist_local_km, breaks = cortes, include.lowest = TRUE, right = FALSE)))
hi <- (ni / length(dist_local_km)) * 100
mids <- cortes[-1]
etiquetas_eje <- ifelse(round(mids, 1) %% 1 == 0, as.character(round(mids, 0)), "")
par(mar = c(7, 7, 5, 2))
bp4 <- barplot(hi, 
               names.arg = etiquetas_eje, 
               main = "", xlab = "", ylab = "Porcentaje (%)",
               col = "#EED5D2", border = "black", 
               ylim = c(0, max(hi) * 1.3), 
               space = 0, las = 1, cex.names = 0.8)
text(x = bp4[hi > 3], 
     y = hi[hi > 3], 
     labels = paste0(round(hi[hi > 3], 1), "%"), 
     pos = 3, 
     cex = 0.7,   
     font = 2, 
     col = "black")
mtext("Distancia a la vía (km)", side = 1, line = 3, cex = 1)
mtext("Gráfica N°4: Distribución Porcentual de Plantas Solares por Distancia de la via" , 
      side = 3, line = 2, adj = 0.5, cex = 1.1, font = 2)
mtext("Autor: Juleydi Miles", side = 1, line = 5, adj = 1, cex = 0.8)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

### Diagrama de Cajas (Boxplot)###

dist_raw <- Datos$dist_to_road %>% na.omit()
q1 <- quantile(dist_raw, 0.25)
q3 <- quantile(dist_raw, 0.75)
dist_local_km <- dist_raw[dist_raw <= (q3 + 1.5 * iqr)] / 1000
par(mar = c(7, 5, 4, 2)) # Margen inferior amplio para el autor

boxplot(dist_local_km, 
        horizontal = TRUE, 
        col = "#EED5D2", 
        xlab = "Distancia a la vía (km)", 
        cex.main = 0.9, 
        main = "Gráfica N°5: Distribución de la Distancia a la vía en Plantas Solares")

mtext("Autor: Juleydi Miles", side = 1, line = 4.5, adj = 1, cex = 0.8)

4.1.0.1 Ojivas

# 1. Preparación de datos (Se mantiene igual)
dist_raw <- Datos$dist_to_road %>% na.omit()
q1 <- quantile(dist_raw, 0.25); q3 <- quantile(dist_raw, 0.75)
iqr <- q3 - q1
dist_local_km <- dist_raw[dist_raw <= (q3 + 1.5 * iqr)] / 1000

BASE <- 0.1
cortes <- seq(0, ceiling(max(dist_local_km) * 10) / 10, by = BASE)
ni <- as.vector(table(cut(dist_local_km, breaks = cortes, include.lowest = TRUE, right = FALSE)))

Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Li <- cortes[1:length(ni)]
Ls <- cortes[2:(length(ni)+1)]

# 2. Configuración de márgenes (Damos más espacio arriba con el tercer valor de 'mar')
par(mar = c(8, 5, 10, 2), xpd = TRUE)

x_asc <- Ls
x_desc <- Li
y_asc <- Ni_asc
y_desc <- Ni_desc

# 3. Dibujar la Ascendente
plot(x_asc, y_asc, 
     type = "b", 
     main = "",
     xlab = "Distancia a la vía (km)", 
     ylab = "Frecuencia acumulada", 
     col = "black", 
     pch = 19, 
     cex = 0.6,
     xlim = c(0, max(Ls)), 
     # Aumentamos el ylim a 1.3 para que sobre espacio arriba para el título
     ylim = c(0, max(Ni_asc) * 1.3), 
     bty = "l")

# 4. Agregar la Descendente
lines(x_desc, y_desc, col = "#CDB7B5", type = "b", pch = 19, cex = 0.6)

grid()

# 5. Títulos (Subimos la línea del mtext para que no choque con la leyenda)
mtext("Gráfica N°6: Ojivas Ascendentes y Descendentes de la\nDistribución de la Distancia a la via en las Plantas Solares", 
      side = 3, line = 4, adj = 0.5, cex = 1, font = 2)

mtext("Autor: Juleydi Miles", side = 1, line = 6, adj = 1, cex = 0.8)

# 6. Leyenda (La movemos un poco más a la derecha y reducimos tamaño)
legend("topright", 
       legend = c("Ascendente", "Descendente"), 
       col = c("black", "#CDB7B5"), 
       lty = 1, 
       pch = 19, 
       cex = 0.7,
       bty = "n",
       inset = c(0, -0.05)) # El 'inset' ayuda a moverla sutilmente fuera del área de dibujo

5 Indicadores Estadísticos

library(dplyr)
library(gt)
library(moments)

# 1. Filtro de Datos Locales y Transformación a KM
dist_raw <- Datos$dist_to_road %>% na.omit()
q1_temp <- quantile(dist_raw, 0.25)
q3_temp <- quantile(dist_raw, 0.75)
iqr_temp <- q3_temp - q1_temp
lim_sup_m <- q3_temp + 1.5 * iqr_temp

# CREAMOS LA VARIABLE LOCAL YA EN KILÓMETROS
Variable_Local_KM <- dist_raw[dist_raw <= lim_sup_m] / 1000

# 2. Cálculos de Indicadores (Todo en KM)
media_k <- round(mean(Variable_Local_KM), 2)
mediana_k <- round(median(Variable_Local_KM), 2)
moda_k <- 0.05  # El centro del primer intervalo de 100m (0.1km) es 0.05km

varianza_k <- round(var(Variable_Local_KM), 4) # Más decimales por ser KM
sd_k <- round(sd(Variable_Local_KM), 2)
cv_k <- round((sd_k / abs(media_k)) * 100, 2)

asimetria_k <- round(skewness(Variable_Local_KM), 2)
curtosis_k <- round(kurtosis(Variable_Local_KM), 2)

# 3. Creación del DataFrame
tabla_indicadores_km <- data.frame(
  "Variable" = "Distancia de la vía (km) - LOCAL",
  "Rango_MinMax" = paste0("[", round(min(Variable_Local_KM), 2), "; ", round(max(Variable_Local_KM), 2), "]"),
  "X" = media_k,
  "Me" = mediana_k,
  "Mo" = moda_k,
  "V" = varianza_k,
  "Sd" = sd_k,
  "Cv" = cv_k,
  "As" = asimetria_k,
  "K" = curtosis_k,
  "Outliers" = "0 [Outliers]"
)

# 4. Generar Tabla GT Profesional
tabla_indicadores_km %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3 de Conclusiones de Distancia de la vía de las Plantas Solares)**")) %>%
  tab_source_note(source_note = "Autor: Juleydi Miles") %>%
  cols_label(
    Variable = "Variable",
    Rango_MinMax = "Rango (km)",
    X = "Media (X)",
    Me = "Mediana (Me)", 
    Mo = "Moda (Mo)",
    V = "Varianza (V)",
    Sd = "Desv. Est. (Sd)",
    Cv = "C.V. (%)",
    As = "Asimetría (As)",
    K = "Curtosis (K)",
    Outliers = "Outliers"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )
Tabla N°3 de Conclusiones de Distancia de la vía de las Plantas Solares)
Variable Rango (km) Media (X) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetría (As) Curtosis (K) Outliers
Distancia de la vía (km) - LOCAL [0; 6.31] 1.13 0.56 0.05 1.9956 1.41 124.78 1.77 5.42 0 [Outliers]
Autor: Juleydi Miles

6 Conclusiones

La variable “Distancia a la vía” fluctúa entre 0 y 6.31 km y sus valores se encuentran alrededor de 1.73 km, con una desviación estándar de 1.70, siendo una variable muy heterogénea, cuyos valores se concentran en la parte inicial baja de la variable con la agregación de valores atípicos de 0 outliers; por todo lo anterior, el comportamiento de la variable es muy favorable.